diff --git a/index.html b/index.html index 5a085b0..005161d 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,11 @@ - BJ_ServerState + cocos-vue-demo + + + + diff --git a/package-lock.json b/package-lock.json index bb98160..2158d75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,14 @@ "bootstrap": "^5.1.3", "element-plus": "^2.1.9", "moment": "^2.29.2", + "node-sass": "^7.0.1", + "sass": "^1.54.0", "vue": "^3.2.25", "vue-loading-overlay": "^5.0.3" }, "devDependencies": { - "@types/node": "^17.0.24", "@vitejs/plugin-vue": "^2.3.0", + "sass-loader": "^13.0.2", "typescript": "^4.5.4", "vite": "^2.9.0", "vue-tsc": "^0.29.8" @@ -50,15 +52,94 @@ "vue": ">=3.0.3" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", @@ -136,6 +217,96 @@ "@floating-ui/core": "^0.6.1" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@popperjs/core": { "version": "2.11.5", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", @@ -145,6 +316,50 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true, + "peer": true + }, "node_modules/@types/lodash": { "version": "4.14.181", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", @@ -158,11 +373,22 @@ "@types/lodash": "*" } }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, "node_modules/@types/node": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "node_modules/@vitejs/plugin-vue": { "version": "2.3.1", @@ -447,6 +673,186 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -459,23 +865,185 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/assert-never": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", "dev": true }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "engines": { + "node": "*" + } + }, "node_modules/async-validator": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.0.7.tgz", "integrity": "sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, "node_modules/axios": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", @@ -496,6 +1064,27 @@ "node": ">= 10.0.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, "node_modules/bootstrap": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", @@ -508,6 +1097,101 @@ "@popperjs/core": "^2.10.2" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -521,6 +1205,78 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "peer": true + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -530,6 +1286,120 @@ "is-regex": "^1.0.3" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/constantinople": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", @@ -540,16 +1410,110 @@ "@babel/types": "^7.6.1" } }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/csstype": { "version": "2.6.20", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/dayjs": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz", "integrity": "sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==" }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -620,6 +1584,22 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.204", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.204.tgz", + "integrity": "sha512-5Ojjtw9/c9HCXtMVE6SXVSHSNjmbFOXpKprl6mY/5moLSxLeWatuYA7KTD+RzJMxLRH6yNNQrqGz9p6IoNBMgw==", + "dev": true, + "peer": true + }, "node_modules/element-plus": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.1.9.tgz", @@ -655,6 +1635,34 @@ "@emmetio/css-abbreviation": "^2.1.4" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", @@ -667,6 +1675,34 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, "node_modules/esbuild": { "version": "0.14.34", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.34.tgz", @@ -1022,16 +2058,135 @@ "node": ">=12" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/follow-redirects": { "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", @@ -1051,11 +2206,47 @@ } } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -1068,8 +2259,45 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, "node_modules/get-intrinsic": { "version": "1.1.1", @@ -1085,11 +2313,140 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "dependencies": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "engines": { + "node": ">=6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -1097,6 +2454,14 @@ "node": ">= 0.4.0" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1124,6 +2489,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", @@ -1143,11 +2535,135 @@ "entities": "^3.0.1" } }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -1165,6 +2681,54 @@ "object-assign": "^4.1.1" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -1187,18 +2751,102 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, "node_modules/js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", "dev": true }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, "node_modules/jsonc-parser": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", "dev": true }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -1209,6 +2857,49 @@ "promise": "^7.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1233,7 +2924,6 @@ "version": "7.8.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz", "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==", - "dev": true, "engines": { "node": ">=12" } @@ -1246,11 +2936,236 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/moment": { "version": "2.29.2", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", @@ -1259,6 +3174,16 @@ "node": "*" } }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, "node_modules/nanoid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", @@ -1270,31 +3195,313 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true, + "peer": true + }, + "node_modules/node-sass": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", + "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "4.0.0", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-wheel-es": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz", "integrity": "sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==" }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/postcss": { "version": "8.4.12", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", @@ -1318,6 +3525,11 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -1327,6 +3539,28 @@ "asap": "~2.0.3" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "node_modules/pug": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", @@ -1451,17 +3685,195 @@ "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", "dev": true }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/request-light": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.7.tgz", "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==", "dev": true }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -1474,6 +3886,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { "version": "2.70.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", @@ -1489,11 +3923,141 @@ "fsevents": "~2.3.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz", + "integrity": "sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", + "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "sassgraph": "bin/sassgraph" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", + "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", + "dependencies": { + "js-base64": "^2.4.3", + "source-map": "^0.7.1" + } + }, + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, "node_modules/semver": { "version": "7.3.6", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", - "dev": true, "dependencies": { "lru-cache": "^7.4.0" }, @@ -1504,6 +4068,80 @@ "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1520,16 +4158,183 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stdout-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stdout-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/stdout-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -1537,6 +4342,99 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -1546,12 +4444,78 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/token-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", "dev": true }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dependencies": { + "glob": "^7.1.2" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typescript": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", @@ -1565,6 +4529,22 @@ "node": ">=4.2.0" } }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -1575,6 +4555,77 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/vite": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz", @@ -1821,6 +4872,123 @@ "typescript": "*" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -1835,6 +5003,73 @@ "engines": { "node": ">= 10.0.0" } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "engines": { + "node": ">=12" + } } }, "dependencies": { @@ -1860,11 +5095,74 @@ "@ant-design/icons-svg": "^4.2.1" } }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "@babel/parser": { "version": "7.17.9", @@ -1929,11 +5227,130 @@ "@floating-ui/core": "^0.6.1" } }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, "@popperjs/core": { "version": "2.11.5", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "peer": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true, + "peer": true + }, "@types/lodash": { "version": "4.14.181", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", @@ -1947,11 +5364,22 @@ "@types/lodash": "*" } }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, "@types/node": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true + "dev": true, + "peer": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "@vitejs/plugin-vue": { "version": "2.3.1", @@ -2179,29 +5607,329 @@ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.2.6.tgz", "integrity": "sha512-OBKtafCt+4RcEJlYDCjp1vl65pBCL2g4TmipEtdZ8/qphKlW6nakJbkY7XRN5grPmjqU99/ahJGtyGk5NHS2hw==" }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, "assert-never": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", "dev": true }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==" + }, "async-validator": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.0.7.tgz", "integrity": "sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, "axios": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", @@ -2219,12 +5947,102 @@ "@babel/types": "^7.9.6" } }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, "bootstrap": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", "requires": {} }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -2235,6 +6053,52 @@ "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true, + "peer": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -2244,6 +6108,91 @@ "is-regex": "^1.0.3" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "constantinople": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", @@ -2254,16 +6203,83 @@ "@babel/types": "^7.6.1" } }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "csstype": { "version": "2.6.20", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, "dayjs": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz", "integrity": "sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==" }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -2315,6 +6331,22 @@ "domhandler": "^4.2.0" } }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.204", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.204.tgz", + "integrity": "sha512-5Ojjtw9/c9HCXtMVE6SXVSHSNjmbFOXpKprl6mY/5moLSxLeWatuYA7KTD+RzJMxLRH6yNNQrqGz9p6IoNBMgw==", + "dev": true, + "peer": true + }, "element-plus": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.1.9.tgz", @@ -2347,12 +6379,62 @@ "@emmetio/css-abbreviation": "^2.1.4" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "peer": true + }, "esbuild": { "version": "0.14.34", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.34.tgz", @@ -2521,33 +6603,179 @@ "dev": true, "optional": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true + }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "follow-redirects": { "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.1.1", @@ -2560,15 +6788,117 @@ "has-symbols": "^1.0.1" } }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "requires": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2584,6 +6914,29 @@ "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", @@ -2596,11 +6949,113 @@ "entities": "^3.0.1" } }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -2615,6 +7070,39 @@ "object-assign": "^4.1.1" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -2631,18 +7119,96 @@ "has-tostringtag": "^1.0.0" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, "js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, "jsonc-parser": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", "dev": true }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", @@ -2653,6 +7219,37 @@ "promise": "^7.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -2672,8 +7269,7 @@ "lru-cache": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz", - "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==", - "dev": true + "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==" }, "magic-string": { "version": "0.25.9", @@ -2683,43 +7279,423 @@ "sourcemap-codec": "^1.4.8" } }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + }, "memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "moment": { "version": "2.29.2", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, "nanoid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==" }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true, + "peer": true + }, + "node-sass": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", + "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "4.0.0", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "normalize-wheel-es": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz", "integrity": "sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==" }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, "postcss": { "version": "8.4.12", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", @@ -2730,6 +7706,11 @@ "source-map-js": "^1.0.2" } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -2739,6 +7720,25 @@ "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "pug": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", @@ -2863,23 +7863,175 @@ "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", "dev": true }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, "request-light": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.7.tgz", "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==", "dev": true }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, "requires": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, "rollup": { "version": "2.70.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", @@ -2889,15 +8041,140 @@ "fsevents": "~2.3.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz", + "integrity": "sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", + "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", + "requires": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.3.0", + "yargs": "^17.2.1" + } + }, + "sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "scss-tokenizer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", + "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", + "requires": { + "js-base64": "^2.4.3", + "source-map": "^0.7.1" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + } + } + }, "semver": { "version": "7.3.6", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", - "dev": true, "requires": { "lru-cache": "^7.4.0" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2908,16 +8185,215 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "requires": { + "minipass": "^3.1.1" + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "requires": { + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "peer": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + } }, "to-fast-properties": { "version": "2.0.0", @@ -2925,24 +8401,136 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "token-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", "dev": true }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "requires": { + "glob": "^7.1.2" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + }, "typescript": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, "upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "peer": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vite": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz", @@ -3146,6 +8734,90 @@ "vscode-vue-languageservice": "0.29.8" } }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "peer": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peer": true, + "requires": {} + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -3157,6 +8829,57 @@ "assert-never": "^1.2.1", "babel-walk": "3.0.0-canary-5" } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } } diff --git a/package.json b/package.json index b69c53f..a0f3ef6 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,16 @@ "bootstrap": "^5.1.3", "element-plus": "^2.1.9", "moment": "^2.29.2", + "node-sass": "^7.0.1", + "sass": "^1.54.0", "vue": "^3.2.25", "vue-loading-overlay": "^5.0.3" }, "devDependencies": { "@vitejs/plugin-vue": "^2.3.0", + "sass-loader": "^13.0.2", "typescript": "^4.5.4", "vite": "^2.9.0", "vue-tsc": "^0.29.8" } -} \ No newline at end of file +} diff --git a/public/assets/index.59c18d08.js b/public/assets/index.12a12ee9.js similarity index 99% rename from public/assets/index.59c18d08.js rename to public/assets/index.12a12ee9.js index 11b825b..d2d3a6f 100644 --- a/public/assets/index.59c18d08.js +++ b/public/assets/index.12a12ee9.js @@ -43,4 +43,4 @@ var qC=Object.defineProperty,GC=Object.defineProperties;var XC=Object.getOwnProp * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed - */var Wq=/["'&<>]/,jq=Yq;function Yq(e){var t=""+e,n=Wq.exec(t);if(!n)return t;var o,s="",l=0,r=0;for(l=n.index;ltypeof u=="string"?It(a,u):u(a,i,e))):(t!=="$key"&&Tg(a)&&"$value"in a&&(a=a.$value),[Tg(a)?It(a,t):a])},r=function(a,i){if(o)return o(a.value,i.value);for(let u=0,c=a.key.length;ui.key[u])return 1}return 0};return e.map((a,i)=>({value:a,index:i,key:l?l(a,i):null})).sort((a,i)=>{let u=r(a,i);return u||(u=a.index-i.index),u*+n}).map(a=>a.value)},mC=function(e,t){let n=null;return e.columns.forEach(o=>{o.id===t&&(n=o)}),n},qq=function(e,t){let n=null;for(let o=0;o{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let o=e;for(const s of n)o=o[s];return`${o}`}else if(typeof t=="function")return t.call(null,e)},zs=function(e,t){const n={};return(e||[]).forEach((o,s)=>{n[Qt(o,t)]={row:o,index:s}}),n};function Gq(e,t){const n={};let o;for(o in e)n[o]=e[o];for(o in t)if(at(t,o)){const s=t[o];typeof s!="undefined"&&(n[o]=s)}return n}function Np(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function vC(e){return e===""||e!==void 0&&(e=Np(e),Number.isNaN(e)&&(e=80)),e}function Wd(e){return typeof e=="number"?e:typeof e=="string"?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function Xq(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...o)=>t(n(...o)))}function Ai(e,t,n){let o=!1;const s=e.indexOf(t),l=s!==-1,r=()=>{e.push(t),o=!0},a=()=>{e.splice(s,1),o=!0};return typeof n=="boolean"?n&&!l?r():!n&&l&&a():l?a():r(),o}function Jq(e,t,n="children",o="hasChildren"){const s=r=>!(Array.isArray(r)&&r.length);function l(r,a,i){t(r,a,i),a.forEach(u=>{if(u[o]){t(u,null,i+1);return}const c=u[n];s(c)||l(u,c,i+1)})}e.forEach(r=>{if(r[o]){t(r,null,0);return}const a=r[n];s(a)||l(r,a,0)})}let su;function Zq(e,t,n,o){const{nextZIndex:s}=jo();function l(){const d=o==="light",f=document.createElement("div");return f.className=`el-popper ${d?"is-light":"is-dark"}`,t=jq(t),f.innerHTML=t,f.style.zIndex=String(s()),document.body.appendChild(f),f}function r(){const d=document.createElement("div");return d.className="el-popper__arrow",d}function a(){i&&i.update()}su=function d(){try{i&&i.destroy(),u&&document.body.removeChild(u),Vt(e,"mouseenter",a),Vt(e,"mouseleave",d)}catch{}};let i=null;const u=l(),c=r();return u.appendChild(c),i=va(e,u,ne({modifiers:[{name:"offset",options:{offset:[0,8]}},{name:"arrow",options:{element:c,padding:10}}]},n)),Tt(e,"mouseenter",a),Tt(e,"mouseleave",su),i}const gC=(e,t,n,o)=>{let s=0,l=e;if(o){if(o[e].colSpan>1)return{};for(let i=0;i=a.value.length-n.states.rightFixedLeafColumnsLength.value&&(r="right");break;default:l=a.value.length-n.states.rightFixedLeafColumnsLength.value&&(r="right")}return r?{direction:r,start:s,after:l}:{}},Mp=(e,t,n,o,s)=>{const l=[],{direction:r,start:a}=gC(t,n,o,s);if(r){const i=r==="left";l.push(`${e}-fixed-column--${r}`),i&&a===o.states.fixedLeafColumnsLength.value-1?l.push("is-last-column"):!i&&a===o.states.columns.value.length-o.states.rightFixedLeafColumnsLength.value&&l.push("is-first-column")}return l};function Ng(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Op=(e,t,n,o)=>{const{direction:s,start:l=0}=gC(e,t,n,o);if(!s)return;const r={},a=s==="left",i=n.states.columns.value;return a?r.left=i.slice(0,e).reduce(Ng,0):r.right=i.slice(l+1).reverse().reduce(Ng,0),r},er=(e,t)=>{!e||Number.isNaN(e[t])||(e[t]=`${e[t]}px`)};function Qq(e){const t=nt(),n=A(!1),o=A([]);return{updateExpandRows:()=>{const i=e.data.value||[],u=e.rowKey.value;if(n.value)o.value=i.slice();else if(u){const c=zs(o.value,u);o.value=i.reduce((d,f)=>{const p=Qt(f,u);return c[p]&&d.push(f),d},[])}else o.value=[]},toggleRowExpansion:(i,u)=>{Ai(o.value,i,u)&&t.emit("expand-change",i,o.value.slice())},setExpandRowKeys:i=>{t.store.assertRowKey();const u=e.data.value||[],c=e.rowKey.value,d=zs(u,c);o.value=i.reduce((f,p)=>{const h=d[p];return h&&f.push(h.row),f},[])},isRowExpanded:i=>{const u=e.rowKey.value;return u?!!zs(o.value,u)[Qt(i,u)]:o.value.includes(i)},states:{expandRows:o,defaultExpandAll:n}}}function xq(e){const t=nt(),n=A(null),o=A(null),s=u=>{t.store.assertRowKey(),n.value=u,r(u)},l=()=>{n.value=null},r=u=>{const{data:c,rowKey:d}=e;let f=null;d.value&&(f=(b(c)||[]).find(p=>Qt(p,d.value)===u)),o.value=f,t.emit("current-change",o.value,null)};return{setCurrentRowKey:s,restoreCurrentRowKey:l,setCurrentRowByKey:r,updateCurrentRow:u=>{const c=o.value;if(u&&u!==c){o.value=u,t.emit("current-change",o.value,c);return}!u&&c&&(o.value=null,t.emit("current-change",null,c))},updateCurrentRowData:()=>{const u=e.rowKey.value,c=e.data.value||[],d=o.value;if(!c.includes(d)&&d){if(u){const f=Qt(d,u);r(f)}else o.value=null;o.value===null&&t.emit("current-change",null,d)}else n.value&&(r(n.value),l())},states:{_currentRowKey:n,currentRow:o}}}function eG(e){const t=A([]),n=A({}),o=A(16),s=A(!1),l=A({}),r=A("hasChildren"),a=A("children"),i=nt(),u=E(()=>{if(!e.rowKey.value)return{};const v=e.data.value||[];return d(v)}),c=E(()=>{const v=e.rowKey.value,y=Object.keys(l.value),w={};return y.length&&y.forEach(S=>{if(l.value[S].length){const $={children:[]};l.value[S].forEach(k=>{const T=Qt(k,v);$.children.push(T),k[r.value]&&!w[T]&&(w[T]={children:[]})}),w[S]=$}}),w}),d=v=>{const y=e.rowKey.value,w={};return Jq(v,(S,$,k)=>{const T=Qt(S,y);Array.isArray($)?w[T]={children:$.map(O=>Qt(O,y)),level:k}:s.value&&(w[T]={children:[],lazy:!0,level:k})},a.value,r.value),w},f=(v=!1,y=(w=>(w=i.store)==null?void 0:w.states.defaultExpandAll.value)())=>{var w;const S=u.value,$=c.value,k=Object.keys(S),T={};if(k.length){const O=b(n),L=[],B=(H,R)=>{if(v)return t.value?y||t.value.includes(R):!!(y||(H==null?void 0:H.expanded));{const z=y||t.value&&t.value.includes(R);return!!((H==null?void 0:H.expanded)||z)}};k.forEach(H=>{const R=O[H],z=ne({},S[H]);if(z.expanded=B(R,H),z.lazy){const{loaded:W=!1,loading:P=!1}=R||{};z.loaded=!!W,z.loading=!!P,L.push(H)}T[H]=z});const V=Object.keys($);s.value&&V.length&&L.length&&V.forEach(H=>{const R=O[H],z=$[H].children;if(L.includes(H)){if(T[H].children.length!==0)throw new Error("[ElTable]children must be an empty array.");T[H].children=z}else{const{loaded:W=!1,loading:P=!1}=R||{};T[H]={lazy:!0,loaded:!!W,loading:!!P,expanded:B(R,H),children:z,level:""}}})}n.value=T,(w=i.store)==null||w.updateTableScrollY()};pe(()=>t.value,()=>{f(!0)}),pe(()=>u.value,()=>{f()}),pe(()=>c.value,()=>{f()});const p=v=>{t.value=v,f()},h=(v,y)=>{i.store.assertRowKey();const w=e.rowKey.value,S=Qt(v,w),$=S&&n.value[S];if(S&&$&&"expanded"in $){const k=$.expanded;y=typeof y=="undefined"?!$.expanded:y,n.value[S].expanded=y,k!==y&&i.emit("expand-change",v,y),i.store.updateTableScrollY()}},g=v=>{i.store.assertRowKey();const y=e.rowKey.value,w=Qt(v,y),S=n.value[w];s.value&&S&&"loaded"in S&&!S.loaded?m(v,w,S):h(v,void 0)},m=(v,y,w)=>{const{load:S}=i.props;S&&!n.value[y].loaded&&(n.value[y].loading=!0,S(v,w,$=>{if(!Array.isArray($))throw new TypeError("[ElTable] data must be an array");n.value[y].loading=!1,n.value[y].loaded=!0,n.value[y].expanded=!0,$.length&&(l.value[y]=$),i.emit("expand-change",v,!0)}))};return{loadData:m,loadOrToggle:g,toggleTreeExpansion:h,updateTreeExpandKeys:p,updateTreeData:f,normalize:d,states:{expandRowKeys:t,treeData:n,indent:o,lazy:s,lazyTreeNodeMap:l,lazyColumnIdentifier:r,childrenColumnName:a}}}const tG=(e,t)=>{const n=t.sortingColumn;return!n||typeof n.sortable=="string"?e:Uq(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy)},Ni=e=>{const t=[];return e.forEach(n=>{n.children?t.push.apply(t,Ni(n.children)):t.push(n)}),t};function nG(){var e;const t=nt(),{size:n}=Ut((e=t.proxy)==null?void 0:e.$props),o=A(null),s=A([]),l=A([]),r=A(!1),a=A([]),i=A([]),u=A([]),c=A([]),d=A([]),f=A([]),p=A([]),h=A([]),g=A(0),m=A(0),v=A(0),y=A(!1),w=A([]),S=A(!1),$=A(!1),k=A(null),T=A({}),O=A(null),L=A(null),B=A(null),V=A(null),H=A(null);pe(s,()=>t.state&&W(!1),{deep:!0});const R=()=>{if(!o.value)throw new Error("[ElTable] prop row-key is required")},z=()=>{c.value=a.value.filter(Ae=>Ae.fixed===!0||Ae.fixed==="left"),d.value=a.value.filter(Ae=>Ae.fixed==="right"),c.value.length>0&&a.value[0]&&a.value[0].type==="selection"&&!a.value[0].fixed&&(a.value[0].fixed=!0,c.value.unshift(a.value[0]));const He=a.value.filter(Ae=>!Ae.fixed);i.value=[].concat(c.value).concat(He).concat(d.value);const oe=Ni(He),me=Ni(c.value),ce=Ni(d.value);g.value=oe.length,m.value=me.length,v.value=ce.length,u.value=[].concat(me).concat(oe).concat(ce),r.value=c.value.length>0||d.value.length>0},W=(He,oe=!1)=>{He&&z(),oe?t.state.doLayout():t.state.debouncedUpdateLayout()},P=He=>w.value.includes(He),N=()=>{y.value=!1,w.value.length&&(w.value=[],t.emit("selection-change",[]))},I=()=>{let He;if(o.value){He=[];const oe=zs(w.value,o.value),me=zs(s.value,o.value);for(const ce in oe)at(oe,ce)&&!me[ce]&&He.push(oe[ce].row)}else He=w.value.filter(oe=>!s.value.includes(oe));if(He.length){const oe=w.value.filter(me=>!He.includes(me));w.value=oe,t.emit("selection-change",oe.slice())}},U=()=>(w.value||[]).slice(),q=(He,oe=void 0,me=!0)=>{if(Ai(w.value,He,oe)){const Ae=(w.value||[]).slice();me&&t.emit("select",Ae,He),t.emit("selection-change",Ae)}},Q=()=>{var He,oe;const me=$.value?!y.value:!(y.value||w.value.length);y.value=me;let ce=!1,Ae=0;const Ue=(oe=(He=t==null?void 0:t.store)==null?void 0:He.states)==null?void 0:oe.rowKey.value;s.value.forEach((mt,St)=>{const bt=St+Ae;k.value?k.value.call(null,mt,bt)&&Ai(w.value,mt,me)&&(ce=!0):Ai(w.value,mt,me)&&(ce=!0),Ae+=Ee(Qt(mt,Ue))}),ce&&t.emit("selection-change",w.value?w.value.slice():[]),t.emit("select-all",w.value)},J=()=>{const He=zs(w.value,o.value);s.value.forEach(oe=>{const me=Qt(oe,o.value),ce=He[me];ce&&(w.value[ce.index]=oe)})},ae=()=>{var He,oe,me;if(((He=s.value)==null?void 0:He.length)===0){y.value=!1;return}let ce;o.value&&(ce=zs(w.value,o.value));const Ae=function(bt){return ce?!!ce[Qt(bt,o.value)]:w.value.includes(bt)};let Ue=!0,mt=0,St=0;for(let bt=0,At=(s.value||[]).length;bt{var oe;if(!t||!t.store)return 0;const{treeData:me}=t.store.states;let ce=0;const Ae=(oe=me.value[He])==null?void 0:oe.children;return Ae&&(ce+=Ae.length,Ae.forEach(Ue=>{ce+=Ee(Ue)})),ce},Me=(He,oe)=>{Array.isArray(He)||(He=[He]);const me={};return He.forEach(ce=>{T.value[ce.id]=oe,me[ce.columnKey||ce.id]=oe}),me},Z=(He,oe,me)=>{L.value&&L.value!==He&&(L.value.order=null),L.value=He,B.value=oe,V.value=me},ve=()=>{let He=b(l);Object.keys(T.value).forEach(oe=>{const me=T.value[oe];if(!me||me.length===0)return;const ce=mC({columns:u.value},oe);ce&&ce.filterMethod&&(He=He.filter(Ae=>me.some(Ue=>ce.filterMethod.call(null,Ue,Ae,ce))))}),O.value=He},Ce=()=>{s.value=tG(O.value,{sortingColumn:L.value,sortProp:B.value,sortOrder:V.value})},ke=(He=void 0)=>{He&&He.filter||ve(),Ce()},Oe=He=>{const{tableHeaderRef:oe}=t.refs;if(!oe)return;const me=Object.assign({},oe.filterPanels),ce=Object.keys(me);if(!!ce.length)if(typeof He=="string"&&(He=[He]),Array.isArray(He)){const Ae=He.map(Ue=>qq({columns:u.value},Ue));ce.forEach(Ue=>{const mt=Ae.find(St=>St.id===Ue);mt&&(mt.filteredValue=[])}),t.store.commit("filterChange",{column:Ae,values:[],silent:!0,multi:!0})}else ce.forEach(Ae=>{const Ue=u.value.find(mt=>mt.id===Ae);Ue&&(Ue.filteredValue=[])}),T.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},We=()=>{!L.value||(Z(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:qe,toggleRowExpansion:K,updateExpandRows:X,states:fe,isRowExpanded:ye}=Qq({data:s,rowKey:o}),{updateTreeExpandKeys:be,toggleTreeExpansion:_e,updateTreeData:re,loadOrToggle:se,states:ee}=eG({data:s,rowKey:o}),{updateCurrentRowData:ue,updateCurrentRow:Re,setCurrentRowKey:F,states:de}=xq({data:s,rowKey:o});return{assertRowKey:R,updateColumns:z,scheduleLayout:W,isSelected:P,clearSelection:N,cleanSelection:I,getSelectionRows:U,toggleRowSelection:q,_toggleAllSelection:Q,toggleAllSelection:null,updateSelectionByRowKey:J,updateAllSelected:ae,updateFilters:Me,updateCurrentRow:Re,updateSort:Z,execFilter:ve,execSort:Ce,execQuery:ke,clearFilter:Oe,clearSort:We,toggleRowExpansion:K,setExpandRowKeysAdapter:He=>{qe(He),be(He)},setCurrentRowKey:F,toggleRowExpansionAdapter:(He,oe)=>{u.value.some(({type:ce})=>ce==="expand")?K(He,oe):_e(He,oe)},isRowExpanded:ye,updateExpandRows:X,updateCurrentRowData:ue,loadOrToggle:se,updateTreeData:re,states:ne(ne(ne({tableSize:n,rowKey:o,data:s,_data:l,isComplex:r,_columns:a,originColumns:i,columns:u,fixedColumns:c,rightFixedColumns:d,leafColumns:f,fixedLeafColumns:p,rightFixedLeafColumns:h,leafColumnsLength:g,fixedLeafColumnsLength:m,rightFixedLeafColumnsLength:v,isAllSelected:y,selection:w,reserveSelection:S,selectOnIndeterminate:$,selectable:k,filters:T,filteredData:O,sortingColumn:L,sortProp:B,sortOrder:V,hoverRow:H},fe),ee),de)}}function jd(e,t){return e.map(n=>{var o;return n.id===t.id?t:((o=n.children)!=null&&o.length&&(n.children=jd(n.children,t)),n)})}function bC(e){e.forEach(t=>{var n,o;t.no=(n=t.getColumnIndex)==null?void 0:n.call(t),(o=t.children)!=null&&o.length&&bC(t.children)}),e.sort((t,n)=>t.no-n.no)}function oG(){const e=nt(),t=nG(),n=we("table"),o={setData(r,a){const i=b(r._data)!==a;r.data.value=a,r._data.value=a,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),b(r.reserveSelection)?(e.store.assertRowKey(),e.store.updateSelectionByRowKey()):i?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(r,a,i){const u=b(r._columns);let c=[];i?(i&&!i.children&&(i.children=[]),i.children.push(a),c=jd(u,i)):(u.push(a),c=u),bC(c),r._columns.value=c,a.type==="selection"&&(r.selectable.value=a.selectable,r.reserveSelection.value=a.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},removeColumn(r,a,i){const u=b(r._columns)||[];if(i)i.children.splice(i.children.findIndex(c=>c.id===a.id),1),i.children.length===0&&delete i.children,r._columns.value=jd(u,i);else{const c=u.indexOf(a);c>-1&&(u.splice(c,1),r._columns.value=u)}e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(r,a){const{prop:i,order:u,init:c}=a;if(i){const d=b(r.columns).find(f=>f.property===i);d&&(d.order=u,e.store.updateSort(d,i,u),e.store.commit("changeSortCondition",{init:c}))}},changeSortCondition(r,a){const{sortingColumn:i,sortProp:u,sortOrder:c}=r;b(c)===null&&(r.sortingColumn.value=null,r.sortProp.value=null);const d={filter:!0};e.store.execQuery(d),(!a||!(a.silent||a.init))&&e.emit("sort-change",{column:b(i),prop:b(u),order:b(c)}),e.store.updateTableScrollY()},filterChange(r,a){const{column:i,values:u,silent:c}=a,d=e.store.updateFilters(i,u);e.store.execQuery(),c||e.emit("filter-change",d),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection()},rowSelectedChanged(r,a){e.store.toggleRowSelection(a),e.store.updateAllSelected()},setHoverRow(r,a){r.hoverRow.value=a},setCurrentRow(r,a){e.store.updateCurrentRow(a)}},s=function(r,...a){const i=e.store.mutations;if(i[r])i[r].apply(e,[e.store.states].concat(a));else throw new Error(`Action not found: ${r}`)},l=function(){ze(()=>e.layout.updateScrollY.apply(e.layout))};return Te(ne({ns:n},t),{mutations:o,commit:s,updateTableScrollY:l})}const qr={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data",["treeProps.hasChildren"]:{key:"lazyColumnIdentifier",default:"hasChildren"},["treeProps.children"]:{key:"childrenColumnName",default:"children"}};function sG(e,t){if(!e)throw new Error("Table is required.");const n=oG();return n.toggleAllSelection=hn(n._toggleAllSelection,10),Object.keys(qr).forEach(o=>{yC(wC(t,o),o,n)}),lG(n,t),n}function lG(e,t){Object.keys(qr).forEach(n=>{pe(()=>wC(t,n),o=>{yC(o,n,e)})})}function yC(e,t,n){let o=e,s=qr[t];typeof qr[t]=="object"&&(s=s.key,o=o||qr[t].default),n.states[s].value=o}function wC(e,t){if(t.includes(".")){const n=t.split(".");let o=e;return n.forEach(s=>{o=o[s]}),o}else return e[t]}class rG{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=A(null),this.scrollX=A(!1),this.scrollY=A(!1),this.bodyWidth=A(null),this.fixedWidth=A(null),this.rightFixedWidth=A(null),this.tableHeight=A(null),this.headerHeight=A(44),this.appendHeight=A(0),this.footerHeight=A(44),this.viewportHeight=A(null),this.bodyHeight=A(null),this.bodyScrollHeight=A(0),this.fixedBodyHeight=A(null),this.gutterWidth=0;for(const n in t)at(t,n)&&(Lt(this[n])?this[n].value=t[n]:this[n]=t[n]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const n=this.table.refs.bodyWrapper;if(this.table.vnode.el&&n){let o=!0;const s=this.scrollY.value;return this.bodyHeight.value===null?o=!1:o=n.scrollHeight>this.bodyHeight.value,this.scrollY.value=o,s!==o}return!1}setHeight(t,n="height"){if(!ct)return;const o=this.table.vnode.el;if(t=Wd(t),this.height.value=Number(t),!o&&(t||t===0))return ze(()=>this.setHeight(t,n));typeof t=="number"?(o.style[n]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(o.style[n]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(o=>{o.isColumnGroup?t.push.apply(t,o.columns):t.push(o)}),t}updateElsHeight(){var t,n;if(!this.table.$ready)return ze(()=>this.updateElsHeight());const{tableWrapper:o,headerWrapper:s,appendWrapper:l,footerWrapper:r,tableHeader:a,tableBody:i}=this.table.refs;if(o&&o.style.display==="none")return;const{tableLayout:u}=this.table.props;if(this.appendHeight.value=l?l.offsetHeight:0,this.showHeader&&!s&&u==="fixed")return;const c=a||null,d=this.headerDisplayNone(c),f=(s==null?void 0:s.offsetHeight)||0,p=this.headerHeight.value=this.showHeader?f:0;if(this.showHeader&&!d&&f>0&&(this.table.store.states.columns.value||[]).length>0&&p<2)return ze(()=>this.updateElsHeight());const h=this.tableHeight.value=(n=(t=this.table)==null?void 0:t.vnode.el)==null?void 0:n.clientHeight,g=this.footerHeight.value=r?r.offsetHeight:0;this.height.value!==null&&(this.bodyHeight.value===null&&requestAnimationFrame(()=>this.updateElsHeight()),this.bodyHeight.value=h-p-g+(r?1:0),this.bodyScrollHeight.value=i==null?void 0:i.scrollHeight),this.fixedBodyHeight.value=this.scrollX.value?this.bodyHeight.value-this.gutterWidth:this.bodyHeight.value,this.viewportHeight.value=this.scrollX.value?h-this.gutterWidth:h,this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let n=t;for(;n.tagName!=="DIV";){if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}updateColumnsWidth(){if(!ct)return;const t=this.fit,n=this.table.vnode.el.clientWidth;let o=0;const s=this.getFlattenColumns(),l=s.filter(i=>typeof i.width!="number");if(s.forEach(i=>{typeof i.width=="number"&&i.realWidth&&(i.realWidth=null)}),l.length>0&&t){if(s.forEach(i=>{o+=Number(i.width||i.minWidth||80)}),o<=n){this.scrollX.value=!1;const i=n-o;if(l.length===1)l[0].realWidth=Number(l[0].minWidth||80)+i;else{const u=l.reduce((f,p)=>f+Number(p.minWidth||80),0),c=i/u;let d=0;l.forEach((f,p)=>{if(p===0)return;const h=Math.floor(Number(f.minWidth||80)*c);d+=h,f.realWidth=Number(f.minWidth||80)+h}),l[0].realWidth=Number(l[0].minWidth||80)+i-d}}else this.scrollX.value=!0,l.forEach(i=>{i.realWidth=Number(i.minWidth)});this.bodyWidth.value=Math.max(o,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else s.forEach(i=>{!i.width&&!i.minWidth?i.realWidth=80:i.realWidth=Number(i.width||i.minWidth),o+=i.realWidth}),this.scrollX.value=o>n,this.bodyWidth.value=o;const r=this.store.states.fixedColumns.value;if(r.length>0){let i=0;r.forEach(u=>{i+=Number(u.realWidth||u.width)}),this.fixedWidth.value=i}const a=this.store.states.rightFixedColumns.value;if(a.length>0){let i=0;a.forEach(u=>{i+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=i}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const n=this.observers.indexOf(t);n!==-1&&this.observers.splice(n,1)}notifyObservers(t){this.observers.forEach(o=>{var s,l;switch(t){case"columns":(s=o.state)==null||s.onColumnsChange(this);break;case"scrollable":(l=o.state)==null||l.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:aG}=ao,iG=te({name:"ElTableFilterPanel",components:{ElCheckbox:ao,ElCheckboxGroup:aG,ElScrollbar:Uo,ElTooltip:mn,ElIcon:je,ArrowDown:fl,ArrowUp:Aa},directives:{ClickOutside:ml},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=nt(),{t:n}=kt(),o=we("table-filter"),s=t==null?void 0:t.parent;s.filterPanels.value[e.column.id]||(s.filterPanels.value[e.column.id]=t);const l=A(!1),r=A(null),a=E(()=>e.column&&e.column.filters),i=E({get:()=>{var S;return(((S=e.column)==null?void 0:S.filteredValue)||[])[0]},set:S=>{u.value&&(typeof S!="undefined"&&S!==null?u.value.splice(0,1,S):u.value.splice(0,1))}}),u=E({get(){return e.column?e.column.filteredValue||[]:[]},set(S){e.column&&e.upDataColumn("filteredValue",S)}}),c=E(()=>e.column?e.column.filterMultiple:!0),d=S=>S.value===i.value,f=()=>{l.value=!1},p=S=>{S.stopPropagation(),l.value=!l.value},h=()=>{l.value=!1},g=()=>{y(u.value),f()},m=()=>{u.value=[],y(u.value),f()},v=S=>{i.value=S,y(typeof S!="undefined"&&S!==null?u.value:[]),f()},y=S=>{e.store.commit("filterChange",{column:e.column,values:S}),e.store.updateAllSelected()};pe(l,S=>{e.column&&e.upDataColumn("filterOpened",S)},{immediate:!0});const w=E(()=>{var S,$;return($=(S=r.value)==null?void 0:S.popperRef)==null?void 0:$.contentRef});return{tooltipVisible:l,multiple:c,filteredValue:u,filterValue:i,filters:a,handleConfirm:g,handleReset:m,handleSelect:v,isActive:d,t:n,ns:o,showFilterPanel:p,hideFilterPanel:h,popperPaneRef:w,tooltip:r}}}),uG={key:0},cG=["disabled"],dG=["label","onClick"];function fG(e,t,n,o,s,l){const r=le("el-checkbox"),a=le("el-checkbox-group"),i=le("el-scrollbar"),u=le("arrow-up"),c=le("arrow-down"),d=le("el-icon"),f=le("el-tooltip"),p=Mn("click-outside");return C(),x(f,{ref:"tooltip",visible:e.tooltipVisible,"onUpdate:visible":t[5]||(t[5]=h=>e.tooltipVisible=h),offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,"append-to-body":"",effect:"light",pure:"","popper-class":e.ns.b(),persistent:""},{content:j(()=>[e.multiple?(C(),M("div",uG,[D("div",{class:_(e.ns.e("content"))},[Y(i,{"wrap-class":e.ns.e("wrap")},{default:j(()=>[Y(a,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=h=>e.filteredValue=h),class:_(e.ns.e("checkbox-group"))},{default:j(()=>[(C(!0),M(Le,null,rt(e.filters,h=>(C(),x(r,{key:h.value,label:h.value},{default:j(()=>[it(he(h.text),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),D("div",{class:_(e.ns.e("bottom"))},[D("button",{class:_({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...h)=>e.handleConfirm&&e.handleConfirm(...h))},he(e.t("el.table.confirmFilter")),11,cG),D("button",{type:"button",onClick:t[2]||(t[2]=(...h)=>e.handleReset&&e.handleReset(...h))},he(e.t("el.table.resetFilter")),1)],2)])):(C(),M("ul",{key:1,class:_(e.ns.e("list"))},[D("li",{class:_([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=h=>e.handleSelect(null))},he(e.t("el.table.clearFilter")),3),(C(!0),M(Le,null,rt(e.filters,h=>(C(),M("li",{key:h.value,class:_([e.ns.e("list-item"),e.ns.is("active",e.isActive(h))]),label:h.value,onClick:g=>e.handleSelect(h.value)},he(h.text),11,dG))),128))],2))]),default:j(()=>[Ge((C(),M("span",{class:_([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...h)=>e.showFilterPanel&&e.showFilterPanel(...h))},[Y(d,null,{default:j(()=>[e.column.filterOpened?(C(),x(u,{key:0})):(C(),x(c,{key:1}))]),_:1})],2)),[[p,e.hideFilterPanel,e.popperPaneRef]])]),_:1},8,["visible","placement","popper-class"])}var pG=ge(iG,[["render",fG],["__file","/home/runner/work/element-plus/element-plus/packages/components/table/src/filter-panel.vue"]]);function CC(e){const t=nt();$a(()=>{n.value.addObserver(t)}),xe(()=>{o(n.value),s(n.value)}),Xn(()=>{o(n.value),s(n.value)}),ka(()=>{n.value.removeObserver(t)});const n=E(()=>{const l=e.layout;if(!l)throw new Error("Can not find table layout.");return l}),o=l=>{var r;const a=((r=e.vnode.el)==null?void 0:r.querySelectorAll("colgroup > col"))||[];if(!a.length)return;const i=l.getFlattenColumns(),u={};i.forEach(c=>{u[c.id]=c});for(let c=0,d=a.length;c{var r,a;const i=((r=e.vnode.el)==null?void 0:r.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let c=0,d=i.length;c{g.stopPropagation()},l=(g,m)=>{!m.filters&&m.sortable?h(g,m,!1):m.filterable&&!m.sortable&&s(g),o==null||o.emit("header-click",m,g)},r=(g,m)=>{o==null||o.emit("header-contextmenu",m,g)},a=A(null),i=A(!1),u=A({}),c=(g,m)=>{if(!!ct&&!(m.children&&m.children.length>0)&&a.value&&e.border){i.value=!0;const v=o;t("set-drag-visible",!0);const w=(v==null?void 0:v.vnode.el).getBoundingClientRect().left,S=n.vnode.el.querySelector(`th.${m.id}`),$=S.getBoundingClientRect(),k=$.left-w+30;wo(S,"noclick"),u.value={startMouseLeft:g.clientX,startLeft:$.right-w,startColumnLeft:$.left-w,tableLeft:w};const T=v==null?void 0:v.refs.resizeProxy;T.style.left=`${u.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const O=B=>{const V=B.clientX-u.value.startMouseLeft,H=u.value.startLeft+V;T.style.left=`${Math.max(k,H)}px`},L=()=>{if(i.value){const{startColumnLeft:B,startLeft:V}=u.value,R=Number.parseInt(T.style.left,10)-B;m.width=m.realWidth=R,v==null||v.emit("header-dragend",m.width,V-B,m,g),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",i.value=!1,a.value=null,u.value={},t("set-drag-visible",!1)}document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",L),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{fn(S,"noclick")},0)};document.addEventListener("mousemove",O),document.addEventListener("mouseup",L)}},d=(g,m)=>{if(m.children&&m.children.length>0)return;let v=g.target;for(;v&&v.tagName!=="TH";)v=v.parentNode;if(!(!m||!m.resizable)&&!i.value&&e.border){const y=v.getBoundingClientRect(),w=document.body.style;y.width>12&&y.right-g.pageX<8?(w.cursor="col-resize",oo(v,"is-sortable")&&(v.style.cursor="col-resize"),a.value=m):i.value||(w.cursor="",oo(v,"is-sortable")&&(v.style.cursor="pointer"),a.value=null)}},f=()=>{!ct||(document.body.style.cursor="")},p=({order:g,sortOrders:m})=>{if(g==="")return m[0];const v=m.indexOf(g||null);return m[v>m.length-2?0:v+1]},h=(g,m,v)=>{g.stopPropagation();const y=m.order===v?null:v||p(m);let w=g.target;for(;w&&w.tagName!=="TH";)w=w.parentNode;if(w&&w.tagName==="TH"&&oo(w,"noclick")){fn(w,"noclick");return}if(!m.sortable)return;const S=e.store.states;let $=S.sortProp.value,k;const T=S.sortingColumn.value;(T!==m||T===m&&T.order===null)&&(T&&(T.order=null),S.sortingColumn.value=m,$=m.property),y?k=m.order=y:k=m.order=null,S.sortProp.value=$,S.sortOrder.value=k,o==null||o.store.commit("changeSortCondition")};return{handleHeaderClick:l,handleHeaderContextMenu:r,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:h,handleFilterClick:s}}function mG(e){const t=Ne(_o),n=we("table");return{getHeaderRowStyle:a=>{const i=t==null?void 0:t.props.headerRowStyle;return typeof i=="function"?i.call(null,{rowIndex:a}):i},getHeaderRowClass:a=>{const i=[],u=t==null?void 0:t.props.headerRowClassName;return typeof u=="string"?i.push(u):typeof u=="function"&&i.push(u.call(null,{rowIndex:a})),i.join(" ")},getHeaderCellStyle:(a,i,u,c)=>{var d;let f=(d=t==null?void 0:t.props.headerCellStyle)!=null?d:{};typeof f=="function"&&(f=f.call(null,{rowIndex:a,columnIndex:i,row:u,column:c}));const p=c.isSubColumn?null:Op(i,c.fixed,e.store,u);return er(p,"left"),er(p,"right"),Object.assign({},f,p)},getHeaderCellClass:(a,i,u,c)=>{const d=c.isSubColumn?[]:Mp(n.b(),i,c.fixed,e.store,u),f=[c.id,c.order,c.headerAlign,c.className,c.labelClassName,...d];c.children||f.push("is-leaf"),c.sortable&&f.push("is-sortable");const p=t==null?void 0:t.props.headerCellClassName;return typeof p=="string"?f.push(p):typeof p=="function"&&f.push(p.call(null,{rowIndex:a,columnIndex:i,row:u,column:c})),f.push(n.e("cell")),f.filter(h=>Boolean(h)).join(" ")}}}const $C=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,$C(n.children))):t.push(n)}),t},vG=e=>{let t=1;const n=(l,r)=>{if(r&&(l.level=r.level+1,t{n(i,l),a+=i.colSpan}),l.colSpan=a}else l.colSpan=1};e.forEach(l=>{l.level=1,n(l,void 0)});const o=[];for(let l=0;l{l.children?(l.rowSpan=1,l.children.forEach(r=>r.isSubColumn=!0)):l.rowSpan=t-l.level+1,o[l.level-1].push(l)}),o};function gG(e){const t=Ne(_o),n=E(()=>vG(e.store.states.originColumns.value));return{isGroup:E(()=>{const l=n.value.length>1;return l&&t&&(t.state.isGroup.value=!0),l}),toggleAllSelection:l=>{l.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:n}}var bG=te({name:"ElTableHeader",components:{ElCheckbox:ao},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const n=nt(),o=Ne(_o),s=we("table"),l=A({}),{onColumnsChange:r,onScrollableChange:a}=CC(o);xe(async()=>{await ze(),await ze();const{prop:k,order:T}=e.defaultSort;o==null||o.store.commit("sort",{prop:k,order:T,init:!0})});const{handleHeaderClick:i,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:p,handleFilterClick:h}=hG(e,t),{getHeaderRowStyle:g,getHeaderRowClass:m,getHeaderCellStyle:v,getHeaderCellClass:y}=mG(e),{isGroup:w,toggleAllSelection:S,columnRows:$}=gG(e);return n.state={onColumnsChange:r,onScrollableChange:a},n.filterPanels=l,{ns:s,filterPanels:l,onColumnsChange:r,onScrollableChange:a,columnRows:$,getHeaderRowClass:m,getHeaderRowStyle:g,getHeaderCellClass:y,getHeaderCellStyle:v,handleHeaderClick:i,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:p,handleFilterClick:h,isGroup:w,toggleAllSelection:S}},render(){const{ns:e,isGroup:t,columnRows:n,getHeaderCellStyle:o,getHeaderCellClass:s,getHeaderRowClass:l,getHeaderRowStyle:r,handleHeaderClick:a,handleHeaderContextMenu:i,handleMouseDown:u,handleMouseMove:c,handleSortClick:d,handleMouseOut:f,store:p,$parent:h}=this;let g=1;return Pe("thead",{class:{[e.is("group")]:t}},n.map((m,v)=>Pe("tr",{class:l(v),key:v,style:r(v)},m.map((y,w)=>(y.rowSpan>g&&(g=y.rowSpan),Pe("th",{class:s(v,w,m,y),colspan:y.colSpan,key:`${y.id}-thead`,rowspan:y.rowSpan,style:o(v,w,m,y),onClick:S=>a(S,y),onContextmenu:S=>i(S,y),onMousedown:S=>u(S,y),onMousemove:S=>c(S,y),onMouseout:f},[Pe("div",{class:["cell",y.filteredValue&&y.filteredValue.length>0?"highlight":"",y.labelClassName]},[y.renderHeader?y.renderHeader({column:y,$index:w,store:p,_self:h}):y.label,y.sortable&&Pe("span",{onClick:S=>d(S,y),class:"caret-wrapper"},[Pe("i",{onClick:S=>d(S,y,"ascending"),class:"sort-caret ascending"}),Pe("i",{onClick:S=>d(S,y,"descending"),class:"sort-caret descending"})]),y.filterable&&Pe(pG,{store:p,placement:y.filterPlacement||"bottom-start",column:y,upDataColumn:(S,$)=>{y[S]=$}})])]))))))}});function yG(e){const t=Ne(_o),n=A(""),o=A(Pe("div")),s=(f,p,h)=>{var g;const m=t,v=Pc(f);let y;const w=(g=m==null?void 0:m.vnode.el)==null?void 0:g.dataset.prefix;v&&(y=Ag({columns:e.store.states.columns.value},v,w),y&&(m==null||m.emit(`cell-${h}`,p,y,v,f))),m==null||m.emit(`row-${h}`,p,y,f)},l=(f,p)=>{s(f,p,"dblclick")},r=(f,p)=>{e.store.commit("setCurrentRow",p),s(f,p,"click")},a=(f,p)=>{s(f,p,"contextmenu")},i=hn(f=>{e.store.commit("setHoverRow",f)},30),u=hn(()=>{e.store.commit("setHoverRow",null)},30);return{handleDoubleClick:l,handleClick:r,handleContextMenu:a,handleMouseEnter:i,handleMouseLeave:u,handleCellMouseEnter:(f,p)=>{var h;const g=t,m=Pc(f),v=(h=g==null?void 0:g.vnode.el)==null?void 0:h.dataset.prefix;if(m){const k=Ag({columns:e.store.states.columns.value},m,v),T=g.hoverState={cell:m,column:k,row:p};g==null||g.emit("cell-mouse-enter",T.row,T.column,T.cell,f)}const y=f.target.querySelector(".cell");if(!(oo(y,`${v}-tooltip`)&&y.childNodes.length))return;const w=document.createRange();w.setStart(y,0),w.setEnd(y,y.childNodes.length);const S=w.getBoundingClientRect().width,$=(Number.parseInt(bo(y,"paddingLeft"),10)||0)+(Number.parseInt(bo(y,"paddingRight"),10)||0);(S+$>y.offsetWidth||y.scrollWidth>y.offsetWidth)&&Zq(m,m.innerText||m.textContent,{placement:"top",strategy:"fixed"},p.tooltipEffect)},handleCellMouseLeave:f=>{if(!Pc(f))return;const h=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",h==null?void 0:h.row,h==null?void 0:h.column,h==null?void 0:h.cell,f)},tooltipContent:n,tooltipTrigger:o}}function wG(e){const t=Ne(_o),n=we("table");return{getRowStyle:(u,c)=>{const d=t==null?void 0:t.props.rowStyle;return typeof d=="function"?d.call(null,{row:u,rowIndex:c}):d||null},getRowClass:(u,c)=>{const d=[n.e("row")];(t==null?void 0:t.props.highlightCurrentRow)&&u===e.store.states.currentRow.value&&d.push("current-row"),e.stripe&&c%2===1&&d.push(n.em("row","striped"));const f=t==null?void 0:t.props.rowClassName;return typeof f=="string"?d.push(f):typeof f=="function"&&d.push(f.call(null,{row:u,rowIndex:c})),d},getCellStyle:(u,c,d,f)=>{const p=t==null?void 0:t.props.cellStyle;let h=p!=null?p:{};typeof p=="function"&&(h=p.call(null,{rowIndex:u,columnIndex:c,row:d,column:f}));const g=f.isSubColumn?null:Op(c,e==null?void 0:e.fixed,e.store);return er(g,"left"),er(g,"right"),Object.assign({},h,g)},getCellClass:(u,c,d,f)=>{const p=f.isSubColumn?[]:Mp(n.b(),c,e==null?void 0:e.fixed,e.store),h=[f.id,f.align,f.className,...p],g=t==null?void 0:t.props.cellClassName;return typeof g=="string"?h.push(g):typeof g=="function"&&h.push(g.call(null,{rowIndex:u,columnIndex:c,row:d,column:f})),h.push(n.e("cell")),h.filter(m=>Boolean(m)).join(" ")},getSpan:(u,c,d,f)=>{let p=1,h=1;const g=t==null?void 0:t.props.spanMethod;if(typeof g=="function"){const m=g({row:u,column:c,rowIndex:d,columnIndex:f});Array.isArray(m)?(p=m[0],h=m[1]):typeof m=="object"&&(p=m.rowspan,h=m.colspan)}return{rowspan:p,colspan:h}},getColspanRealWidth:(u,c,d)=>{if(c<1)return u[d].realWidth;const f=u.map(({realWidth:p,width:h})=>p||h).slice(d,d+c);return Number(f.reduce((p,h)=>Number(p)+Number(h),-1))}}}function CG(e){const t=Ne(_o),{handleDoubleClick:n,handleClick:o,handleContextMenu:s,handleMouseEnter:l,handleMouseLeave:r,handleCellMouseEnter:a,handleCellMouseLeave:i,tooltipContent:u,tooltipTrigger:c}=yG(e),{getRowStyle:d,getRowClass:f,getCellStyle:p,getCellClass:h,getSpan:g,getColspanRealWidth:m}=wG(e),v=E(()=>e.store.states.columns.value.findIndex(({type:k})=>k==="default")),y=(k,T)=>{const O=t.props.rowKey;return O?Qt(k,O):T},w=(k,T,O,L=!1)=>{const{tooltipEffect:B,store:V}=e,{indent:H,columns:R}=V.states,z=f(k,T);let W=!0;return O&&(z.push(`el-table__row--level-${O.level}`),W=O.display),Pe("tr",{style:[W?null:{display:"none"},d(k,T)],class:z,key:y(k,T),onDblclick:N=>n(N,k),onClick:N=>o(N,k),onContextmenu:N=>s(N,k),onMouseenter:()=>l(T),onMouseleave:r},R.value.map((N,I)=>{const{rowspan:U,colspan:q}=g(k,N,T,I);if(!U||!q)return null;const Q=ne({},N);Q.realWidth=m(R.value,q,I);const J={store:e.store,_self:e.context||t,column:Q,row:k,$index:T,cellIndex:I,expanded:L};I===v.value&&O&&(J.treeNode={indent:O.level*H.value,level:O.level},typeof O.expanded=="boolean"&&(J.treeNode.expanded=O.expanded,"loading"in O&&(J.treeNode.loading=O.loading),"noLazyChildren"in O&&(J.treeNode.noLazyChildren=O.noLazyChildren)));const ae=`${T},${I}`,Ee=Q.columnKey||Q.rawColumnKey||"",Me=S(I,N,J);return Pe("td",{style:p(T,I,k,N),class:h(T,I,k,N),key:`${Ee}${ae}`,rowspan:U,colspan:q,onMouseenter:Z=>a(Z,Te(ne({},k),{tooltipEffect:B})),onMouseleave:i},[Me])}))},S=(k,T,O)=>T.renderCell(O);return{wrappedRowRender:(k,T)=>{const O=e.store,{isRowExpanded:L,assertRowKey:B}=O,{treeData:V,lazyTreeNodeMap:H,childrenColumnName:R,rowKey:z}=O.states,W=O.states.columns.value;if(W.some(({type:N})=>N==="expand")){const N=L(k),I=w(k,T,void 0,N),U=t.renderExpanded;return N?U?[[I,Pe("tr",{key:`expanded-row__${I.key}`},[Pe("td",{colspan:W.length,class:"el-table__cell el-table__expanded-cell"},[U({row:k,$index:T,store:O,expanded:N})])])]]:(console.error("[Element Error]renderExpanded is required."),I):[[I]]}else if(Object.keys(V.value).length){B();const N=Qt(k,z.value);let I=V.value[N],U=null;I&&(U={expanded:I.expanded,level:I.level,display:!0},typeof I.lazy=="boolean"&&(typeof I.loaded=="boolean"&&I.loaded&&(U.noLazyChildren=!(I.children&&I.children.length)),U.loading=I.loading));const q=[w(k,T,U)];if(I){let Q=0;const J=(Ee,Me)=>{!(Ee&&Ee.length&&Me)||Ee.forEach(Z=>{const ve={display:Me.display&&Me.expanded,level:Me.level+1,expanded:!1,noLazyChildren:!1,loading:!1},Ce=Qt(Z,z.value);if(Ce==null)throw new Error("For nested data item, row-key is required.");if(I=ne({},V.value[Ce]),I&&(ve.expanded=I.expanded,I.level=I.level||ve.level,I.display=!!(I.expanded&&ve.display),typeof I.lazy=="boolean"&&(typeof I.loaded=="boolean"&&I.loaded&&(ve.noLazyChildren=!(I.children&&I.children.length)),ve.loading=I.loading)),Q++,q.push(w(Z,T+Q,ve)),I){const ke=H.value[Ce]||Z[R.value];J(ke,I)}})};I.display=!0;const ae=H.value[N]||k[R.value];J(ae,I)}return q}else return w(k,T,void 0)},tooltipContent:u,tooltipTrigger:c}}const $G={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var kG=te({name:"ElTableBody",props:$G,setup(e){const t=nt(),n=Ne(_o),o=we("table"),{wrappedRowRender:s,tooltipContent:l,tooltipTrigger:r}=CG(e),{onColumnsChange:a,onScrollableChange:i}=CC(n);return pe(e.store.states.hoverRow,(u,c)=>{if(!e.store.states.isComplex.value||!ct)return;let d=window.requestAnimationFrame;d||(d=f=>window.setTimeout(f,16)),d(()=>{var f;const p=(f=t==null?void 0:t.vnode.el)==null?void 0:f.querySelectorAll(`.${o.e("row")}`),h=p[c],g=p[u];h&&fn(h,"hover-row"),g&&wo(g,"hover-row")})}),ka(()=>{var u;(u=su)==null||u()}),Xn(()=>{var u;(u=su)==null||u()}),{ns:o,onColumnsChange:a,onScrollableChange:i,wrappedRowRender:s,tooltipContent:l,tooltipTrigger:r}},render(){const{wrappedRowRender:e,store:t}=this,n=t.states.data.value||[];return Pe("tbody",{},[n.reduce((o,s)=>o.concat(e(s,o.length)),[])])}});function Ip(e){const t=e.tableLayout==="auto";let n=e.columns||[];t&&n.every(s=>s.width===void 0)&&(n=[]);const o=s=>{const l={key:`${e.tableLayout}_${s.id}`,style:{},name:void 0};return t?l.style={width:`${s.width}px`}:l.name=s.id,l};return Pe("colgroup",{},n.map(s=>Pe("col",o(s))))}Ip.props=["columns","tableLayout"];function SG(){const e=Ne(_o),t=e==null?void 0:e.store,n=E(()=>t.states.fixedLeafColumnsLength.value),o=E(()=>t.states.rightFixedColumns.value.length),s=E(()=>t.states.columns.value.length),l=E(()=>t.states.fixedColumns.value.length),r=E(()=>t.states.rightFixedColumns.value.length);return{leftFixedLeafCount:n,rightFixedLeafCount:o,columnsCount:s,leftFixedCount:l,rightFixedCount:r,columns:t.states.columns}}function EG(e){const{columns:t}=SG(),n=we("table");return{getCellClasses:(l,r)=>{const a=l[r],i=[n.e("cell"),a.id,a.align,a.labelClassName,...Mp(n.b(),r,a.fixed,e.store)];return a.className&&i.push(a.className),a.children||i.push(n.is("leaf")),i},getCellStyles:(l,r)=>{const a=Op(r,l.fixed,e.store);return er(a,"left"),er(a,"right"),a},columns:t}}var _G=te({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:n,columns:o}=EG(e);return{ns:we("table"),getCellClasses:t,getCellStyles:n,columns:o}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:o,sumText:s,ns:l}=this,r=this.store.states.data.value;let a=[];return o?a=o({columns:e,data:r}):e.forEach((i,u)=>{if(u===0){a[u]=s;return}const c=r.map(h=>Number(h[i.property])),d=[];let f=!0;c.forEach(h=>{if(!Number.isNaN(+h)){f=!1;const g=`${h}`.split(".")[1];d.push(g?g.length:0)}});const p=Math.max.apply(null,d);f?a[u]="":a[u]=c.reduce((h,g)=>{const m=Number(g);return Number.isNaN(+m)?h:Number.parseFloat((h+g).toFixed(Math.min(p,20)))},0)}),Pe("table",{class:l.e("footer"),cellspacing:"0",cellpadding:"0",border:"0"},[Ip({columns:e}),Pe("tbody",[Pe("tr",{},[...e.map((i,u)=>Pe("td",{key:u,colspan:i.colSpan,rowspan:i.rowSpan,class:n(e,u),style:t(i,u)},[Pe("div",{class:["cell",i.labelClassName]},[a[u]])]))])])])}});function TG(e){return{setCurrentRow:c=>{e.commit("setCurrentRow",c)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(c,d)=>{e.toggleRowSelection(c,d,!1),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:c=>{e.clearFilter(c)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(c,d)=>{e.toggleRowExpansionAdapter(c,d)},clearSort:()=>{e.clearSort()},sort:(c,d)=>{e.commit("sort",{prop:c,order:d})}}}function AG(e,t,n,o){const s=A(!1),l=A(null),r=A(!1),a=I=>{r.value=I},i=A({width:null,height:null}),u=A(!1),c={display:"inline-block",verticalAlign:"middle"},d=A();zn(()=>{t.setHeight(e.height)}),zn(()=>{t.setMaxHeight(e.maxHeight)}),pe(()=>[e.currentRowKey,n.states.rowKey],([I,U])=>{!b(U)||n.setCurrentRowKey(`${I}`)},{immediate:!0}),pe(()=>e.data,I=>{o.store.commit("setData",I)},{immediate:!0,deep:!0}),zn(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const f=()=>{o.store.commit("setHoverRow",null),o.hoverState&&(o.hoverState=null)},p=(I,U)=>{const{pixelX:q,pixelY:Q}=U;Math.abs(q)>=Math.abs(Q)&&(o.refs.bodyWrapper.scrollLeft+=U.pixelX/5)},h=E(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),g=E(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),m=()=>{h.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(S)};xe(async()=>{await ze(),n.updateColumns(),$(),requestAnimationFrame(m),i.value={width:d.value=o.vnode.el.offsetWidth,height:o.vnode.el.offsetHeight},n.states.columns.value.forEach(I=>{I.filteredValue&&I.filteredValue.length&&o.store.commit("filterChange",{column:I,values:I.filteredValue,silent:!0})}),o.$ready=!0});const v=(I,U)=>{if(!I)return;const q=Array.from(I.classList).filter(Q=>!Q.startsWith("is-scrolling-"));q.push(t.scrollX.value?U:"is-scrolling-none"),I.className=q.join(" ")},y=I=>{const{tableWrapper:U}=o.refs;v(U,I)},w=I=>{const{tableWrapper:U}=o.refs;return!!(U&&U.classList.contains(I))},S=function(){if(!o.refs.scrollBarRef)return;if(!t.scrollX.value){const Me="is-scrolling-none";w(Me)||y(Me);return}const I=o.refs.scrollBarRef.wrap$;if(!I)return;const{scrollLeft:U,offsetWidth:q,scrollWidth:Q}=I,{headerWrapper:J,footerWrapper:ae}=o.refs;J&&(J.scrollLeft=U),ae&&(ae.scrollLeft=U);const Ee=Q-q-1;U>=Ee?y("is-scrolling-right"):y(U===0?"is-scrolling-left":"is-scrolling-middle")},$=()=>{var I;!o.refs.scrollBarRef||((I=o.refs.scrollBarRef.wrap$)==null||I.addEventListener("scroll",S,{passive:!0}),e.fit?ir(o.vnode.el,T):Tt(window,"resize",m))};_t(()=>{k()});const k=()=>{var I;(I=o.refs.scrollBarRef.wrap$)==null||I.removeEventListener("scroll",S,!0),e.fit?ur(o.vnode.el,T):Vt(window,"resize",m)},T=()=>{if(!o.$ready)return;let I=!1;const U=o.vnode.el,{width:q,height:Q}=i.value,J=d.value=U.offsetWidth;q!==J&&(I=!0);const ae=U.offsetHeight;(e.height||h.value)&&Q!==ae&&(I=!0),I&&(i.value={width:J,height:ae},m())},O=Wt(),L=E(()=>{const{bodyWidth:I,scrollY:U,gutterWidth:q}=t;return I.value?`${I.value-(U.value?q:0)}px`:""}),B=E(()=>e.maxHeight?"fixed":e.tableLayout);function V(I,U,q){const Q=Wd(I),J=e.showHeader?q:0;if(Q!==null)return Qe(Q)?`calc(${Q} - ${U}px - ${J}px)`:Q-U-J}const H=E(()=>{const I=t.headerHeight.value||0,U=t.bodyHeight.value,q=t.footerHeight.value||0;if(e.height)return U||void 0;if(e.maxHeight)return V(e.maxHeight,q,I)}),R=E(()=>{const I=t.headerHeight.value||0,U=t.bodyHeight.value,q=t.footerHeight.value||0;if(e.height)return{height:U?`${U}px`:""};if(e.maxHeight){const Q=V(e.maxHeight,q,I);if(Q!==null)return{"max-height":`${Q}${ht(Q)?"px":""}`}}return{}}),z=E(()=>{if(e.data&&e.data.length)return null;let I="100%";return t.appendHeight.value&&(I=`calc(100% - ${t.appendHeight.value}px)`),{width:d.value?`${d.value}px`:"",height:I}}),W=(I,U)=>{const q=o.refs.bodyWrapper;if(Math.abs(U.spinY)>0){const Q=q.scrollTop;U.pixelY<0&&Q!==0&&I.preventDefault(),U.pixelY>0&&q.scrollHeight-q.clientHeight>Q&&I.preventDefault(),q.scrollTop+=Math.ceil(U.pixelY/5)}else q.scrollLeft+=Math.ceil(U.pixelX/5)},P=E(()=>e.maxHeight?e.showSummary?{bottom:0}:{bottom:t.scrollX.value&&e.data.length?`${t.gutterWidth}px`:""}:e.showSummary?{height:t.tableHeight.value?`${t.tableHeight.value}px`:""}:{height:t.viewportHeight.value?`${t.viewportHeight.value}px`:""}),N=E(()=>{if(e.height)return{height:t.fixedBodyHeight.value?`${t.fixedBodyHeight.value}px`:""};if(e.maxHeight){let I=Wd(e.maxHeight);if(typeof I=="number")return I=t.scrollX.value?I-t.gutterWidth:I,e.showHeader&&(I-=t.headerHeight.value),I-=t.footerHeight.value,{"max-height":`${I}px`}}return{}});return{isHidden:s,renderExpanded:l,setDragVisible:a,isGroup:u,handleMouseLeave:f,handleHeaderFooterMousewheel:p,tableSize:O,bodyHeight:R,height:H,emptyBlockStyle:z,handleFixedMousewheel:W,fixedHeight:P,fixedBodyHeight:N,resizeProxyVisible:r,bodyWidth:L,resizeState:i,doLayout:m,tableBodyStyles:g,tableLayout:B,scrollbarViewStyle:c}}var NG={data:{type:Array,default:()=>[]},size:String,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:{type:Boolean,default:!1}};const MG=()=>{const e=A(),t=(l,r)=>{const a=e.value;a&&a.scrollTo(l,r)},n=(l,r)=>{const a=e.value;a&&ht(r)&&["Top","Left"].includes(l)&&a[`setScroll${l}`](r)};return{scrollBarRef:e,scrollTo:t,setScrollTop:l=>n("Top",l),setScrollLeft:l=>n("Left",l)}};let OG=1;const IG=te({name:"ElTable",directives:{Mousewheel:eV},components:{TableHeader:bG,TableBody:kG,TableFooter:_G,ElScrollbar:Uo,hColgroup:Ip},props:NG,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=kt(),n=we("table"),o=nt();st(_o,o);const s=sG(o,e);o.store=s;const l=new rG({store:o.store,table:o,fit:e.fit,showHeader:e.showHeader});o.layout=l;const r=E(()=>(s.states.data.value||[]).length===0),{setCurrentRow:a,getSelectionRows:i,toggleRowSelection:u,clearSelection:c,clearFilter:d,toggleAllSelection:f,toggleRowExpansion:p,clearSort:h,sort:g}=TG(s),{isHidden:m,renderExpanded:v,setDragVisible:y,isGroup:w,handleMouseLeave:S,handleHeaderFooterMousewheel:$,tableSize:k,bodyHeight:T,height:O,emptyBlockStyle:L,handleFixedMousewheel:B,fixedHeight:V,fixedBodyHeight:H,resizeProxyVisible:R,bodyWidth:z,resizeState:W,doLayout:P,tableBodyStyles:N,tableLayout:I,scrollbarViewStyle:U}=AG(e,l,s,o),{scrollBarRef:q,scrollTo:Q,setScrollLeft:J,setScrollTop:ae}=MG(),Ee=hn(P,50),Me=`el-table_${OG++}`;o.tableId=Me,o.state={isGroup:w,resizeState:W,doLayout:P,debouncedUpdateLayout:Ee};const Z=E(()=>e.sumText||t("el.table.sumText")),ve=E(()=>e.emptyText||t("el.table.emptyText"));return{ns:n,layout:l,store:s,handleHeaderFooterMousewheel:$,handleMouseLeave:S,tableId:Me,tableSize:k,isHidden:m,isEmpty:r,renderExpanded:v,resizeProxyVisible:R,resizeState:W,isGroup:w,bodyWidth:z,bodyHeight:T,height:O,tableBodyStyles:N,emptyBlockStyle:L,debouncedUpdateLayout:Ee,handleFixedMousewheel:B,fixedHeight:V,fixedBodyHeight:H,setCurrentRow:a,getSelectionRows:i,toggleRowSelection:u,clearSelection:c,clearFilter:d,toggleAllSelection:f,toggleRowExpansion:p,clearSort:h,doLayout:P,sort:g,t,setDragVisible:y,context:o,computedSumText:Z,computedEmptyText:ve,tableLayout:I,scrollbarViewStyle:U,scrollBarRef:q,scrollTo:Q,setScrollLeft:J,setScrollTop:ae}}}),DG=["data-prefix"],PG={ref:"hiddenColumns",class:"hidden-columns"};function LG(e,t,n,o,s,l){const r=le("hColgroup"),a=le("table-header"),i=le("table-body"),u=le("el-scrollbar"),c=le("table-footer"),d=Mn("mousewheel");return C(),M("div",{ref:"tableWrapper",class:_([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:De(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=f=>e.handleMouseLeave())},[D("div",{class:_(e.ns.e("inner-wrapper"))},[D("div",PG,[ie(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?Ge((C(),M("div",{key:0,ref:"headerWrapper",class:_(e.ns.e("header-wrapper"))},[D("table",{ref:"tableHeader",class:_(e.ns.e("header")),style:De(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Y(a,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[d,e.handleHeaderFooterMousewheel]]):G("v-if",!0),D("div",{ref:"bodyWrapper",style:De(e.bodyHeight),class:_(e.ns.e("body-wrapper"))},[Y(u,{ref:"scrollBarRef",height:e.maxHeight?void 0:e.height,"max-height":e.maxHeight?e.height:void 0,"view-style":e.scrollbarViewStyle,always:e.scrollbarAlwaysOn},{default:j(()=>[D("table",{ref:"tableBody",class:_(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:De({width:e.bodyWidth,tableLayout:e.tableLayout})},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(C(),x(a,{key:0,border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])):G("v-if",!0),Y(i,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","row-style","store","stripe"])],6),e.isEmpty?(C(),M("div",{key:0,ref:"emptyBlock",style:De(e.emptyBlockStyle),class:_(e.ns.e("empty-block"))},[D("span",{class:_(e.ns.e("empty-text"))},[ie(e.$slots,"empty",{},()=>[it(he(e.computedEmptyText),1)])],2)],6)):G("v-if",!0),e.$slots.append?(C(),M("div",{key:1,ref:"appendWrapper",class:_(e.ns.e("append-wrapper"))},[ie(e.$slots,"append")],2)):G("v-if",!0)]),_:3},8,["height","max-height","view-style","always"])],6),e.border||e.isGroup?(C(),M("div",{key:1,class:_(e.ns.e("border-left-patch"))},null,2)):G("v-if",!0)],2),e.showSummary?Ge((C(),M("div",{key:0,ref:"footerWrapper",class:_(e.ns.e("footer-wrapper"))},[Y(c,{border:e.border,"default-sort":e.defaultSort,store:e.store,style:De(e.tableBodyStyles),"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","style","sum-text","summary-method"])],2)),[[pt,!e.isEmpty],[d,e.handleHeaderFooterMousewheel]]):G("v-if",!0),Ge(D("div",{ref:"resizeProxy",class:_(e.ns.e("column-resize-proxy"))},null,2),[[pt,e.resizeProxyVisible]])],46,DG)}var RG=ge(IG,[["render",LG],["__file","/home/runner/work/element-plus/element-plus/packages/components/table/src/table.vue"]]);const BG={selection:"table-column--selection",expand:"table__expand-column"},VG={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},FG=e=>BG[e]||"",HG={selection:{renderHeader({store:e}){function t(){return e.states.data.value&&e.states.data.value.length===0}return Pe(ao,{disabled:t(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value})},renderCell({row:e,column:t,store:n,$index:o}){return Pe(ao,{disabled:t.selectable?!t.selectable.call(null,e,o):!1,size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:s=>s.stopPropagation(),modelValue:n.isSelected(e)})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let n=t+1;const o=e.index;return typeof o=="number"?n=t+o:typeof o=="function"&&(n=o(t)),Pe("div",{},[n])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({row:e,store:t,expanded:n}){const{ns:o}=t,s=[o.e("expand-icon")];return n&&s.push(o.em("expand-icon","expanded")),Pe("div",{class:s,onClick:function(r){r.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[Pe(je,null,{default:()=>[Pe(Jn)]})]})},sortable:!1,resizable:!1}};function zG({row:e,column:t,$index:n}){var o;const s=t.property,l=s&&fi(e,s).value;return t&&t.formatter?t.formatter(e,t,l,n):((o=l==null?void 0:l.toString)==null?void 0:o.call(l))||""}function KG({row:e,treeNode:t,store:n},o=!1){const{ns:s}=n;if(!t)return o?[Pe("span",{class:s.e("placeholder")})]:null;const l=[],r=function(a){a.stopPropagation(),n.loadOrToggle(e)};if(t.indent&&l.push(Pe("span",{class:s.e("indent"),style:{"padding-left":`${t.indent}px`}})),typeof t.expanded=="boolean"&&!t.noLazyChildren){const a=[s.e("expand-icon"),t.expanded?s.em("expand-icon","expanded"):""];let i=Jn;t.loading&&(i=gs),l.push(Pe("div",{class:a,onClick:r},{default:()=>[Pe(je,{class:{[s.is("loading")]:t.loading}},{default:()=>[Pe(i)]})]}))}else l.push(Pe("span",{class:s.e("placeholder")}));return l}function Mg(e,t){return e.reduce((n,o)=>(n[o]=o,n),t)}function WG(e,t){const n=nt();return{registerComplexWatchers:()=>{const l=["fixed"],r={realWidth:"width",realMinWidth:"minWidth"},a=Mg(l,r);Object.keys(a).forEach(i=>{const u=r[i];at(t,u)&&pe(()=>t[u],c=>{let d=c;u==="width"&&i==="realWidth"&&(d=Np(c)),u==="minWidth"&&i==="realMinWidth"&&(d=vC(c)),n.columnConfig.value[u]=d,n.columnConfig.value[i]=d;const f=u==="fixed";e.value.store.scheduleLayout(f)})})},registerNormalWatchers:()=>{const l=["label","filters","filterMultiple","sortable","index","formatter","className","labelClassName","showOverflowTooltip"],r={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},a=Mg(l,r);Object.keys(a).forEach(i=>{const u=r[i];at(t,u)&&pe(()=>t[u],c=>{n.columnConfig.value[i]=c})})}}}function jG(e,t,n){const o=nt(),s=A(""),l=A(!1),r=A(),a=A(),i=we("table");zn(()=>{r.value=e.align?`is-${e.align}`:null,r.value}),zn(()=>{a.value=e.headerAlign?`is-${e.headerAlign}`:r.value,a.value});const u=E(()=>{let w=o.vnode.vParent||o.parent;for(;w&&!w.tableId&&!w.columnId;)w=w.vnode.vParent||w.parent;return w}),c=E(()=>{const{store:w}=o.parent;if(!w)return!1;const{treeData:S}=w.states,$=S.value;return $&&Object.keys($).length>0}),d=A(Np(e.width)),f=A(vC(e.minWidth)),p=w=>(d.value&&(w.width=d.value),f.value&&(w.minWidth=f.value),w.minWidth||(w.minWidth=80),w.realWidth=Number(w.width===void 0?w.minWidth:w.width),w),h=w=>{const S=w.type,$=HG[S]||{};Object.keys($).forEach(T=>{const O=$[T];T!=="className"&&O!==void 0&&(w[T]=O)});const k=FG(S);if(k){const T=`${b(i.namespace)}-${k}`;w.className=w.className?`${w.className} ${T}`:T}return w},g=w=>{Array.isArray(w)?w.forEach($=>S($)):S(w);function S($){var k;((k=$==null?void 0:$.type)==null?void 0:k.name)==="ElTableColumn"&&($.vParent=o)}};return{columnId:s,realAlign:r,isSubColumn:l,realHeaderAlign:a,columnOrTableParent:u,setColumnWidth:p,setColumnForcedProps:h,setColumnRenders:w=>{e.renderHeader||w.type!=="selection"&&(w.renderHeader=k=>{o.columnConfig.value.label;const T=t.header;return T?T(k):w.label});let S=w.renderCell;const $=c.value;return w.type==="expand"?(w.renderCell=k=>Pe("div",{class:"cell"},[S(k)]),n.value.renderExpanded=k=>t.default?t.default(k):t.default):(S=S||zG,w.renderCell=k=>{let T=null;if(t.default){const V=t.default(k);T=V.some(H=>H.type!==pn)?V:S(k)}else T=S(k);const O=$&&k.cellIndex===0,L=KG(k,O),B={class:"cell",style:{}};return w.showOverflowTooltip&&(B.class=`${B.class} ${b(i.namespace)}-tooltip`,B.style={width:`${(k.column.realWidth||Number(k.column.width))-1}px`}),g(T),Pe("div",B,[L,T])}),w},getPropsData:(...w)=>w.reduce((S,$)=>(Array.isArray($)&&$.forEach(k=>{S[k]=e[k]}),S),{}),getColumnElIndex:(w,S)=>Array.prototype.indexOf.call(w,S)}}var YG={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showTooltipWhenOverflow:Boolean,showOverflowTooltip:Boolean,fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let UG=1;var kC=te({name:"ElTableColumn",components:{ElCheckbox:ao},props:YG,setup(e,{slots:t}){const n=nt(),o=A({}),s=E(()=>{let y=n.parent;for(;y&&!y.tableId;)y=y.parent;return y}),{registerNormalWatchers:l,registerComplexWatchers:r}=WG(s,e),{columnId:a,isSubColumn:i,realHeaderAlign:u,columnOrTableParent:c,setColumnWidth:d,setColumnForcedProps:f,setColumnRenders:p,getPropsData:h,getColumnElIndex:g,realAlign:m}=jG(e,t,s),v=c.value;a.value=`${v.tableId||v.columnId}_column_${UG++}`,$a(()=>{i.value=s.value!==v;const y=e.type||"default",w=e.sortable===""?!0:e.sortable,S=Te(ne({},VG[y]),{id:a.value,type:y,property:e.prop||e.property,align:m,headerAlign:u,showOverflowTooltip:e.showOverflowTooltip||e.showTooltipWhenOverflow,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:w,index:e.index,rawColumnKey:n.vnode.key});let L=h(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement"]);L=Gq(S,L),L=Xq(p,d,f)(L),o.value=L,l(),r()}),xe(()=>{var y;const w=c.value,S=i.value?w.vnode.el.children:(y=w.refs.hiddenColumns)==null?void 0:y.children,$=()=>g(S||[],n.vnode.el);o.value.getColumnIndex=$,$()>-1&&s.value.store.commit("insertColumn",o.value,i.value?w.columnConfig.value:null)}),_t(()=>{s.value.store.commit("removeColumn",o.value,i.value?v.columnConfig.value:null)}),n.columnId=a.value,n.columnConfig=o},render(){var e,t,n;try{const o=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),s=[];if(Array.isArray(o))for(const r of o)((n=r.type)==null?void 0:n.name)==="ElTableColumn"||r.shapeFlag&2?s.push(r):r.type===Le&&Array.isArray(r.children)&&r.children.forEach(a=>{(a==null?void 0:a.patchFlag)!==1024&&!Qe(a==null?void 0:a.children)&&s.push(a)});return Pe("div",s)}catch{return Pe("div",[])}}});const qG=ot(RG,{TableColumn:kC}),GG=Rt(kC),XG=Ve({tabs:{type:$e(Array),default:()=>Pt([])}}),JG={name:"ElTabBar"},ZG=te(Te(ne({},JG),{props:XG,setup(e,{expose:t}){const n=e,o="ElTabBar",s=nt(),l=Ne(Vu);l||Kt(o,"");const r=we("tabs"),a=A(),i=A(),u=()=>{let d=0,f=0;const p=["top","bottom"].includes(l.props.tabPosition)?"width":"height",h=p==="width"?"x":"y";return n.tabs.every(g=>{var m,v,y,w;const S=(v=(m=s.parent)==null?void 0:m.refs)==null?void 0:v[`tab-${g.paneName}`];if(!S)return!1;if(!g.active)return!0;f=S[`client${yn(p)}`];const $=h==="x"?"left":"top";d=S.getBoundingClientRect()[$]-((w=(y=S.parentElement)==null?void 0:y.getBoundingClientRect()[$])!=null?w:0);const k=window.getComputedStyle(S);return p==="width"&&(n.tabs.length>1&&(f-=Number.parseFloat(k.paddingLeft)+Number.parseFloat(k.paddingRight)),d+=Number.parseFloat(k.paddingLeft)),!1}),{[p]:`${f}px`,transform:`translate${yn(h)}(${d}px)`}},c=()=>i.value=u();return pe(()=>n.tabs,async()=>{await ze(),c()},{immediate:!0}),ar(a,()=>c()),t({ref:a,update:c}),(d,f)=>(C(),M("div",{ref_key:"barRef",ref:a,class:_([b(r).e("active-bar"),b(r).is(b(l).props.tabPosition)]),style:De(i.value)},null,6))}}));var QG=ge(ZG,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tabs/src/tab-bar.vue"]]);const xG=Ve({panes:{type:$e(Array),default:()=>Pt([])},currentName:{type:[String,Number],default:""},editable:Boolean,onTabClick:{type:$e(Function),default:wt},onTabRemove:{type:$e(Function),default:wt},type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean}),Og="ElTabNav",eX=te({name:Og,props:xG,setup(e,{expose:t}){const n=Ne(Vu);n||Kt(Og,"");const o=we("tabs"),s=KI(),l=UI(),r=A(),a=A(),i=A(),u=A(!1),c=A(0),d=A(!1),f=A(!0),p=E(()=>["top","bottom"].includes(n.props.tabPosition)?"width":"height"),h=E(()=>({transform:`translate${p.value==="width"?"X":"Y"}(-${c.value}px)`})),g=()=>{if(!r.value)return;const k=r.value[`offset${yn(p.value)}`],T=c.value;if(!T)return;const O=T>k?T-k:0;c.value=O},m=()=>{if(!r.value||!a.value)return;const k=a.value[`offset${yn(p.value)}`],T=r.value[`offset${yn(p.value)}`],O=c.value;if(k-O<=T)return;const L=k-O>T*2?O+T:k-T;c.value=L},v=()=>{const k=a.value;if(!u.value||!i.value||!r.value||!k)return;const T=i.value.querySelector(".is-active");if(!T)return;const O=r.value,L=["top","bottom"].includes(n.props.tabPosition),B=T.getBoundingClientRect(),V=O.getBoundingClientRect(),H=L?k.offsetWidth-V.width:k.offsetHeight-V.height,R=c.value;let z=R;L?(B.leftV.right&&(z=R+B.right-V.right)):(B.topV.bottom&&(z=R+(B.bottom-V.bottom))),z=Math.max(z,0),c.value=Math.min(z,H)},y=()=>{if(!a.value||!r.value)return;const k=a.value[`offset${yn(p.value)}`],T=r.value[`offset${yn(p.value)}`],O=c.value;if(T0&&(c.value=0)},w=k=>{const T=k.code,{up:O,down:L,left:B,right:V}=Ie;if(![O,L,B,V].includes(T))return;const H=Array.from(k.currentTarget.querySelectorAll("[role=tab]")),R=H.indexOf(k.target);let z;T===B||T===O?R===0?z=H.length-1:z=R-1:R{f.value&&(d.value=!0)},$=()=>d.value=!1;return pe(s,k=>{k==="hidden"?f.value=!1:k==="visible"&&setTimeout(()=>f.value=!0,50)}),pe(l,k=>{k?setTimeout(()=>f.value=!0,50):f.value=!1}),ar(i,y),xe(()=>setTimeout(()=>v(),0)),Xn(()=>y()),t({scrollToActiveTab:v,removeFocus:$}),()=>{const k=u.value?[Y("span",{class:[o.e("nav-prev"),o.is("disabled",!u.value.prev)],onClick:g},[Y(je,null,{default:()=>[Y(pl,null,null)]})]),Y("span",{class:[o.e("nav-next"),o.is("disabled",!u.value.next)],onClick:m},[Y(je,null,{default:()=>[Y(Jn,null,null)]})])]:null,T=e.panes.map((O,L)=>{var B,V;const H=O.props.name||O.index||`${L}`,R=O.isClosable||e.editable;O.index=`${L}`;const z=R?Y(je,{class:"is-icon-close",onClick:N=>e.onTabRemove(O,N)},{default:()=>[Y(Yn,null,null)]}):null,W=((V=(B=O.instance.slots).label)==null?void 0:V.call(B))||O.props.label,P=O.active?0:-1;return Y("div",{ref:`tab-${H}`,class:[o.e("item"),o.is(n.props.tabPosition),o.is("active",O.active),o.is("disabled",O.props.disabled),o.is("closable",R),o.is("focus",d.value)],id:`tab-${H}`,key:`tab-${H}`,"aria-controls":`pane-${H}`,role:"tab","aria-selected":O.active,tabindex:P,onFocus:()=>S(),onBlur:()=>$(),onClick:N=>{$(),e.onTabClick(O,H,N)},onKeydown:N=>{R&&(N.code===Ie.delete||N.code===Ie.backspace)&&e.onTabRemove(O,N)}},[W,z])});return Y("div",{ref:i,class:[o.e("nav-wrap"),o.is("scrollable",!!u.value),o.is(n.props.tabPosition)]},[k,Y("div",{class:o.e("nav-scroll"),ref:r},[Y("div",{class:[o.e("nav"),o.is(n.props.tabPosition),o.is("stretch",e.stretch&&["top","bottom"].includes(n.props.tabPosition))],ref:a,style:h.value,role:"tablist",onKeydown:w},[e.type?null:Y(QG,{tabs:[...e.panes]},null),T])])])}}}),tX=Ve({type:{type:String,values:["card","border-card",""],default:""},activeName:{type:[String,Number],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number],default:""},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:$e(Function),default:()=>!0},stretch:Boolean}),xa=e=>Qe(e)||ht(e),nX={[tt]:e=>xa(e),[ps]:e=>xa(e),"tab-click":(e,t)=>t instanceof Event,"tab-change":e=>xa(e),edit:(e,t)=>["remove","add"].includes(t),"tab-remove":e=>xa(e),"tab-add":()=>!0},SC=(e,t=[])=>{const n=e.children||[];return Array.from(n).forEach(o=>{let s=o.type;s=s.name||s,s==="ElTabPane"&&o.component?t.push(o.component):(s===Le||s==="template")&&SC(o,t)}),t};var oX=te({name:"ElTabs",props:tX,emits:nX,setup(e,{emit:t,slots:n,expose:o}){const s=nt();Ma({scope:"el-tabs",type:"Event",from:"input",replacement:"tab-change",version:"2.5.0",ref:"https://element-plus.org/en-US/component/tabs.html#tabs-events"},E(()=>{var m;return et((m=s.vnode.props)==null?void 0:m.onInput)}));const l=we("tabs"),r=A(),a=A([]),i=A(e.modelValue||e.activeName||"0"),u={},c=(m=!1)=>{if(n.default){const v=s.subTree.children,y=Array.from(v).find(({props:$})=>($==null?void 0:$.class)===l.e("content"));if(!y)return;const w=SC(y).map($=>u[$.uid]),S=!(w.length===a.value.length&&w.every(($,k)=>$.uid===a.value[k].uid));(m||S)&&(a.value=w)}else a.value.length!==0&&(a.value=[])},d=m=>{i.value=m,t(ps,m),t(tt,m),t("tab-change",m)},f=m=>{var v;if(i.value===m)return;const y=(v=e.beforeLeave)==null?void 0:v.call(e,m,i.value);el(y)?y.then(()=>{var w,S;d(m),(S=(w=r.value)==null?void 0:w.removeFocus)==null||S.call(w)},wt):y!==!1&&d(m)},p=(m,v,y)=>{m.props.disabled||(f(v),t("tab-click",m,y))},h=(m,v)=>{m.props.disabled||(v.stopPropagation(),t("edit",m.props.name,"remove"),t("tab-remove",m.props.name))},g=()=>{t("edit",void 0,"add"),t("tab-add")};return Xn(()=>c()),xe(()=>c()),pe(()=>e.activeName,m=>f(m)),pe(()=>e.modelValue,m=>f(m)),pe(i,async()=>{var m,v;c(!0),await ze(),await((m=r.value)==null?void 0:m.$nextTick()),(v=r.value)==null||v.scrollToActiveTab()}),st(Vu,{props:e,currentName:i,updatePaneState:m=>u[m.uid]=m}),o({currentName:i}),()=>{const m=e.editable||e.addable?Y("span",{class:l.e("new-tab"),tabindex:"0",onClick:g,onKeydown:w=>{w.code===Ie.enter&&g()}},[Y(je,{class:l.is("icon-plus")},{default:()=>[Y(L0,null,null)]})]):null,v=Y("div",{class:[l.e("header"),l.is(e.tabPosition)]},[m,Y(eX,{ref:r,currentName:i.value,editable:e.editable,type:e.type,panes:a.value,stretch:e.stretch,onTabClick:p,onTabRemove:h},null)]),y=Y("div",{class:l.e("content")},[ie(n,"default")]);return Y("div",{class:[l.b(),l.m(e.tabPosition),{[l.m("card")]:e.type==="card",[l.m("border-card")]:e.type==="border-card"}]},[...e.tabPosition!=="bottom"?[v,y]:[y,v]])}}});const sX=Ve({label:{type:String,default:""},name:{type:[String,Number],default:""},closable:Boolean,disabled:Boolean,lazy:Boolean}),lX=["id","aria-hidden","aria-labelledby"],rX={name:"ElTabPane"},aX=te(Te(ne({},rX),{props:sX,setup(e){const t=e,n="ElTabPane",o=nt(),s=Ne(Vu);s||Kt(n,"usage: ");const l=we("tab-pane"),r=A(),a=E(()=>t.closable||s.props.closable),i=sv(()=>s.currentName.value===(t.name||r.value)),u=A(i.value),c=E(()=>t.name||r.value),d=sv(()=>!t.lazy||u.value||i.value);return pe(i,f=>{f&&(u.value=!0)}),s.updatePaneState(yt({uid:o.uid,instance:Jr(o),props:t,paneName:c,active:i,index:r,isClosable:a})),(f,p)=>b(d)?Ge((C(),M("div",{key:0,id:`pane-${b(c)}`,class:_(b(l).b()),role:"tabpanel","aria-hidden":!b(i),"aria-labelledby":`tab-${b(c)}`},[ie(f.$slots,"default")],10,lX)),[[pt,b(i)]]):G("v-if",!0)}}));var EC=ge(aX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tabs/src/tab-pane.vue"]]);const iX=ot(oX,{TabPane:EC}),uX=Rt(EC);Je.extend(pp);const{Option:cX}=ll,Oo=e=>{const t=(e||"").split(":");if(t.length>=2){let n=Number.parseInt(t[0],10);const o=Number.parseInt(t[1],10),s=e.toUpperCase();return s.includes("AM")&&n===12?n=0:s.includes("PM")&&n!==12&&(n+=12),{hours:n,minutes:o}}return null},Lc=(e,t)=>{const n=Oo(e),o=Oo(t),s=n.minutes+n.hours*60,l=o.minutes+o.hours*60;return s===l?0:s>l?1:-1},Ig=e=>`${e}`.padStart(2,"0"),_l=e=>`${Ig(e.hours)}:${Ig(e.minutes)}`,dX=(e,t)=>{const n=Oo(e),o=Oo(t),s={hours:n.hours,minutes:n.minutes};return s.minutes+=o.minutes,s.hours+=o.hours,s.hours+=Math.floor(s.minutes/60),s.minutes=s.minutes%60,_l(s)},fX=te({name:"ElTimeSelect",components:{ElSelect:ll,ElOption:cX,ElIcon:je},model:{prop:"value",event:"change"},props:{format:{type:String,default:"HH:mm"},modelValue:String,disabled:{type:Boolean,default:!1},editable:{type:Boolean,default:!0},effect:{type:String,default:"light"},clearable:{type:Boolean,default:!0},size:{type:String,values:Eo,default:""},placeholder:{type:String,default:""},start:{type:String,default:"09:00"},end:{type:String,default:"18:00"},step:{type:String,default:"00:30"},minTime:{type:String,default:""},maxTime:{type:String,default:""},name:{type:String,default:""},prefixIcon:{type:[String,Object],default:P0},clearIcon:{type:[String,Object],default:Fo}},emits:["change","blur","focus","update:modelValue"],setup(e){const t=A(null),n=E(()=>e.modelValue),o=E(()=>{const d=Oo(e.start);return _l(d)}),s=E(()=>{const d=Oo(e.end);return _l(d)}),l=E(()=>{const d=Oo(e.step);return _l(d)}),r=E(()=>{const d=Oo(e.minTime);return d?_l(d):null}),a=E(()=>{const d=Oo(e.maxTime);return d?_l(d):null}),i=E(()=>{const d=[];if(e.start&&e.end&&e.step){let f=o.value,p;for(;Lc(f,s.value)<=0;)p=Je(f,"HH:mm").format(e.format),d.push({value:p,disabled:Lc(f,r.value||"-1:-1")<=0||Lc(f,a.value||"100:100")>=0}),f=dX(f,l.value)}return d});return{select:t,value:n,items:i,blur:()=>{var d,f;(f=(d=t.value)==null?void 0:d.blur)==null||f.call(d)},focus:()=>{var d,f;(f=(d=t.value)==null?void 0:d.focus)==null||f.call(d)}}}});function pX(e,t,n,o,s,l){const r=le("el-option"),a=le("el-icon"),i=le("el-select");return C(),x(i,{ref:"select","model-value":e.value,disabled:e.disabled,clearable:e.clearable,"clear-icon":e.clearIcon,size:e.size,effect:e.effect,placeholder:e.placeholder,"default-first-option":"",filterable:e.editable,"onUpdate:modelValue":t[0]||(t[0]=u=>e.$emit("update:modelValue",u)),onChange:t[1]||(t[1]=u=>e.$emit("change",u)),onBlur:t[2]||(t[2]=u=>e.$emit("blur",u)),onFocus:t[3]||(t[3]=u=>e.$emit("focus",u))},{prefix:j(()=>[e.prefixIcon?(C(),x(a,{key:0,class:"el-input__prefix-icon"},{default:j(()=>[(C(),x(ft(e.prefixIcon)))]),_:1})):G("v-if",!0)]),default:j(()=>[(C(!0),M(Le,null,rt(e.items,u=>(C(),x(r,{key:u.value,label:u.value,value:u.value,disabled:u.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["model-value","disabled","clearable","clear-icon","size","effect","placeholder","filterable"])}var Mi=ge(fX,[["render",pX],["__file","/home/runner/work/element-plus/element-plus/packages/components/time-select/src/time-select.vue"]]);Mi.install=e=>{e.component(Mi.name,Mi)};const hX=Mi,mX=hX,vX=te({name:"ElTimeline",setup(e,{slots:t}){const n=we("timeline");return st("timeline",t),()=>Pe("ul",{class:[n.b()]},[ie(t,"default")])}}),gX=Ve({timestamp:{type:String,default:""},hideTimestamp:{type:Boolean,default:!1},center:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:{type:String,default:""},color:{type:String,default:""},size:{type:String,default:"normal"},icon:{type:nn,default:""},hollow:{type:Boolean,default:!1}}),bX=te({name:"ElTimelineItem",components:{ElIcon:je},props:gX,setup(){return{ns:we("timeline-item")}}});function yX(e,t,n,o,s,l){const r=le("el-icon");return C(),M("li",{class:_([e.ns.b(),{[e.ns.e("center")]:e.center}])},[D("div",{class:_(e.ns.e("tail"))},null,2),e.$slots.dot?G("v-if",!0):(C(),M("div",{key:0,class:_([e.ns.e("node"),e.ns.em("node",e.size||""),e.ns.em("node",e.type||""),e.ns.is("hollow",e.hollow)]),style:De({backgroundColor:e.color})},[e.icon?(C(),x(r,{key:0,class:_(e.ns.e("icon"))},{default:j(()=>[(C(),x(ft(e.icon)))]),_:1},8,["class"])):G("v-if",!0)],6)),e.$slots.dot?(C(),M("div",{key:1,class:_(e.ns.e("dot"))},[ie(e.$slots,"dot")],2)):G("v-if",!0),D("div",{class:_(e.ns.e("wrapper"))},[!e.hideTimestamp&&e.placement==="top"?(C(),M("div",{key:0,class:_([e.ns.e("timestamp"),e.ns.is("top")])},he(e.timestamp),3)):G("v-if",!0),D("div",{class:_(e.ns.e("content"))},[ie(e.$slots,"default")],2),!e.hideTimestamp&&e.placement==="bottom"?(C(),M("div",{key:1,class:_([e.ns.e("timestamp"),e.ns.is("bottom")])},he(e.timestamp),3)):G("v-if",!0)],2)],2)}var _C=ge(bX,[["render",yX],["__file","/home/runner/work/element-plus/element-plus/packages/components/timeline/src/timeline-item.vue"]]);const wX=ot(vX,{TimelineItem:_C}),CX=Rt(_C),TC=Ve({nowrap:Boolean});var AC=(e=>(e.top="top",e.bottom="bottom",e.left="left",e.right="right",e))(AC||{});const $X=Object.values(AC),Dp=Ve({width:{type:Number,default:10},height:{type:Number,default:10},style:{type:$e(Object),default:null}}),kX=Ve({side:{type:$e(String),values:$X,required:!0}}),SX=["absolute","fixed"],EX=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],Pp=Ve({ariaLabel:String,arrowPadding:{type:$e(Number),default:5},effect:{type:String,default:""},contentClass:String,placement:{type:$e(String),values:EX,default:"bottom"},reference:{type:$e(Object),default:null},offset:{type:Number,default:8},strategy:{type:$e(String),values:SX,default:"absolute"},showArrow:{type:Boolean,default:!1}}),Lp=Ve({delayDuration:{type:Number,default:300},defaultOpen:Boolean,open:{type:Boolean,default:void 0},onOpenChange:{type:$e(Function)},"onUpdate:open":{type:$e(Function)}}),$l={type:$e(Function)},Rp=Ve({onBlur:$l,onClick:$l,onFocus:$l,onMouseDown:$l,onMouseEnter:$l,onMouseLeave:$l}),_X=Ve(Te(ne(ne(ne(ne({},Lp),Dp),Rp),Pp),{alwaysOn:Boolean,fullTransition:Boolean,transitionProps:{type:$e(Object),default:null},teleported:Boolean,to:{type:$e(String),default:"body"}})),TX={name:"ElTooltipV2Root"},AX=te(Te(ne({},TX),{props:Lp,setup(e,{expose:t}){const n=e,o=A(n.defaultOpen),s=A(null),l=E({get:()=>ZI(n.open)?o.value:n.open,set:m=>{var v;o.value=m,(v=n["onUpdate:open"])==null||v.call(n,m)}}),r=E(()=>ht(n.delayDuration)&&n.delayDuration>0),{start:a,stop:i}=ol(()=>{l.value=!0},E(()=>n.delayDuration),{immediate:!1}),u=we("tooltip-v2"),c=up(),d=()=>{i(),l.value=!0},f=()=>{b(r)?a():d()},p=d,h=()=>{i(),l.value=!1};return pe(l,m=>{var v;m&&(document.dispatchEvent(new CustomEvent(mc)),p()),(v=n.onOpenChange)==null||v.call(n,m)}),xe(()=>{document.addEventListener(mc,h)}),_t(()=>{i(),document.removeEventListener(mc,h)}),st(Fu,{contentId:c,triggerRef:s,ns:u,onClose:h,onDelayOpen:f,onOpen:p}),t({onOpen:p,onClose:h}),(m,v)=>ie(m.$slots,"default",{open:b(l)})}}));var NX=ge(AX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/root.vue"]]);const MX={name:"ElTooltipV2Arrow"},OX=te(Te(ne({},MX),{props:ne(ne({},Dp),kX),setup(e){const t=e,{ns:n}=Ne(Fu),{arrowRef:o}=Ne(o1),s=E(()=>{const{style:l,width:r,height:a}=t,i=n.namespace.value;return ne({[`--${i}-tooltip-v2-arrow-width`]:`${r}px`,[`--${i}-tooltip-v2-arrow-height`]:`${a}px`,[`--${i}-tooltip-v2-arrow-border-width`]:`${r/2}px`,[`--${i}-tooltip-v2-arrow-cover-width`]:r/2-1},l||{})});return(l,r)=>(C(),M("span",{ref_key:"arrowRef",ref:o,style:De(b(s)),class:_(b(n).e("arrow"))},null,6))}}));var Dg=ge(OX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/arrow.vue"]]);const IX=["data-side"],DX={name:"ElTooltipV2Content"},PX=te(Te(ne({},DX),{props:ne(ne({},Pp),TC),setup(e){const t=e,{triggerRef:n,contentId:o}=Ne(Fu),s=A(t.placement),l=A(t.strategy),r=A(null),{referenceRef:a,contentRef:i,middlewareData:u,x:c,y:d,update:f}=a6({placement:s,strategy:l,middleware:E(()=>{const w=[e6(t.offset)];return t.showArrow&&w.push(i6({arrowRef:r})),w})}),p=jo().nextZIndex(),h=we("tooltip-v2"),g=E(()=>s.value.split("-")[0]),m=E(()=>({position:b(l),top:`${b(d)||0}px`,left:`${b(c)||0}px`,zIndex:p})),v=E(()=>{if(!t.showArrow)return{};const{arrow:w}=b(u);return{[`--${h.namespace.value}-tooltip-v2-arrow-x`]:`${w==null?void 0:w.x}px`||"",[`--${h.namespace.value}-tooltip-v2-arrow-y`]:`${w==null?void 0:w.y}px`||""}}),y=E(()=>[h.e("content"),h.is("dark",t.effect==="dark"),h.is(b(l)),t.contentClass]);return pe(r,()=>f()),pe(()=>t.placement,w=>s.value=w),xe(()=>{pe(()=>t.reference||n.value,w=>{a.value=w||void 0},{immediate:!0})}),st(o1,{arrowRef:r}),(w,S)=>(C(),M("div",{ref_key:"contentRef",ref:i,style:De(b(m)),"data-tooltip-v2-root":""},[w.nowrap?G("v-if",!0):(C(),M("div",{key:0,"data-side":b(g),class:_(b(y))},[ie(w.$slots,"default",{contentStyle:b(m),contentClass:b(y)}),Y(b(T1),{id:b(o),role:"tooltip"},{default:j(()=>[w.ariaLabel?(C(),M(Le,{key:0},[it(he(w.ariaLabel),1)],2112)):ie(w.$slots,"default",{key:1})]),_:3},8,["id"]),ie(w.$slots,"arrow",{style:De(b(v)),side:b(g)})],10,IX))],4))}}));var Pg=ge(PX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/content.vue"]]);const LX=Ve({setRef:{type:$e(Function),required:!0},onlyChild:Boolean});var RX=te({props:LX,setup(e,{slots:t}){const n=A(),o=sp(n,s=>{s?e.setRef(s.nextElementSibling):e.setRef(null)});return()=>{var s;const[l]=((s=t.default)==null?void 0:s.call(t))||[],r=e.onlyChild?y8(l.children):l.children;return Y(Le,{ref:o},[r])}}});const BX={name:"ElTooltipV2Trigger"},VX=te(Te(ne({},BX),{props:ne(ne({},TC),Rp),setup(e){const t=e,{onClose:n,onOpen:o,onDelayOpen:s,triggerRef:l,contentId:r}=Ne(Fu);let a=!1;const i=y=>{l.value=y},u=()=>{a=!1},c=Dt(t.onMouseEnter,s),d=Dt(t.onMouseLeave,n),f=Dt(t.onMouseDown,()=>{n(),a=!0,document.addEventListener("mouseup",u,{once:!0})}),p=Dt(t.onFocus,()=>{a||o()}),h=Dt(t.onBlur,n),g=Dt(t.onClick,y=>{y.detail===0&&n()}),m={blur:h,click:g,focus:p,mousedown:f,mouseenter:c,mouseleave:d},v=(y,w,S)=>{y&&Object.entries(w).forEach(([$,k])=>{y[S]($,k)})};return pe(l,(y,w)=>{v(y,m,"addEventListener"),v(w,m,"removeEventListener"),y&&y.setAttribute("aria-describedby",r.value)}),_t(()=>{v(l.value,m,"removeEventListener"),document.removeEventListener("mouseup",u)}),(y,w)=>y.nowrap?(C(),x(b(RX),{key:0,"set-ref":i,"only-child":""},{default:j(()=>[ie(y.$slots,"default")]),_:3})):(C(),M("button",Et({key:1,ref_key:"triggerRef",ref:l},y.$attrs),[ie(y.$slots,"default")],16))}}));var FX=ge(VX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/trigger.vue"]]);const HX={name:"ElTooltipV2"},zX=te(Te(ne({},HX),{props:_X,setup(e){const n=Ut(e),o=yt(os(n,Object.keys(Dp))),s=yt(os(n,Object.keys(Pp))),l=yt(os(n,Object.keys(Lp))),r=yt(os(n,Object.keys(Rp)));return(a,i)=>(C(),x(NX,to(ds(b(l))),{default:j(({open:u})=>[Y(FX,Et(b(r),{nowrap:""}),{default:j(()=>[ie(a.$slots,"trigger")]),_:3},16),(C(),x(Sa,{to:a.to,disabled:!a.teleported},[a.fullTransition?(C(),x(zt,to(Et({key:0},a.transitionProps)),{default:j(()=>[a.alwaysOn||u?(C(),x(Pg,to(Et({key:0},b(s))),{arrow:j(({style:c,side:d})=>[a.showArrow?(C(),x(Dg,Et({key:0},b(o),{style:c,side:d}),null,16,["style","side"])):G("v-if",!0)]),default:j(()=>[ie(a.$slots,"default")]),_:3},16)):G("v-if",!0)]),_:2},1040)):(C(),M(Le,{key:1},[a.alwaysOn||u?(C(),x(Pg,to(Et({key:0},b(s))),{arrow:j(({style:c,side:d})=>[a.showArrow?(C(),x(Dg,Et({key:0},b(o),{style:c,side:d}),null,16,["style","side"])):G("v-if",!0)]),default:j(()=>[ie(a.$slots,"default")]),_:3},16)):G("v-if",!0)],2112))],8,["to","disabled"]))]),_:3},16))}}));var KX=ge(zX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/tooltip.vue"]]);const WX=ot(KX),Yd="checked-change",jX={data:{type:Array,default(){return[]}},optionRender:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},YX=(e,t)=>{const{emit:n}=nt(),o=E(()=>e.props.label||"label"),s=E(()=>e.props.key||"key"),l=E(()=>e.props.disabled||"disabled"),r=E(()=>e.data.filter(f=>typeof e.filterMethod=="function"?e.filterMethod(t.query,f):(f[o.value]||f[s.value].toString()).toLowerCase().includes(t.query.toLowerCase()))),a=E(()=>r.value.filter(f=>!f[l.value])),i=E(()=>{const f=t.checked.length,p=e.data.length,{noChecked:h,hasChecked:g}=e.format;return h&&g?f>0?g.replace(/\${checked}/g,f.toString()).replace(/\${total}/g,p.toString()):h.replace(/\${total}/g,p.toString()):`${f}/${p}`}),u=E(()=>{const f=t.checked.length;return f>0&&f{const f=a.value.map(p=>p[s.value]);t.allChecked=f.length>0&&f.every(p=>t.checked.includes(p))},d=f=>{t.checked=f?a.value.map(p=>p[s.value]):[]};return pe(()=>t.checked,(f,p)=>{if(c(),t.checkChangeByUser){const h=f.concat(p).filter(g=>!f.includes(g)||!p.includes(g));n(Yd,f,h)}else n(Yd,f),t.checkChangeByUser=!0}),pe(a,()=>{c()}),pe(()=>e.data,()=>{const f=[],p=r.value.map(h=>h[s.value]);t.checked.forEach(h=>{p.includes(h)&&f.push(h)}),t.checkChangeByUser=!1,t.checked=f}),pe(()=>e.defaultChecked,(f,p)=>{if(p&&f.length===p.length&&f.every(m=>p.includes(m)))return;const h=[],g=a.value.map(m=>m[s.value]);f.forEach(m=>{g.includes(m)&&h.push(m)}),t.checkChangeByUser=!1,t.checked=h},{immediate:!0}),{labelProp:o,keyProp:s,disabledProp:l,filteredData:r,checkableData:a,checkedSummary:i,isIndeterminate:u,updateAllChecked:c,handleAllCheckedChange:d}},UX=te({name:"ElTransferPanel",components:{ElCheckboxGroup:sw,ElCheckbox:ao,ElInput:Zn,OptionContent:({option:e})=>e},props:jX,emits:[Yd],setup(e,{slots:t}){const{t:n}=kt(),o=we("transfer"),s=yt({checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}),{labelProp:l,keyProp:r,disabledProp:a,filteredData:i,checkedSummary:u,isIndeterminate:c,handleAllCheckedChange:d}=YX(e,s),f=E(()=>s.query.length>0&&i.value.length===0),p=E(()=>!!t.default()[0].children.length),{checked:h,allChecked:g,query:m,inputHover:v,checkChangeByUser:y}=Ut(s);return{ns:o,labelProp:l,keyProp:r,disabledProp:a,filteredData:i,checkedSummary:u,isIndeterminate:c,handleAllCheckedChange:d,checked:h,allChecked:g,query:m,inputHover:v,checkChangeByUser:y,hasNoMatch:f,SearchIcon:TL,hasFooter:p,t:n}}});function qX(e,t,n,o,s,l){const r=le("el-checkbox"),a=le("el-input"),i=le("option-content"),u=le("el-checkbox-group");return C(),M("div",{class:_(e.ns.b("panel"))},[D("p",{class:_(e.ns.be("panel","header"))},[Y(r,{modelValue:e.allChecked,"onUpdate:modelValue":t[0]||(t[0]=c=>e.allChecked=c),indeterminate:e.isIndeterminate,onChange:e.handleAllCheckedChange},{default:j(()=>[it(he(e.title)+" ",1),D("span",null,he(e.checkedSummary),1)]),_:1},8,["modelValue","indeterminate","onChange"])],2),D("div",{class:_([e.ns.be("panel","body"),e.ns.is("with-footer",e.hasFooter)])},[e.filterable?(C(),x(a,{key:0,modelValue:e.query,"onUpdate:modelValue":t[1]||(t[1]=c=>e.query=c),class:_(e.ns.be("panel","filter")),size:"default",placeholder:e.placeholder,"prefix-icon":e.SearchIcon,clearable:"",onMouseenter:t[2]||(t[2]=c=>e.inputHover=!0),onMouseleave:t[3]||(t[3]=c=>e.inputHover=!1)},null,8,["modelValue","class","placeholder","prefix-icon"])):G("v-if",!0),Ge(Y(u,{modelValue:e.checked,"onUpdate:modelValue":t[4]||(t[4]=c=>e.checked=c),class:_([e.ns.is("filterable",e.filterable),e.ns.be("panel","list")])},{default:j(()=>[(C(!0),M(Le,null,rt(e.filteredData,c=>(C(),x(r,{key:c[e.keyProp],class:_(e.ns.be("panel","item")),label:c[e.keyProp],disabled:c[e.disabledProp]},{default:j(()=>[Y(i,{option:e.optionRender(c)},null,8,["option"])]),_:2},1032,["class","label","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[pt,!e.hasNoMatch&&e.data.length>0]]),Ge(D("p",{class:_(e.ns.be("panel","empty"))},he(e.hasNoMatch?e.t("el.transfer.noMatch"):e.t("el.transfer.noData")),3),[[pt,e.hasNoMatch||e.data.length===0]])],2),e.hasFooter?(C(),M("p",{key:0,class:_(e.ns.be("panel","footer"))},[ie(e.$slots,"default")],2)):G("v-if",!0)],2)}var GX=ge(UX,[["render",qX],["__file","/home/runner/work/element-plus/element-plus/packages/components/transfer/src/transfer-panel.vue"]]);const XX=e=>{const t=E(()=>e.props.key),n=E(()=>e.data.reduce((l,r)=>(l[r[t.value]]=r)&&l,{})),o=E(()=>e.data.filter(l=>!e.modelValue.includes(l[t.value]))),s=E(()=>e.targetOrder==="original"?e.data.filter(l=>e.modelValue.includes(l[t.value])):e.modelValue.reduce((l,r)=>{const a=n.value[r];return a&&l.push(a),l},[]));return{propsKey:t,sourceData:o,targetData:s}},NC="left-check-change",MC="right-check-change",JX=(e,t)=>({onSourceCheckedChange:(s,l)=>{e.leftChecked=s,l!==void 0&&t(NC,s,l)},onTargetCheckedChange:(s,l)=>{e.rightChecked=s,l!==void 0&&t(MC,s,l)}}),ZX=(e,t,n,o)=>{const s=(a,i,u)=>{o(tt,a),o(qt,a,i,u)};return{addToLeft:()=>{const a=e.modelValue.slice();t.rightChecked.forEach(i=>{const u=a.indexOf(i);u>-1&&a.splice(u,1)}),s(a,"left",t.rightChecked)},addToRight:()=>{let a=e.modelValue.slice();const i=e.data.filter(u=>{const c=u[n.value];return t.leftChecked.includes(c)&&!e.modelValue.includes(c)}).map(u=>u[n.value]);a=e.targetOrder==="unshift"?i.concat(a):a.concat(i),e.targetOrder==="original"&&(a=e.data.filter(u=>a.includes(u[n.value])).map(u=>u[n.value])),s(a,"right",t.leftChecked)}}},QX=te({name:"ElTransfer",components:{TransferPanel:GX,ElButton:Kn,ElIcon:je,ArrowLeft:pl,ArrowRight:Jn},props:{data:{type:Array,default:()=>[]},titles:{type:Array,default:()=>[]},buttonTexts:{type:Array,default:()=>[]},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:()=>[]},rightDefaultChecked:{type:Array,default:()=>[]},renderContent:Function,modelValue:{type:Array,default:()=>[]},format:{type:Object,default:()=>({})},filterable:{type:Boolean,default:!1},props:{type:Object,default:()=>({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,default:"original",validator:e=>["original","push","unshift"].includes(e)}},emits:[tt,qt,NC,MC],setup(e,{emit:t,slots:n}){const{t:o}=kt(),s=we("transfer"),l=Ne(Un,{}),r=yt({leftChecked:[],rightChecked:[]}),{propsKey:a,sourceData:i,targetData:u}=XX(e),{onSourceCheckedChange:c,onTargetCheckedChange:d}=JX(r,t),{addToLeft:f,addToRight:p}=ZX(e,r,a,t),h=A(),g=A(),m=k=>{switch(k){case"left":h.value.query="";break;case"right":g.value.query="";break}},v=E(()=>e.buttonTexts.length===2),y=E(()=>e.titles[0]||o("el.transfer.titles.0")),w=E(()=>e.titles[1]||o("el.transfer.titles.1")),S=E(()=>e.filterPlaceholder||o("el.transfer.filterPlaceholder"));pe(()=>e.modelValue,()=>{var k;(k=l.validate)==null||k.call(l,"change").catch(T=>void 0)});const $=E(()=>k=>e.renderContent?e.renderContent(Pe,k):n.default?n.default({option:k}):Pe("span",k[e.props.label]||k[e.props.key]));return Te(ne({ns:s,sourceData:i,targetData:u,onSourceCheckedChange:c,onTargetCheckedChange:d,addToLeft:f,addToRight:p},Ut(r)),{hasButtonTexts:v,leftPanelTitle:y,rightPanelTitle:w,panelFilterPlaceholder:S,clearQuery:m,leftPanel:h,rightPanel:g,optionRender:$})}}),xX={key:0},eJ={key:0};function tJ(e,t,n,o,s,l){const r=le("transfer-panel"),a=le("arrow-left"),i=le("el-icon"),u=le("el-button"),c=le("arrow-right");return C(),M("div",{class:_(e.ns.b())},[Y(r,{ref:"leftPanel",data:e.sourceData,"option-render":e.optionRender,placeholder:e.panelFilterPlaceholder,title:e.leftPanelTitle,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,"default-checked":e.leftDefaultChecked,props:e.props,onCheckedChange:e.onSourceCheckedChange},{default:j(()=>[ie(e.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),D("div",{class:_(e.ns.e("buttons"))},[Y(u,{type:"primary",class:_([e.ns.e("button"),e.ns.is("with-texts",e.hasButtonTexts)]),disabled:e.rightChecked.length===0,onClick:e.addToLeft},{default:j(()=>[Y(i,null,{default:j(()=>[Y(a)]),_:1}),e.buttonTexts[0]!==void 0?(C(),M("span",xX,he(e.buttonTexts[0]),1)):G("v-if",!0)]),_:1},8,["class","disabled","onClick"]),Y(u,{type:"primary",class:_([e.ns.e("button"),e.ns.is("with-texts",e.hasButtonTexts)]),disabled:e.leftChecked.length===0,onClick:e.addToRight},{default:j(()=>[e.buttonTexts[1]!==void 0?(C(),M("span",eJ,he(e.buttonTexts[1]),1)):G("v-if",!0),Y(i,null,{default:j(()=>[Y(c)]),_:1})]),_:1},8,["class","disabled","onClick"])],2),Y(r,{ref:"rightPanel",data:e.targetData,"option-render":e.optionRender,placeholder:e.panelFilterPlaceholder,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,title:e.rightPanelTitle,"default-checked":e.rightDefaultChecked,props:e.props,onCheckedChange:e.onTargetCheckedChange},{default:j(()=>[ie(e.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2)}var Oi=ge(QX,[["render",tJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/transfer/src/index.vue"]]);Oi.install=e=>{e.component(Oi.name,Oi)};const nJ=Oi,oJ=nJ,Bl="$treeNodeId",Lg=function(e,t){!t||t[Bl]||Object.defineProperty(t,Bl,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},Bp=function(e,t){return e?t[e]:t[Bl]},Ud=e=>{let t=!0,n=!0,o=!0;for(let s=0,l=e.length;s0&&t.lazy&&t.defaultExpandAll&&this.expand(),Array.isArray(this.data)||Lg(this,this.data),!this.data)return;const o=t.defaultExpandedKeys,s=t.key;s&&o&&o.includes(this.key)&&this.expand(null,t.autoExpandParent),s&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),this.parent&&(this.level===1||this.parent.expanded===!0)&&(this.canFocus=!0)}setData(t){Array.isArray(t)||Lg(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&Array.isArray(this.data)?n=this.data:n=ei(this,"children")||[];for(let o=0,s=n.length;o-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(o=>o===t||n&&o.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,o){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof Js)){if(!o){const s=this.getChildren(!0);s.includes(t.data)||(typeof n=="undefined"||n<0?s.push(t.data):s.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=yt(new Js(t)),t instanceof Js&&t.initialize()}t.level=this.level+1,typeof n=="undefined"||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let o;n&&(o=this.childNodes.indexOf(n)),this.insertChild(t,o)}insertAfter(t,n){let o;n&&(o=this.childNodes.indexOf(n),o!==-1&&(o+=1)),this.insertChild(t,o)}removeChild(t){const n=this.getChildren()||[],o=n.indexOf(t.data);o>-1&&n.splice(o,1);const s=this.childNodes.indexOf(t);s>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(s,1)),this.updateLeafState()}removeChildByData(t){let n=null;for(let o=0;o{if(n){let s=this.parent;for(;s.level>0;)s.expanded=!0,s=s.parent}this.expanded=!0,t&&t(),this.childNodes.forEach(s=>{s.canFocus=!0})};this.shouldLoadData()?this.loadData(s=>{Array.isArray(s)&&(this.checked?this.setChecked(!0,!0):this.store.checkStrictly||Ii(this),o())}):o()}doCreateChildren(t,n={}){t.forEach(o=>{this.insertChild(Object.assign({data:o},n),void 0,!0)})}collapse(){this.expanded=!1,this.childNodes.forEach(t=>{t.canFocus=!1})}shouldLoadData(){return this.store.lazy===!0&&this.store.load&&!this.loaded}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&typeof this.isLeafByUser!="undefined"){this.isLeaf=this.isLeafByUser;return}const t=this.childNodes;if(!this.store.lazy||this.store.lazy===!0&&this.loaded===!0){this.isLeaf=!t||t.length===0;return}this.isLeaf=!1}setChecked(t,n,o,s){if(this.indeterminate=t==="half",this.checked=t===!0,this.store.checkStrictly)return;if(!(this.shouldLoadData()&&!this.store.checkDescendants)){const{all:r,allWithoutDisable:a}=Ud(this.childNodes);!this.isLeaf&&!r&&a&&(this.checked=!1,t=!1);const i=()=>{if(n){const u=this.childNodes;for(let f=0,p=u.length;f{i(),Ii(this)},{checked:t!==!1});return}else i()}const l=this.parent;!l||l.level===0||o||Ii(l)}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const o=this.store.props;let s="children";return o&&(s=o.children||"children"),n[s]===void 0&&(n[s]=null),t&&!n[s]&&(n[s]=[]),n[s]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(l=>l.data),o={},s=[];t.forEach((l,r)=>{const a=l[Bl];!!a&&n.findIndex(u=>u[Bl]===a)>=0?o[a]={index:r,data:l}:s.push({index:r,data:l})}),this.store.lazy||n.forEach(l=>{o[l[Bl]]||this.removeChildByData(l)}),s.forEach(({index:l,data:r})=>{this.insertChild({data:r},l)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy===!0&&this.store.load&&!this.loaded&&(!this.loading||Object.keys(n).length)){this.loading=!0;const o=s=>{this.loaded=!0,this.loading=!1,this.childNodes=[],this.doCreateChildren(s,n),this.updateLeafState(),t&&t.call(this,s)};this.store.load(this,o)}else t&&t.call(this)}}class lJ{constructor(t){this.currentNode=null,this.currentNodeKey=null;for(const n in t)at(t,n)&&(this[n]=t[n]);this.nodesMap={}}initialize(){this.root=new Js({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load?this.load(this.root,n=>{this.root.doCreateChildren(n),this._initDefaultCheckedNodes()}):this._initDefaultCheckedNodes()}filter(t){const n=this.filterNodeMethod,o=this.lazy,s=function(l){const r=l.root?l.root.childNodes:l.childNodes;if(r.forEach(a=>{a.visible=n.call(a,t,a.data,a),s(a)}),!l.visible&&r.length){let a=!0;a=!r.some(i=>i.visible),l.root?l.root.visible=a===!1:l.visible=a===!1}!t||l.visible&&!l.isLeaf&&!o&&l.expand()};s(this)}setData(t){t!==this.root.data?(this.root.setData(t),this._initDefaultCheckedNodes()):this.root.updateChildren()}getNode(t){if(t instanceof Js)return t;const n=typeof t!="object"?t:Bp(this.key,t);return this.nodesMap[n]||null}insertBefore(t,n){const o=this.getNode(n);o.parent.insertBefore({data:t},o)}insertAfter(t,n){const o=this.getNode(n);o.parent.insertAfter({data:t},o)}remove(t){const n=this.getNode(t);n&&n.parent&&(n===this.currentNode&&(this.currentNode=null),n.parent.removeChild(n))}append(t,n){const o=n?this.getNode(n):this.root;o&&o.insertChild({data:t})}_initDefaultCheckedNodes(){const t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach(o=>{const s=n[o];s&&s.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(t){(this.defaultCheckedKeys||[]).includes(t.key)&&t.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(t){t!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=t,this._initDefaultCheckedNodes())}registerNode(t){const n=this.key;!t||!t.data||(n?t.key!==void 0&&(this.nodesMap[t.key]=t):this.nodesMap[t.id]=t)}deregisterNode(t){!this.key||!t||!t.data||(t.childNodes.forEach(o=>{this.deregisterNode(o)}),delete this.nodesMap[t.key])}getCheckedNodes(t=!1,n=!1){const o=[],s=function(l){(l.root?l.root.childNodes:l.childNodes).forEach(a=>{(a.checked||n&&a.indeterminate)&&(!t||t&&a.isLeaf)&&o.push(a.data),s(a)})};return s(this),o}getCheckedKeys(t=!1){return this.getCheckedNodes(t).map(n=>(n||{})[this.key])}getHalfCheckedNodes(){const t=[],n=function(o){(o.root?o.root.childNodes:o.childNodes).forEach(l=>{l.indeterminate&&t.push(l.data),n(l)})};return n(this),t}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(t=>(t||{})[this.key])}_getAllNodes(){const t=[],n=this.nodesMap;for(const o in n)at(n,o)&&t.push(n[o]);return t}updateChildren(t,n){const o=this.nodesMap[t];if(!o)return;const s=o.childNodes;for(let l=s.length-1;l>=0;l--){const r=s[l];this.remove(r.data)}for(let l=0,r=n.length;li.level-a.level),l=Object.create(null),r=Object.keys(o);s.forEach(a=>a.setChecked(!1,!1));for(let a=0,i=s.length;a0;)l[f.data[t]]=!0,f=f.parent;if(u.isLeaf||this.checkStrictly){u.setChecked(!0,!1);continue}if(u.setChecked(!0,!0),n){u.setChecked(!1,!1);const p=function(h){h.childNodes.forEach(m=>{m.isLeaf||m.setChecked(!1,!1),p(m)})};p(u)}}}setCheckedNodes(t,n=!1){const o=this.key,s={};t.forEach(l=>{s[(l||{})[o]]=!0}),this._setCheckedKeys(o,n,s)}setCheckedKeys(t,n=!1){this.defaultCheckedKeys=t;const o=this.key,s={};t.forEach(l=>{s[l]=!0}),this._setCheckedKeys(o,n,s)}setDefaultExpandedKeys(t){t=t||[],this.defaultExpandedKeys=t,t.forEach(n=>{const o=this.getNode(n);o&&o.expand(null,this.autoExpandParent)})}setChecked(t,n,o){const s=this.getNode(t);s&&s.setChecked(!!n,o)}getCurrentNode(){return this.currentNode}setCurrentNode(t){const n=this.currentNode;n&&(n.isCurrent=!1),this.currentNode=t,this.currentNode.isCurrent=!0}setUserCurrentNode(t,n=!0){const o=t[this.key],s=this.nodesMap[o];this.setCurrentNode(s),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0)}setCurrentNodeKey(t,n=!0){if(t==null){this.currentNode&&(this.currentNode.isCurrent=!1),this.currentNode=null;return}const o=this.getNode(t);o&&(this.setCurrentNode(o),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0))}}const rJ=te({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=we("tree"),n=Ne("NodeInstance"),o=Ne("RootTree");return()=>{const s=e.node,{data:l,store:r}=s;return e.renderContent?e.renderContent(Pe,{_self:n,node:s,data:l,store:r}):o.ctx.slots.default?o.ctx.slots.default({node:s,data:l}):Pe("span",{class:t.be("node","label")},[s.label])}}});var aJ=ge(rJ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tree/src/tree-node-content.vue"]]);function OC(e){const t=Ne("TreeNodeMap",null),n={treeNodeExpand:o=>{e.node!==o&&e.node.collapse()},children:[]};return t&&t.children.push(n),st("TreeNodeMap",n),{broadcastExpanded:o=>{if(!!e.accordion)for(const s of n.children)s.treeNodeExpand(o)}}}const IC=Symbol("dragEvents");function iJ({props:e,ctx:t,el$:n,dropIndicator$:o,store:s}){const l=we("tree"),r=A({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return st(IC,{treeNodeDragStart:({event:c,treeNode:d})=>{if(typeof e.allowDrag=="function"&&!e.allowDrag(d.node))return c.preventDefault(),!1;c.dataTransfer.effectAllowed="move";try{c.dataTransfer.setData("text/plain","")}catch{}r.value.draggingNode=d,t.emit("node-drag-start",d.node,c)},treeNodeDragOver:({event:c,treeNode:d})=>{const f=d,p=r.value.dropNode;p&&p!==f&&fn(p.$el,l.is("drop-inner"));const h=r.value.draggingNode;if(!h||!f)return;let g=!0,m=!0,v=!0,y=!0;typeof e.allowDrop=="function"&&(g=e.allowDrop(h.node,f.node,"prev"),y=m=e.allowDrop(h.node,f.node,"inner"),v=e.allowDrop(h.node,f.node,"next")),c.dataTransfer.dropEffect=m||g||v?"move":"none",(g||m||v)&&p!==f&&(p&&t.emit("node-drag-leave",h.node,p.node,c),t.emit("node-drag-enter",h.node,f.node,c)),(g||m||v)&&(r.value.dropNode=f),f.node.nextSibling===h.node&&(v=!1),f.node.previousSibling===h.node&&(g=!1),f.node.contains(h.node,!1)&&(m=!1),(h.node===f.node||h.node.contains(f.node))&&(g=!1,m=!1,v=!1);const w=f.$el.getBoundingClientRect(),S=n.value.getBoundingClientRect();let $;const k=g?m?.25:v?.45:1:-1,T=v?m?.75:g?.55:0:1;let O=-9999;const L=c.clientY-w.top;Lw.height*T?$="after":m?$="inner":$="none";const B=f.$el.querySelector(`.${l.be("node","expand-icon")}`).getBoundingClientRect(),V=o.value;$==="before"?O=B.top-S.top:$==="after"&&(O=B.bottom-S.top),V.style.top=`${O}px`,V.style.left=`${B.right-S.left}px`,$==="inner"?wo(f.$el,l.is("drop-inner")):fn(f.$el,l.is("drop-inner")),r.value.showDropIndicator=$==="before"||$==="after",r.value.allowDrop=r.value.showDropIndicator||y,r.value.dropType=$,t.emit("node-drag-over",h.node,f.node,c)},treeNodeDragEnd:c=>{const{draggingNode:d,dropType:f,dropNode:p}=r.value;if(c.preventDefault(),c.dataTransfer.dropEffect="move",d&&p){const h={data:d.node.data};f!=="none"&&d.node.remove(),f==="before"?p.node.parent.insertBefore(h,p.node):f==="after"?p.node.parent.insertAfter(h,p.node):f==="inner"&&p.node.insertChild(h),f!=="none"&&s.value.registerNode(h),fn(p.$el,l.is("drop-inner")),t.emit("node-drag-end",d.node,p.node,f,c),f!=="none"&&t.emit("node-drop",d.node,p.node,f,c)}d&&!p&&t.emit("node-drag-end",d.node,null,f,c),r.value.showDropIndicator=!1,r.value.draggingNode=null,r.value.dropNode=null,r.value.allowDrop=!0}}),{dragState:r}}const uJ=te({name:"ElTreeNode",components:{ElCollapseTransition:Yu,ElCheckbox:ao,NodeContent:aJ,ElIcon:je,Loading:gs},props:{node:{type:Js,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:{type:Boolean,default:!1}},emits:["node-expand"],setup(e,t){const n=we("tree"),{broadcastExpanded:o}=OC(e),s=Ne("RootTree"),l=A(!1),r=A(!1),a=A(null),i=A(null),u=A(null),c=Ne(IC),d=nt();st("NodeInstance",d),e.node.expanded&&(l.value=!0,r.value=!0);const f=s.props.children||"children";pe(()=>{const L=e.node.data[f];return L&&[...L]},()=>{e.node.updateChildren()}),pe(()=>e.node.indeterminate,L=>{g(e.node.checked,L)}),pe(()=>e.node.checked,L=>{g(L,e.node.indeterminate)}),pe(()=>e.node.expanded,L=>{ze(()=>l.value=L),L&&(r.value=!0)});const p=L=>Bp(s.props.nodeKey,L.data),h=L=>{const B=e.props.class;if(!B)return{};let V;if(et(B)){const{data:H}=L;V=B(H,L)}else V=B;return Qe(V)?{[V]:!0}:V},g=(L,B)=>{(a.value!==L||i.value!==B)&&s.ctx.emit("check-change",e.node.data,L,B),a.value=L,i.value=B},m=L=>{const B=s.store.value;B.setCurrentNode(e.node),s.ctx.emit("current-change",B.currentNode?B.currentNode.data:null,B.currentNode),s.currentNode.value=e.node,s.props.expandOnClickNode&&y(),s.props.checkOnClickNode&&!e.node.disabled&&w(null,{target:{checked:!e.node.checked}}),s.ctx.emit("node-click",e.node.data,e.node,d,L)},v=L=>{s.instance.vnode.props.onNodeContextmenu&&(L.stopPropagation(),L.preventDefault()),s.ctx.emit("node-contextmenu",L,e.node.data,e.node,d)},y=()=>{e.node.isLeaf||(l.value?(s.ctx.emit("node-collapse",e.node.data,e.node,d),e.node.collapse()):(e.node.expand(),t.emit("node-expand",e.node.data,e.node,d)))},w=(L,B)=>{e.node.setChecked(B.target.checked,!s.props.checkStrictly),ze(()=>{const V=s.store.value;s.ctx.emit("check",e.node.data,{checkedNodes:V.getCheckedNodes(),checkedKeys:V.getCheckedKeys(),halfCheckedNodes:V.getHalfCheckedNodes(),halfCheckedKeys:V.getHalfCheckedKeys()})})};return{ns:n,node$:u,tree:s,expanded:l,childNodeRendered:r,oldChecked:a,oldIndeterminate:i,getNodeKey:p,getNodeClass:h,handleSelectChange:g,handleClick:m,handleContextMenu:v,handleExpandIconClick:y,handleCheckChange:w,handleChildNodeExpand:(L,B,V)=>{o(B),s.ctx.emit("node-expand",L,B,V)},handleDragStart:L=>{!s.props.draggable||c.treeNodeDragStart({event:L,treeNode:e})},handleDragOver:L=>{L.preventDefault(),s.props.draggable&&c.treeNodeDragOver({event:L,treeNode:{$el:u.value,node:e.node}})},handleDrop:L=>{L.preventDefault()},handleDragEnd:L=>{!s.props.draggable||c.treeNodeDragEnd(L)},CaretRight:D0}}}),cJ=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],dJ=["aria-expanded"];function fJ(e,t,n,o,s,l){const r=le("el-icon"),a=le("el-checkbox"),i=le("loading"),u=le("node-content"),c=le("el-tree-node"),d=le("el-collapse-transition");return Ge((C(),M("div",{ref:"node$",class:_([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[1]||(t[1]=Ke((...f)=>e.handleClick&&e.handleClick(...f),["stop"])),onContextmenu:t[2]||(t[2]=(...f)=>e.handleContextMenu&&e.handleContextMenu(...f)),onDragstart:t[3]||(t[3]=Ke((...f)=>e.handleDragStart&&e.handleDragStart(...f),["stop"])),onDragover:t[4]||(t[4]=Ke((...f)=>e.handleDragOver&&e.handleDragOver(...f),["stop"])),onDragend:t[5]||(t[5]=Ke((...f)=>e.handleDragEnd&&e.handleDragEnd(...f),["stop"])),onDrop:t[6]||(t[6]=Ke((...f)=>e.handleDrop&&e.handleDrop(...f),["stop"]))},[D("div",{class:_(e.ns.be("node","content")),style:De({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(C(),x(r,{key:0,class:_([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:Ke(e.handleExpandIconClick,["stop"])},{default:j(()=>[(C(),x(ft(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):G("v-if",!0),e.showCheckbox?(C(),x(a,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=Ke(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):G("v-if",!0),e.node.loading?(C(),x(r,{key:2,class:_([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:j(()=>[Y(i)]),_:1},8,["class"])):G("v-if",!0),Y(u,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),Y(d,null,{default:j(()=>[!e.renderAfterExpand||e.childNodeRendered?Ge((C(),M("div",{key:0,class:_(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded},[(C(!0),M(Le,null,rt(e.node.childNodes,f=>(C(),x(c,{key:e.getNodeKey(f),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:f,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,dJ)),[[pt,e.expanded]]):G("v-if",!0)]),_:1})],42,cJ)),[[pt,e.node.visible]])}var pJ=ge(uJ,[["render",fJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree/src/tree-node.vue"]]);function hJ({el$:e},t){const n=we("tree"),o=jt([]),s=jt([]);xe(()=>{r(),Tt(e.value,"keydown",l)}),_t(()=>{Vt(e.value,"keydown",l)}),Xn(()=>{o.value=Array.from(e.value.querySelectorAll("[role=treeitem]")),s.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"))}),pe(s,a=>{a.forEach(i=>{i.setAttribute("tabindex","-1")})});const l=a=>{const i=a.target;if(!i.className.includes(n.b("node")))return;const u=a.code;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`));const c=o.value.indexOf(i);let d;if([Ie.up,Ie.down].includes(u)){if(a.preventDefault(),u===Ie.up){d=c===-1?0:c!==0?c-1:o.value.length-1;const p=d;for(;!t.value.getNode(o.value[d].dataset.key).canFocus;){if(d--,d===p){d=-1;break}d<0&&(d=o.value.length-1)}}else{d=c===-1?0:c=o.value.length&&(d=0)}}d!==-1&&o.value[d].focus()}[Ie.left,Ie.right].includes(u)&&(a.preventDefault(),i.click());const f=i.querySelector('[type="checkbox"]');[Ie.enter,Ie.space].includes(u)&&f&&(a.preventDefault(),f.click())},r=()=>{var a;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`)),s.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"));const i=e.value.querySelectorAll(`.${n.is("checked")}[role=treeitem]`);if(i.length){i[0].setAttribute("tabindex","0");return}(a=o.value[0])==null||a.setAttribute("tabindex","0")}}const mJ=te({name:"ElTree",components:{ElTreeNode:pJ},props:{data:{type:Array,default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},icon:[String,Object]},emits:["check-change","current-change","node-click","node-contextmenu","node-collapse","node-expand","check","node-drag-start","node-drag-end","node-drop","node-drag-leave","node-drag-enter","node-drag-over"],setup(e,t){const{t:n}=kt(),o=we("tree"),s=A(new lJ({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));s.value.initialize();const l=A(s.value.root),r=A(null),a=A(null),i=A(null),{broadcastExpanded:u}=OC(e),{dragState:c}=iJ({props:e,ctx:t,el$:a,dropIndicator$:i,store:s});hJ({el$:a},s);const d=E(()=>{const{childNodes:N}=l.value;return!N||N.length===0||N.every(({visible:I})=>!I)});pe(()=>e.defaultCheckedKeys,N=>{s.value.setDefaultCheckedKey(N)}),pe(()=>e.defaultExpandedKeys,N=>{s.value.setDefaultExpandedKeys(N)}),pe(()=>e.data,N=>{s.value.setData(N)},{deep:!0}),pe(()=>e.checkStrictly,N=>{s.value.checkStrictly=N});const f=N=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");s.value.filter(N)},p=N=>Bp(e.nodeKey,N.data),h=N=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");const I=s.value.getNode(N);if(!I)return[];const U=[I.data];let q=I.parent;for(;q&&q!==l.value;)U.push(q.data),q=q.parent;return U.reverse()},g=(N,I)=>s.value.getCheckedNodes(N,I),m=N=>s.value.getCheckedKeys(N),v=()=>{const N=s.value.getCurrentNode();return N?N.data:null},y=()=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");const N=v();return N?N[e.nodeKey]:null},w=(N,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");s.value.setCheckedNodes(N,I)},S=(N,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");s.value.setCheckedKeys(N,I)},$=(N,I,U)=>{s.value.setChecked(N,I,U)},k=()=>s.value.getHalfCheckedNodes(),T=()=>s.value.getHalfCheckedKeys(),O=(N,I=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");s.value.setUserCurrentNode(N,I)},L=(N,I=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");s.value.setCurrentNodeKey(N,I)},B=N=>s.value.getNode(N),V=N=>{s.value.remove(N)},H=(N,I)=>{s.value.append(N,I)},R=(N,I)=>{s.value.insertBefore(N,I)},z=(N,I)=>{s.value.insertAfter(N,I)},W=(N,I,U)=>{u(I),t.emit("node-expand",N,I,U)},P=(N,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");s.value.updateChildren(N,I)};return st("RootTree",{ctx:t,props:e,store:s,root:l,currentNode:r,instance:nt()}),{ns:o,store:s,root:l,currentNode:r,dragState:c,el$:a,dropIndicator$:i,isEmpty:d,filter:f,getNodeKey:p,getNodePath:h,getCheckedNodes:g,getCheckedKeys:m,getCurrentNode:v,getCurrentKey:y,setCheckedNodes:w,setCheckedKeys:S,setChecked:$,getHalfCheckedNodes:k,getHalfCheckedKeys:T,setCurrentNode:O,setCurrentKey:L,t:n,getNode:B,remove:V,append:H,insertBefore:R,insertAfter:z,handleNodeExpand:W,updateKeyChildren:P}}});function vJ(e,t,n,o,s,l){var r;const a=le("el-tree-node");return C(),M("div",{ref:"el$",class:_([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(C(!0),M(Le,null,rt(e.root.childNodes,i=>(C(),x(a,{key:e.getNodeKey(i),node:i,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(C(),M("div",{key:0,class:_(e.ns.e("empty-block"))},[D("span",{class:_(e.ns.e("empty-text"))},he((r=e.emptyText)!=null?r:e.t("el.tree.emptyText")),3)],2)):G("v-if",!0),Ge(D("div",{ref:"dropIndicator$",class:_(e.ns.e("drop-indicator"))},null,2),[[pt,e.dragState.showDropIndicator]])],2)}var Di=ge(mJ,[["render",vJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree/src/tree.vue"]]);Di.install=e=>{e.component(Di.name,Di)};const lu=Di,gJ=lu,bJ=(e,{attrs:t},{tree:n,key:o})=>{const s=we("tree-select"),l=Te(ne(ne({},os(Ut(e),Object.keys(ll.props))),t),{valueKey:o,popperClass:E(()=>{const r=[s.e("popper")];return e.popperClass&&r.push(e.popperClass),r.join(" ")}),filterMethod:(r="")=>{e.filterMethod&&e.filterMethod(r),ze(()=>{var a;(a=n.value)==null||a.filter(r)})},onVisibleChange:r=>{var a;(a=t.onVisibleChange)==null||a.call(t,r),e.filterable&&r&&l.filterMethod()}});return l},yJ=te({extends:eu,setup(e,t){const n=eu.setup(e,t);return delete n.selectOptionClick,n},methods:{selectOptionClick(){this.$el.parentElement.click()}}}),wJ=(e,{attrs:t,slots:n,emit:o},{select:s,tree:l,key:r})=>{pe(()=>e.modelValue,()=>{e.showCheckbox&&ze(()=>{const u=l.value;u&&!_n(u.getCheckedKeys(),Rc(e.modelValue))&&u.setCheckedKeys(Rc(e.modelValue))})},{immediate:!0,deep:!0});const a=E(()=>ne({value:r.value},e.props)),i=(u,c)=>{var d;const f=a.value[u];return et(f)?f(c,(d=l.value)==null?void 0:d.getNode(i("value",c))):c[f]};return Te(ne(ne({},os(Ut(e),Object.keys(lu.props))),t),{nodeKey:r,defaultExpandedKeys:E(()=>e.defaultExpandedKeys?e.defaultExpandedKeys.concat(e.modelValue):Rc(e.modelValue)),renderContent:(u,{node:c,data:d,store:f})=>u(yJ,{value:i("value",d),label:i("label",d),disabled:i("disabled",d)},e.renderContent?()=>e.renderContent(u,{node:c,data:d,store:f}):n.default?()=>n.default({node:c,data:d,store:f}):void 0),filterNodeMethod:(u,c,d)=>{var f;return e.filterNodeMethod?e.filterNodeMethod(u,c,d):u?(f=i("label",c))==null?void 0:f.includes(u):!0},onNodeClick:(u,c,d)=>{var f,p,h;if((f=t.onNodeClick)==null||f.call(t,u,c,d),e.checkStrictly||c.isLeaf){if(!i("disabled",u)){const g=(p=s.value)==null?void 0:p.options.get(i("value",u));(h=s.value)==null||h.handleOptionSelect(g,!0)}}else d.ctx.handleExpandIconClick()},onCheck:(u,c)=>{var d,f;(d=t.onCheck)==null||d.call(t,u,c);const p=e.checkStrictly?c.checkedKeys:(f=l.value)==null?void 0:f.getCheckedKeys(!0),h=i("value",u);o(tt,e.multiple?p:p.includes(h)?h:void 0)}})};function Rc(e){return Array.isArray(e)?e:e||e===0?[e]:[]}const CJ=te({name:"ElTreeSelect",props:ne(ne({},ll.props),lu.props),setup(e,t){const{slots:n,expose:o}=t,s=A(),l=A(),r=E(()=>e.valueKey||e.nodeKey||"value"),a=bJ(e,t,{select:s,tree:l,key:r}),i=wJ(e,t,{select:s,tree:l,key:r}),u=yt({});return o(u),xe(()=>{Object.assign(u,ne(ne({},os(l.value,["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"])),os(s.value,["focus","blur"])))}),()=>Pe(ll,yt(Te(ne({},a),{ref:c=>s.value=c})),Te(ne({},n),{default:()=>Pe(lu,yt(Te(ne({},i),{ref:c=>l.value=c})))}))}});var Pi=ge(CJ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tree-select/src/tree-select.vue"]]);Pi.install=e=>{e.component(Pi.name,Pi)};const $J=Pi,kJ=$J,Vp=Symbol(),SJ={key:-1,level:-1,data:{}};var Ir=(e=>(e.KEY="id",e.LABEL="label",e.CHILDREN="children",e.DISABLED="disabled",e))(Ir||{}),qd=(e=>(e.ADD="add",e.DELETE="delete",e))(qd||{});const EJ=Ve({data:{type:$e(Array),default:()=>Pt([])},emptyText:{type:String},height:{type:Number,default:200},props:{type:$e(Object),default:()=>Pt({children:"children",label:"label",disabled:"disabled",value:"id"})},highlightCurrent:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},defaultCheckedKeys:{type:$e(Array),default:()=>Pt([])},checkStrictly:{type:Boolean,default:!1},defaultExpandedKeys:{type:$e(Array),default:()=>Pt([])},indent:{type:Number,default:16},icon:{type:String},expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:{type:Boolean,default:!1},currentNodeKey:{type:$e([String,Number])},accordion:{type:Boolean,default:!1},filterMethod:{type:$e(Function)},perfMode:{type:Boolean,default:!0}}),_J=Ve({node:{type:$e(Object),default:()=>Pt(SJ)},expanded:{type:Boolean,default:!1},checked:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},current:{type:Boolean,default:!1},hiddenExpandIcon:{type:Boolean,default:!1}}),TJ=Ve({node:{type:$e(Object),required:!0}}),DC="node-click",PC="node-expand",LC="node-collapse",RC="current-change",BC="check",VC="check-change",FC="node-contextmenu",AJ={[DC]:(e,t,n)=>e&&t&&n,[PC]:(e,t)=>e&&t,[LC]:(e,t)=>e&&t,[RC]:(e,t)=>e&&t,[BC]:(e,t)=>e&&t,[VC]:(e,t)=>e&&typeof t=="boolean",[FC]:(e,t,n)=>e&&t&&n},NJ={click:(e,t)=>!!(e&&t),toggle:e=>!!e,check:(e,t)=>e&&typeof t=="boolean"};function MJ(e,t){const n=A(new Set),o=A(new Set),{emit:s}=nt();pe(()=>t.value,()=>ze(()=>{y(e.defaultCheckedKeys)}),{immediate:!0});const l=()=>{if(!t.value||!e.showCheckbox||e.checkStrictly)return;const{levelTreeNodeMap:w,maxLevel:S}=t.value,$=n.value,k=new Set;for(let T=S-1;T>=1;--T){const O=w.get(T);!O||O.forEach(L=>{const B=L.children;if(B){let V=!0,H=!1;for(const R of B){const z=R.key;if($.has(z))H=!0;else if(k.has(z)){V=!1,H=!0;break}else V=!1}V?$.add(L.key):H?(k.add(L.key),$.delete(L.key)):($.delete(L.key),k.delete(L.key))}})}o.value=k},r=w=>n.value.has(w.key),a=w=>o.value.has(w.key),i=(w,S,$=!0)=>{const k=n.value,T=(O,L)=>{k[L?qd.ADD:qd.DELETE](O.key);const B=O.children;!e.checkStrictly&&B&&B.forEach(V=>{V.disabled||T(V,L)})};T(w,S),l(),$&&u(w,S)},u=(w,S)=>{const{checkedNodes:$,checkedKeys:k}=h(),{halfCheckedNodes:T,halfCheckedKeys:O}=g();s(BC,w.data,{checkedKeys:k,checkedNodes:$,halfCheckedKeys:O,halfCheckedNodes:T}),s(VC,w.data,S)};function c(w=!1){return h(w).checkedKeys}function d(w=!1){return h(w).checkedNodes}function f(){return g().halfCheckedKeys}function p(){return g().halfCheckedNodes}function h(w=!1){const S=[],$=[];if((t==null?void 0:t.value)&&e.showCheckbox){const{treeNodeMap:k}=t.value;n.value.forEach(T=>{const O=k.get(T);O&&(!w||w&&O.isLeaf)&&($.push(T),S.push(O.data))})}return{checkedKeys:$,checkedNodes:S}}function g(){const w=[],S=[];if((t==null?void 0:t.value)&&e.showCheckbox){const{treeNodeMap:$}=t.value;o.value.forEach(k=>{const T=$.get(k);T&&(S.push(k),w.push(T.data))})}return{halfCheckedNodes:w,halfCheckedKeys:S}}function m(w){n.value.clear(),o.value.clear(),y(w)}function v(w,S){if((t==null?void 0:t.value)&&e.showCheckbox){const $=t.value.treeNodeMap.get(w);$&&i($,S,!1)}}function y(w){if(t!=null&&t.value){const{treeNodeMap:S}=t.value;if(e.showCheckbox&&S&&w)for(const $ of w){const k=S.get($);k&&!r(k)&&i(k,!0,!1)}}}return{updateCheckedKeys:l,toggleCheckbox:i,isChecked:r,isIndeterminate:a,getCheckedKeys:c,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:p,setChecked:v,setCheckedKeys:m}}function OJ(e,t){const n=A(new Set([])),o=A(new Set([])),s=E(()=>et(e.filterMethod));function l(a){var i;if(!s.value)return;const u=new Set,c=o.value,d=n.value,f=[],p=((i=t.value)==null?void 0:i.treeNodes)||[],h=e.filterMethod;d.clear();function g(m){m.forEach(v=>{f.push(v),h!=null&&h(a,v.data)?f.forEach(w=>{u.add(w.key)}):v.isLeaf&&d.add(v.key);const y=v.children;if(y&&g(y),!v.isLeaf){if(!u.has(v.key))d.add(v.key);else if(y){let w=!0;for(const S of y)if(!d.has(S.key)){w=!1;break}w?c.add(v.key):c.delete(v.key)}}f.pop()})}return g(p),u}function r(a){return o.value.has(a.key)}return{hiddenExpandIconKeySet:o,hiddenNodeKeySet:n,doFilter:l,isForceHiddenExpandIcon:r}}function IJ(e,t){const n=A(new Set(e.defaultExpandedKeys)),o=A(),s=jt();pe(()=>e.currentNodeKey,Z=>{o.value=Z},{immediate:!0}),pe(()=>e.data,Z=>{Me(Z)},{immediate:!0});const{isIndeterminate:l,isChecked:r,toggleCheckbox:a,getCheckedKeys:i,getCheckedNodes:u,getHalfCheckedKeys:c,getHalfCheckedNodes:d,setChecked:f,setCheckedKeys:p}=MJ(e,s),{doFilter:h,hiddenNodeKeySet:g,isForceHiddenExpandIcon:m}=OJ(e,s),v=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.value)||Ir.KEY}),y=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.children)||Ir.CHILDREN}),w=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.disabled)||Ir.DISABLED}),S=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.label)||Ir.LABEL}),$=E(()=>{const Z=n.value,ve=g.value,Ce=[],ke=s.value&&s.value.treeNodes||[];function Oe(){const We=[];for(let qe=ke.length-1;qe>=0;--qe)We.push(ke[qe]);for(;We.length;){const qe=We.pop();if(!!qe&&(ve.has(qe.key)||Ce.push(qe),Z.has(qe.key))){const K=qe.children;if(K){const X=K.length;for(let fe=X-1;fe>=0;--fe)We.push(K[fe])}}}}return Oe(),Ce}),k=E(()=>$.value.length>0);function T(Z){const ve=new Map,Ce=new Map;let ke=1;function Oe(qe,K=1,X=void 0){var fe;const ye=[];for(const be of qe){const _e=B(be),re={level:K,key:_e,data:be};re.label=H(be),re.parent=X;const se=L(be);re.disabled=V(be),re.isLeaf=!se||se.length===0,se&&se.length&&(re.children=Oe(se,K+1,re)),ye.push(re),ve.set(_e,re),Ce.has(K)||Ce.set(K,[]),(fe=Ce.get(K))==null||fe.push(re)}return K>ke&&(ke=K),ye}const We=Oe(Z);return{treeNodeMap:ve,levelTreeNodeMap:Ce,maxLevel:ke,treeNodes:We}}function O(Z){const ve=h(Z);ve&&(n.value=ve)}function L(Z){return Z[y.value]}function B(Z){return Z?Z[v.value]:""}function V(Z){return Z[w.value]}function H(Z){return Z[S.value]}function R(Z){n.value.has(Z.key)?I(Z):N(Z)}function z(Z,ve){t(DC,Z.data,Z,ve),W(Z),e.expandOnClickNode&&R(Z),e.showCheckbox&&e.checkOnClickNode&&!Z.disabled&&a(Z,!r(Z),!0)}function W(Z){Q(Z)||(o.value=Z.key,t(RC,Z.data,Z))}function P(Z,ve){a(Z,ve)}function N(Z){const ve=n.value;if((s==null?void 0:s.value)&&e.accordion){const{treeNodeMap:Ce}=s.value;ve.forEach(ke=>{const Oe=Ce.get(ke);Oe&&Oe.level===Oe.level&&ve.delete(ke)})}ve.add(Z.key),t(PC,Z.data,Z)}function I(Z){n.value.delete(Z.key),t(LC,Z.data,Z)}function U(Z){return n.value.has(Z.key)}function q(Z){return!!Z.disabled}function Q(Z){const ve=o.value;return!!ve&&ve===Z.key}function J(){var Z,ve;if(!!o.value)return(ve=(Z=s==null?void 0:s.value)==null?void 0:Z.treeNodeMap.get(o.value))==null?void 0:ve.data}function ae(){return o.value}function Ee(Z){o.value=Z}function Me(Z){ze(()=>s.value=T(Z))}return{tree:s,flattenTree:$,isNotEmpty:k,getKey:B,getChildren:L,toggleExpand:R,toggleCheckbox:a,isExpanded:U,isChecked:r,isIndeterminate:l,isDisabled:q,isCurrent:Q,isForceHiddenExpandIcon:m,handleNodeClick:z,handleNodeCheck:P,getCurrentNode:J,getCurrentKey:ae,setCurrentKey:Ee,getCheckedKeys:i,getCheckedNodes:u,getHalfCheckedKeys:c,getHalfCheckedNodes:d,setChecked:f,setCheckedKeys:p,filter:O,setData:Me}}var DJ=te({name:"ElTreeNodeContent",props:TJ,setup(e){const t=Ne(Vp),n=we("tree");return()=>{const o=e.node,{data:s}=o;return t!=null&&t.ctx.slots.default?t.ctx.slots.default({node:o,data:s}):Pe("span",{class:n.be("node","label")},[o==null?void 0:o.label])}}});const PJ="caret-right",LJ=te({name:"ElTreeNode",components:{ElIcon:je,CaretRight:D0,ElCheckbox:ao,ElNodeContent:DJ},props:_J,emits:NJ,setup(e,{emit:t}){const n=Ne(Vp),o=we("tree"),s=E(()=>{var c;return(c=n==null?void 0:n.props.indent)!=null?c:16}),l=E(()=>{var c;return(c=n==null?void 0:n.props.icon)!=null?c:PJ});return{ns:o,indent:s,icon:l,handleClick:c=>{t("click",e.node,c)},handleExpandIconClick:()=>{t("toggle",e.node)},handleCheckChange:c=>{t("check",e.node,c)},handleContextMenu:c=>{var d,f,p,h;(p=(f=(d=n==null?void 0:n.instance)==null?void 0:d.vnode)==null?void 0:f.props)!=null&&p.onNodeContextmenu&&(c.stopPropagation(),c.preventDefault()),n==null||n.ctx.emit(FC,c,(h=e.node)==null?void 0:h.data,e.node)}}}}),RJ=["aria-expanded","aria-disabled","aria-checked","data-key"];function BJ(e,t,n,o,s,l){var r,a,i;const u=le("el-icon"),c=le("el-checkbox"),d=le("el-node-content");return C(),M("div",{ref:"node$",class:_([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.current),e.ns.is("focusable",!e.disabled),e.ns.is("checked",!e.disabled&&e.checked)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.disabled,"aria-checked":e.checked,"data-key":(r=e.node)==null?void 0:r.key,onClick:t[1]||(t[1]=Ke((...f)=>e.handleClick&&e.handleClick(...f),["stop"])),onContextmenu:t[2]||(t[2]=(...f)=>e.handleContextMenu&&e.handleContextMenu(...f))},[D("div",{class:_(e.ns.be("node","content")),style:De({paddingLeft:`${(e.node.level-1)*e.indent}px`})},[e.icon?(C(),x(u,{key:0,class:_([e.ns.is("leaf",!!((a=e.node)!=null&&a.isLeaf)),e.ns.is("hidden",e.hiddenExpandIcon),{expanded:!((i=e.node)!=null&&i.isLeaf)&&e.expanded},e.ns.be("node","expand-icon")]),onClick:Ke(e.handleExpandIconClick,["stop"])},{default:j(()=>[(C(),x(ft(e.icon)))]),_:1},8,["class","onClick"])):G("v-if",!0),e.showCheckbox?(C(),x(c,{key:1,"model-value":e.checked,indeterminate:e.indeterminate,disabled:e.disabled,onChange:e.handleCheckChange,onClick:t[0]||(t[0]=Ke(()=>{},["stop"]))},null,8,["model-value","indeterminate","disabled","onChange"])):G("v-if",!0),Y(d,{node:e.node},null,8,["node"])],6)],42,RJ)}var VJ=ge(LJ,[["render",BJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree-v2/src/tree-node.vue"]]);const FJ=te({name:"ElTreeV2",components:{ElTreeNode:VJ,FixedSizeList:dC},props:EJ,emits:AJ,setup(e,t){st(Vp,{ctx:t,props:e,instance:nt()});const{t:n}=kt(),o=we("tree"),{flattenTree:s,isNotEmpty:l,toggleExpand:r,isExpanded:a,isIndeterminate:i,isChecked:u,isDisabled:c,isCurrent:d,isForceHiddenExpandIcon:f,toggleCheckbox:p,handleNodeClick:h,handleNodeCheck:g,getCurrentNode:m,getCurrentKey:v,setCurrentKey:y,getCheckedKeys:w,getCheckedNodes:S,getHalfCheckedKeys:$,getHalfCheckedNodes:k,setChecked:T,setCheckedKeys:O,filter:L,setData:B}=IJ(e,t.emit);return t.expose({getCurrentNode:m,getCurrentKey:v,setCurrentKey:y,getCheckedKeys:w,getCheckedNodes:S,getHalfCheckedKeys:$,getHalfCheckedNodes:k,setChecked:T,setCheckedKeys:O,filter:L,setData:B}),{t:n,ns:o,flattenTree:s,itemSize:26,isNotEmpty:l,toggleExpand:r,toggleCheckbox:p,isExpanded:a,isIndeterminate:i,isChecked:u,isDisabled:c,isCurrent:d,isForceHiddenExpandIcon:f,handleNodeClick:h,handleNodeCheck:g}}});function HJ(e,t,n,o,s,l){var r;const a=le("el-tree-node"),i=le("fixed-size-list");return C(),M("div",{class:_([e.ns.b(),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[e.isNotEmpty?(C(),x(i,{key:0,"class-name":e.ns.b("virtual-list"),data:e.flattenTree,total:e.flattenTree.length,height:e.height,"item-size":e.itemSize,"perf-mode":e.perfMode},{default:j(({data:u,index:c,style:d})=>[(C(),x(a,{key:u[c].key,style:De(d),node:u[c],expanded:e.isExpanded(u[c]),"show-checkbox":e.showCheckbox,checked:e.isChecked(u[c]),indeterminate:e.isIndeterminate(u[c]),disabled:e.isDisabled(u[c]),current:e.isCurrent(u[c]),"hidden-expand-icon":e.isForceHiddenExpandIcon(u[c]),onClick:e.handleNodeClick,onToggle:e.toggleExpand,onCheck:e.handleNodeCheck},null,8,["style","node","expanded","show-checkbox","checked","indeterminate","disabled","current","hidden-expand-icon","onClick","onToggle","onCheck"]))]),_:1},8,["class-name","data","total","height","item-size","perf-mode"])):(C(),M("div",{key:1,class:_(e.ns.e("empty-block"))},[D("span",{class:_(e.ns.e("empty-text"))},he((r=e.emptyText)!=null?r:e.t("el.tree.emptyText")),3)],2))],2)}var zJ=ge(FJ,[["render",HJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree-v2/src/tree.vue"]]);const KJ=ot(zJ),WJ="ElUpload";class jJ extends Error{constructor(t,n,o,s){super(t),this.name="UploadAjaxError",this.status=n,this.method=o,this.url=s}}function Rg(e,t,n){let o;return n.response?o=`${n.response.error||n.response}`:n.responseText?o=`${n.responseText}`:o=`fail to ${t.method} ${e} ${n.status}`,new jJ(o,n.status,t.method,e)}function YJ(e){const t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}const UJ=e=>{typeof XMLHttpRequest=="undefined"&&Kt(WJ,"XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",l=>{const r=l;r.percent=l.total>0?l.loaded/l.total*100:0,e.onProgress(r)});const o=new FormData;if(e.data)for(const[l,r]of Object.entries(e.data))Array.isArray(r)?o.append(l,...r):o.append(l,r);o.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(Rg(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(Rg(n,e,t));e.onSuccess(YJ(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const s=e.headers||{};if(s instanceof Headers)s.forEach((l,r)=>t.setRequestHeader(r,l));else for(const[l,r]of Object.entries(s))xf(r)||t.setRequestHeader(l,String(r));return t.send(o),t},HC=["text","picture","picture-card"];let qJ=1;const zC=()=>Date.now()+qJ++,KC=Ve({action:{type:String,required:!0},headers:{type:$e(Object)},method:{type:String,default:"post"},data:{type:Object,default:()=>Pt({})},multiple:{type:Boolean,default:!1},name:{type:String,default:"file"},drag:{type:Boolean,default:!1},withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},type:{type:String,default:"select"},fileList:{type:$e(Array),default:()=>Pt([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:HC,default:"text"},httpRequest:{type:$e(Function),default:UJ},disabled:Boolean,limit:Number}),GJ=Ve(Te(ne({},KC),{beforeUpload:{type:$e(Function),default:wt},beforeRemove:{type:$e(Function)},onRemove:{type:$e(Function),default:wt},onChange:{type:$e(Function),default:wt},onPreview:{type:$e(Function),default:wt},onSuccess:{type:$e(Function),default:wt},onProgress:{type:$e(Function),default:wt},onError:{type:$e(Function),default:wt},onExceed:{type:$e(Function),default:wt}})),XJ=Ve({files:{type:$e(Array),default:()=>Pt([])},disabled:{type:Boolean,default:!1},handlePreview:{type:$e(Function),default:wt},listType:{type:String,values:HC,default:"text"}}),JJ={remove:e=>!!e},ZJ=["onKeydown"],QJ=["src"],xJ=["onClick"],eZ=["onClick"],tZ=["onClick"],nZ={name:"ElUploadList"},oZ=te(Te(ne({},nZ),{props:XJ,emits:JJ,setup(e,{emit:t}){const n=e,{t:o}=kt(),s=we("upload"),l=we("icon"),r=we("list"),a=A(!1),i=d=>{n.handlePreview(d)},u=d=>{d.target.focus()},c=d=>{t("remove",d)};return(d,f)=>(C(),x(DT,{tag:"ul",class:_([b(s).b("list"),b(s).bm("list",d.listType),b(s).is("disabled",d.disabled)]),name:b(r).b()},{default:j(()=>[(C(!0),M(Le,null,rt(d.files,p=>(C(),M("li",{key:p.uid||p.name,class:_([b(s).be("list","item"),b(s).is(p.status),{focusing:a.value}]),tabindex:"0",onKeydown:lt(h=>!d.disabled&&c(p),["delete"]),onFocus:f[0]||(f[0]=h=>a.value=!0),onBlur:f[1]||(f[1]=h=>a.value=!1),onClick:u},[ie(d.$slots,"default",{file:p},()=>[d.listType==="picture"||p.status!=="uploading"&&d.listType==="picture-card"?(C(),M("img",{key:0,class:_(b(s).be("list","item-thumbnail")),src:p.url,alt:""},null,10,QJ)):G("v-if",!0),d.listType!=="picture"&&(p.status==="uploading"||d.listType!=="picture-card")?(C(),M("div",{key:1,class:_(b(s).be("list","item-info"))},[D("a",{class:_(b(s).be("list","item-name")),onClick:h=>i(p)},[Y(b(je),{class:_(b(l).m("document"))},{default:j(()=>[Y(b(xD))]),_:1},8,["class"]),it(" "+he(p.name),1)],10,xJ),p.status==="uploading"?(C(),x(b(eC),{key:0,type:d.listType==="picture-card"?"circle":"line","stroke-width":d.listType==="picture-card"?6:2,percentage:Number(p.percentage),style:De(d.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):G("v-if",!0)],2)):G("v-if",!0),D("label",{class:_(b(s).be("list","item-status-label"))},[d.listType==="text"?(C(),x(b(je),{key:0,class:_([b(l).m("upload-success"),b(l).m("circle-check")])},{default:j(()=>[Y(b(Zi))]),_:1},8,["class"])):["picture-card","picture"].includes(d.listType)?(C(),x(b(je),{key:1,class:_([b(l).m("upload-success"),b(l).m("check")])},{default:j(()=>[Y(b(Jl))]),_:1},8,["class"])):G("v-if",!0)],2),d.disabled?G("v-if",!0):(C(),x(b(je),{key:2,class:_(b(l).m("close")),onClick:h=>c(p)},{default:j(()=>[Y(b(Yn))]),_:2},1032,["class","onClick"])),G(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),G(" This is a bug which needs to be fixed "),G(" TODO: Fix the incorrect navigation interaction "),d.disabled?G("v-if",!0):(C(),M("i",{key:3,class:_(b(l).m("close-tip"))},he(b(o)("el.upload.deleteTip")),3)),d.listType==="picture-card"?(C(),M("span",{key:4,class:_(b(s).be("list","item-actions"))},[D("span",{class:_(b(s).be("list","item-preview")),onClick:h=>d.handlePreview(p)},[Y(b(je),{class:_(b(l).m("zoom-in"))},{default:j(()=>[Y(b(B0))]),_:1},8,["class"])],10,eZ),d.disabled?G("v-if",!0):(C(),M("span",{key:0,class:_(b(s).be("list","item-delete")),onClick:h=>c(p)},[Y(b(je),{class:_(b(l).m("delete"))},{default:j(()=>[Y(b(qD))]),_:1},8,["class"])],10,tZ))],2)):G("v-if",!0)])],42,ZJ))),128)),ie(d.$slots,"append")]),_:3},8,["class","name"]))}}));var Bg=ge(oZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload-list.vue"]]);const sZ=Ve({disabled:{type:Boolean,default:!1}}),lZ={file:e=>Xe(e)},rZ=["onDrop","onDragover"],aZ={name:"ElUploadDrag"},iZ=te(Te(ne({},aZ),{props:sZ,emits:lZ,setup(e,{emit:t}){const n=e,o="ElUploadDrag",s=Ne(t1);s||Kt(o,"usage: ");const l=we("upload"),r=A(!1),a=u=>{if(n.disabled)return;r.value=!1;const c=Array.from(u.dataTransfer.files),d=s.accept.value;if(!d){t("file",c);return}const f=c.filter(p=>{const{type:h,name:g}=p,m=g.includes(".")?`.${g.split(".").pop()}`:"",v=h.replace(/\/.*$/,"");return d.split(",").map(y=>y.trim()).filter(y=>y).some(y=>y.startsWith(".")?m===y:/\/\*$/.test(y)?v===y.replace(/\/\*$/,""):/^[^/]+\/[^/]+$/.test(y)?h===y:!1)});t("file",f)},i=()=>{n.disabled||(r.value=!0)};return(u,c)=>(C(),M("div",{class:_([b(l).b("dragger"),b(l).is("dragover",r.value)]),onDrop:Ke(a,["prevent"]),onDragover:Ke(i,["prevent"]),onDragleave:c[0]||(c[0]=Ke(d=>r.value=!1,["prevent"]))},[ie(u.$slots,"default")],42,rZ))}}));var uZ=ge(iZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload-dragger.vue"]]);const cZ=Ve(Te(ne({},KC),{fileList:{type:$e(Array),default:()=>Pt([])},beforeUpload:{type:$e(Function),default:wt},onRemove:{type:$e(Function),default:wt},onStart:{type:$e(Function),default:wt},onSuccess:{type:$e(Function),default:wt},onProgress:{type:$e(Function),default:wt},onError:{type:$e(Function),default:wt},onExceed:{type:$e(Function),default:wt}})),dZ=["onKeydown"],fZ=["name","multiple","accept"],pZ={name:"ElUploadContent",inheritAttrs:!1},hZ=te(Te(ne({},pZ),{props:cZ,setup(e,{expose:t}){const n=e,o=we("upload"),s=jt({}),l=jt(),r=p=>{if(p.length===0)return;const{autoUpload:h,limit:g,fileList:m,multiple:v,onStart:y,onExceed:w}=n;if(g&&m.length+p.length>g){w(p,m);return}v||(p=p.slice(0,1));for(const S of p){const $=S;$.uid=zC(),y($),h&&a($)}},a=async p=>{if(l.value.value="",!n.beforeUpload)return i(p);let h;try{h=await n.beforeUpload(p)}catch{h=!1}if(h===!1){n.onRemove(p);return}let g=p;if(h instanceof Blob){h instanceof File?g=h:g=new File([h],p.name,{type:p.type});for(const m of Object.keys(p))g[m]=p[m]}i(p)},i=p=>{const{headers:h,data:g,method:m,withCredentials:v,name:y,action:w,onProgress:S,onSuccess:$,onError:k,httpRequest:T}=n,{uid:O}=p,L={headers:h||{},withCredentials:v,file:p,data:g,method:m,filename:y,action:w,onProgress:V=>{S(V,p)},onSuccess:V=>{$(V,p),delete s.value[O]},onError:V=>{k(V,p),delete s.value[O]}},B=T(L);s.value[O]=B,B instanceof Promise&&B.then(L.onSuccess,L.onError)},u=p=>{const h=p.target.files;!h||r(Array.from(h))},c=()=>{n.disabled||(l.value.value="",l.value.click())},d=()=>{c()};return t({abort:p=>{xI(s.value).filter(p?([g])=>String(p.uid)===g:()=>!0).forEach(([g,m])=>{m instanceof XMLHttpRequest&&m.abort(),delete s.value[g]})},upload:a}),(p,h)=>(C(),M("div",{class:_([b(o).b(),b(o).m(p.listType)]),tabindex:"0",onClick:c,onKeydown:lt(Ke(d,["self"]),["enter","space"])},[p.drag?(C(),x(uZ,{key:0,disabled:p.disabled,onFile:r},{default:j(()=>[ie(p.$slots,"default")]),_:3},8,["disabled"])):ie(p.$slots,"default",{key:1}),D("input",{ref_key:"inputRef",ref:l,class:_(b(o).e("input")),name:p.name,multiple:p.multiple,accept:p.accept,type:"file",onChange:u},null,42,fZ)],42,dZ))}}));var Vg=ge(hZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload-content.vue"]]);const Bc="ElUpload",mZ=e=>{var t;(t=e.url)!=null&&t.startsWith("blob:")&&URL.revokeObjectURL(e.url)},vZ=(e,t)=>{const n=A([]),o=f=>n.value.find(p=>p.uid===f.uid);function s(f){var p;(p=t.value)==null||p.abort(f)}function l(f=["ready","uploading","success","fail"]){n.value=n.value.filter(p=>!f.includes(p.status))}const r=(f,p)=>{const h=o(p);!h||(h.status="fail",n.value.splice(n.value.indexOf(h),1),e.onError(f,h,n.value),e.onChange(h,n.value))},a=(f,p)=>{const h=o(p);!h||(e.onProgress(f,h,n.value),h.status="uploading",h.percentage=Math.round(f.percent))},i=(f,p)=>{const h=o(p);!h||(h.status="success",h.response=f,e.onSuccess(f,h,n.value),e.onChange(h,n.value))},u=f=>{const p={name:f.name,percentage:0,status:"ready",size:f.size,raw:f,uid:f.uid};if(e.listType==="picture-card"||e.listType==="picture")try{p.url=URL.createObjectURL(f)}catch(h){h.message,e.onError(h,p,n.value)}n.value.push(p),e.onChange(p,n.value)},c=async(f,p)=>{p&&Ma({scope:Bc,from:"handleRemove second argument",version:"2.2",replacement:"first argument `file`",ref:"https://element-plus.org/en-US/component/upload.html#methods"},!0);const h=p||f,g=h instanceof File?o(h):h;g||Kt(Bc,"file to be removed not found");const m=v=>{s(v);const y=n.value;y.splice(y.indexOf(v),1),e.onRemove(v,y),mZ(v)};e.beforeRemove?await e.beforeRemove(g,n.value)!==!1&&m(g):m(g)};function d(){n.value.filter(({status:f})=>f==="ready").forEach(({raw:f})=>{var p;return f&&((p=t.value)==null?void 0:p.upload(f))})}return pe(()=>e.listType,f=>{f!=="picture-card"&&f!=="picture"||(n.value=n.value.map(p=>{const{raw:h,url:g}=p;if(!g&&h)try{p.url=URL.createObjectURL(h)}catch(m){e.onError(m,p,n.value)}return p}))}),pe(()=>e.fileList,f=>{for(const p of f)p.uid||(p.uid=zC()),p.status||(p.status="success");n.value=f},{immediate:!0,deep:!0}),{abort:s,clearFiles:l,handleError:r,handleProgress:a,handleStart:u,handleSuccess:i,handleRemove:c,submit:d,uploadFiles:n}},gZ={name:"ElUpload"},bZ=te(Te(ne({},gZ),{props:GJ,setup(e,{expose:t}){const n=e,o=_a(),s=hl(),l=jt(),{abort:r,submit:a,clearFiles:i,uploadFiles:u,handleStart:c,handleError:d,handleRemove:f,handleSuccess:p,handleProgress:h}=vZ(n,l),g=E(()=>n.listType==="picture-card"),m=E(()=>Te(ne({},n),{onStart:c,onProgress:h,onSuccess:p,onError:d,onRemove:f}));return _t(()=>{u.value.forEach(({url:v})=>{v!=null&&v.startsWith("blob:")&&URL.revokeObjectURL(v)})}),st(t1,{accept:Yt(n,"accept")}),t({abort:r,submit:a,clearFiles:i,handleStart:c,handleRemove:f}),(v,y)=>(C(),M("div",null,[b(g)&&v.showFileList?(C(),x(Bg,{key:0,disabled:b(s),"list-type":v.listType,files:b(u),"handle-preview":v.onPreview,onRemove:b(f)},fs({append:j(()=>[v.listType==="picture-card"?(C(),x(Vg,Et({key:0,ref_key:"uploadRef",ref:l},b(m)),{default:j(()=>[b(o).trigger?ie(v.$slots,"trigger",{key:0}):G("v-if",!0),!b(o).trigger&&b(o).default?ie(v.$slots,"default",{key:1}):G("v-if",!0)]),_:3},16)):G("v-if",!0)]),_:2},[v.$slots.file?{name:"default",fn:j(({file:w})=>[ie(v.$slots,"file",{file:w})])}:void 0]),1032,["disabled","list-type","files","handle-preview","onRemove"])):G("v-if",!0),v.listType!=="picture-card"?(C(),x(Vg,Et({key:1,ref_key:"uploadRef",ref:l},b(m)),{default:j(()=>[b(o).trigger?ie(v.$slots,"trigger",{key:0}):G("v-if",!0),!b(o).trigger&&b(o).default?ie(v.$slots,"default",{key:1}):G("v-if",!0)]),_:3},16)):G("v-if",!0),v.$slots.trigger?ie(v.$slots,"default",{key:2}):G("v-if",!0),ie(v.$slots,"tip"),!b(g)&&v.showFileList?(C(),x(Bg,{key:3,disabled:b(s),"list-type":v.listType,files:b(u),"handle-preview":v.onPreview,onRemove:b(f)},fs({_:2},[v.$slots.file?{name:"default",fn:j(({file:w})=>[ie(v.$slots,"file",{file:w})])}:void 0]),1032,["disabled","list-type","files","handle-preview","onRemove"])):G("v-if",!0)]))}}));var yZ=ge(bZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload.vue"]]);const wZ=ot(yZ);var CZ=[v6,T6,YR,QR,lB,A1,bB,yB,Kn,D1,AV,DV,YV,UV,iF,q5,hF,ao,f5,sw,gF,IF,DF,EF,rH,uH,CH,$H,kH,SH,EH,o9,c9,d9,k9,A9,V9,RK,BK,VK,$7,fW,pW,je,TW,Yw,Zn,Uw,FW,rj,aj,ij,hj,pY,bY,EY,_1,eC,cw,N5,A5,WY,GY,ZY,Uo,ll,eu,Wj,WU,ZU,QU,vq,kq,Nq,Mq,Kq,qG,GG,iX,uX,ju,pV,mX,wX,CX,mn,WX,oJ,gJ,kJ,KJ,wZ];const eo="ElInfiniteScroll",$Z=50,kZ=200,SZ=0,EZ={delay:{type:Number,default:kZ},distance:{type:Number,default:SZ},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Fp=(e,t)=>Object.entries(EZ).reduce((n,[o,s])=>{var l,r;const{type:a,default:i}=s,u=e.getAttribute(`infinite-scroll-${o}`);let c=(r=(l=t[u])!=null?l:u)!=null?r:i;return c=c==="false"?!1:c,c=a(c),n[o]=Number.isNaN(c)?i:c,n},{}),WC=e=>{const{observer:t}=e[eo];t&&(t.disconnect(),delete e[eo].observer)},_Z=(e,t)=>{const{container:n,containerEl:o,instance:s,observer:l,lastScrollTop:r}=e[eo],{disabled:a,distance:i}=Fp(e,s),{clientHeight:u,scrollHeight:c,scrollTop:d}=o,f=d-r;if(e[eo].lastScrollTop=d,l||a||f<0)return;let p=!1;if(n===e)p=c-(u+d)<=i;else{const{clientTop:h,scrollHeight:g}=e,m=XI(e,o);p=d+u>=m+h+g-i}p&&t.call(s)};function Vc(e,t){const{containerEl:n,instance:o}=e[eo],{disabled:s}=Fp(e,o);s||n.clientHeight===0||(n.scrollHeight<=n.clientHeight?t.call(o):WC(e))}const TZ={async mounted(e,t){const{instance:n,value:o}=t;et(o)||Kt(eo,"'v-infinite-scroll' binding value must be a function"),await ze();const{delay:s,immediate:l}=Fp(e,n),r=tp(e,!0),a=r===window?document.documentElement:r,i=qs(_Z.bind(null,e,o),s);if(!!r){if(e[eo]={instance:n,container:r,containerEl:a,delay:s,cb:o,onScroll:i,lastScrollTop:a.scrollTop},l){const u=new MutationObserver(qs(Vc.bind(null,e,o),$Z));e[eo].observer=u,u.observe(e,{childList:!0,subtree:!0}),Vc(e,o)}r.addEventListener("scroll",i)}},unmounted(e){const{container:t,onScroll:n}=e[eo];t==null||t.removeEventListener("scroll",n),WC(e)},async updated(e){e[eo]||await ze();const{containerEl:t,cb:n,observer:o}=e[eo];t.clientHeight&&o&&Vc(e,n)}},Gd=TZ;Gd.install=e=>{e.directive("InfiniteScroll",Gd)};const AZ=Gd;function NZ(e){let t;const n=A(!1),o=yt(Te(ne({},e),{originalPosition:"",originalOverflow:"",visible:!1}));function s(d){o.text=d}function l(){const d=o.parent;if(!d.vLoadingAddClassList){let f=d.getAttribute("loading-number");f=Number.parseInt(f)-1,f?d.setAttribute("loading-number",f.toString()):(fn(d,"el-loading-parent--relative"),d.removeAttribute("loading-number")),fn(d,"el-loading-parent--hidden")}r()}function r(){var d,f;(f=(d=c.$el)==null?void 0:d.parentNode)==null||f.removeChild(c.$el)}function a(){var d;if(e.beforeClose&&!e.beforeClose())return;const f=o.parent;f.vLoadingAddClassList=void 0,n.value=!0,clearTimeout(t),t=window.setTimeout(()=>{n.value&&(n.value=!1,l())},400),o.visible=!1,(d=e.closed)==null||d.call(e)}function i(){!n.value||(n.value=!1,l())}const c=Qy({name:"ElLoading",setup(){return()=>{const d=o.spinner||o.svg,f=Pe("svg",ne({class:"circular",viewBox:o.svgViewBox?o.svgViewBox:"25 25 50 50"},d?{innerHTML:d}:{}),[Pe("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none"})]),p=o.text?Pe("p",{class:"el-loading-text"},[o.text]):void 0;return Pe(zt,{name:"el-loading-fade",onAfterLeave:i},{default:j(()=>[Ge(Y("div",{style:{backgroundColor:o.background||""},class:["el-loading-mask",o.customClass,o.fullscreen?"is-fullscreen":""]},[Pe("div",{class:"el-loading-spinner"},[f,p])]),[[pt,o.visible]])])})}}}).mount(document.createElement("div"));return Te(ne({},Ut(o)),{setText:s,remvoeElLoadingChild:r,close:a,handleAfterLeave:i,vm:c,get $el(){return c.$el}})}let _r;const Xd=function(e={}){if(!ct)return;const t=MZ(e);t.fullscreen&&_r&&(_r.remvoeElLoadingChild(),_r.close());const n=NZ(Te(ne({},t),{closed:()=>{var s;(s=t.closed)==null||s.call(t),t.fullscreen&&(_r=void 0)}}));OZ(t,t.parent,n),Fg(t,t.parent,n),t.parent.vLoadingAddClassList=()=>Fg(t,t.parent,n);let o=t.parent.getAttribute("loading-number");return o?o=`${Number.parseInt(o)+1}`:o="1",t.parent.setAttribute("loading-number",o),t.parent.appendChild(n.$el),ze(()=>n.visible.value=t.visible),t.fullscreen&&(_r=n),n},MZ=e=>{var t,n,o,s;let l;return Qe(e.target)?l=(t=document.querySelector(e.target))!=null?t:document.body:l=e.target||document.body,{parent:l===document.body||e.body?document.body:l,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:l===document.body&&((n=e.fullscreen)!=null?n:!0),lock:(o=e.lock)!=null?o:!1,customClass:e.customClass||"",visible:(s=e.visible)!=null?s:!0,target:l}},OZ=async(e,t,n)=>{const{nextZIndex:o}=jo(),s={};if(e.fullscreen)n.originalPosition.value=bo(document.body,"position"),n.originalOverflow.value=bo(document.body,"overflow"),s.zIndex=o();else if(e.parent===document.body){n.originalPosition.value=bo(document.body,"position"),await ze();for(const l of["top","left"]){const r=l==="top"?"scrollTop":"scrollLeft";s[l]=`${e.target.getBoundingClientRect()[l]+document.body[r]+document.documentElement[r]-Number.parseInt(bo(document.body,`margin-${l}`),10)}px`}for(const l of["height","width"])s[l]=`${e.target.getBoundingClientRect()[l]}px`}else n.originalPosition.value=bo(t,"position");for(const[l,r]of Object.entries(s))n.$el.style[l]=r},Fg=(e,t,n)=>{n.originalPosition.value!=="absolute"&&n.originalPosition.value!=="fixed"?wo(t,"el-loading-parent--relative"):fn(t,"el-loading-parent--relative"),e.fullscreen&&e.lock?wo(t,"el-loading-parent--hidden"):fn(t,"el-loading-parent--hidden")},Jd=Symbol("ElLoading"),Hg=(e,t)=>{var n,o,s,l;const r=t.instance,a=f=>dt(t.value)?t.value[f]:void 0,i=f=>{const p=Qe(f)&&(r==null?void 0:r[f])||f;return p&&A(p)},u=f=>i(a(f)||e.getAttribute(`element-loading-${vs(f)}`)),c=(n=a("fullscreen"))!=null?n:t.modifiers.fullscreen,d={text:u("text"),svg:u("svg"),svgViewBox:u("svgViewBox"),spinner:u("spinner"),background:u("background"),customClass:u("customClass"),fullscreen:c,target:(o=a("target"))!=null?o:c?void 0:e,body:(s=a("body"))!=null?s:t.modifiers.body,lock:(l=a("lock"))!=null?l:t.modifiers.lock};e[Jd]={options:d,instance:Xd(d)}},IZ=(e,t)=>{for(const n of Object.keys(t))Lt(t[n])&&(t[n].value=e[n])},zg={mounted(e,t){t.value&&Hg(e,t)},updated(e,t){const n=e[Jd];t.oldValue!==t.value&&(t.value&&!t.oldValue?Hg(e,t):t.value&&t.oldValue?dt(t.value)&&IZ(t.value,n.options):n==null||n.instance.close())},unmounted(e){var t;(t=e[Jd])==null||t.instance.close()}},DZ={install(e){e.directive("loading",zg),e.config.globalProperties.$loading=Xd},directive:zg,service:Xd},jC=["success","info","warning","error"],PZ=Ve({customClass:{type:String,default:""},center:{type:Boolean,default:!1},dangerouslyUseHTMLString:{type:Boolean,default:!1},duration:{type:Number,default:3e3},icon:{type:nn,default:""},id:{type:String,default:""},message:{type:$e([String,Object,Function]),default:""},onClose:{type:$e(Function),required:!1},showClose:{type:Boolean,default:!1},type:{type:String,values:jC,default:"info"},offset:{type:Number,default:20},zIndex:{type:Number,default:0},grouping:{type:Boolean,default:!1},repeatNum:{type:Number,default:1}}),LZ={destroy:()=>!0},RZ=te({name:"ElMessage",components:ne({ElBadge:A1,ElIcon:je},Ru),props:PZ,emits:LZ,setup(e){const t=we("message"),n=A(!1),o=A(e.type?e.type==="error"?"danger":e.type:"info");let s;const l=E(()=>{const f=e.type;return{[t.bm("icon",f)]:f&&Ho[f]}}),r=E(()=>e.icon||Ho[e.type]||""),a=E(()=>({top:`${e.offset}px`,zIndex:e.zIndex}));function i(){e.duration>0&&({stop:s}=ol(()=>{n.value&&c()},e.duration))}function u(){s==null||s()}function c(){n.value=!1}function d({code:f}){f===Ie.esc?n.value&&c():i()}return xe(()=>{i(),n.value=!0}),pe(()=>e.repeatNum,()=>{u(),i()}),Ht(document,"keydown",d),{ns:t,typeClass:l,iconComponent:r,customStyle:a,visible:n,badgeType:o,close:c,clearTimer:u,startTimer:i}}}),BZ=["id"],VZ=["innerHTML"];function FZ(e,t,n,o,s,l){const r=le("el-badge"),a=le("el-icon"),i=le("close");return C(),x(zt,{name:e.ns.b("fade"),onBeforeLeave:e.onClose,onAfterLeave:t[2]||(t[2]=u=>e.$emit("destroy"))},{default:j(()=>[Ge(D("div",{id:e.id,class:_([e.ns.b(),{[e.ns.m(e.type)]:e.type&&!e.icon},e.ns.is("center",e.center),e.ns.is("closable",e.showClose),e.customClass]),style:De(e.customStyle),role:"alert",onMouseenter:t[0]||(t[0]=(...u)=>e.clearTimer&&e.clearTimer(...u)),onMouseleave:t[1]||(t[1]=(...u)=>e.startTimer&&e.startTimer(...u))},[e.repeatNum>1?(C(),x(r,{key:0,value:e.repeatNum,type:e.badgeType,class:_(e.ns.e("badge"))},null,8,["value","type","class"])):G("v-if",!0),e.iconComponent?(C(),x(a,{key:1,class:_([e.ns.e("icon"),e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(C(),M(Le,{key:1},[G(" Caution here, message could've been compromised, never use user's input as message "),D("p",{class:_(e.ns.e("content")),innerHTML:e.message},null,10,VZ)],2112)):(C(),M("p",{key:0,class:_(e.ns.e("content"))},he(e.message),3))]),e.showClose?(C(),x(a,{key:2,class:_(e.ns.e("closeBtn")),onClick:Ke(e.close,["stop"])},{default:j(()=>[Y(i)]),_:1},8,["class","onClick"])):G("v-if",!0)],46,BZ),[[pt,e.visible]])]),_:3},8,["name","onBeforeLeave"])}var HZ=ge(RZ,[["render",FZ],["__file","/home/runner/work/element-plus/element-plus/packages/components/message/src/message.vue"]]);const bn=[];let zZ=1;const tr=function(e={},t){if(!ct)return{close:()=>{}};if(ht(Id.max)&&bn.length>=Id.max)return{close:()=>{}};if(!Ft(e)&&dt(e)&&e.grouping&&!Ft(e.message)&&bn.length){const d=bn.find(f=>{var p,h,g;return`${(h=(p=f.vm.props)==null?void 0:p.message)!=null?h:""}`==`${(g=e.message)!=null?g:""}`});if(d)return d.vm.component.props.repeatNum+=1,d.vm.component.props.type=(e==null?void 0:e.type)||"info",{close:()=>c.component.proxy.visible=!1}}(Qe(e)||Ft(e))&&(e={message:e});let n=e.offset||20;bn.forEach(({vm:d})=>{var f;n+=(((f=d.el)==null?void 0:f.offsetHeight)||0)+16}),n+=16;const{nextZIndex:o}=jo(),s=`message_${zZ++}`,l=e.onClose,r=Te(ne({zIndex:o()},e),{offset:n,id:s,onClose:()=>{KZ(s,l)}});let a=document.body;sl(e.appendTo)?a=e.appendTo:Qe(e.appendTo)&&(a=document.querySelector(e.appendTo)),sl(a)||(a=document.body);const i=document.createElement("div");i.className=`container_${s}`;const u=r.message,c=Y(HZ,r,et(u)?{default:u}:Ft(u)?{default:()=>u}:null);return c.appContext=t||tr._context,c.props.onDestroy=()=>{Gl(null,i)},Gl(c,i),bn.push({vm:c}),a.appendChild(i.firstElementChild),{close:()=>c.component.proxy.visible=!1}};jC.forEach(e=>{tr[e]=(t={},n)=>((Qe(t)||Ft(t))&&(t={message:t}),tr(Te(ne({},t),{type:e}),n))});function KZ(e,t){const n=bn.findIndex(({vm:r})=>e===r.component.props.id);if(n===-1)return;const{vm:o}=bn[n];if(!o)return;t==null||t(o);const s=o.el.offsetHeight;bn.splice(n,1);const l=bn.length;if(!(l<1))for(let r=n;r=0;t--){const n=bn[t].vm.component;(e=n==null?void 0:n.proxy)==null||e.close()}}tr.closeAll=WZ;tr._context=null;const jZ=F0(tr,"$message"),YZ=te({name:"ElMessageBox",directives:{TrapFocus:H1},components:ne({ElButton:Kn,ElInput:Zn,ElOverlay:wp,ElIcon:je},Ru),inheritAttrs:!1,props:{buttonSize:{type:String,validator:On},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,roundButton:{default:!1,type:Boolean},container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{t:n}=kt(),o=A(!1),{nextZIndex:s}=jo(),l=yt({beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:null,inputValidator:null,inputErrorMessage:"",message:null,modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:s()}),r=E(()=>{const O=l.type;return O&&Ho[O]?`el-message-box-icon--${O}`:""}),a=Wt(E(()=>e.buttonSize),{prop:!0,form:!0,formItem:!0}),i=E(()=>l.icon||Ho[l.type]||""),u=E(()=>!!l.message),c=A(),d=A(),f=A(),p=A(),h=E(()=>l.confirmButtonClass);pe(()=>l.inputValue,async O=>{await ze(),e.boxType==="prompt"&&O!==null&&$()},{immediate:!0}),pe(()=>o.value,O=>{O&&((e.boxType==="alert"||e.boxType==="confirm")&&ze().then(()=>{var L,B,V;(V=(B=(L=p.value)==null?void 0:L.$el)==null?void 0:B.focus)==null||V.call(B)}),l.zIndex=s()),e.boxType==="prompt"&&(O?ze().then(()=>{f.value&&f.value.$el&&k().focus()}):(l.editorErrorMessage="",l.validateError=!1))});const g=E(()=>e.draggable);r1(c,d,g),xe(async()=>{await ze(),e.closeOnHashChange&&Tt(window,"hashchange",m)}),_t(()=>{e.closeOnHashChange&&Vt(window,"hashchange",m)});function m(){!o.value||(o.value=!1,ze(()=>{l.action&&t("action",l.action)}))}const v=()=>{e.closeOnClickModal&&S(l.distinguishCancelAndClose?"close":"cancel")},y=ip(v),w=O=>{if(l.inputType!=="textarea")return O.preventDefault(),S("confirm")},S=O=>{var L;e.boxType==="prompt"&&O==="confirm"&&!$()||(l.action=O,l.beforeClose?(L=l.beforeClose)==null||L.call(l,O,l,m):m())},$=()=>{if(e.boxType==="prompt"){const O=l.inputPattern;if(O&&!O.test(l.inputValue||""))return l.editorErrorMessage=l.inputErrorMessage||n("el.messagebox.error"),l.validateError=!0,!1;const L=l.inputValidator;if(typeof L=="function"){const B=L(l.inputValue);if(B===!1)return l.editorErrorMessage=l.inputErrorMessage||n("el.messagebox.error"),l.validateError=!0,!1;if(typeof B=="string")return l.editorErrorMessage=B,l.validateError=!0,!1}}return l.editorErrorMessage="",l.validateError=!1,!0},k=()=>{const O=f.value.$refs;return O.input||O.textarea},T=()=>{S("close")};return e.closeOnPressEscape?i1({handleClose:T},o):D8(o,"keydown",O=>O.code===Ie.esc),e.lockScroll&&a1(o),u1(o),Te(ne({},Ut(l)),{overlayEvent:y,visible:o,hasMessage:u,typeClass:r,btnSize:a,iconComponent:i,confirmButtonClasses:h,rootRef:c,headerRef:d,inputRef:f,confirmRef:p,doClose:m,handleClose:T,handleWrapperClick:v,handleInputEnter:w,handleAction:S,t:n})}}),UZ=["aria-label"],qZ={key:0,ref:"headerRef",class:"el-message-box__header"},GZ={class:"el-message-box__title"},XZ={class:"el-message-box__content"},JZ={class:"el-message-box__container"},ZZ={key:1,class:"el-message-box__message"},QZ={key:0},xZ=["innerHTML"],eQ={class:"el-message-box__input"},tQ={class:"el-message-box__btns"};function nQ(e,t,n,o,s,l){const r=le("el-icon"),a=le("close"),i=le("el-input"),u=le("el-button"),c=le("el-overlay"),d=Mn("trap-focus");return C(),x(zt,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=f=>e.$emit("vanish"))},{default:j(()=>[Ge(Y(c,{"z-index":e.zIndex,"overlay-class":["is-message-box",e.modalClass],mask:e.modal},{default:j(()=>[D("div",{class:"el-overlay-message-box",onClick:t[8]||(t[8]=(...f)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...f)),onMousedown:t[9]||(t[9]=(...f)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...f)),onMouseup:t[10]||(t[10]=(...f)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...f))},[Ge((C(),M("div",{ref:"rootRef",role:"dialog","aria-label":e.title||"dialog","aria-modal":"true",class:_(["el-message-box",e.customClass,{"el-message-box--center":e.center,"is-draggable":e.draggable}]),style:De(e.customStyle),onClick:t[7]||(t[7]=Ke(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(C(),M("div",qZ,[D("div",GZ,[e.iconComponent&&e.center?(C(),x(r,{key:0,class:_(["el-message-box__status",e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),D("span",null,he(e.title),1)]),e.showClose?(C(),M("button",{key:0,type:"button",class:"el-message-box__headerbtn","aria-label":"Close",onClick:t[0]||(t[0]=f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=lt(Ke(f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[Y(r,{class:"el-message-box__close"},{default:j(()=>[Y(a)]),_:1})],32)):G("v-if",!0)],512)):G("v-if",!0),D("div",XZ,[D("div",JZ,[e.iconComponent&&!e.center&&e.hasMessage?(C(),x(r,{key:0,class:_(["el-message-box__status",e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),e.hasMessage?(C(),M("div",ZZ,[ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(C(),M("p",{key:1,innerHTML:e.message},null,8,xZ)):(C(),M("p",QZ,he(e.message),1))])])):G("v-if",!0)]),Ge(D("div",eQ,[Y(i,{ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=f=>e.inputValue=f),type:e.inputType,placeholder:e.inputPlaceholder,class:_({invalid:e.validateError}),onKeydown:lt(e.handleInputEnter,["enter"])},null,8,["modelValue","type","placeholder","class","onKeydown"]),D("div",{class:"el-message-box__errormsg",style:De({visibility:e.editorErrorMessage?"visible":"hidden"})},he(e.editorErrorMessage),5)],512),[[pt,e.showInput]])]),D("div",tQ,[e.showCancelButton?(C(),x(u,{key:0,loading:e.cancelButtonLoading,class:_([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=f=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=lt(Ke(f=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:j(()=>[it(he(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["loading","class","round","size"])):G("v-if",!0),Ge(Y(u,{ref:"confirmRef",type:"primary",loading:e.confirmButtonLoading,class:_([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=f=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=lt(Ke(f=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:j(()=>[it(he(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["loading","class","round","disabled","size"]),[[pt,e.showConfirmButton]])])],14,UZ)),[[d]])],32)]),_:3},8,["z-index","overlay-class","mask"]),[[pt,e.visible]])]),_:3})}var oQ=ge(YZ,[["render",nQ],["__file","/home/runner/work/element-plus/element-plus/packages/components/message-box/src/index.vue"]]);const ha=new Map,sQ=(e,t,n=null)=>{const o=Pe(oQ,e);return o.appContext=n,Gl(o,t),document.body.appendChild(t.firstElementChild),o.component},lQ=()=>document.createElement("div"),rQ=(e,t)=>{const n=lQ();e.onVanish=()=>{Gl(null,n),ha.delete(s)},e.onAction=l=>{const r=ha.get(s);let a;e.showInput?a={value:s.inputValue,action:l}:a=l,e.callback?e.callback(a,o.proxy):l==="cancel"||l==="close"?e.distinguishCancelAndClose&&l!=="cancel"?r.reject("close"):r.reject("cancel"):r.resolve(a)};const o=sQ(e,n,t),s=o.proxy;for(const l in e)at(e,l)&&!at(s.$props,l)&&(s[l]=e[l]);return pe(()=>s.message,(l,r)=>{Ft(l)?o.slots.default=()=>[l]:Ft(r)&&!Ft(l)&&delete o.slots.default},{immediate:!0}),s.visible=!0,s};function hr(e,t=null){if(!ct)return Promise.reject();let n;return Qe(e)||Ft(e)?e={message:e}:n=e.callback,new Promise((o,s)=>{const l=rQ(e,t!=null?t:hr._context);ha.set(l,{options:e,callback:n,resolve:o,reject:s})})}const aQ=["alert","confirm","prompt"],iQ={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};aQ.forEach(e=>{hr[e]=uQ(e)});function uQ(e){return(t,n,o,s)=>{let l;return dt(n)?(o=n,l=""):Cn(n)?l="":l=n,hr(Object.assign(ne({title:l,message:t,type:""},iQ[e]),o,{boxType:e}),s)}}hr.close=()=>{ha.forEach((e,t)=>{t.doClose()}),ha.clear()};hr._context=null;const es=hr;es.install=e=>{es._context=e._context,e.config.globalProperties.$msgbox=es,e.config.globalProperties.$messageBox=es,e.config.globalProperties.$alert=es.alert,e.config.globalProperties.$confirm=es.confirm,e.config.globalProperties.$prompt=es.prompt};const cQ=es,YC=["success","info","warning","error"],dQ=Ve({customClass:{type:String,default:""},dangerouslyUseHTMLString:{type:Boolean,default:!1},duration:{type:Number,default:4500},icon:{type:$e([String,Object]),default:""},id:{type:String,default:""},message:{type:$e([String,Object]),default:""},offset:{type:Number,default:0},onClick:{type:$e(Function),default:()=>{}},onClose:{type:$e(Function),required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...YC,""],default:""},zIndex:{type:Number,default:0}}),fQ={destroy:()=>!0},pQ=te({name:"ElNotification",components:ne({ElIcon:je},Ru),props:dQ,emits:fQ,setup(e){const t=we("notification"),n=A(!1);let o;const s=E(()=>{const p=e.type;return p&&Ho[e.type]?t.m(p):""}),l=E(()=>Ho[e.type]||e.icon||""),r=E(()=>e.position.endsWith("right")?"right":"left"),a=E(()=>e.position.startsWith("top")?"top":"bottom"),i=E(()=>({[a.value]:`${e.offset}px`,zIndex:e.zIndex}));function u(){e.duration>0&&({stop:o}=ol(()=>{n.value&&d()},e.duration))}function c(){o==null||o()}function d(){n.value=!1}function f({code:p}){p===Ie.delete||p===Ie.backspace?c():p===Ie.esc?n.value&&d():u()}return xe(()=>{u(),n.value=!0}),Ht(document,"keydown",f),{ns:t,horizontalClass:r,typeClass:s,iconComponent:l,positionStyle:i,visible:n,close:d,clearTimer:c,startTimer:u}}}),hQ=["id"],mQ=["textContent"],vQ={key:0},gQ=["innerHTML"];function bQ(e,t,n,o,s,l){const r=le("el-icon"),a=le("close");return C(),x(zt,{name:e.ns.b("fade"),onBeforeLeave:e.onClose,onAfterLeave:t[3]||(t[3]=i=>e.$emit("destroy"))},{default:j(()=>[Ge(D("div",{id:e.id,class:_([e.ns.b(),e.customClass,e.horizontalClass]),style:De(e.positionStyle),role:"alert",onMouseenter:t[0]||(t[0]=(...i)=>e.clearTimer&&e.clearTimer(...i)),onMouseleave:t[1]||(t[1]=(...i)=>e.startTimer&&e.startTimer(...i)),onClick:t[2]||(t[2]=(...i)=>e.onClick&&e.onClick(...i))},[e.iconComponent?(C(),x(r,{key:0,class:_([e.ns.e("icon"),e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),D("div",{class:_(e.ns.e("group"))},[D("h2",{class:_(e.ns.e("title")),textContent:he(e.title)},null,10,mQ),Ge(D("div",{class:_(e.ns.e("content")),style:De(e.title?void 0:{margin:0})},[ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(C(),M(Le,{key:1},[G(" Caution here, message could've been compromized, nerver use user's input as message "),G(" eslint-disable-next-line "),D("p",{innerHTML:e.message},null,8,gQ)],2112)):(C(),M("p",vQ,he(e.message),1))])],6),[[pt,e.message]]),e.showClose?(C(),x(r,{key:0,class:_(e.ns.e("closeBtn")),onClick:Ke(e.close,["stop"])},{default:j(()=>[Y(a)]),_:1},8,["class","onClick"])):G("v-if",!0)],2)],46,hQ),[[pt,e.visible]])]),_:3},8,["name","onBeforeLeave"])}var yQ=ge(pQ,[["render",bQ],["__file","/home/runner/work/element-plus/element-plus/packages/components/notification/src/notification.vue"]]);const ru={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]},Zd=16;let wQ=1;const nr=function(e={},t=null){if(!ct)return{close:()=>{}};(typeof e=="string"||Ft(e))&&(e={message:e});const n=e.position||"top-right";let o=e.offset||0;ru[n].forEach(({vm:d})=>{var f;o+=(((f=d.el)==null?void 0:f.offsetHeight)||0)+Zd}),o+=Zd;const{nextZIndex:s}=jo(),l=`notification_${wQ++}`,r=e.onClose,a=Te(ne({zIndex:s(),offset:o},e),{id:l,onClose:()=>{CQ(l,n,r)}});let i=document.body;sl(e.appendTo)?i=e.appendTo:Qe(e.appendTo)&&(i=document.querySelector(e.appendTo)),sl(i)||(i=document.body);const u=document.createElement("div"),c=Y(yQ,a,Ft(a.message)?{default:()=>a.message}:null);return c.appContext=t!=null?t:nr._context,c.props.onDestroy=()=>{Gl(null,u)},Gl(c,u),ru[n].push({vm:c}),i.appendChild(u.firstElementChild),{close:()=>{c.component.proxy.visible=!1}}};YC.forEach(e=>{nr[e]=(t={})=>((typeof t=="string"||Ft(t))&&(t={message:t}),nr(Te(ne({},t),{type:e})))});function CQ(e,t,n){const o=ru[t],s=o.findIndex(({vm:u})=>{var c;return((c=u.component)==null?void 0:c.props.id)===e});if(s===-1)return;const{vm:l}=o[s];if(!l)return;n==null||n(l);const r=l.el.offsetHeight,a=t.split("-")[0];o.splice(s,1);const i=o.length;if(!(i<1))for(let u=s;u{t.component.proxy.visible=!1})}nr.closeAll=$Q;nr._context=null;const kQ=F0(nr,"$notify");var SQ=[AZ,DZ,jZ,cQ,kQ,_Y],EQ=c6([...CZ,...SQ]),UC={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});var t={name:"zh-tw",el:{colorpicker:{confirm:"\u78BA\u8A8D",clear:"\u6E05\u7A7A"},datepicker:{now:"\u73FE\u5728",today:"\u4ECA\u5929",cancel:"\u53D6\u6D88",clear:"\u6E05\u7A7A",confirm:"\u78BA\u8A8D",selectDate:"\u9078\u64C7\u65E5\u671F",selectTime:"\u9078\u64C7\u6642\u9593",startDate:"\u958B\u59CB\u65E5\u671F",startTime:"\u958B\u59CB\u6642\u9593",endDate:"\u7D50\u675F\u65E5\u671F",endTime:"\u7D50\u675F\u6642\u9593",prevYear:"\u524D\u4E00\u5E74",nextYear:"\u5F8C\u4E00\u5E74",prevMonth:"\u4E0A\u500B\u6708",nextMonth:"\u4E0B\u500B\u6708",year:"\u5E74",month1:"1 \u6708",month2:"2 \u6708",month3:"3 \u6708",month4:"4 \u6708",month5:"5 \u6708",month6:"6 \u6708",month7:"7 \u6708",month8:"8 \u6708",month9:"9 \u6708",month10:"10 \u6708",month11:"11 \u6708",month12:"12 \u6708",weeks:{sun:"\u65E5",mon:"\u4E00",tue:"\u4E8C",wed:"\u4E09",thu:"\u56DB",fri:"\u4E94",sat:"\u516D"},months:{jan:"\u4E00\u6708",feb:"\u4E8C\u6708",mar:"\u4E09\u6708",apr:"\u56DB\u6708",may:"\u4E94\u6708",jun:"\u516D\u6708",jul:"\u4E03\u6708",aug:"\u516B\u6708",sep:"\u4E5D\u6708",oct:"\u5341\u6708",nov:"\u5341\u4E00\u6708",dec:"\u5341\u4E8C\u6708"}},select:{loading:"\u52A0\u8F09\u4E2D",noMatch:"\u7121\u5339\u914D\u8CC7\u6599",noData:"\u7121\u8CC7\u6599",placeholder:"\u8ACB\u9078\u64C7"},cascader:{noMatch:"\u7121\u5339\u914D\u8CC7\u6599",loading:"\u52A0\u8F09\u4E2D",placeholder:"\u8ACB\u9078\u64C7",noData:"\u7121\u8CC7\u6599"},pagination:{goto:"\u524D\u5F80",pagesize:"\u9805/\u9801",total:"\u5171 {total} \u9805",pageClassifier:"\u9801"},messagebox:{title:"\u63D0\u793A",confirm:"\u78BA\u5B9A",cancel:"\u53D6\u6D88",error:"\u8F38\u5165\u7684\u8CC7\u6599\u4E0D\u7B26\u898F\u5B9A!"},upload:{deleteTip:"\u6309 delete \u9375\u53EF\u522A\u9664",delete:"\u522A\u9664",preview:"\u67E5\u770B\u5716\u7247",continue:"\u7E7C\u7E8C\u4E0A\u50B3"},table:{emptyText:"\u66AB\u7121\u8CC7\u6599",confirmFilter:"\u7BE9\u9078",resetFilter:"\u91CD\u7F6E",clearFilter:"\u5168\u90E8",sumText:"\u5408\u8A08"},tree:{emptyText:"\u66AB\u7121\u8CC7\u6599"},transfer:{noMatch:"\u7121\u5339\u914D\u8CC7\u6599",noData:"\u7121\u8CC7\u6599",titles:["\u5217\u8868 1","\u5217\u8868 2"],filterPlaceholder:"\u8ACB\u8F38\u5165\u641C\u7D22\u5167\u5BB9",noCheckedFormat:"\u5171 {total} \u9805",hasCheckedFormat:"\u5DF2\u9078 {checked}/{total} \u9805"},image:{error:"\u52A0\u8F09\u5931\u6557"},pageHeader:{title:"\u8FD4\u56DE"},popconfirm:{confirmButtonText:"\u78BA\u8A8D",cancelButtonText:"\u53D6\u6D88"}}};e.default=t})(UC);var _Q=KB(UC);class TQ{static Sleep(t){return new Promise(n=>setTimeout(n,t))}}class AQ{constructor(t){ys(this,"BJ_Casino");ys(this,"ID");ys(this,"_conn",null);ys(this,"_client");this._client=t,this.BJ_Casino=t.BJ_Casino,this.ID=t.ID,this.onLoad()}async onLoad(){await this.ConnectServer()}async ConnectServer(){let n=this.BJ_Casino.Config.ServerList[this.ID];if(!n)return;const o=n.name,s=n.host,l=n.port;this._client.Name.value=o,this._client.Host.value=s,this._client.Port.value=l,await this.ConnectAsync(s,+l)}async ConnectAsync(t,n){let o=this;var s="https://api.ipify.org/?format=json",l=new XMLHttpRequest;let r="";for(l.onreadystatechange=function(){l.readyState===4&&l.status>=200&&l.status<400&&(r=JSON.parse(l.responseText).ip)},l.open("GET",s,!0),l.send(),console.log("[\u4E8B\u4EF6]\u6E96\u5099\u9023\u7DDA...");r==="";)await TQ.Sleep(1);let a="",i="";t.indexOf("https://")!=-1?(a="https",t=t.replace("https://","")):(a=window.location.href.substring(0,5),t=t.replace("http://","")),console.log("[\u4E8B\u4EF6]checkHttp=",a,t,n),a!="https"?i=`ws://${t}:${n}/?ip=${r}`:i=`wss://${t}:${n}/?ip=${r}`;let c=new WebSocket(i);c.onopen=function(d){console.log(`[\u4E8B\u4EF6] [${o._client.Name.value}] \u9023\u7DDA\u72C0\u614B: true`),o._client.IsConnect.value="true"},c.onmessage=function(d){},c.onclose=function(d){},c.onerror=function(d){o._client.IsConnect.value="\u7121\u56DE\u61C9"}}}const NQ=te({props:{BJ_Casino:null,ID:null},setup(e){const t=e;let n=A(""),o=A(""),s=A(""),l=A("false");const r={ID:t.ID,BJ_Casino:t.BJ_Casino,Name:n,Host:o,Port:s,IsConnect:l};return new AQ(r),(a,i)=>{const u=le("font");return C(),M("tr",null,[D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(n)),1)]),_:1})]),D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(o)),1)]),_:1})]),D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(s)),1)]),_:1})]),D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(l)),1)]),_:1})])])}}}),MQ=[{name:"\u5167\u7248",host:"http://220.134.195.1",port:"19005"},{name:"\u8089\u4E7E 9006",host:"http://192.168.5.230",port:"9006"},{name:"\u8089\u4E7E 9007",host:"http://192.168.5.230",port:"9007"},{name:"40 9487",host:"http://192.168.5.12",port:"9487"},{name:"\u9001\u5BE9",host:"https://submit.online-bj.com",port:"9005"},{name:"\u5916\u7248",host:"https://game.online-bj.com",port:"9005"},{name:"testing1",host:"http://bj-testing1.casino.catan.com.tw",port:"9005"},{name:"testing2",host:"http://bj-testing2.casino.catan.com.tw",port:"9005"},{name:"testing3",host:"http://bj-testing3.casino.catan.com.tw",port:"9005"}];var OQ={ServerList:MQ};String.IsNullOrEmpty=function(e){return e==null||e.trim()===""};String.Format=function(e,...t){return e.replace(/{(\d+)}/g,(n,o)=>{let s=t[o];return s==null?"":""+s})};class IQ{constructor(t){ys(this,"Client");ys(this,"Config");this.Client=t,this.onLoad()}async onLoad(){this.Config=OQ}}const DQ={class:"d-flex justify-content-center"},PQ={class:"table table-striped table-info table-hover"},LQ=D("thead",null,[D("tr",null,[D("th",{align:"left"},"\u540D\u7A31"),D("th",{align:"left"},"Host"),D("th",{align:"left"},"Port"),D("th",{align:"left"},"\u72C0\u614B")])],-1),RQ=te({setup(e){const t={};let n=A("BJ_ServerState");const o=new IQ(t);return(s,l)=>(C(),M(Le,null,[D("h1",null,he(b(n)),1),D("div",DQ,[D("table",PQ,[LQ,(C(!0),M(Le,null,rt(b(o).Config.ServerList,(r,a)=>(C(),M("tbody",{key:a},[Y(NQ,{BJ_Casino:b(o),ID:a},null,8,["BJ_Casino","ID"])]))),128))])])],64))}});Qy(RQ).use(EQ,{locale:_Q}).mount("#app")});export default BQ(); + */var Wq=/["'&<>]/,jq=Yq;function Yq(e){var t=""+e,n=Wq.exec(t);if(!n)return t;var o,s="",l=0,r=0;for(l=n.index;ltypeof u=="string"?It(a,u):u(a,i,e))):(t!=="$key"&&Tg(a)&&"$value"in a&&(a=a.$value),[Tg(a)?It(a,t):a])},r=function(a,i){if(o)return o(a.value,i.value);for(let u=0,c=a.key.length;ui.key[u])return 1}return 0};return e.map((a,i)=>({value:a,index:i,key:l?l(a,i):null})).sort((a,i)=>{let u=r(a,i);return u||(u=a.index-i.index),u*+n}).map(a=>a.value)},mC=function(e,t){let n=null;return e.columns.forEach(o=>{o.id===t&&(n=o)}),n},qq=function(e,t){let n=null;for(let o=0;o{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let o=e;for(const s of n)o=o[s];return`${o}`}else if(typeof t=="function")return t.call(null,e)},zs=function(e,t){const n={};return(e||[]).forEach((o,s)=>{n[Qt(o,t)]={row:o,index:s}}),n};function Gq(e,t){const n={};let o;for(o in e)n[o]=e[o];for(o in t)if(at(t,o)){const s=t[o];typeof s!="undefined"&&(n[o]=s)}return n}function Np(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function vC(e){return e===""||e!==void 0&&(e=Np(e),Number.isNaN(e)&&(e=80)),e}function Wd(e){return typeof e=="number"?e:typeof e=="string"?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function Xq(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...o)=>t(n(...o)))}function Ai(e,t,n){let o=!1;const s=e.indexOf(t),l=s!==-1,r=()=>{e.push(t),o=!0},a=()=>{e.splice(s,1),o=!0};return typeof n=="boolean"?n&&!l?r():!n&&l&&a():l?a():r(),o}function Jq(e,t,n="children",o="hasChildren"){const s=r=>!(Array.isArray(r)&&r.length);function l(r,a,i){t(r,a,i),a.forEach(u=>{if(u[o]){t(u,null,i+1);return}const c=u[n];s(c)||l(u,c,i+1)})}e.forEach(r=>{if(r[o]){t(r,null,0);return}const a=r[n];s(a)||l(r,a,0)})}let su;function Zq(e,t,n,o){const{nextZIndex:s}=jo();function l(){const d=o==="light",f=document.createElement("div");return f.className=`el-popper ${d?"is-light":"is-dark"}`,t=jq(t),f.innerHTML=t,f.style.zIndex=String(s()),document.body.appendChild(f),f}function r(){const d=document.createElement("div");return d.className="el-popper__arrow",d}function a(){i&&i.update()}su=function d(){try{i&&i.destroy(),u&&document.body.removeChild(u),Vt(e,"mouseenter",a),Vt(e,"mouseleave",d)}catch{}};let i=null;const u=l(),c=r();return u.appendChild(c),i=va(e,u,ne({modifiers:[{name:"offset",options:{offset:[0,8]}},{name:"arrow",options:{element:c,padding:10}}]},n)),Tt(e,"mouseenter",a),Tt(e,"mouseleave",su),i}const gC=(e,t,n,o)=>{let s=0,l=e;if(o){if(o[e].colSpan>1)return{};for(let i=0;i=a.value.length-n.states.rightFixedLeafColumnsLength.value&&(r="right");break;default:l=a.value.length-n.states.rightFixedLeafColumnsLength.value&&(r="right")}return r?{direction:r,start:s,after:l}:{}},Mp=(e,t,n,o,s)=>{const l=[],{direction:r,start:a}=gC(t,n,o,s);if(r){const i=r==="left";l.push(`${e}-fixed-column--${r}`),i&&a===o.states.fixedLeafColumnsLength.value-1?l.push("is-last-column"):!i&&a===o.states.columns.value.length-o.states.rightFixedLeafColumnsLength.value&&l.push("is-first-column")}return l};function Ng(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Op=(e,t,n,o)=>{const{direction:s,start:l=0}=gC(e,t,n,o);if(!s)return;const r={},a=s==="left",i=n.states.columns.value;return a?r.left=i.slice(0,e).reduce(Ng,0):r.right=i.slice(l+1).reverse().reduce(Ng,0),r},er=(e,t)=>{!e||Number.isNaN(e[t])||(e[t]=`${e[t]}px`)};function Qq(e){const t=nt(),n=A(!1),o=A([]);return{updateExpandRows:()=>{const i=e.data.value||[],u=e.rowKey.value;if(n.value)o.value=i.slice();else if(u){const c=zs(o.value,u);o.value=i.reduce((d,f)=>{const p=Qt(f,u);return c[p]&&d.push(f),d},[])}else o.value=[]},toggleRowExpansion:(i,u)=>{Ai(o.value,i,u)&&t.emit("expand-change",i,o.value.slice())},setExpandRowKeys:i=>{t.store.assertRowKey();const u=e.data.value||[],c=e.rowKey.value,d=zs(u,c);o.value=i.reduce((f,p)=>{const h=d[p];return h&&f.push(h.row),f},[])},isRowExpanded:i=>{const u=e.rowKey.value;return u?!!zs(o.value,u)[Qt(i,u)]:o.value.includes(i)},states:{expandRows:o,defaultExpandAll:n}}}function xq(e){const t=nt(),n=A(null),o=A(null),s=u=>{t.store.assertRowKey(),n.value=u,r(u)},l=()=>{n.value=null},r=u=>{const{data:c,rowKey:d}=e;let f=null;d.value&&(f=(b(c)||[]).find(p=>Qt(p,d.value)===u)),o.value=f,t.emit("current-change",o.value,null)};return{setCurrentRowKey:s,restoreCurrentRowKey:l,setCurrentRowByKey:r,updateCurrentRow:u=>{const c=o.value;if(u&&u!==c){o.value=u,t.emit("current-change",o.value,c);return}!u&&c&&(o.value=null,t.emit("current-change",null,c))},updateCurrentRowData:()=>{const u=e.rowKey.value,c=e.data.value||[],d=o.value;if(!c.includes(d)&&d){if(u){const f=Qt(d,u);r(f)}else o.value=null;o.value===null&&t.emit("current-change",null,d)}else n.value&&(r(n.value),l())},states:{_currentRowKey:n,currentRow:o}}}function eG(e){const t=A([]),n=A({}),o=A(16),s=A(!1),l=A({}),r=A("hasChildren"),a=A("children"),i=nt(),u=E(()=>{if(!e.rowKey.value)return{};const v=e.data.value||[];return d(v)}),c=E(()=>{const v=e.rowKey.value,y=Object.keys(l.value),w={};return y.length&&y.forEach(S=>{if(l.value[S].length){const $={children:[]};l.value[S].forEach(k=>{const T=Qt(k,v);$.children.push(T),k[r.value]&&!w[T]&&(w[T]={children:[]})}),w[S]=$}}),w}),d=v=>{const y=e.rowKey.value,w={};return Jq(v,(S,$,k)=>{const T=Qt(S,y);Array.isArray($)?w[T]={children:$.map(O=>Qt(O,y)),level:k}:s.value&&(w[T]={children:[],lazy:!0,level:k})},a.value,r.value),w},f=(v=!1,y=(w=>(w=i.store)==null?void 0:w.states.defaultExpandAll.value)())=>{var w;const S=u.value,$=c.value,k=Object.keys(S),T={};if(k.length){const O=b(n),L=[],B=(H,R)=>{if(v)return t.value?y||t.value.includes(R):!!(y||(H==null?void 0:H.expanded));{const z=y||t.value&&t.value.includes(R);return!!((H==null?void 0:H.expanded)||z)}};k.forEach(H=>{const R=O[H],z=ne({},S[H]);if(z.expanded=B(R,H),z.lazy){const{loaded:W=!1,loading:P=!1}=R||{};z.loaded=!!W,z.loading=!!P,L.push(H)}T[H]=z});const V=Object.keys($);s.value&&V.length&&L.length&&V.forEach(H=>{const R=O[H],z=$[H].children;if(L.includes(H)){if(T[H].children.length!==0)throw new Error("[ElTable]children must be an empty array.");T[H].children=z}else{const{loaded:W=!1,loading:P=!1}=R||{};T[H]={lazy:!0,loaded:!!W,loading:!!P,expanded:B(R,H),children:z,level:""}}})}n.value=T,(w=i.store)==null||w.updateTableScrollY()};pe(()=>t.value,()=>{f(!0)}),pe(()=>u.value,()=>{f()}),pe(()=>c.value,()=>{f()});const p=v=>{t.value=v,f()},h=(v,y)=>{i.store.assertRowKey();const w=e.rowKey.value,S=Qt(v,w),$=S&&n.value[S];if(S&&$&&"expanded"in $){const k=$.expanded;y=typeof y=="undefined"?!$.expanded:y,n.value[S].expanded=y,k!==y&&i.emit("expand-change",v,y),i.store.updateTableScrollY()}},g=v=>{i.store.assertRowKey();const y=e.rowKey.value,w=Qt(v,y),S=n.value[w];s.value&&S&&"loaded"in S&&!S.loaded?m(v,w,S):h(v,void 0)},m=(v,y,w)=>{const{load:S}=i.props;S&&!n.value[y].loaded&&(n.value[y].loading=!0,S(v,w,$=>{if(!Array.isArray($))throw new TypeError("[ElTable] data must be an array");n.value[y].loading=!1,n.value[y].loaded=!0,n.value[y].expanded=!0,$.length&&(l.value[y]=$),i.emit("expand-change",v,!0)}))};return{loadData:m,loadOrToggle:g,toggleTreeExpansion:h,updateTreeExpandKeys:p,updateTreeData:f,normalize:d,states:{expandRowKeys:t,treeData:n,indent:o,lazy:s,lazyTreeNodeMap:l,lazyColumnIdentifier:r,childrenColumnName:a}}}const tG=(e,t)=>{const n=t.sortingColumn;return!n||typeof n.sortable=="string"?e:Uq(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy)},Ni=e=>{const t=[];return e.forEach(n=>{n.children?t.push.apply(t,Ni(n.children)):t.push(n)}),t};function nG(){var e;const t=nt(),{size:n}=Ut((e=t.proxy)==null?void 0:e.$props),o=A(null),s=A([]),l=A([]),r=A(!1),a=A([]),i=A([]),u=A([]),c=A([]),d=A([]),f=A([]),p=A([]),h=A([]),g=A(0),m=A(0),v=A(0),y=A(!1),w=A([]),S=A(!1),$=A(!1),k=A(null),T=A({}),O=A(null),L=A(null),B=A(null),V=A(null),H=A(null);pe(s,()=>t.state&&W(!1),{deep:!0});const R=()=>{if(!o.value)throw new Error("[ElTable] prop row-key is required")},z=()=>{c.value=a.value.filter(Ae=>Ae.fixed===!0||Ae.fixed==="left"),d.value=a.value.filter(Ae=>Ae.fixed==="right"),c.value.length>0&&a.value[0]&&a.value[0].type==="selection"&&!a.value[0].fixed&&(a.value[0].fixed=!0,c.value.unshift(a.value[0]));const He=a.value.filter(Ae=>!Ae.fixed);i.value=[].concat(c.value).concat(He).concat(d.value);const oe=Ni(He),me=Ni(c.value),ce=Ni(d.value);g.value=oe.length,m.value=me.length,v.value=ce.length,u.value=[].concat(me).concat(oe).concat(ce),r.value=c.value.length>0||d.value.length>0},W=(He,oe=!1)=>{He&&z(),oe?t.state.doLayout():t.state.debouncedUpdateLayout()},P=He=>w.value.includes(He),N=()=>{y.value=!1,w.value.length&&(w.value=[],t.emit("selection-change",[]))},I=()=>{let He;if(o.value){He=[];const oe=zs(w.value,o.value),me=zs(s.value,o.value);for(const ce in oe)at(oe,ce)&&!me[ce]&&He.push(oe[ce].row)}else He=w.value.filter(oe=>!s.value.includes(oe));if(He.length){const oe=w.value.filter(me=>!He.includes(me));w.value=oe,t.emit("selection-change",oe.slice())}},U=()=>(w.value||[]).slice(),q=(He,oe=void 0,me=!0)=>{if(Ai(w.value,He,oe)){const Ae=(w.value||[]).slice();me&&t.emit("select",Ae,He),t.emit("selection-change",Ae)}},Q=()=>{var He,oe;const me=$.value?!y.value:!(y.value||w.value.length);y.value=me;let ce=!1,Ae=0;const Ue=(oe=(He=t==null?void 0:t.store)==null?void 0:He.states)==null?void 0:oe.rowKey.value;s.value.forEach((mt,St)=>{const bt=St+Ae;k.value?k.value.call(null,mt,bt)&&Ai(w.value,mt,me)&&(ce=!0):Ai(w.value,mt,me)&&(ce=!0),Ae+=Ee(Qt(mt,Ue))}),ce&&t.emit("selection-change",w.value?w.value.slice():[]),t.emit("select-all",w.value)},J=()=>{const He=zs(w.value,o.value);s.value.forEach(oe=>{const me=Qt(oe,o.value),ce=He[me];ce&&(w.value[ce.index]=oe)})},ae=()=>{var He,oe,me;if(((He=s.value)==null?void 0:He.length)===0){y.value=!1;return}let ce;o.value&&(ce=zs(w.value,o.value));const Ae=function(bt){return ce?!!ce[Qt(bt,o.value)]:w.value.includes(bt)};let Ue=!0,mt=0,St=0;for(let bt=0,At=(s.value||[]).length;bt{var oe;if(!t||!t.store)return 0;const{treeData:me}=t.store.states;let ce=0;const Ae=(oe=me.value[He])==null?void 0:oe.children;return Ae&&(ce+=Ae.length,Ae.forEach(Ue=>{ce+=Ee(Ue)})),ce},Me=(He,oe)=>{Array.isArray(He)||(He=[He]);const me={};return He.forEach(ce=>{T.value[ce.id]=oe,me[ce.columnKey||ce.id]=oe}),me},Z=(He,oe,me)=>{L.value&&L.value!==He&&(L.value.order=null),L.value=He,B.value=oe,V.value=me},ve=()=>{let He=b(l);Object.keys(T.value).forEach(oe=>{const me=T.value[oe];if(!me||me.length===0)return;const ce=mC({columns:u.value},oe);ce&&ce.filterMethod&&(He=He.filter(Ae=>me.some(Ue=>ce.filterMethod.call(null,Ue,Ae,ce))))}),O.value=He},Ce=()=>{s.value=tG(O.value,{sortingColumn:L.value,sortProp:B.value,sortOrder:V.value})},ke=(He=void 0)=>{He&&He.filter||ve(),Ce()},Oe=He=>{const{tableHeaderRef:oe}=t.refs;if(!oe)return;const me=Object.assign({},oe.filterPanels),ce=Object.keys(me);if(!!ce.length)if(typeof He=="string"&&(He=[He]),Array.isArray(He)){const Ae=He.map(Ue=>qq({columns:u.value},Ue));ce.forEach(Ue=>{const mt=Ae.find(St=>St.id===Ue);mt&&(mt.filteredValue=[])}),t.store.commit("filterChange",{column:Ae,values:[],silent:!0,multi:!0})}else ce.forEach(Ae=>{const Ue=u.value.find(mt=>mt.id===Ae);Ue&&(Ue.filteredValue=[])}),T.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},We=()=>{!L.value||(Z(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:qe,toggleRowExpansion:K,updateExpandRows:X,states:fe,isRowExpanded:ye}=Qq({data:s,rowKey:o}),{updateTreeExpandKeys:be,toggleTreeExpansion:_e,updateTreeData:re,loadOrToggle:se,states:ee}=eG({data:s,rowKey:o}),{updateCurrentRowData:ue,updateCurrentRow:Re,setCurrentRowKey:F,states:de}=xq({data:s,rowKey:o});return{assertRowKey:R,updateColumns:z,scheduleLayout:W,isSelected:P,clearSelection:N,cleanSelection:I,getSelectionRows:U,toggleRowSelection:q,_toggleAllSelection:Q,toggleAllSelection:null,updateSelectionByRowKey:J,updateAllSelected:ae,updateFilters:Me,updateCurrentRow:Re,updateSort:Z,execFilter:ve,execSort:Ce,execQuery:ke,clearFilter:Oe,clearSort:We,toggleRowExpansion:K,setExpandRowKeysAdapter:He=>{qe(He),be(He)},setCurrentRowKey:F,toggleRowExpansionAdapter:(He,oe)=>{u.value.some(({type:ce})=>ce==="expand")?K(He,oe):_e(He,oe)},isRowExpanded:ye,updateExpandRows:X,updateCurrentRowData:ue,loadOrToggle:se,updateTreeData:re,states:ne(ne(ne({tableSize:n,rowKey:o,data:s,_data:l,isComplex:r,_columns:a,originColumns:i,columns:u,fixedColumns:c,rightFixedColumns:d,leafColumns:f,fixedLeafColumns:p,rightFixedLeafColumns:h,leafColumnsLength:g,fixedLeafColumnsLength:m,rightFixedLeafColumnsLength:v,isAllSelected:y,selection:w,reserveSelection:S,selectOnIndeterminate:$,selectable:k,filters:T,filteredData:O,sortingColumn:L,sortProp:B,sortOrder:V,hoverRow:H},fe),ee),de)}}function jd(e,t){return e.map(n=>{var o;return n.id===t.id?t:((o=n.children)!=null&&o.length&&(n.children=jd(n.children,t)),n)})}function bC(e){e.forEach(t=>{var n,o;t.no=(n=t.getColumnIndex)==null?void 0:n.call(t),(o=t.children)!=null&&o.length&&bC(t.children)}),e.sort((t,n)=>t.no-n.no)}function oG(){const e=nt(),t=nG(),n=we("table"),o={setData(r,a){const i=b(r._data)!==a;r.data.value=a,r._data.value=a,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),b(r.reserveSelection)?(e.store.assertRowKey(),e.store.updateSelectionByRowKey()):i?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(r,a,i){const u=b(r._columns);let c=[];i?(i&&!i.children&&(i.children=[]),i.children.push(a),c=jd(u,i)):(u.push(a),c=u),bC(c),r._columns.value=c,a.type==="selection"&&(r.selectable.value=a.selectable,r.reserveSelection.value=a.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},removeColumn(r,a,i){const u=b(r._columns)||[];if(i)i.children.splice(i.children.findIndex(c=>c.id===a.id),1),i.children.length===0&&delete i.children,r._columns.value=jd(u,i);else{const c=u.indexOf(a);c>-1&&(u.splice(c,1),r._columns.value=u)}e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(r,a){const{prop:i,order:u,init:c}=a;if(i){const d=b(r.columns).find(f=>f.property===i);d&&(d.order=u,e.store.updateSort(d,i,u),e.store.commit("changeSortCondition",{init:c}))}},changeSortCondition(r,a){const{sortingColumn:i,sortProp:u,sortOrder:c}=r;b(c)===null&&(r.sortingColumn.value=null,r.sortProp.value=null);const d={filter:!0};e.store.execQuery(d),(!a||!(a.silent||a.init))&&e.emit("sort-change",{column:b(i),prop:b(u),order:b(c)}),e.store.updateTableScrollY()},filterChange(r,a){const{column:i,values:u,silent:c}=a,d=e.store.updateFilters(i,u);e.store.execQuery(),c||e.emit("filter-change",d),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection()},rowSelectedChanged(r,a){e.store.toggleRowSelection(a),e.store.updateAllSelected()},setHoverRow(r,a){r.hoverRow.value=a},setCurrentRow(r,a){e.store.updateCurrentRow(a)}},s=function(r,...a){const i=e.store.mutations;if(i[r])i[r].apply(e,[e.store.states].concat(a));else throw new Error(`Action not found: ${r}`)},l=function(){ze(()=>e.layout.updateScrollY.apply(e.layout))};return Te(ne({ns:n},t),{mutations:o,commit:s,updateTableScrollY:l})}const qr={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data",["treeProps.hasChildren"]:{key:"lazyColumnIdentifier",default:"hasChildren"},["treeProps.children"]:{key:"childrenColumnName",default:"children"}};function sG(e,t){if(!e)throw new Error("Table is required.");const n=oG();return n.toggleAllSelection=hn(n._toggleAllSelection,10),Object.keys(qr).forEach(o=>{yC(wC(t,o),o,n)}),lG(n,t),n}function lG(e,t){Object.keys(qr).forEach(n=>{pe(()=>wC(t,n),o=>{yC(o,n,e)})})}function yC(e,t,n){let o=e,s=qr[t];typeof qr[t]=="object"&&(s=s.key,o=o||qr[t].default),n.states[s].value=o}function wC(e,t){if(t.includes(".")){const n=t.split(".");let o=e;return n.forEach(s=>{o=o[s]}),o}else return e[t]}class rG{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=A(null),this.scrollX=A(!1),this.scrollY=A(!1),this.bodyWidth=A(null),this.fixedWidth=A(null),this.rightFixedWidth=A(null),this.tableHeight=A(null),this.headerHeight=A(44),this.appendHeight=A(0),this.footerHeight=A(44),this.viewportHeight=A(null),this.bodyHeight=A(null),this.bodyScrollHeight=A(0),this.fixedBodyHeight=A(null),this.gutterWidth=0;for(const n in t)at(t,n)&&(Lt(this[n])?this[n].value=t[n]:this[n]=t[n]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const n=this.table.refs.bodyWrapper;if(this.table.vnode.el&&n){let o=!0;const s=this.scrollY.value;return this.bodyHeight.value===null?o=!1:o=n.scrollHeight>this.bodyHeight.value,this.scrollY.value=o,s!==o}return!1}setHeight(t,n="height"){if(!ct)return;const o=this.table.vnode.el;if(t=Wd(t),this.height.value=Number(t),!o&&(t||t===0))return ze(()=>this.setHeight(t,n));typeof t=="number"?(o.style[n]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(o.style[n]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(o=>{o.isColumnGroup?t.push.apply(t,o.columns):t.push(o)}),t}updateElsHeight(){var t,n;if(!this.table.$ready)return ze(()=>this.updateElsHeight());const{tableWrapper:o,headerWrapper:s,appendWrapper:l,footerWrapper:r,tableHeader:a,tableBody:i}=this.table.refs;if(o&&o.style.display==="none")return;const{tableLayout:u}=this.table.props;if(this.appendHeight.value=l?l.offsetHeight:0,this.showHeader&&!s&&u==="fixed")return;const c=a||null,d=this.headerDisplayNone(c),f=(s==null?void 0:s.offsetHeight)||0,p=this.headerHeight.value=this.showHeader?f:0;if(this.showHeader&&!d&&f>0&&(this.table.store.states.columns.value||[]).length>0&&p<2)return ze(()=>this.updateElsHeight());const h=this.tableHeight.value=(n=(t=this.table)==null?void 0:t.vnode.el)==null?void 0:n.clientHeight,g=this.footerHeight.value=r?r.offsetHeight:0;this.height.value!==null&&(this.bodyHeight.value===null&&requestAnimationFrame(()=>this.updateElsHeight()),this.bodyHeight.value=h-p-g+(r?1:0),this.bodyScrollHeight.value=i==null?void 0:i.scrollHeight),this.fixedBodyHeight.value=this.scrollX.value?this.bodyHeight.value-this.gutterWidth:this.bodyHeight.value,this.viewportHeight.value=this.scrollX.value?h-this.gutterWidth:h,this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let n=t;for(;n.tagName!=="DIV";){if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}updateColumnsWidth(){if(!ct)return;const t=this.fit,n=this.table.vnode.el.clientWidth;let o=0;const s=this.getFlattenColumns(),l=s.filter(i=>typeof i.width!="number");if(s.forEach(i=>{typeof i.width=="number"&&i.realWidth&&(i.realWidth=null)}),l.length>0&&t){if(s.forEach(i=>{o+=Number(i.width||i.minWidth||80)}),o<=n){this.scrollX.value=!1;const i=n-o;if(l.length===1)l[0].realWidth=Number(l[0].minWidth||80)+i;else{const u=l.reduce((f,p)=>f+Number(p.minWidth||80),0),c=i/u;let d=0;l.forEach((f,p)=>{if(p===0)return;const h=Math.floor(Number(f.minWidth||80)*c);d+=h,f.realWidth=Number(f.minWidth||80)+h}),l[0].realWidth=Number(l[0].minWidth||80)+i-d}}else this.scrollX.value=!0,l.forEach(i=>{i.realWidth=Number(i.minWidth)});this.bodyWidth.value=Math.max(o,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else s.forEach(i=>{!i.width&&!i.minWidth?i.realWidth=80:i.realWidth=Number(i.width||i.minWidth),o+=i.realWidth}),this.scrollX.value=o>n,this.bodyWidth.value=o;const r=this.store.states.fixedColumns.value;if(r.length>0){let i=0;r.forEach(u=>{i+=Number(u.realWidth||u.width)}),this.fixedWidth.value=i}const a=this.store.states.rightFixedColumns.value;if(a.length>0){let i=0;a.forEach(u=>{i+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=i}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const n=this.observers.indexOf(t);n!==-1&&this.observers.splice(n,1)}notifyObservers(t){this.observers.forEach(o=>{var s,l;switch(t){case"columns":(s=o.state)==null||s.onColumnsChange(this);break;case"scrollable":(l=o.state)==null||l.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:aG}=ao,iG=te({name:"ElTableFilterPanel",components:{ElCheckbox:ao,ElCheckboxGroup:aG,ElScrollbar:Uo,ElTooltip:mn,ElIcon:je,ArrowDown:fl,ArrowUp:Aa},directives:{ClickOutside:ml},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=nt(),{t:n}=kt(),o=we("table-filter"),s=t==null?void 0:t.parent;s.filterPanels.value[e.column.id]||(s.filterPanels.value[e.column.id]=t);const l=A(!1),r=A(null),a=E(()=>e.column&&e.column.filters),i=E({get:()=>{var S;return(((S=e.column)==null?void 0:S.filteredValue)||[])[0]},set:S=>{u.value&&(typeof S!="undefined"&&S!==null?u.value.splice(0,1,S):u.value.splice(0,1))}}),u=E({get(){return e.column?e.column.filteredValue||[]:[]},set(S){e.column&&e.upDataColumn("filteredValue",S)}}),c=E(()=>e.column?e.column.filterMultiple:!0),d=S=>S.value===i.value,f=()=>{l.value=!1},p=S=>{S.stopPropagation(),l.value=!l.value},h=()=>{l.value=!1},g=()=>{y(u.value),f()},m=()=>{u.value=[],y(u.value),f()},v=S=>{i.value=S,y(typeof S!="undefined"&&S!==null?u.value:[]),f()},y=S=>{e.store.commit("filterChange",{column:e.column,values:S}),e.store.updateAllSelected()};pe(l,S=>{e.column&&e.upDataColumn("filterOpened",S)},{immediate:!0});const w=E(()=>{var S,$;return($=(S=r.value)==null?void 0:S.popperRef)==null?void 0:$.contentRef});return{tooltipVisible:l,multiple:c,filteredValue:u,filterValue:i,filters:a,handleConfirm:g,handleReset:m,handleSelect:v,isActive:d,t:n,ns:o,showFilterPanel:p,hideFilterPanel:h,popperPaneRef:w,tooltip:r}}}),uG={key:0},cG=["disabled"],dG=["label","onClick"];function fG(e,t,n,o,s,l){const r=le("el-checkbox"),a=le("el-checkbox-group"),i=le("el-scrollbar"),u=le("arrow-up"),c=le("arrow-down"),d=le("el-icon"),f=le("el-tooltip"),p=Mn("click-outside");return C(),x(f,{ref:"tooltip",visible:e.tooltipVisible,"onUpdate:visible":t[5]||(t[5]=h=>e.tooltipVisible=h),offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,"append-to-body":"",effect:"light",pure:"","popper-class":e.ns.b(),persistent:""},{content:j(()=>[e.multiple?(C(),M("div",uG,[D("div",{class:_(e.ns.e("content"))},[Y(i,{"wrap-class":e.ns.e("wrap")},{default:j(()=>[Y(a,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=h=>e.filteredValue=h),class:_(e.ns.e("checkbox-group"))},{default:j(()=>[(C(!0),M(Le,null,rt(e.filters,h=>(C(),x(r,{key:h.value,label:h.value},{default:j(()=>[it(he(h.text),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),D("div",{class:_(e.ns.e("bottom"))},[D("button",{class:_({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...h)=>e.handleConfirm&&e.handleConfirm(...h))},he(e.t("el.table.confirmFilter")),11,cG),D("button",{type:"button",onClick:t[2]||(t[2]=(...h)=>e.handleReset&&e.handleReset(...h))},he(e.t("el.table.resetFilter")),1)],2)])):(C(),M("ul",{key:1,class:_(e.ns.e("list"))},[D("li",{class:_([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=h=>e.handleSelect(null))},he(e.t("el.table.clearFilter")),3),(C(!0),M(Le,null,rt(e.filters,h=>(C(),M("li",{key:h.value,class:_([e.ns.e("list-item"),e.ns.is("active",e.isActive(h))]),label:h.value,onClick:g=>e.handleSelect(h.value)},he(h.text),11,dG))),128))],2))]),default:j(()=>[Ge((C(),M("span",{class:_([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...h)=>e.showFilterPanel&&e.showFilterPanel(...h))},[Y(d,null,{default:j(()=>[e.column.filterOpened?(C(),x(u,{key:0})):(C(),x(c,{key:1}))]),_:1})],2)),[[p,e.hideFilterPanel,e.popperPaneRef]])]),_:1},8,["visible","placement","popper-class"])}var pG=ge(iG,[["render",fG],["__file","/home/runner/work/element-plus/element-plus/packages/components/table/src/filter-panel.vue"]]);function CC(e){const t=nt();$a(()=>{n.value.addObserver(t)}),xe(()=>{o(n.value),s(n.value)}),Xn(()=>{o(n.value),s(n.value)}),ka(()=>{n.value.removeObserver(t)});const n=E(()=>{const l=e.layout;if(!l)throw new Error("Can not find table layout.");return l}),o=l=>{var r;const a=((r=e.vnode.el)==null?void 0:r.querySelectorAll("colgroup > col"))||[];if(!a.length)return;const i=l.getFlattenColumns(),u={};i.forEach(c=>{u[c.id]=c});for(let c=0,d=a.length;c{var r,a;const i=((r=e.vnode.el)==null?void 0:r.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let c=0,d=i.length;c{g.stopPropagation()},l=(g,m)=>{!m.filters&&m.sortable?h(g,m,!1):m.filterable&&!m.sortable&&s(g),o==null||o.emit("header-click",m,g)},r=(g,m)=>{o==null||o.emit("header-contextmenu",m,g)},a=A(null),i=A(!1),u=A({}),c=(g,m)=>{if(!!ct&&!(m.children&&m.children.length>0)&&a.value&&e.border){i.value=!0;const v=o;t("set-drag-visible",!0);const w=(v==null?void 0:v.vnode.el).getBoundingClientRect().left,S=n.vnode.el.querySelector(`th.${m.id}`),$=S.getBoundingClientRect(),k=$.left-w+30;wo(S,"noclick"),u.value={startMouseLeft:g.clientX,startLeft:$.right-w,startColumnLeft:$.left-w,tableLeft:w};const T=v==null?void 0:v.refs.resizeProxy;T.style.left=`${u.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const O=B=>{const V=B.clientX-u.value.startMouseLeft,H=u.value.startLeft+V;T.style.left=`${Math.max(k,H)}px`},L=()=>{if(i.value){const{startColumnLeft:B,startLeft:V}=u.value,R=Number.parseInt(T.style.left,10)-B;m.width=m.realWidth=R,v==null||v.emit("header-dragend",m.width,V-B,m,g),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",i.value=!1,a.value=null,u.value={},t("set-drag-visible",!1)}document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",L),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{fn(S,"noclick")},0)};document.addEventListener("mousemove",O),document.addEventListener("mouseup",L)}},d=(g,m)=>{if(m.children&&m.children.length>0)return;let v=g.target;for(;v&&v.tagName!=="TH";)v=v.parentNode;if(!(!m||!m.resizable)&&!i.value&&e.border){const y=v.getBoundingClientRect(),w=document.body.style;y.width>12&&y.right-g.pageX<8?(w.cursor="col-resize",oo(v,"is-sortable")&&(v.style.cursor="col-resize"),a.value=m):i.value||(w.cursor="",oo(v,"is-sortable")&&(v.style.cursor="pointer"),a.value=null)}},f=()=>{!ct||(document.body.style.cursor="")},p=({order:g,sortOrders:m})=>{if(g==="")return m[0];const v=m.indexOf(g||null);return m[v>m.length-2?0:v+1]},h=(g,m,v)=>{g.stopPropagation();const y=m.order===v?null:v||p(m);let w=g.target;for(;w&&w.tagName!=="TH";)w=w.parentNode;if(w&&w.tagName==="TH"&&oo(w,"noclick")){fn(w,"noclick");return}if(!m.sortable)return;const S=e.store.states;let $=S.sortProp.value,k;const T=S.sortingColumn.value;(T!==m||T===m&&T.order===null)&&(T&&(T.order=null),S.sortingColumn.value=m,$=m.property),y?k=m.order=y:k=m.order=null,S.sortProp.value=$,S.sortOrder.value=k,o==null||o.store.commit("changeSortCondition")};return{handleHeaderClick:l,handleHeaderContextMenu:r,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:h,handleFilterClick:s}}function mG(e){const t=Ne(_o),n=we("table");return{getHeaderRowStyle:a=>{const i=t==null?void 0:t.props.headerRowStyle;return typeof i=="function"?i.call(null,{rowIndex:a}):i},getHeaderRowClass:a=>{const i=[],u=t==null?void 0:t.props.headerRowClassName;return typeof u=="string"?i.push(u):typeof u=="function"&&i.push(u.call(null,{rowIndex:a})),i.join(" ")},getHeaderCellStyle:(a,i,u,c)=>{var d;let f=(d=t==null?void 0:t.props.headerCellStyle)!=null?d:{};typeof f=="function"&&(f=f.call(null,{rowIndex:a,columnIndex:i,row:u,column:c}));const p=c.isSubColumn?null:Op(i,c.fixed,e.store,u);return er(p,"left"),er(p,"right"),Object.assign({},f,p)},getHeaderCellClass:(a,i,u,c)=>{const d=c.isSubColumn?[]:Mp(n.b(),i,c.fixed,e.store,u),f=[c.id,c.order,c.headerAlign,c.className,c.labelClassName,...d];c.children||f.push("is-leaf"),c.sortable&&f.push("is-sortable");const p=t==null?void 0:t.props.headerCellClassName;return typeof p=="string"?f.push(p):typeof p=="function"&&f.push(p.call(null,{rowIndex:a,columnIndex:i,row:u,column:c})),f.push(n.e("cell")),f.filter(h=>Boolean(h)).join(" ")}}}const $C=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,$C(n.children))):t.push(n)}),t},vG=e=>{let t=1;const n=(l,r)=>{if(r&&(l.level=r.level+1,t{n(i,l),a+=i.colSpan}),l.colSpan=a}else l.colSpan=1};e.forEach(l=>{l.level=1,n(l,void 0)});const o=[];for(let l=0;l{l.children?(l.rowSpan=1,l.children.forEach(r=>r.isSubColumn=!0)):l.rowSpan=t-l.level+1,o[l.level-1].push(l)}),o};function gG(e){const t=Ne(_o),n=E(()=>vG(e.store.states.originColumns.value));return{isGroup:E(()=>{const l=n.value.length>1;return l&&t&&(t.state.isGroup.value=!0),l}),toggleAllSelection:l=>{l.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:n}}var bG=te({name:"ElTableHeader",components:{ElCheckbox:ao},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const n=nt(),o=Ne(_o),s=we("table"),l=A({}),{onColumnsChange:r,onScrollableChange:a}=CC(o);xe(async()=>{await ze(),await ze();const{prop:k,order:T}=e.defaultSort;o==null||o.store.commit("sort",{prop:k,order:T,init:!0})});const{handleHeaderClick:i,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:p,handleFilterClick:h}=hG(e,t),{getHeaderRowStyle:g,getHeaderRowClass:m,getHeaderCellStyle:v,getHeaderCellClass:y}=mG(e),{isGroup:w,toggleAllSelection:S,columnRows:$}=gG(e);return n.state={onColumnsChange:r,onScrollableChange:a},n.filterPanels=l,{ns:s,filterPanels:l,onColumnsChange:r,onScrollableChange:a,columnRows:$,getHeaderRowClass:m,getHeaderRowStyle:g,getHeaderCellClass:y,getHeaderCellStyle:v,handleHeaderClick:i,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:p,handleFilterClick:h,isGroup:w,toggleAllSelection:S}},render(){const{ns:e,isGroup:t,columnRows:n,getHeaderCellStyle:o,getHeaderCellClass:s,getHeaderRowClass:l,getHeaderRowStyle:r,handleHeaderClick:a,handleHeaderContextMenu:i,handleMouseDown:u,handleMouseMove:c,handleSortClick:d,handleMouseOut:f,store:p,$parent:h}=this;let g=1;return Pe("thead",{class:{[e.is("group")]:t}},n.map((m,v)=>Pe("tr",{class:l(v),key:v,style:r(v)},m.map((y,w)=>(y.rowSpan>g&&(g=y.rowSpan),Pe("th",{class:s(v,w,m,y),colspan:y.colSpan,key:`${y.id}-thead`,rowspan:y.rowSpan,style:o(v,w,m,y),onClick:S=>a(S,y),onContextmenu:S=>i(S,y),onMousedown:S=>u(S,y),onMousemove:S=>c(S,y),onMouseout:f},[Pe("div",{class:["cell",y.filteredValue&&y.filteredValue.length>0?"highlight":"",y.labelClassName]},[y.renderHeader?y.renderHeader({column:y,$index:w,store:p,_self:h}):y.label,y.sortable&&Pe("span",{onClick:S=>d(S,y),class:"caret-wrapper"},[Pe("i",{onClick:S=>d(S,y,"ascending"),class:"sort-caret ascending"}),Pe("i",{onClick:S=>d(S,y,"descending"),class:"sort-caret descending"})]),y.filterable&&Pe(pG,{store:p,placement:y.filterPlacement||"bottom-start",column:y,upDataColumn:(S,$)=>{y[S]=$}})])]))))))}});function yG(e){const t=Ne(_o),n=A(""),o=A(Pe("div")),s=(f,p,h)=>{var g;const m=t,v=Pc(f);let y;const w=(g=m==null?void 0:m.vnode.el)==null?void 0:g.dataset.prefix;v&&(y=Ag({columns:e.store.states.columns.value},v,w),y&&(m==null||m.emit(`cell-${h}`,p,y,v,f))),m==null||m.emit(`row-${h}`,p,y,f)},l=(f,p)=>{s(f,p,"dblclick")},r=(f,p)=>{e.store.commit("setCurrentRow",p),s(f,p,"click")},a=(f,p)=>{s(f,p,"contextmenu")},i=hn(f=>{e.store.commit("setHoverRow",f)},30),u=hn(()=>{e.store.commit("setHoverRow",null)},30);return{handleDoubleClick:l,handleClick:r,handleContextMenu:a,handleMouseEnter:i,handleMouseLeave:u,handleCellMouseEnter:(f,p)=>{var h;const g=t,m=Pc(f),v=(h=g==null?void 0:g.vnode.el)==null?void 0:h.dataset.prefix;if(m){const k=Ag({columns:e.store.states.columns.value},m,v),T=g.hoverState={cell:m,column:k,row:p};g==null||g.emit("cell-mouse-enter",T.row,T.column,T.cell,f)}const y=f.target.querySelector(".cell");if(!(oo(y,`${v}-tooltip`)&&y.childNodes.length))return;const w=document.createRange();w.setStart(y,0),w.setEnd(y,y.childNodes.length);const S=w.getBoundingClientRect().width,$=(Number.parseInt(bo(y,"paddingLeft"),10)||0)+(Number.parseInt(bo(y,"paddingRight"),10)||0);(S+$>y.offsetWidth||y.scrollWidth>y.offsetWidth)&&Zq(m,m.innerText||m.textContent,{placement:"top",strategy:"fixed"},p.tooltipEffect)},handleCellMouseLeave:f=>{if(!Pc(f))return;const h=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",h==null?void 0:h.row,h==null?void 0:h.column,h==null?void 0:h.cell,f)},tooltipContent:n,tooltipTrigger:o}}function wG(e){const t=Ne(_o),n=we("table");return{getRowStyle:(u,c)=>{const d=t==null?void 0:t.props.rowStyle;return typeof d=="function"?d.call(null,{row:u,rowIndex:c}):d||null},getRowClass:(u,c)=>{const d=[n.e("row")];(t==null?void 0:t.props.highlightCurrentRow)&&u===e.store.states.currentRow.value&&d.push("current-row"),e.stripe&&c%2===1&&d.push(n.em("row","striped"));const f=t==null?void 0:t.props.rowClassName;return typeof f=="string"?d.push(f):typeof f=="function"&&d.push(f.call(null,{row:u,rowIndex:c})),d},getCellStyle:(u,c,d,f)=>{const p=t==null?void 0:t.props.cellStyle;let h=p!=null?p:{};typeof p=="function"&&(h=p.call(null,{rowIndex:u,columnIndex:c,row:d,column:f}));const g=f.isSubColumn?null:Op(c,e==null?void 0:e.fixed,e.store);return er(g,"left"),er(g,"right"),Object.assign({},h,g)},getCellClass:(u,c,d,f)=>{const p=f.isSubColumn?[]:Mp(n.b(),c,e==null?void 0:e.fixed,e.store),h=[f.id,f.align,f.className,...p],g=t==null?void 0:t.props.cellClassName;return typeof g=="string"?h.push(g):typeof g=="function"&&h.push(g.call(null,{rowIndex:u,columnIndex:c,row:d,column:f})),h.push(n.e("cell")),h.filter(m=>Boolean(m)).join(" ")},getSpan:(u,c,d,f)=>{let p=1,h=1;const g=t==null?void 0:t.props.spanMethod;if(typeof g=="function"){const m=g({row:u,column:c,rowIndex:d,columnIndex:f});Array.isArray(m)?(p=m[0],h=m[1]):typeof m=="object"&&(p=m.rowspan,h=m.colspan)}return{rowspan:p,colspan:h}},getColspanRealWidth:(u,c,d)=>{if(c<1)return u[d].realWidth;const f=u.map(({realWidth:p,width:h})=>p||h).slice(d,d+c);return Number(f.reduce((p,h)=>Number(p)+Number(h),-1))}}}function CG(e){const t=Ne(_o),{handleDoubleClick:n,handleClick:o,handleContextMenu:s,handleMouseEnter:l,handleMouseLeave:r,handleCellMouseEnter:a,handleCellMouseLeave:i,tooltipContent:u,tooltipTrigger:c}=yG(e),{getRowStyle:d,getRowClass:f,getCellStyle:p,getCellClass:h,getSpan:g,getColspanRealWidth:m}=wG(e),v=E(()=>e.store.states.columns.value.findIndex(({type:k})=>k==="default")),y=(k,T)=>{const O=t.props.rowKey;return O?Qt(k,O):T},w=(k,T,O,L=!1)=>{const{tooltipEffect:B,store:V}=e,{indent:H,columns:R}=V.states,z=f(k,T);let W=!0;return O&&(z.push(`el-table__row--level-${O.level}`),W=O.display),Pe("tr",{style:[W?null:{display:"none"},d(k,T)],class:z,key:y(k,T),onDblclick:N=>n(N,k),onClick:N=>o(N,k),onContextmenu:N=>s(N,k),onMouseenter:()=>l(T),onMouseleave:r},R.value.map((N,I)=>{const{rowspan:U,colspan:q}=g(k,N,T,I);if(!U||!q)return null;const Q=ne({},N);Q.realWidth=m(R.value,q,I);const J={store:e.store,_self:e.context||t,column:Q,row:k,$index:T,cellIndex:I,expanded:L};I===v.value&&O&&(J.treeNode={indent:O.level*H.value,level:O.level},typeof O.expanded=="boolean"&&(J.treeNode.expanded=O.expanded,"loading"in O&&(J.treeNode.loading=O.loading),"noLazyChildren"in O&&(J.treeNode.noLazyChildren=O.noLazyChildren)));const ae=`${T},${I}`,Ee=Q.columnKey||Q.rawColumnKey||"",Me=S(I,N,J);return Pe("td",{style:p(T,I,k,N),class:h(T,I,k,N),key:`${Ee}${ae}`,rowspan:U,colspan:q,onMouseenter:Z=>a(Z,Te(ne({},k),{tooltipEffect:B})),onMouseleave:i},[Me])}))},S=(k,T,O)=>T.renderCell(O);return{wrappedRowRender:(k,T)=>{const O=e.store,{isRowExpanded:L,assertRowKey:B}=O,{treeData:V,lazyTreeNodeMap:H,childrenColumnName:R,rowKey:z}=O.states,W=O.states.columns.value;if(W.some(({type:N})=>N==="expand")){const N=L(k),I=w(k,T,void 0,N),U=t.renderExpanded;return N?U?[[I,Pe("tr",{key:`expanded-row__${I.key}`},[Pe("td",{colspan:W.length,class:"el-table__cell el-table__expanded-cell"},[U({row:k,$index:T,store:O,expanded:N})])])]]:(console.error("[Element Error]renderExpanded is required."),I):[[I]]}else if(Object.keys(V.value).length){B();const N=Qt(k,z.value);let I=V.value[N],U=null;I&&(U={expanded:I.expanded,level:I.level,display:!0},typeof I.lazy=="boolean"&&(typeof I.loaded=="boolean"&&I.loaded&&(U.noLazyChildren=!(I.children&&I.children.length)),U.loading=I.loading));const q=[w(k,T,U)];if(I){let Q=0;const J=(Ee,Me)=>{!(Ee&&Ee.length&&Me)||Ee.forEach(Z=>{const ve={display:Me.display&&Me.expanded,level:Me.level+1,expanded:!1,noLazyChildren:!1,loading:!1},Ce=Qt(Z,z.value);if(Ce==null)throw new Error("For nested data item, row-key is required.");if(I=ne({},V.value[Ce]),I&&(ve.expanded=I.expanded,I.level=I.level||ve.level,I.display=!!(I.expanded&&ve.display),typeof I.lazy=="boolean"&&(typeof I.loaded=="boolean"&&I.loaded&&(ve.noLazyChildren=!(I.children&&I.children.length)),ve.loading=I.loading)),Q++,q.push(w(Z,T+Q,ve)),I){const ke=H.value[Ce]||Z[R.value];J(ke,I)}})};I.display=!0;const ae=H.value[N]||k[R.value];J(ae,I)}return q}else return w(k,T,void 0)},tooltipContent:u,tooltipTrigger:c}}const $G={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var kG=te({name:"ElTableBody",props:$G,setup(e){const t=nt(),n=Ne(_o),o=we("table"),{wrappedRowRender:s,tooltipContent:l,tooltipTrigger:r}=CG(e),{onColumnsChange:a,onScrollableChange:i}=CC(n);return pe(e.store.states.hoverRow,(u,c)=>{if(!e.store.states.isComplex.value||!ct)return;let d=window.requestAnimationFrame;d||(d=f=>window.setTimeout(f,16)),d(()=>{var f;const p=(f=t==null?void 0:t.vnode.el)==null?void 0:f.querySelectorAll(`.${o.e("row")}`),h=p[c],g=p[u];h&&fn(h,"hover-row"),g&&wo(g,"hover-row")})}),ka(()=>{var u;(u=su)==null||u()}),Xn(()=>{var u;(u=su)==null||u()}),{ns:o,onColumnsChange:a,onScrollableChange:i,wrappedRowRender:s,tooltipContent:l,tooltipTrigger:r}},render(){const{wrappedRowRender:e,store:t}=this,n=t.states.data.value||[];return Pe("tbody",{},[n.reduce((o,s)=>o.concat(e(s,o.length)),[])])}});function Ip(e){const t=e.tableLayout==="auto";let n=e.columns||[];t&&n.every(s=>s.width===void 0)&&(n=[]);const o=s=>{const l={key:`${e.tableLayout}_${s.id}`,style:{},name:void 0};return t?l.style={width:`${s.width}px`}:l.name=s.id,l};return Pe("colgroup",{},n.map(s=>Pe("col",o(s))))}Ip.props=["columns","tableLayout"];function SG(){const e=Ne(_o),t=e==null?void 0:e.store,n=E(()=>t.states.fixedLeafColumnsLength.value),o=E(()=>t.states.rightFixedColumns.value.length),s=E(()=>t.states.columns.value.length),l=E(()=>t.states.fixedColumns.value.length),r=E(()=>t.states.rightFixedColumns.value.length);return{leftFixedLeafCount:n,rightFixedLeafCount:o,columnsCount:s,leftFixedCount:l,rightFixedCount:r,columns:t.states.columns}}function EG(e){const{columns:t}=SG(),n=we("table");return{getCellClasses:(l,r)=>{const a=l[r],i=[n.e("cell"),a.id,a.align,a.labelClassName,...Mp(n.b(),r,a.fixed,e.store)];return a.className&&i.push(a.className),a.children||i.push(n.is("leaf")),i},getCellStyles:(l,r)=>{const a=Op(r,l.fixed,e.store);return er(a,"left"),er(a,"right"),a},columns:t}}var _G=te({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:n,columns:o}=EG(e);return{ns:we("table"),getCellClasses:t,getCellStyles:n,columns:o}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:o,sumText:s,ns:l}=this,r=this.store.states.data.value;let a=[];return o?a=o({columns:e,data:r}):e.forEach((i,u)=>{if(u===0){a[u]=s;return}const c=r.map(h=>Number(h[i.property])),d=[];let f=!0;c.forEach(h=>{if(!Number.isNaN(+h)){f=!1;const g=`${h}`.split(".")[1];d.push(g?g.length:0)}});const p=Math.max.apply(null,d);f?a[u]="":a[u]=c.reduce((h,g)=>{const m=Number(g);return Number.isNaN(+m)?h:Number.parseFloat((h+g).toFixed(Math.min(p,20)))},0)}),Pe("table",{class:l.e("footer"),cellspacing:"0",cellpadding:"0",border:"0"},[Ip({columns:e}),Pe("tbody",[Pe("tr",{},[...e.map((i,u)=>Pe("td",{key:u,colspan:i.colSpan,rowspan:i.rowSpan,class:n(e,u),style:t(i,u)},[Pe("div",{class:["cell",i.labelClassName]},[a[u]])]))])])])}});function TG(e){return{setCurrentRow:c=>{e.commit("setCurrentRow",c)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(c,d)=>{e.toggleRowSelection(c,d,!1),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:c=>{e.clearFilter(c)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(c,d)=>{e.toggleRowExpansionAdapter(c,d)},clearSort:()=>{e.clearSort()},sort:(c,d)=>{e.commit("sort",{prop:c,order:d})}}}function AG(e,t,n,o){const s=A(!1),l=A(null),r=A(!1),a=I=>{r.value=I},i=A({width:null,height:null}),u=A(!1),c={display:"inline-block",verticalAlign:"middle"},d=A();zn(()=>{t.setHeight(e.height)}),zn(()=>{t.setMaxHeight(e.maxHeight)}),pe(()=>[e.currentRowKey,n.states.rowKey],([I,U])=>{!b(U)||n.setCurrentRowKey(`${I}`)},{immediate:!0}),pe(()=>e.data,I=>{o.store.commit("setData",I)},{immediate:!0,deep:!0}),zn(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const f=()=>{o.store.commit("setHoverRow",null),o.hoverState&&(o.hoverState=null)},p=(I,U)=>{const{pixelX:q,pixelY:Q}=U;Math.abs(q)>=Math.abs(Q)&&(o.refs.bodyWrapper.scrollLeft+=U.pixelX/5)},h=E(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),g=E(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),m=()=>{h.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(S)};xe(async()=>{await ze(),n.updateColumns(),$(),requestAnimationFrame(m),i.value={width:d.value=o.vnode.el.offsetWidth,height:o.vnode.el.offsetHeight},n.states.columns.value.forEach(I=>{I.filteredValue&&I.filteredValue.length&&o.store.commit("filterChange",{column:I,values:I.filteredValue,silent:!0})}),o.$ready=!0});const v=(I,U)=>{if(!I)return;const q=Array.from(I.classList).filter(Q=>!Q.startsWith("is-scrolling-"));q.push(t.scrollX.value?U:"is-scrolling-none"),I.className=q.join(" ")},y=I=>{const{tableWrapper:U}=o.refs;v(U,I)},w=I=>{const{tableWrapper:U}=o.refs;return!!(U&&U.classList.contains(I))},S=function(){if(!o.refs.scrollBarRef)return;if(!t.scrollX.value){const Me="is-scrolling-none";w(Me)||y(Me);return}const I=o.refs.scrollBarRef.wrap$;if(!I)return;const{scrollLeft:U,offsetWidth:q,scrollWidth:Q}=I,{headerWrapper:J,footerWrapper:ae}=o.refs;J&&(J.scrollLeft=U),ae&&(ae.scrollLeft=U);const Ee=Q-q-1;U>=Ee?y("is-scrolling-right"):y(U===0?"is-scrolling-left":"is-scrolling-middle")},$=()=>{var I;!o.refs.scrollBarRef||((I=o.refs.scrollBarRef.wrap$)==null||I.addEventListener("scroll",S,{passive:!0}),e.fit?ir(o.vnode.el,T):Tt(window,"resize",m))};_t(()=>{k()});const k=()=>{var I;(I=o.refs.scrollBarRef.wrap$)==null||I.removeEventListener("scroll",S,!0),e.fit?ur(o.vnode.el,T):Vt(window,"resize",m)},T=()=>{if(!o.$ready)return;let I=!1;const U=o.vnode.el,{width:q,height:Q}=i.value,J=d.value=U.offsetWidth;q!==J&&(I=!0);const ae=U.offsetHeight;(e.height||h.value)&&Q!==ae&&(I=!0),I&&(i.value={width:J,height:ae},m())},O=Wt(),L=E(()=>{const{bodyWidth:I,scrollY:U,gutterWidth:q}=t;return I.value?`${I.value-(U.value?q:0)}px`:""}),B=E(()=>e.maxHeight?"fixed":e.tableLayout);function V(I,U,q){const Q=Wd(I),J=e.showHeader?q:0;if(Q!==null)return Qe(Q)?`calc(${Q} - ${U}px - ${J}px)`:Q-U-J}const H=E(()=>{const I=t.headerHeight.value||0,U=t.bodyHeight.value,q=t.footerHeight.value||0;if(e.height)return U||void 0;if(e.maxHeight)return V(e.maxHeight,q,I)}),R=E(()=>{const I=t.headerHeight.value||0,U=t.bodyHeight.value,q=t.footerHeight.value||0;if(e.height)return{height:U?`${U}px`:""};if(e.maxHeight){const Q=V(e.maxHeight,q,I);if(Q!==null)return{"max-height":`${Q}${ht(Q)?"px":""}`}}return{}}),z=E(()=>{if(e.data&&e.data.length)return null;let I="100%";return t.appendHeight.value&&(I=`calc(100% - ${t.appendHeight.value}px)`),{width:d.value?`${d.value}px`:"",height:I}}),W=(I,U)=>{const q=o.refs.bodyWrapper;if(Math.abs(U.spinY)>0){const Q=q.scrollTop;U.pixelY<0&&Q!==0&&I.preventDefault(),U.pixelY>0&&q.scrollHeight-q.clientHeight>Q&&I.preventDefault(),q.scrollTop+=Math.ceil(U.pixelY/5)}else q.scrollLeft+=Math.ceil(U.pixelX/5)},P=E(()=>e.maxHeight?e.showSummary?{bottom:0}:{bottom:t.scrollX.value&&e.data.length?`${t.gutterWidth}px`:""}:e.showSummary?{height:t.tableHeight.value?`${t.tableHeight.value}px`:""}:{height:t.viewportHeight.value?`${t.viewportHeight.value}px`:""}),N=E(()=>{if(e.height)return{height:t.fixedBodyHeight.value?`${t.fixedBodyHeight.value}px`:""};if(e.maxHeight){let I=Wd(e.maxHeight);if(typeof I=="number")return I=t.scrollX.value?I-t.gutterWidth:I,e.showHeader&&(I-=t.headerHeight.value),I-=t.footerHeight.value,{"max-height":`${I}px`}}return{}});return{isHidden:s,renderExpanded:l,setDragVisible:a,isGroup:u,handleMouseLeave:f,handleHeaderFooterMousewheel:p,tableSize:O,bodyHeight:R,height:H,emptyBlockStyle:z,handleFixedMousewheel:W,fixedHeight:P,fixedBodyHeight:N,resizeProxyVisible:r,bodyWidth:L,resizeState:i,doLayout:m,tableBodyStyles:g,tableLayout:B,scrollbarViewStyle:c}}var NG={data:{type:Array,default:()=>[]},size:String,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:{type:Boolean,default:!1}};const MG=()=>{const e=A(),t=(l,r)=>{const a=e.value;a&&a.scrollTo(l,r)},n=(l,r)=>{const a=e.value;a&&ht(r)&&["Top","Left"].includes(l)&&a[`setScroll${l}`](r)};return{scrollBarRef:e,scrollTo:t,setScrollTop:l=>n("Top",l),setScrollLeft:l=>n("Left",l)}};let OG=1;const IG=te({name:"ElTable",directives:{Mousewheel:eV},components:{TableHeader:bG,TableBody:kG,TableFooter:_G,ElScrollbar:Uo,hColgroup:Ip},props:NG,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=kt(),n=we("table"),o=nt();st(_o,o);const s=sG(o,e);o.store=s;const l=new rG({store:o.store,table:o,fit:e.fit,showHeader:e.showHeader});o.layout=l;const r=E(()=>(s.states.data.value||[]).length===0),{setCurrentRow:a,getSelectionRows:i,toggleRowSelection:u,clearSelection:c,clearFilter:d,toggleAllSelection:f,toggleRowExpansion:p,clearSort:h,sort:g}=TG(s),{isHidden:m,renderExpanded:v,setDragVisible:y,isGroup:w,handleMouseLeave:S,handleHeaderFooterMousewheel:$,tableSize:k,bodyHeight:T,height:O,emptyBlockStyle:L,handleFixedMousewheel:B,fixedHeight:V,fixedBodyHeight:H,resizeProxyVisible:R,bodyWidth:z,resizeState:W,doLayout:P,tableBodyStyles:N,tableLayout:I,scrollbarViewStyle:U}=AG(e,l,s,o),{scrollBarRef:q,scrollTo:Q,setScrollLeft:J,setScrollTop:ae}=MG(),Ee=hn(P,50),Me=`el-table_${OG++}`;o.tableId=Me,o.state={isGroup:w,resizeState:W,doLayout:P,debouncedUpdateLayout:Ee};const Z=E(()=>e.sumText||t("el.table.sumText")),ve=E(()=>e.emptyText||t("el.table.emptyText"));return{ns:n,layout:l,store:s,handleHeaderFooterMousewheel:$,handleMouseLeave:S,tableId:Me,tableSize:k,isHidden:m,isEmpty:r,renderExpanded:v,resizeProxyVisible:R,resizeState:W,isGroup:w,bodyWidth:z,bodyHeight:T,height:O,tableBodyStyles:N,emptyBlockStyle:L,debouncedUpdateLayout:Ee,handleFixedMousewheel:B,fixedHeight:V,fixedBodyHeight:H,setCurrentRow:a,getSelectionRows:i,toggleRowSelection:u,clearSelection:c,clearFilter:d,toggleAllSelection:f,toggleRowExpansion:p,clearSort:h,doLayout:P,sort:g,t,setDragVisible:y,context:o,computedSumText:Z,computedEmptyText:ve,tableLayout:I,scrollbarViewStyle:U,scrollBarRef:q,scrollTo:Q,setScrollLeft:J,setScrollTop:ae}}}),DG=["data-prefix"],PG={ref:"hiddenColumns",class:"hidden-columns"};function LG(e,t,n,o,s,l){const r=le("hColgroup"),a=le("table-header"),i=le("table-body"),u=le("el-scrollbar"),c=le("table-footer"),d=Mn("mousewheel");return C(),M("div",{ref:"tableWrapper",class:_([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:De(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=f=>e.handleMouseLeave())},[D("div",{class:_(e.ns.e("inner-wrapper"))},[D("div",PG,[ie(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?Ge((C(),M("div",{key:0,ref:"headerWrapper",class:_(e.ns.e("header-wrapper"))},[D("table",{ref:"tableHeader",class:_(e.ns.e("header")),style:De(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Y(a,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[d,e.handleHeaderFooterMousewheel]]):G("v-if",!0),D("div",{ref:"bodyWrapper",style:De(e.bodyHeight),class:_(e.ns.e("body-wrapper"))},[Y(u,{ref:"scrollBarRef",height:e.maxHeight?void 0:e.height,"max-height":e.maxHeight?e.height:void 0,"view-style":e.scrollbarViewStyle,always:e.scrollbarAlwaysOn},{default:j(()=>[D("table",{ref:"tableBody",class:_(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:De({width:e.bodyWidth,tableLayout:e.tableLayout})},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(C(),x(a,{key:0,border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])):G("v-if",!0),Y(i,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","row-style","store","stripe"])],6),e.isEmpty?(C(),M("div",{key:0,ref:"emptyBlock",style:De(e.emptyBlockStyle),class:_(e.ns.e("empty-block"))},[D("span",{class:_(e.ns.e("empty-text"))},[ie(e.$slots,"empty",{},()=>[it(he(e.computedEmptyText),1)])],2)],6)):G("v-if",!0),e.$slots.append?(C(),M("div",{key:1,ref:"appendWrapper",class:_(e.ns.e("append-wrapper"))},[ie(e.$slots,"append")],2)):G("v-if",!0)]),_:3},8,["height","max-height","view-style","always"])],6),e.border||e.isGroup?(C(),M("div",{key:1,class:_(e.ns.e("border-left-patch"))},null,2)):G("v-if",!0)],2),e.showSummary?Ge((C(),M("div",{key:0,ref:"footerWrapper",class:_(e.ns.e("footer-wrapper"))},[Y(c,{border:e.border,"default-sort":e.defaultSort,store:e.store,style:De(e.tableBodyStyles),"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","style","sum-text","summary-method"])],2)),[[pt,!e.isEmpty],[d,e.handleHeaderFooterMousewheel]]):G("v-if",!0),Ge(D("div",{ref:"resizeProxy",class:_(e.ns.e("column-resize-proxy"))},null,2),[[pt,e.resizeProxyVisible]])],46,DG)}var RG=ge(IG,[["render",LG],["__file","/home/runner/work/element-plus/element-plus/packages/components/table/src/table.vue"]]);const BG={selection:"table-column--selection",expand:"table__expand-column"},VG={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},FG=e=>BG[e]||"",HG={selection:{renderHeader({store:e}){function t(){return e.states.data.value&&e.states.data.value.length===0}return Pe(ao,{disabled:t(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value})},renderCell({row:e,column:t,store:n,$index:o}){return Pe(ao,{disabled:t.selectable?!t.selectable.call(null,e,o):!1,size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:s=>s.stopPropagation(),modelValue:n.isSelected(e)})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let n=t+1;const o=e.index;return typeof o=="number"?n=t+o:typeof o=="function"&&(n=o(t)),Pe("div",{},[n])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({row:e,store:t,expanded:n}){const{ns:o}=t,s=[o.e("expand-icon")];return n&&s.push(o.em("expand-icon","expanded")),Pe("div",{class:s,onClick:function(r){r.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[Pe(je,null,{default:()=>[Pe(Jn)]})]})},sortable:!1,resizable:!1}};function zG({row:e,column:t,$index:n}){var o;const s=t.property,l=s&&fi(e,s).value;return t&&t.formatter?t.formatter(e,t,l,n):((o=l==null?void 0:l.toString)==null?void 0:o.call(l))||""}function KG({row:e,treeNode:t,store:n},o=!1){const{ns:s}=n;if(!t)return o?[Pe("span",{class:s.e("placeholder")})]:null;const l=[],r=function(a){a.stopPropagation(),n.loadOrToggle(e)};if(t.indent&&l.push(Pe("span",{class:s.e("indent"),style:{"padding-left":`${t.indent}px`}})),typeof t.expanded=="boolean"&&!t.noLazyChildren){const a=[s.e("expand-icon"),t.expanded?s.em("expand-icon","expanded"):""];let i=Jn;t.loading&&(i=gs),l.push(Pe("div",{class:a,onClick:r},{default:()=>[Pe(je,{class:{[s.is("loading")]:t.loading}},{default:()=>[Pe(i)]})]}))}else l.push(Pe("span",{class:s.e("placeholder")}));return l}function Mg(e,t){return e.reduce((n,o)=>(n[o]=o,n),t)}function WG(e,t){const n=nt();return{registerComplexWatchers:()=>{const l=["fixed"],r={realWidth:"width",realMinWidth:"minWidth"},a=Mg(l,r);Object.keys(a).forEach(i=>{const u=r[i];at(t,u)&&pe(()=>t[u],c=>{let d=c;u==="width"&&i==="realWidth"&&(d=Np(c)),u==="minWidth"&&i==="realMinWidth"&&(d=vC(c)),n.columnConfig.value[u]=d,n.columnConfig.value[i]=d;const f=u==="fixed";e.value.store.scheduleLayout(f)})})},registerNormalWatchers:()=>{const l=["label","filters","filterMultiple","sortable","index","formatter","className","labelClassName","showOverflowTooltip"],r={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},a=Mg(l,r);Object.keys(a).forEach(i=>{const u=r[i];at(t,u)&&pe(()=>t[u],c=>{n.columnConfig.value[i]=c})})}}}function jG(e,t,n){const o=nt(),s=A(""),l=A(!1),r=A(),a=A(),i=we("table");zn(()=>{r.value=e.align?`is-${e.align}`:null,r.value}),zn(()=>{a.value=e.headerAlign?`is-${e.headerAlign}`:r.value,a.value});const u=E(()=>{let w=o.vnode.vParent||o.parent;for(;w&&!w.tableId&&!w.columnId;)w=w.vnode.vParent||w.parent;return w}),c=E(()=>{const{store:w}=o.parent;if(!w)return!1;const{treeData:S}=w.states,$=S.value;return $&&Object.keys($).length>0}),d=A(Np(e.width)),f=A(vC(e.minWidth)),p=w=>(d.value&&(w.width=d.value),f.value&&(w.minWidth=f.value),w.minWidth||(w.minWidth=80),w.realWidth=Number(w.width===void 0?w.minWidth:w.width),w),h=w=>{const S=w.type,$=HG[S]||{};Object.keys($).forEach(T=>{const O=$[T];T!=="className"&&O!==void 0&&(w[T]=O)});const k=FG(S);if(k){const T=`${b(i.namespace)}-${k}`;w.className=w.className?`${w.className} ${T}`:T}return w},g=w=>{Array.isArray(w)?w.forEach($=>S($)):S(w);function S($){var k;((k=$==null?void 0:$.type)==null?void 0:k.name)==="ElTableColumn"&&($.vParent=o)}};return{columnId:s,realAlign:r,isSubColumn:l,realHeaderAlign:a,columnOrTableParent:u,setColumnWidth:p,setColumnForcedProps:h,setColumnRenders:w=>{e.renderHeader||w.type!=="selection"&&(w.renderHeader=k=>{o.columnConfig.value.label;const T=t.header;return T?T(k):w.label});let S=w.renderCell;const $=c.value;return w.type==="expand"?(w.renderCell=k=>Pe("div",{class:"cell"},[S(k)]),n.value.renderExpanded=k=>t.default?t.default(k):t.default):(S=S||zG,w.renderCell=k=>{let T=null;if(t.default){const V=t.default(k);T=V.some(H=>H.type!==pn)?V:S(k)}else T=S(k);const O=$&&k.cellIndex===0,L=KG(k,O),B={class:"cell",style:{}};return w.showOverflowTooltip&&(B.class=`${B.class} ${b(i.namespace)}-tooltip`,B.style={width:`${(k.column.realWidth||Number(k.column.width))-1}px`}),g(T),Pe("div",B,[L,T])}),w},getPropsData:(...w)=>w.reduce((S,$)=>(Array.isArray($)&&$.forEach(k=>{S[k]=e[k]}),S),{}),getColumnElIndex:(w,S)=>Array.prototype.indexOf.call(w,S)}}var YG={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showTooltipWhenOverflow:Boolean,showOverflowTooltip:Boolean,fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let UG=1;var kC=te({name:"ElTableColumn",components:{ElCheckbox:ao},props:YG,setup(e,{slots:t}){const n=nt(),o=A({}),s=E(()=>{let y=n.parent;for(;y&&!y.tableId;)y=y.parent;return y}),{registerNormalWatchers:l,registerComplexWatchers:r}=WG(s,e),{columnId:a,isSubColumn:i,realHeaderAlign:u,columnOrTableParent:c,setColumnWidth:d,setColumnForcedProps:f,setColumnRenders:p,getPropsData:h,getColumnElIndex:g,realAlign:m}=jG(e,t,s),v=c.value;a.value=`${v.tableId||v.columnId}_column_${UG++}`,$a(()=>{i.value=s.value!==v;const y=e.type||"default",w=e.sortable===""?!0:e.sortable,S=Te(ne({},VG[y]),{id:a.value,type:y,property:e.prop||e.property,align:m,headerAlign:u,showOverflowTooltip:e.showOverflowTooltip||e.showTooltipWhenOverflow,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:w,index:e.index,rawColumnKey:n.vnode.key});let L=h(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement"]);L=Gq(S,L),L=Xq(p,d,f)(L),o.value=L,l(),r()}),xe(()=>{var y;const w=c.value,S=i.value?w.vnode.el.children:(y=w.refs.hiddenColumns)==null?void 0:y.children,$=()=>g(S||[],n.vnode.el);o.value.getColumnIndex=$,$()>-1&&s.value.store.commit("insertColumn",o.value,i.value?w.columnConfig.value:null)}),_t(()=>{s.value.store.commit("removeColumn",o.value,i.value?v.columnConfig.value:null)}),n.columnId=a.value,n.columnConfig=o},render(){var e,t,n;try{const o=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),s=[];if(Array.isArray(o))for(const r of o)((n=r.type)==null?void 0:n.name)==="ElTableColumn"||r.shapeFlag&2?s.push(r):r.type===Le&&Array.isArray(r.children)&&r.children.forEach(a=>{(a==null?void 0:a.patchFlag)!==1024&&!Qe(a==null?void 0:a.children)&&s.push(a)});return Pe("div",s)}catch{return Pe("div",[])}}});const qG=ot(RG,{TableColumn:kC}),GG=Rt(kC),XG=Ve({tabs:{type:$e(Array),default:()=>Pt([])}}),JG={name:"ElTabBar"},ZG=te(Te(ne({},JG),{props:XG,setup(e,{expose:t}){const n=e,o="ElTabBar",s=nt(),l=Ne(Vu);l||Kt(o,"");const r=we("tabs"),a=A(),i=A(),u=()=>{let d=0,f=0;const p=["top","bottom"].includes(l.props.tabPosition)?"width":"height",h=p==="width"?"x":"y";return n.tabs.every(g=>{var m,v,y,w;const S=(v=(m=s.parent)==null?void 0:m.refs)==null?void 0:v[`tab-${g.paneName}`];if(!S)return!1;if(!g.active)return!0;f=S[`client${yn(p)}`];const $=h==="x"?"left":"top";d=S.getBoundingClientRect()[$]-((w=(y=S.parentElement)==null?void 0:y.getBoundingClientRect()[$])!=null?w:0);const k=window.getComputedStyle(S);return p==="width"&&(n.tabs.length>1&&(f-=Number.parseFloat(k.paddingLeft)+Number.parseFloat(k.paddingRight)),d+=Number.parseFloat(k.paddingLeft)),!1}),{[p]:`${f}px`,transform:`translate${yn(h)}(${d}px)`}},c=()=>i.value=u();return pe(()=>n.tabs,async()=>{await ze(),c()},{immediate:!0}),ar(a,()=>c()),t({ref:a,update:c}),(d,f)=>(C(),M("div",{ref_key:"barRef",ref:a,class:_([b(r).e("active-bar"),b(r).is(b(l).props.tabPosition)]),style:De(i.value)},null,6))}}));var QG=ge(ZG,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tabs/src/tab-bar.vue"]]);const xG=Ve({panes:{type:$e(Array),default:()=>Pt([])},currentName:{type:[String,Number],default:""},editable:Boolean,onTabClick:{type:$e(Function),default:wt},onTabRemove:{type:$e(Function),default:wt},type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean}),Og="ElTabNav",eX=te({name:Og,props:xG,setup(e,{expose:t}){const n=Ne(Vu);n||Kt(Og,"");const o=we("tabs"),s=KI(),l=UI(),r=A(),a=A(),i=A(),u=A(!1),c=A(0),d=A(!1),f=A(!0),p=E(()=>["top","bottom"].includes(n.props.tabPosition)?"width":"height"),h=E(()=>({transform:`translate${p.value==="width"?"X":"Y"}(-${c.value}px)`})),g=()=>{if(!r.value)return;const k=r.value[`offset${yn(p.value)}`],T=c.value;if(!T)return;const O=T>k?T-k:0;c.value=O},m=()=>{if(!r.value||!a.value)return;const k=a.value[`offset${yn(p.value)}`],T=r.value[`offset${yn(p.value)}`],O=c.value;if(k-O<=T)return;const L=k-O>T*2?O+T:k-T;c.value=L},v=()=>{const k=a.value;if(!u.value||!i.value||!r.value||!k)return;const T=i.value.querySelector(".is-active");if(!T)return;const O=r.value,L=["top","bottom"].includes(n.props.tabPosition),B=T.getBoundingClientRect(),V=O.getBoundingClientRect(),H=L?k.offsetWidth-V.width:k.offsetHeight-V.height,R=c.value;let z=R;L?(B.leftV.right&&(z=R+B.right-V.right)):(B.topV.bottom&&(z=R+(B.bottom-V.bottom))),z=Math.max(z,0),c.value=Math.min(z,H)},y=()=>{if(!a.value||!r.value)return;const k=a.value[`offset${yn(p.value)}`],T=r.value[`offset${yn(p.value)}`],O=c.value;if(T0&&(c.value=0)},w=k=>{const T=k.code,{up:O,down:L,left:B,right:V}=Ie;if(![O,L,B,V].includes(T))return;const H=Array.from(k.currentTarget.querySelectorAll("[role=tab]")),R=H.indexOf(k.target);let z;T===B||T===O?R===0?z=H.length-1:z=R-1:R{f.value&&(d.value=!0)},$=()=>d.value=!1;return pe(s,k=>{k==="hidden"?f.value=!1:k==="visible"&&setTimeout(()=>f.value=!0,50)}),pe(l,k=>{k?setTimeout(()=>f.value=!0,50):f.value=!1}),ar(i,y),xe(()=>setTimeout(()=>v(),0)),Xn(()=>y()),t({scrollToActiveTab:v,removeFocus:$}),()=>{const k=u.value?[Y("span",{class:[o.e("nav-prev"),o.is("disabled",!u.value.prev)],onClick:g},[Y(je,null,{default:()=>[Y(pl,null,null)]})]),Y("span",{class:[o.e("nav-next"),o.is("disabled",!u.value.next)],onClick:m},[Y(je,null,{default:()=>[Y(Jn,null,null)]})])]:null,T=e.panes.map((O,L)=>{var B,V;const H=O.props.name||O.index||`${L}`,R=O.isClosable||e.editable;O.index=`${L}`;const z=R?Y(je,{class:"is-icon-close",onClick:N=>e.onTabRemove(O,N)},{default:()=>[Y(Yn,null,null)]}):null,W=((V=(B=O.instance.slots).label)==null?void 0:V.call(B))||O.props.label,P=O.active?0:-1;return Y("div",{ref:`tab-${H}`,class:[o.e("item"),o.is(n.props.tabPosition),o.is("active",O.active),o.is("disabled",O.props.disabled),o.is("closable",R),o.is("focus",d.value)],id:`tab-${H}`,key:`tab-${H}`,"aria-controls":`pane-${H}`,role:"tab","aria-selected":O.active,tabindex:P,onFocus:()=>S(),onBlur:()=>$(),onClick:N=>{$(),e.onTabClick(O,H,N)},onKeydown:N=>{R&&(N.code===Ie.delete||N.code===Ie.backspace)&&e.onTabRemove(O,N)}},[W,z])});return Y("div",{ref:i,class:[o.e("nav-wrap"),o.is("scrollable",!!u.value),o.is(n.props.tabPosition)]},[k,Y("div",{class:o.e("nav-scroll"),ref:r},[Y("div",{class:[o.e("nav"),o.is(n.props.tabPosition),o.is("stretch",e.stretch&&["top","bottom"].includes(n.props.tabPosition))],ref:a,style:h.value,role:"tablist",onKeydown:w},[e.type?null:Y(QG,{tabs:[...e.panes]},null),T])])])}}}),tX=Ve({type:{type:String,values:["card","border-card",""],default:""},activeName:{type:[String,Number],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number],default:""},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:$e(Function),default:()=>!0},stretch:Boolean}),xa=e=>Qe(e)||ht(e),nX={[tt]:e=>xa(e),[ps]:e=>xa(e),"tab-click":(e,t)=>t instanceof Event,"tab-change":e=>xa(e),edit:(e,t)=>["remove","add"].includes(t),"tab-remove":e=>xa(e),"tab-add":()=>!0},SC=(e,t=[])=>{const n=e.children||[];return Array.from(n).forEach(o=>{let s=o.type;s=s.name||s,s==="ElTabPane"&&o.component?t.push(o.component):(s===Le||s==="template")&&SC(o,t)}),t};var oX=te({name:"ElTabs",props:tX,emits:nX,setup(e,{emit:t,slots:n,expose:o}){const s=nt();Ma({scope:"el-tabs",type:"Event",from:"input",replacement:"tab-change",version:"2.5.0",ref:"https://element-plus.org/en-US/component/tabs.html#tabs-events"},E(()=>{var m;return et((m=s.vnode.props)==null?void 0:m.onInput)}));const l=we("tabs"),r=A(),a=A([]),i=A(e.modelValue||e.activeName||"0"),u={},c=(m=!1)=>{if(n.default){const v=s.subTree.children,y=Array.from(v).find(({props:$})=>($==null?void 0:$.class)===l.e("content"));if(!y)return;const w=SC(y).map($=>u[$.uid]),S=!(w.length===a.value.length&&w.every(($,k)=>$.uid===a.value[k].uid));(m||S)&&(a.value=w)}else a.value.length!==0&&(a.value=[])},d=m=>{i.value=m,t(ps,m),t(tt,m),t("tab-change",m)},f=m=>{var v;if(i.value===m)return;const y=(v=e.beforeLeave)==null?void 0:v.call(e,m,i.value);el(y)?y.then(()=>{var w,S;d(m),(S=(w=r.value)==null?void 0:w.removeFocus)==null||S.call(w)},wt):y!==!1&&d(m)},p=(m,v,y)=>{m.props.disabled||(f(v),t("tab-click",m,y))},h=(m,v)=>{m.props.disabled||(v.stopPropagation(),t("edit",m.props.name,"remove"),t("tab-remove",m.props.name))},g=()=>{t("edit",void 0,"add"),t("tab-add")};return Xn(()=>c()),xe(()=>c()),pe(()=>e.activeName,m=>f(m)),pe(()=>e.modelValue,m=>f(m)),pe(i,async()=>{var m,v;c(!0),await ze(),await((m=r.value)==null?void 0:m.$nextTick()),(v=r.value)==null||v.scrollToActiveTab()}),st(Vu,{props:e,currentName:i,updatePaneState:m=>u[m.uid]=m}),o({currentName:i}),()=>{const m=e.editable||e.addable?Y("span",{class:l.e("new-tab"),tabindex:"0",onClick:g,onKeydown:w=>{w.code===Ie.enter&&g()}},[Y(je,{class:l.is("icon-plus")},{default:()=>[Y(L0,null,null)]})]):null,v=Y("div",{class:[l.e("header"),l.is(e.tabPosition)]},[m,Y(eX,{ref:r,currentName:i.value,editable:e.editable,type:e.type,panes:a.value,stretch:e.stretch,onTabClick:p,onTabRemove:h},null)]),y=Y("div",{class:l.e("content")},[ie(n,"default")]);return Y("div",{class:[l.b(),l.m(e.tabPosition),{[l.m("card")]:e.type==="card",[l.m("border-card")]:e.type==="border-card"}]},[...e.tabPosition!=="bottom"?[v,y]:[y,v]])}}});const sX=Ve({label:{type:String,default:""},name:{type:[String,Number],default:""},closable:Boolean,disabled:Boolean,lazy:Boolean}),lX=["id","aria-hidden","aria-labelledby"],rX={name:"ElTabPane"},aX=te(Te(ne({},rX),{props:sX,setup(e){const t=e,n="ElTabPane",o=nt(),s=Ne(Vu);s||Kt(n,"usage: ");const l=we("tab-pane"),r=A(),a=E(()=>t.closable||s.props.closable),i=sv(()=>s.currentName.value===(t.name||r.value)),u=A(i.value),c=E(()=>t.name||r.value),d=sv(()=>!t.lazy||u.value||i.value);return pe(i,f=>{f&&(u.value=!0)}),s.updatePaneState(yt({uid:o.uid,instance:Jr(o),props:t,paneName:c,active:i,index:r,isClosable:a})),(f,p)=>b(d)?Ge((C(),M("div",{key:0,id:`pane-${b(c)}`,class:_(b(l).b()),role:"tabpanel","aria-hidden":!b(i),"aria-labelledby":`tab-${b(c)}`},[ie(f.$slots,"default")],10,lX)),[[pt,b(i)]]):G("v-if",!0)}}));var EC=ge(aX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tabs/src/tab-pane.vue"]]);const iX=ot(oX,{TabPane:EC}),uX=Rt(EC);Je.extend(pp);const{Option:cX}=ll,Oo=e=>{const t=(e||"").split(":");if(t.length>=2){let n=Number.parseInt(t[0],10);const o=Number.parseInt(t[1],10),s=e.toUpperCase();return s.includes("AM")&&n===12?n=0:s.includes("PM")&&n!==12&&(n+=12),{hours:n,minutes:o}}return null},Lc=(e,t)=>{const n=Oo(e),o=Oo(t),s=n.minutes+n.hours*60,l=o.minutes+o.hours*60;return s===l?0:s>l?1:-1},Ig=e=>`${e}`.padStart(2,"0"),_l=e=>`${Ig(e.hours)}:${Ig(e.minutes)}`,dX=(e,t)=>{const n=Oo(e),o=Oo(t),s={hours:n.hours,minutes:n.minutes};return s.minutes+=o.minutes,s.hours+=o.hours,s.hours+=Math.floor(s.minutes/60),s.minutes=s.minutes%60,_l(s)},fX=te({name:"ElTimeSelect",components:{ElSelect:ll,ElOption:cX,ElIcon:je},model:{prop:"value",event:"change"},props:{format:{type:String,default:"HH:mm"},modelValue:String,disabled:{type:Boolean,default:!1},editable:{type:Boolean,default:!0},effect:{type:String,default:"light"},clearable:{type:Boolean,default:!0},size:{type:String,values:Eo,default:""},placeholder:{type:String,default:""},start:{type:String,default:"09:00"},end:{type:String,default:"18:00"},step:{type:String,default:"00:30"},minTime:{type:String,default:""},maxTime:{type:String,default:""},name:{type:String,default:""},prefixIcon:{type:[String,Object],default:P0},clearIcon:{type:[String,Object],default:Fo}},emits:["change","blur","focus","update:modelValue"],setup(e){const t=A(null),n=E(()=>e.modelValue),o=E(()=>{const d=Oo(e.start);return _l(d)}),s=E(()=>{const d=Oo(e.end);return _l(d)}),l=E(()=>{const d=Oo(e.step);return _l(d)}),r=E(()=>{const d=Oo(e.minTime);return d?_l(d):null}),a=E(()=>{const d=Oo(e.maxTime);return d?_l(d):null}),i=E(()=>{const d=[];if(e.start&&e.end&&e.step){let f=o.value,p;for(;Lc(f,s.value)<=0;)p=Je(f,"HH:mm").format(e.format),d.push({value:p,disabled:Lc(f,r.value||"-1:-1")<=0||Lc(f,a.value||"100:100")>=0}),f=dX(f,l.value)}return d});return{select:t,value:n,items:i,blur:()=>{var d,f;(f=(d=t.value)==null?void 0:d.blur)==null||f.call(d)},focus:()=>{var d,f;(f=(d=t.value)==null?void 0:d.focus)==null||f.call(d)}}}});function pX(e,t,n,o,s,l){const r=le("el-option"),a=le("el-icon"),i=le("el-select");return C(),x(i,{ref:"select","model-value":e.value,disabled:e.disabled,clearable:e.clearable,"clear-icon":e.clearIcon,size:e.size,effect:e.effect,placeholder:e.placeholder,"default-first-option":"",filterable:e.editable,"onUpdate:modelValue":t[0]||(t[0]=u=>e.$emit("update:modelValue",u)),onChange:t[1]||(t[1]=u=>e.$emit("change",u)),onBlur:t[2]||(t[2]=u=>e.$emit("blur",u)),onFocus:t[3]||(t[3]=u=>e.$emit("focus",u))},{prefix:j(()=>[e.prefixIcon?(C(),x(a,{key:0,class:"el-input__prefix-icon"},{default:j(()=>[(C(),x(ft(e.prefixIcon)))]),_:1})):G("v-if",!0)]),default:j(()=>[(C(!0),M(Le,null,rt(e.items,u=>(C(),x(r,{key:u.value,label:u.value,value:u.value,disabled:u.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["model-value","disabled","clearable","clear-icon","size","effect","placeholder","filterable"])}var Mi=ge(fX,[["render",pX],["__file","/home/runner/work/element-plus/element-plus/packages/components/time-select/src/time-select.vue"]]);Mi.install=e=>{e.component(Mi.name,Mi)};const hX=Mi,mX=hX,vX=te({name:"ElTimeline",setup(e,{slots:t}){const n=we("timeline");return st("timeline",t),()=>Pe("ul",{class:[n.b()]},[ie(t,"default")])}}),gX=Ve({timestamp:{type:String,default:""},hideTimestamp:{type:Boolean,default:!1},center:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:{type:String,default:""},color:{type:String,default:""},size:{type:String,default:"normal"},icon:{type:nn,default:""},hollow:{type:Boolean,default:!1}}),bX=te({name:"ElTimelineItem",components:{ElIcon:je},props:gX,setup(){return{ns:we("timeline-item")}}});function yX(e,t,n,o,s,l){const r=le("el-icon");return C(),M("li",{class:_([e.ns.b(),{[e.ns.e("center")]:e.center}])},[D("div",{class:_(e.ns.e("tail"))},null,2),e.$slots.dot?G("v-if",!0):(C(),M("div",{key:0,class:_([e.ns.e("node"),e.ns.em("node",e.size||""),e.ns.em("node",e.type||""),e.ns.is("hollow",e.hollow)]),style:De({backgroundColor:e.color})},[e.icon?(C(),x(r,{key:0,class:_(e.ns.e("icon"))},{default:j(()=>[(C(),x(ft(e.icon)))]),_:1},8,["class"])):G("v-if",!0)],6)),e.$slots.dot?(C(),M("div",{key:1,class:_(e.ns.e("dot"))},[ie(e.$slots,"dot")],2)):G("v-if",!0),D("div",{class:_(e.ns.e("wrapper"))},[!e.hideTimestamp&&e.placement==="top"?(C(),M("div",{key:0,class:_([e.ns.e("timestamp"),e.ns.is("top")])},he(e.timestamp),3)):G("v-if",!0),D("div",{class:_(e.ns.e("content"))},[ie(e.$slots,"default")],2),!e.hideTimestamp&&e.placement==="bottom"?(C(),M("div",{key:1,class:_([e.ns.e("timestamp"),e.ns.is("bottom")])},he(e.timestamp),3)):G("v-if",!0)],2)],2)}var _C=ge(bX,[["render",yX],["__file","/home/runner/work/element-plus/element-plus/packages/components/timeline/src/timeline-item.vue"]]);const wX=ot(vX,{TimelineItem:_C}),CX=Rt(_C),TC=Ve({nowrap:Boolean});var AC=(e=>(e.top="top",e.bottom="bottom",e.left="left",e.right="right",e))(AC||{});const $X=Object.values(AC),Dp=Ve({width:{type:Number,default:10},height:{type:Number,default:10},style:{type:$e(Object),default:null}}),kX=Ve({side:{type:$e(String),values:$X,required:!0}}),SX=["absolute","fixed"],EX=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],Pp=Ve({ariaLabel:String,arrowPadding:{type:$e(Number),default:5},effect:{type:String,default:""},contentClass:String,placement:{type:$e(String),values:EX,default:"bottom"},reference:{type:$e(Object),default:null},offset:{type:Number,default:8},strategy:{type:$e(String),values:SX,default:"absolute"},showArrow:{type:Boolean,default:!1}}),Lp=Ve({delayDuration:{type:Number,default:300},defaultOpen:Boolean,open:{type:Boolean,default:void 0},onOpenChange:{type:$e(Function)},"onUpdate:open":{type:$e(Function)}}),$l={type:$e(Function)},Rp=Ve({onBlur:$l,onClick:$l,onFocus:$l,onMouseDown:$l,onMouseEnter:$l,onMouseLeave:$l}),_X=Ve(Te(ne(ne(ne(ne({},Lp),Dp),Rp),Pp),{alwaysOn:Boolean,fullTransition:Boolean,transitionProps:{type:$e(Object),default:null},teleported:Boolean,to:{type:$e(String),default:"body"}})),TX={name:"ElTooltipV2Root"},AX=te(Te(ne({},TX),{props:Lp,setup(e,{expose:t}){const n=e,o=A(n.defaultOpen),s=A(null),l=E({get:()=>ZI(n.open)?o.value:n.open,set:m=>{var v;o.value=m,(v=n["onUpdate:open"])==null||v.call(n,m)}}),r=E(()=>ht(n.delayDuration)&&n.delayDuration>0),{start:a,stop:i}=ol(()=>{l.value=!0},E(()=>n.delayDuration),{immediate:!1}),u=we("tooltip-v2"),c=up(),d=()=>{i(),l.value=!0},f=()=>{b(r)?a():d()},p=d,h=()=>{i(),l.value=!1};return pe(l,m=>{var v;m&&(document.dispatchEvent(new CustomEvent(mc)),p()),(v=n.onOpenChange)==null||v.call(n,m)}),xe(()=>{document.addEventListener(mc,h)}),_t(()=>{i(),document.removeEventListener(mc,h)}),st(Fu,{contentId:c,triggerRef:s,ns:u,onClose:h,onDelayOpen:f,onOpen:p}),t({onOpen:p,onClose:h}),(m,v)=>ie(m.$slots,"default",{open:b(l)})}}));var NX=ge(AX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/root.vue"]]);const MX={name:"ElTooltipV2Arrow"},OX=te(Te(ne({},MX),{props:ne(ne({},Dp),kX),setup(e){const t=e,{ns:n}=Ne(Fu),{arrowRef:o}=Ne(o1),s=E(()=>{const{style:l,width:r,height:a}=t,i=n.namespace.value;return ne({[`--${i}-tooltip-v2-arrow-width`]:`${r}px`,[`--${i}-tooltip-v2-arrow-height`]:`${a}px`,[`--${i}-tooltip-v2-arrow-border-width`]:`${r/2}px`,[`--${i}-tooltip-v2-arrow-cover-width`]:r/2-1},l||{})});return(l,r)=>(C(),M("span",{ref_key:"arrowRef",ref:o,style:De(b(s)),class:_(b(n).e("arrow"))},null,6))}}));var Dg=ge(OX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/arrow.vue"]]);const IX=["data-side"],DX={name:"ElTooltipV2Content"},PX=te(Te(ne({},DX),{props:ne(ne({},Pp),TC),setup(e){const t=e,{triggerRef:n,contentId:o}=Ne(Fu),s=A(t.placement),l=A(t.strategy),r=A(null),{referenceRef:a,contentRef:i,middlewareData:u,x:c,y:d,update:f}=a6({placement:s,strategy:l,middleware:E(()=>{const w=[e6(t.offset)];return t.showArrow&&w.push(i6({arrowRef:r})),w})}),p=jo().nextZIndex(),h=we("tooltip-v2"),g=E(()=>s.value.split("-")[0]),m=E(()=>({position:b(l),top:`${b(d)||0}px`,left:`${b(c)||0}px`,zIndex:p})),v=E(()=>{if(!t.showArrow)return{};const{arrow:w}=b(u);return{[`--${h.namespace.value}-tooltip-v2-arrow-x`]:`${w==null?void 0:w.x}px`||"",[`--${h.namespace.value}-tooltip-v2-arrow-y`]:`${w==null?void 0:w.y}px`||""}}),y=E(()=>[h.e("content"),h.is("dark",t.effect==="dark"),h.is(b(l)),t.contentClass]);return pe(r,()=>f()),pe(()=>t.placement,w=>s.value=w),xe(()=>{pe(()=>t.reference||n.value,w=>{a.value=w||void 0},{immediate:!0})}),st(o1,{arrowRef:r}),(w,S)=>(C(),M("div",{ref_key:"contentRef",ref:i,style:De(b(m)),"data-tooltip-v2-root":""},[w.nowrap?G("v-if",!0):(C(),M("div",{key:0,"data-side":b(g),class:_(b(y))},[ie(w.$slots,"default",{contentStyle:b(m),contentClass:b(y)}),Y(b(T1),{id:b(o),role:"tooltip"},{default:j(()=>[w.ariaLabel?(C(),M(Le,{key:0},[it(he(w.ariaLabel),1)],2112)):ie(w.$slots,"default",{key:1})]),_:3},8,["id"]),ie(w.$slots,"arrow",{style:De(b(v)),side:b(g)})],10,IX))],4))}}));var Pg=ge(PX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/content.vue"]]);const LX=Ve({setRef:{type:$e(Function),required:!0},onlyChild:Boolean});var RX=te({props:LX,setup(e,{slots:t}){const n=A(),o=sp(n,s=>{s?e.setRef(s.nextElementSibling):e.setRef(null)});return()=>{var s;const[l]=((s=t.default)==null?void 0:s.call(t))||[],r=e.onlyChild?y8(l.children):l.children;return Y(Le,{ref:o},[r])}}});const BX={name:"ElTooltipV2Trigger"},VX=te(Te(ne({},BX),{props:ne(ne({},TC),Rp),setup(e){const t=e,{onClose:n,onOpen:o,onDelayOpen:s,triggerRef:l,contentId:r}=Ne(Fu);let a=!1;const i=y=>{l.value=y},u=()=>{a=!1},c=Dt(t.onMouseEnter,s),d=Dt(t.onMouseLeave,n),f=Dt(t.onMouseDown,()=>{n(),a=!0,document.addEventListener("mouseup",u,{once:!0})}),p=Dt(t.onFocus,()=>{a||o()}),h=Dt(t.onBlur,n),g=Dt(t.onClick,y=>{y.detail===0&&n()}),m={blur:h,click:g,focus:p,mousedown:f,mouseenter:c,mouseleave:d},v=(y,w,S)=>{y&&Object.entries(w).forEach(([$,k])=>{y[S]($,k)})};return pe(l,(y,w)=>{v(y,m,"addEventListener"),v(w,m,"removeEventListener"),y&&y.setAttribute("aria-describedby",r.value)}),_t(()=>{v(l.value,m,"removeEventListener"),document.removeEventListener("mouseup",u)}),(y,w)=>y.nowrap?(C(),x(b(RX),{key:0,"set-ref":i,"only-child":""},{default:j(()=>[ie(y.$slots,"default")]),_:3})):(C(),M("button",Et({key:1,ref_key:"triggerRef",ref:l},y.$attrs),[ie(y.$slots,"default")],16))}}));var FX=ge(VX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/trigger.vue"]]);const HX={name:"ElTooltipV2"},zX=te(Te(ne({},HX),{props:_X,setup(e){const n=Ut(e),o=yt(os(n,Object.keys(Dp))),s=yt(os(n,Object.keys(Pp))),l=yt(os(n,Object.keys(Lp))),r=yt(os(n,Object.keys(Rp)));return(a,i)=>(C(),x(NX,to(ds(b(l))),{default:j(({open:u})=>[Y(FX,Et(b(r),{nowrap:""}),{default:j(()=>[ie(a.$slots,"trigger")]),_:3},16),(C(),x(Sa,{to:a.to,disabled:!a.teleported},[a.fullTransition?(C(),x(zt,to(Et({key:0},a.transitionProps)),{default:j(()=>[a.alwaysOn||u?(C(),x(Pg,to(Et({key:0},b(s))),{arrow:j(({style:c,side:d})=>[a.showArrow?(C(),x(Dg,Et({key:0},b(o),{style:c,side:d}),null,16,["style","side"])):G("v-if",!0)]),default:j(()=>[ie(a.$slots,"default")]),_:3},16)):G("v-if",!0)]),_:2},1040)):(C(),M(Le,{key:1},[a.alwaysOn||u?(C(),x(Pg,to(Et({key:0},b(s))),{arrow:j(({style:c,side:d})=>[a.showArrow?(C(),x(Dg,Et({key:0},b(o),{style:c,side:d}),null,16,["style","side"])):G("v-if",!0)]),default:j(()=>[ie(a.$slots,"default")]),_:3},16)):G("v-if",!0)],2112))],8,["to","disabled"]))]),_:3},16))}}));var KX=ge(zX,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tooltip-v2/src/tooltip.vue"]]);const WX=ot(KX),Yd="checked-change",jX={data:{type:Array,default(){return[]}},optionRender:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},YX=(e,t)=>{const{emit:n}=nt(),o=E(()=>e.props.label||"label"),s=E(()=>e.props.key||"key"),l=E(()=>e.props.disabled||"disabled"),r=E(()=>e.data.filter(f=>typeof e.filterMethod=="function"?e.filterMethod(t.query,f):(f[o.value]||f[s.value].toString()).toLowerCase().includes(t.query.toLowerCase()))),a=E(()=>r.value.filter(f=>!f[l.value])),i=E(()=>{const f=t.checked.length,p=e.data.length,{noChecked:h,hasChecked:g}=e.format;return h&&g?f>0?g.replace(/\${checked}/g,f.toString()).replace(/\${total}/g,p.toString()):h.replace(/\${total}/g,p.toString()):`${f}/${p}`}),u=E(()=>{const f=t.checked.length;return f>0&&f{const f=a.value.map(p=>p[s.value]);t.allChecked=f.length>0&&f.every(p=>t.checked.includes(p))},d=f=>{t.checked=f?a.value.map(p=>p[s.value]):[]};return pe(()=>t.checked,(f,p)=>{if(c(),t.checkChangeByUser){const h=f.concat(p).filter(g=>!f.includes(g)||!p.includes(g));n(Yd,f,h)}else n(Yd,f),t.checkChangeByUser=!0}),pe(a,()=>{c()}),pe(()=>e.data,()=>{const f=[],p=r.value.map(h=>h[s.value]);t.checked.forEach(h=>{p.includes(h)&&f.push(h)}),t.checkChangeByUser=!1,t.checked=f}),pe(()=>e.defaultChecked,(f,p)=>{if(p&&f.length===p.length&&f.every(m=>p.includes(m)))return;const h=[],g=a.value.map(m=>m[s.value]);f.forEach(m=>{g.includes(m)&&h.push(m)}),t.checkChangeByUser=!1,t.checked=h},{immediate:!0}),{labelProp:o,keyProp:s,disabledProp:l,filteredData:r,checkableData:a,checkedSummary:i,isIndeterminate:u,updateAllChecked:c,handleAllCheckedChange:d}},UX=te({name:"ElTransferPanel",components:{ElCheckboxGroup:sw,ElCheckbox:ao,ElInput:Zn,OptionContent:({option:e})=>e},props:jX,emits:[Yd],setup(e,{slots:t}){const{t:n}=kt(),o=we("transfer"),s=yt({checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}),{labelProp:l,keyProp:r,disabledProp:a,filteredData:i,checkedSummary:u,isIndeterminate:c,handleAllCheckedChange:d}=YX(e,s),f=E(()=>s.query.length>0&&i.value.length===0),p=E(()=>!!t.default()[0].children.length),{checked:h,allChecked:g,query:m,inputHover:v,checkChangeByUser:y}=Ut(s);return{ns:o,labelProp:l,keyProp:r,disabledProp:a,filteredData:i,checkedSummary:u,isIndeterminate:c,handleAllCheckedChange:d,checked:h,allChecked:g,query:m,inputHover:v,checkChangeByUser:y,hasNoMatch:f,SearchIcon:TL,hasFooter:p,t:n}}});function qX(e,t,n,o,s,l){const r=le("el-checkbox"),a=le("el-input"),i=le("option-content"),u=le("el-checkbox-group");return C(),M("div",{class:_(e.ns.b("panel"))},[D("p",{class:_(e.ns.be("panel","header"))},[Y(r,{modelValue:e.allChecked,"onUpdate:modelValue":t[0]||(t[0]=c=>e.allChecked=c),indeterminate:e.isIndeterminate,onChange:e.handleAllCheckedChange},{default:j(()=>[it(he(e.title)+" ",1),D("span",null,he(e.checkedSummary),1)]),_:1},8,["modelValue","indeterminate","onChange"])],2),D("div",{class:_([e.ns.be("panel","body"),e.ns.is("with-footer",e.hasFooter)])},[e.filterable?(C(),x(a,{key:0,modelValue:e.query,"onUpdate:modelValue":t[1]||(t[1]=c=>e.query=c),class:_(e.ns.be("panel","filter")),size:"default",placeholder:e.placeholder,"prefix-icon":e.SearchIcon,clearable:"",onMouseenter:t[2]||(t[2]=c=>e.inputHover=!0),onMouseleave:t[3]||(t[3]=c=>e.inputHover=!1)},null,8,["modelValue","class","placeholder","prefix-icon"])):G("v-if",!0),Ge(Y(u,{modelValue:e.checked,"onUpdate:modelValue":t[4]||(t[4]=c=>e.checked=c),class:_([e.ns.is("filterable",e.filterable),e.ns.be("panel","list")])},{default:j(()=>[(C(!0),M(Le,null,rt(e.filteredData,c=>(C(),x(r,{key:c[e.keyProp],class:_(e.ns.be("panel","item")),label:c[e.keyProp],disabled:c[e.disabledProp]},{default:j(()=>[Y(i,{option:e.optionRender(c)},null,8,["option"])]),_:2},1032,["class","label","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[pt,!e.hasNoMatch&&e.data.length>0]]),Ge(D("p",{class:_(e.ns.be("panel","empty"))},he(e.hasNoMatch?e.t("el.transfer.noMatch"):e.t("el.transfer.noData")),3),[[pt,e.hasNoMatch||e.data.length===0]])],2),e.hasFooter?(C(),M("p",{key:0,class:_(e.ns.be("panel","footer"))},[ie(e.$slots,"default")],2)):G("v-if",!0)],2)}var GX=ge(UX,[["render",qX],["__file","/home/runner/work/element-plus/element-plus/packages/components/transfer/src/transfer-panel.vue"]]);const XX=e=>{const t=E(()=>e.props.key),n=E(()=>e.data.reduce((l,r)=>(l[r[t.value]]=r)&&l,{})),o=E(()=>e.data.filter(l=>!e.modelValue.includes(l[t.value]))),s=E(()=>e.targetOrder==="original"?e.data.filter(l=>e.modelValue.includes(l[t.value])):e.modelValue.reduce((l,r)=>{const a=n.value[r];return a&&l.push(a),l},[]));return{propsKey:t,sourceData:o,targetData:s}},NC="left-check-change",MC="right-check-change",JX=(e,t)=>({onSourceCheckedChange:(s,l)=>{e.leftChecked=s,l!==void 0&&t(NC,s,l)},onTargetCheckedChange:(s,l)=>{e.rightChecked=s,l!==void 0&&t(MC,s,l)}}),ZX=(e,t,n,o)=>{const s=(a,i,u)=>{o(tt,a),o(qt,a,i,u)};return{addToLeft:()=>{const a=e.modelValue.slice();t.rightChecked.forEach(i=>{const u=a.indexOf(i);u>-1&&a.splice(u,1)}),s(a,"left",t.rightChecked)},addToRight:()=>{let a=e.modelValue.slice();const i=e.data.filter(u=>{const c=u[n.value];return t.leftChecked.includes(c)&&!e.modelValue.includes(c)}).map(u=>u[n.value]);a=e.targetOrder==="unshift"?i.concat(a):a.concat(i),e.targetOrder==="original"&&(a=e.data.filter(u=>a.includes(u[n.value])).map(u=>u[n.value])),s(a,"right",t.leftChecked)}}},QX=te({name:"ElTransfer",components:{TransferPanel:GX,ElButton:Kn,ElIcon:je,ArrowLeft:pl,ArrowRight:Jn},props:{data:{type:Array,default:()=>[]},titles:{type:Array,default:()=>[]},buttonTexts:{type:Array,default:()=>[]},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:()=>[]},rightDefaultChecked:{type:Array,default:()=>[]},renderContent:Function,modelValue:{type:Array,default:()=>[]},format:{type:Object,default:()=>({})},filterable:{type:Boolean,default:!1},props:{type:Object,default:()=>({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,default:"original",validator:e=>["original","push","unshift"].includes(e)}},emits:[tt,qt,NC,MC],setup(e,{emit:t,slots:n}){const{t:o}=kt(),s=we("transfer"),l=Ne(Un,{}),r=yt({leftChecked:[],rightChecked:[]}),{propsKey:a,sourceData:i,targetData:u}=XX(e),{onSourceCheckedChange:c,onTargetCheckedChange:d}=JX(r,t),{addToLeft:f,addToRight:p}=ZX(e,r,a,t),h=A(),g=A(),m=k=>{switch(k){case"left":h.value.query="";break;case"right":g.value.query="";break}},v=E(()=>e.buttonTexts.length===2),y=E(()=>e.titles[0]||o("el.transfer.titles.0")),w=E(()=>e.titles[1]||o("el.transfer.titles.1")),S=E(()=>e.filterPlaceholder||o("el.transfer.filterPlaceholder"));pe(()=>e.modelValue,()=>{var k;(k=l.validate)==null||k.call(l,"change").catch(T=>void 0)});const $=E(()=>k=>e.renderContent?e.renderContent(Pe,k):n.default?n.default({option:k}):Pe("span",k[e.props.label]||k[e.props.key]));return Te(ne({ns:s,sourceData:i,targetData:u,onSourceCheckedChange:c,onTargetCheckedChange:d,addToLeft:f,addToRight:p},Ut(r)),{hasButtonTexts:v,leftPanelTitle:y,rightPanelTitle:w,panelFilterPlaceholder:S,clearQuery:m,leftPanel:h,rightPanel:g,optionRender:$})}}),xX={key:0},eJ={key:0};function tJ(e,t,n,o,s,l){const r=le("transfer-panel"),a=le("arrow-left"),i=le("el-icon"),u=le("el-button"),c=le("arrow-right");return C(),M("div",{class:_(e.ns.b())},[Y(r,{ref:"leftPanel",data:e.sourceData,"option-render":e.optionRender,placeholder:e.panelFilterPlaceholder,title:e.leftPanelTitle,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,"default-checked":e.leftDefaultChecked,props:e.props,onCheckedChange:e.onSourceCheckedChange},{default:j(()=>[ie(e.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),D("div",{class:_(e.ns.e("buttons"))},[Y(u,{type:"primary",class:_([e.ns.e("button"),e.ns.is("with-texts",e.hasButtonTexts)]),disabled:e.rightChecked.length===0,onClick:e.addToLeft},{default:j(()=>[Y(i,null,{default:j(()=>[Y(a)]),_:1}),e.buttonTexts[0]!==void 0?(C(),M("span",xX,he(e.buttonTexts[0]),1)):G("v-if",!0)]),_:1},8,["class","disabled","onClick"]),Y(u,{type:"primary",class:_([e.ns.e("button"),e.ns.is("with-texts",e.hasButtonTexts)]),disabled:e.leftChecked.length===0,onClick:e.addToRight},{default:j(()=>[e.buttonTexts[1]!==void 0?(C(),M("span",eJ,he(e.buttonTexts[1]),1)):G("v-if",!0),Y(i,null,{default:j(()=>[Y(c)]),_:1})]),_:1},8,["class","disabled","onClick"])],2),Y(r,{ref:"rightPanel",data:e.targetData,"option-render":e.optionRender,placeholder:e.panelFilterPlaceholder,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,title:e.rightPanelTitle,"default-checked":e.rightDefaultChecked,props:e.props,onCheckedChange:e.onTargetCheckedChange},{default:j(()=>[ie(e.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2)}var Oi=ge(QX,[["render",tJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/transfer/src/index.vue"]]);Oi.install=e=>{e.component(Oi.name,Oi)};const nJ=Oi,oJ=nJ,Bl="$treeNodeId",Lg=function(e,t){!t||t[Bl]||Object.defineProperty(t,Bl,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},Bp=function(e,t){return e?t[e]:t[Bl]},Ud=e=>{let t=!0,n=!0,o=!0;for(let s=0,l=e.length;s0&&t.lazy&&t.defaultExpandAll&&this.expand(),Array.isArray(this.data)||Lg(this,this.data),!this.data)return;const o=t.defaultExpandedKeys,s=t.key;s&&o&&o.includes(this.key)&&this.expand(null,t.autoExpandParent),s&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),this.parent&&(this.level===1||this.parent.expanded===!0)&&(this.canFocus=!0)}setData(t){Array.isArray(t)||Lg(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&Array.isArray(this.data)?n=this.data:n=ei(this,"children")||[];for(let o=0,s=n.length;o-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(o=>o===t||n&&o.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,o){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof Js)){if(!o){const s=this.getChildren(!0);s.includes(t.data)||(typeof n=="undefined"||n<0?s.push(t.data):s.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=yt(new Js(t)),t instanceof Js&&t.initialize()}t.level=this.level+1,typeof n=="undefined"||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let o;n&&(o=this.childNodes.indexOf(n)),this.insertChild(t,o)}insertAfter(t,n){let o;n&&(o=this.childNodes.indexOf(n),o!==-1&&(o+=1)),this.insertChild(t,o)}removeChild(t){const n=this.getChildren()||[],o=n.indexOf(t.data);o>-1&&n.splice(o,1);const s=this.childNodes.indexOf(t);s>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(s,1)),this.updateLeafState()}removeChildByData(t){let n=null;for(let o=0;o{if(n){let s=this.parent;for(;s.level>0;)s.expanded=!0,s=s.parent}this.expanded=!0,t&&t(),this.childNodes.forEach(s=>{s.canFocus=!0})};this.shouldLoadData()?this.loadData(s=>{Array.isArray(s)&&(this.checked?this.setChecked(!0,!0):this.store.checkStrictly||Ii(this),o())}):o()}doCreateChildren(t,n={}){t.forEach(o=>{this.insertChild(Object.assign({data:o},n),void 0,!0)})}collapse(){this.expanded=!1,this.childNodes.forEach(t=>{t.canFocus=!1})}shouldLoadData(){return this.store.lazy===!0&&this.store.load&&!this.loaded}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&typeof this.isLeafByUser!="undefined"){this.isLeaf=this.isLeafByUser;return}const t=this.childNodes;if(!this.store.lazy||this.store.lazy===!0&&this.loaded===!0){this.isLeaf=!t||t.length===0;return}this.isLeaf=!1}setChecked(t,n,o,s){if(this.indeterminate=t==="half",this.checked=t===!0,this.store.checkStrictly)return;if(!(this.shouldLoadData()&&!this.store.checkDescendants)){const{all:r,allWithoutDisable:a}=Ud(this.childNodes);!this.isLeaf&&!r&&a&&(this.checked=!1,t=!1);const i=()=>{if(n){const u=this.childNodes;for(let f=0,p=u.length;f{i(),Ii(this)},{checked:t!==!1});return}else i()}const l=this.parent;!l||l.level===0||o||Ii(l)}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const o=this.store.props;let s="children";return o&&(s=o.children||"children"),n[s]===void 0&&(n[s]=null),t&&!n[s]&&(n[s]=[]),n[s]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(l=>l.data),o={},s=[];t.forEach((l,r)=>{const a=l[Bl];!!a&&n.findIndex(u=>u[Bl]===a)>=0?o[a]={index:r,data:l}:s.push({index:r,data:l})}),this.store.lazy||n.forEach(l=>{o[l[Bl]]||this.removeChildByData(l)}),s.forEach(({index:l,data:r})=>{this.insertChild({data:r},l)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy===!0&&this.store.load&&!this.loaded&&(!this.loading||Object.keys(n).length)){this.loading=!0;const o=s=>{this.loaded=!0,this.loading=!1,this.childNodes=[],this.doCreateChildren(s,n),this.updateLeafState(),t&&t.call(this,s)};this.store.load(this,o)}else t&&t.call(this)}}class lJ{constructor(t){this.currentNode=null,this.currentNodeKey=null;for(const n in t)at(t,n)&&(this[n]=t[n]);this.nodesMap={}}initialize(){this.root=new Js({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load?this.load(this.root,n=>{this.root.doCreateChildren(n),this._initDefaultCheckedNodes()}):this._initDefaultCheckedNodes()}filter(t){const n=this.filterNodeMethod,o=this.lazy,s=function(l){const r=l.root?l.root.childNodes:l.childNodes;if(r.forEach(a=>{a.visible=n.call(a,t,a.data,a),s(a)}),!l.visible&&r.length){let a=!0;a=!r.some(i=>i.visible),l.root?l.root.visible=a===!1:l.visible=a===!1}!t||l.visible&&!l.isLeaf&&!o&&l.expand()};s(this)}setData(t){t!==this.root.data?(this.root.setData(t),this._initDefaultCheckedNodes()):this.root.updateChildren()}getNode(t){if(t instanceof Js)return t;const n=typeof t!="object"?t:Bp(this.key,t);return this.nodesMap[n]||null}insertBefore(t,n){const o=this.getNode(n);o.parent.insertBefore({data:t},o)}insertAfter(t,n){const o=this.getNode(n);o.parent.insertAfter({data:t},o)}remove(t){const n=this.getNode(t);n&&n.parent&&(n===this.currentNode&&(this.currentNode=null),n.parent.removeChild(n))}append(t,n){const o=n?this.getNode(n):this.root;o&&o.insertChild({data:t})}_initDefaultCheckedNodes(){const t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach(o=>{const s=n[o];s&&s.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(t){(this.defaultCheckedKeys||[]).includes(t.key)&&t.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(t){t!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=t,this._initDefaultCheckedNodes())}registerNode(t){const n=this.key;!t||!t.data||(n?t.key!==void 0&&(this.nodesMap[t.key]=t):this.nodesMap[t.id]=t)}deregisterNode(t){!this.key||!t||!t.data||(t.childNodes.forEach(o=>{this.deregisterNode(o)}),delete this.nodesMap[t.key])}getCheckedNodes(t=!1,n=!1){const o=[],s=function(l){(l.root?l.root.childNodes:l.childNodes).forEach(a=>{(a.checked||n&&a.indeterminate)&&(!t||t&&a.isLeaf)&&o.push(a.data),s(a)})};return s(this),o}getCheckedKeys(t=!1){return this.getCheckedNodes(t).map(n=>(n||{})[this.key])}getHalfCheckedNodes(){const t=[],n=function(o){(o.root?o.root.childNodes:o.childNodes).forEach(l=>{l.indeterminate&&t.push(l.data),n(l)})};return n(this),t}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(t=>(t||{})[this.key])}_getAllNodes(){const t=[],n=this.nodesMap;for(const o in n)at(n,o)&&t.push(n[o]);return t}updateChildren(t,n){const o=this.nodesMap[t];if(!o)return;const s=o.childNodes;for(let l=s.length-1;l>=0;l--){const r=s[l];this.remove(r.data)}for(let l=0,r=n.length;li.level-a.level),l=Object.create(null),r=Object.keys(o);s.forEach(a=>a.setChecked(!1,!1));for(let a=0,i=s.length;a0;)l[f.data[t]]=!0,f=f.parent;if(u.isLeaf||this.checkStrictly){u.setChecked(!0,!1);continue}if(u.setChecked(!0,!0),n){u.setChecked(!1,!1);const p=function(h){h.childNodes.forEach(m=>{m.isLeaf||m.setChecked(!1,!1),p(m)})};p(u)}}}setCheckedNodes(t,n=!1){const o=this.key,s={};t.forEach(l=>{s[(l||{})[o]]=!0}),this._setCheckedKeys(o,n,s)}setCheckedKeys(t,n=!1){this.defaultCheckedKeys=t;const o=this.key,s={};t.forEach(l=>{s[l]=!0}),this._setCheckedKeys(o,n,s)}setDefaultExpandedKeys(t){t=t||[],this.defaultExpandedKeys=t,t.forEach(n=>{const o=this.getNode(n);o&&o.expand(null,this.autoExpandParent)})}setChecked(t,n,o){const s=this.getNode(t);s&&s.setChecked(!!n,o)}getCurrentNode(){return this.currentNode}setCurrentNode(t){const n=this.currentNode;n&&(n.isCurrent=!1),this.currentNode=t,this.currentNode.isCurrent=!0}setUserCurrentNode(t,n=!0){const o=t[this.key],s=this.nodesMap[o];this.setCurrentNode(s),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0)}setCurrentNodeKey(t,n=!0){if(t==null){this.currentNode&&(this.currentNode.isCurrent=!1),this.currentNode=null;return}const o=this.getNode(t);o&&(this.setCurrentNode(o),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0))}}const rJ=te({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=we("tree"),n=Ne("NodeInstance"),o=Ne("RootTree");return()=>{const s=e.node,{data:l,store:r}=s;return e.renderContent?e.renderContent(Pe,{_self:n,node:s,data:l,store:r}):o.ctx.slots.default?o.ctx.slots.default({node:s,data:l}):Pe("span",{class:t.be("node","label")},[s.label])}}});var aJ=ge(rJ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tree/src/tree-node-content.vue"]]);function OC(e){const t=Ne("TreeNodeMap",null),n={treeNodeExpand:o=>{e.node!==o&&e.node.collapse()},children:[]};return t&&t.children.push(n),st("TreeNodeMap",n),{broadcastExpanded:o=>{if(!!e.accordion)for(const s of n.children)s.treeNodeExpand(o)}}}const IC=Symbol("dragEvents");function iJ({props:e,ctx:t,el$:n,dropIndicator$:o,store:s}){const l=we("tree"),r=A({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return st(IC,{treeNodeDragStart:({event:c,treeNode:d})=>{if(typeof e.allowDrag=="function"&&!e.allowDrag(d.node))return c.preventDefault(),!1;c.dataTransfer.effectAllowed="move";try{c.dataTransfer.setData("text/plain","")}catch{}r.value.draggingNode=d,t.emit("node-drag-start",d.node,c)},treeNodeDragOver:({event:c,treeNode:d})=>{const f=d,p=r.value.dropNode;p&&p!==f&&fn(p.$el,l.is("drop-inner"));const h=r.value.draggingNode;if(!h||!f)return;let g=!0,m=!0,v=!0,y=!0;typeof e.allowDrop=="function"&&(g=e.allowDrop(h.node,f.node,"prev"),y=m=e.allowDrop(h.node,f.node,"inner"),v=e.allowDrop(h.node,f.node,"next")),c.dataTransfer.dropEffect=m||g||v?"move":"none",(g||m||v)&&p!==f&&(p&&t.emit("node-drag-leave",h.node,p.node,c),t.emit("node-drag-enter",h.node,f.node,c)),(g||m||v)&&(r.value.dropNode=f),f.node.nextSibling===h.node&&(v=!1),f.node.previousSibling===h.node&&(g=!1),f.node.contains(h.node,!1)&&(m=!1),(h.node===f.node||h.node.contains(f.node))&&(g=!1,m=!1,v=!1);const w=f.$el.getBoundingClientRect(),S=n.value.getBoundingClientRect();let $;const k=g?m?.25:v?.45:1:-1,T=v?m?.75:g?.55:0:1;let O=-9999;const L=c.clientY-w.top;Lw.height*T?$="after":m?$="inner":$="none";const B=f.$el.querySelector(`.${l.be("node","expand-icon")}`).getBoundingClientRect(),V=o.value;$==="before"?O=B.top-S.top:$==="after"&&(O=B.bottom-S.top),V.style.top=`${O}px`,V.style.left=`${B.right-S.left}px`,$==="inner"?wo(f.$el,l.is("drop-inner")):fn(f.$el,l.is("drop-inner")),r.value.showDropIndicator=$==="before"||$==="after",r.value.allowDrop=r.value.showDropIndicator||y,r.value.dropType=$,t.emit("node-drag-over",h.node,f.node,c)},treeNodeDragEnd:c=>{const{draggingNode:d,dropType:f,dropNode:p}=r.value;if(c.preventDefault(),c.dataTransfer.dropEffect="move",d&&p){const h={data:d.node.data};f!=="none"&&d.node.remove(),f==="before"?p.node.parent.insertBefore(h,p.node):f==="after"?p.node.parent.insertAfter(h,p.node):f==="inner"&&p.node.insertChild(h),f!=="none"&&s.value.registerNode(h),fn(p.$el,l.is("drop-inner")),t.emit("node-drag-end",d.node,p.node,f,c),f!=="none"&&t.emit("node-drop",d.node,p.node,f,c)}d&&!p&&t.emit("node-drag-end",d.node,null,f,c),r.value.showDropIndicator=!1,r.value.draggingNode=null,r.value.dropNode=null,r.value.allowDrop=!0}}),{dragState:r}}const uJ=te({name:"ElTreeNode",components:{ElCollapseTransition:Yu,ElCheckbox:ao,NodeContent:aJ,ElIcon:je,Loading:gs},props:{node:{type:Js,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:{type:Boolean,default:!1}},emits:["node-expand"],setup(e,t){const n=we("tree"),{broadcastExpanded:o}=OC(e),s=Ne("RootTree"),l=A(!1),r=A(!1),a=A(null),i=A(null),u=A(null),c=Ne(IC),d=nt();st("NodeInstance",d),e.node.expanded&&(l.value=!0,r.value=!0);const f=s.props.children||"children";pe(()=>{const L=e.node.data[f];return L&&[...L]},()=>{e.node.updateChildren()}),pe(()=>e.node.indeterminate,L=>{g(e.node.checked,L)}),pe(()=>e.node.checked,L=>{g(L,e.node.indeterminate)}),pe(()=>e.node.expanded,L=>{ze(()=>l.value=L),L&&(r.value=!0)});const p=L=>Bp(s.props.nodeKey,L.data),h=L=>{const B=e.props.class;if(!B)return{};let V;if(et(B)){const{data:H}=L;V=B(H,L)}else V=B;return Qe(V)?{[V]:!0}:V},g=(L,B)=>{(a.value!==L||i.value!==B)&&s.ctx.emit("check-change",e.node.data,L,B),a.value=L,i.value=B},m=L=>{const B=s.store.value;B.setCurrentNode(e.node),s.ctx.emit("current-change",B.currentNode?B.currentNode.data:null,B.currentNode),s.currentNode.value=e.node,s.props.expandOnClickNode&&y(),s.props.checkOnClickNode&&!e.node.disabled&&w(null,{target:{checked:!e.node.checked}}),s.ctx.emit("node-click",e.node.data,e.node,d,L)},v=L=>{s.instance.vnode.props.onNodeContextmenu&&(L.stopPropagation(),L.preventDefault()),s.ctx.emit("node-contextmenu",L,e.node.data,e.node,d)},y=()=>{e.node.isLeaf||(l.value?(s.ctx.emit("node-collapse",e.node.data,e.node,d),e.node.collapse()):(e.node.expand(),t.emit("node-expand",e.node.data,e.node,d)))},w=(L,B)=>{e.node.setChecked(B.target.checked,!s.props.checkStrictly),ze(()=>{const V=s.store.value;s.ctx.emit("check",e.node.data,{checkedNodes:V.getCheckedNodes(),checkedKeys:V.getCheckedKeys(),halfCheckedNodes:V.getHalfCheckedNodes(),halfCheckedKeys:V.getHalfCheckedKeys()})})};return{ns:n,node$:u,tree:s,expanded:l,childNodeRendered:r,oldChecked:a,oldIndeterminate:i,getNodeKey:p,getNodeClass:h,handleSelectChange:g,handleClick:m,handleContextMenu:v,handleExpandIconClick:y,handleCheckChange:w,handleChildNodeExpand:(L,B,V)=>{o(B),s.ctx.emit("node-expand",L,B,V)},handleDragStart:L=>{!s.props.draggable||c.treeNodeDragStart({event:L,treeNode:e})},handleDragOver:L=>{L.preventDefault(),s.props.draggable&&c.treeNodeDragOver({event:L,treeNode:{$el:u.value,node:e.node}})},handleDrop:L=>{L.preventDefault()},handleDragEnd:L=>{!s.props.draggable||c.treeNodeDragEnd(L)},CaretRight:D0}}}),cJ=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],dJ=["aria-expanded"];function fJ(e,t,n,o,s,l){const r=le("el-icon"),a=le("el-checkbox"),i=le("loading"),u=le("node-content"),c=le("el-tree-node"),d=le("el-collapse-transition");return Ge((C(),M("div",{ref:"node$",class:_([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[1]||(t[1]=Ke((...f)=>e.handleClick&&e.handleClick(...f),["stop"])),onContextmenu:t[2]||(t[2]=(...f)=>e.handleContextMenu&&e.handleContextMenu(...f)),onDragstart:t[3]||(t[3]=Ke((...f)=>e.handleDragStart&&e.handleDragStart(...f),["stop"])),onDragover:t[4]||(t[4]=Ke((...f)=>e.handleDragOver&&e.handleDragOver(...f),["stop"])),onDragend:t[5]||(t[5]=Ke((...f)=>e.handleDragEnd&&e.handleDragEnd(...f),["stop"])),onDrop:t[6]||(t[6]=Ke((...f)=>e.handleDrop&&e.handleDrop(...f),["stop"]))},[D("div",{class:_(e.ns.be("node","content")),style:De({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(C(),x(r,{key:0,class:_([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:Ke(e.handleExpandIconClick,["stop"])},{default:j(()=>[(C(),x(ft(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):G("v-if",!0),e.showCheckbox?(C(),x(a,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=Ke(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):G("v-if",!0),e.node.loading?(C(),x(r,{key:2,class:_([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:j(()=>[Y(i)]),_:1},8,["class"])):G("v-if",!0),Y(u,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),Y(d,null,{default:j(()=>[!e.renderAfterExpand||e.childNodeRendered?Ge((C(),M("div",{key:0,class:_(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded},[(C(!0),M(Le,null,rt(e.node.childNodes,f=>(C(),x(c,{key:e.getNodeKey(f),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:f,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,dJ)),[[pt,e.expanded]]):G("v-if",!0)]),_:1})],42,cJ)),[[pt,e.node.visible]])}var pJ=ge(uJ,[["render",fJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree/src/tree-node.vue"]]);function hJ({el$:e},t){const n=we("tree"),o=jt([]),s=jt([]);xe(()=>{r(),Tt(e.value,"keydown",l)}),_t(()=>{Vt(e.value,"keydown",l)}),Xn(()=>{o.value=Array.from(e.value.querySelectorAll("[role=treeitem]")),s.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"))}),pe(s,a=>{a.forEach(i=>{i.setAttribute("tabindex","-1")})});const l=a=>{const i=a.target;if(!i.className.includes(n.b("node")))return;const u=a.code;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`));const c=o.value.indexOf(i);let d;if([Ie.up,Ie.down].includes(u)){if(a.preventDefault(),u===Ie.up){d=c===-1?0:c!==0?c-1:o.value.length-1;const p=d;for(;!t.value.getNode(o.value[d].dataset.key).canFocus;){if(d--,d===p){d=-1;break}d<0&&(d=o.value.length-1)}}else{d=c===-1?0:c=o.value.length&&(d=0)}}d!==-1&&o.value[d].focus()}[Ie.left,Ie.right].includes(u)&&(a.preventDefault(),i.click());const f=i.querySelector('[type="checkbox"]');[Ie.enter,Ie.space].includes(u)&&f&&(a.preventDefault(),f.click())},r=()=>{var a;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`)),s.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"));const i=e.value.querySelectorAll(`.${n.is("checked")}[role=treeitem]`);if(i.length){i[0].setAttribute("tabindex","0");return}(a=o.value[0])==null||a.setAttribute("tabindex","0")}}const mJ=te({name:"ElTree",components:{ElTreeNode:pJ},props:{data:{type:Array,default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},icon:[String,Object]},emits:["check-change","current-change","node-click","node-contextmenu","node-collapse","node-expand","check","node-drag-start","node-drag-end","node-drop","node-drag-leave","node-drag-enter","node-drag-over"],setup(e,t){const{t:n}=kt(),o=we("tree"),s=A(new lJ({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));s.value.initialize();const l=A(s.value.root),r=A(null),a=A(null),i=A(null),{broadcastExpanded:u}=OC(e),{dragState:c}=iJ({props:e,ctx:t,el$:a,dropIndicator$:i,store:s});hJ({el$:a},s);const d=E(()=>{const{childNodes:N}=l.value;return!N||N.length===0||N.every(({visible:I})=>!I)});pe(()=>e.defaultCheckedKeys,N=>{s.value.setDefaultCheckedKey(N)}),pe(()=>e.defaultExpandedKeys,N=>{s.value.setDefaultExpandedKeys(N)}),pe(()=>e.data,N=>{s.value.setData(N)},{deep:!0}),pe(()=>e.checkStrictly,N=>{s.value.checkStrictly=N});const f=N=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");s.value.filter(N)},p=N=>Bp(e.nodeKey,N.data),h=N=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");const I=s.value.getNode(N);if(!I)return[];const U=[I.data];let q=I.parent;for(;q&&q!==l.value;)U.push(q.data),q=q.parent;return U.reverse()},g=(N,I)=>s.value.getCheckedNodes(N,I),m=N=>s.value.getCheckedKeys(N),v=()=>{const N=s.value.getCurrentNode();return N?N.data:null},y=()=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");const N=v();return N?N[e.nodeKey]:null},w=(N,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");s.value.setCheckedNodes(N,I)},S=(N,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");s.value.setCheckedKeys(N,I)},$=(N,I,U)=>{s.value.setChecked(N,I,U)},k=()=>s.value.getHalfCheckedNodes(),T=()=>s.value.getHalfCheckedKeys(),O=(N,I=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");s.value.setUserCurrentNode(N,I)},L=(N,I=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");s.value.setCurrentNodeKey(N,I)},B=N=>s.value.getNode(N),V=N=>{s.value.remove(N)},H=(N,I)=>{s.value.append(N,I)},R=(N,I)=>{s.value.insertBefore(N,I)},z=(N,I)=>{s.value.insertAfter(N,I)},W=(N,I,U)=>{u(I),t.emit("node-expand",N,I,U)},P=(N,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");s.value.updateChildren(N,I)};return st("RootTree",{ctx:t,props:e,store:s,root:l,currentNode:r,instance:nt()}),{ns:o,store:s,root:l,currentNode:r,dragState:c,el$:a,dropIndicator$:i,isEmpty:d,filter:f,getNodeKey:p,getNodePath:h,getCheckedNodes:g,getCheckedKeys:m,getCurrentNode:v,getCurrentKey:y,setCheckedNodes:w,setCheckedKeys:S,setChecked:$,getHalfCheckedNodes:k,getHalfCheckedKeys:T,setCurrentNode:O,setCurrentKey:L,t:n,getNode:B,remove:V,append:H,insertBefore:R,insertAfter:z,handleNodeExpand:W,updateKeyChildren:P}}});function vJ(e,t,n,o,s,l){var r;const a=le("el-tree-node");return C(),M("div",{ref:"el$",class:_([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(C(!0),M(Le,null,rt(e.root.childNodes,i=>(C(),x(a,{key:e.getNodeKey(i),node:i,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(C(),M("div",{key:0,class:_(e.ns.e("empty-block"))},[D("span",{class:_(e.ns.e("empty-text"))},he((r=e.emptyText)!=null?r:e.t("el.tree.emptyText")),3)],2)):G("v-if",!0),Ge(D("div",{ref:"dropIndicator$",class:_(e.ns.e("drop-indicator"))},null,2),[[pt,e.dragState.showDropIndicator]])],2)}var Di=ge(mJ,[["render",vJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree/src/tree.vue"]]);Di.install=e=>{e.component(Di.name,Di)};const lu=Di,gJ=lu,bJ=(e,{attrs:t},{tree:n,key:o})=>{const s=we("tree-select"),l=Te(ne(ne({},os(Ut(e),Object.keys(ll.props))),t),{valueKey:o,popperClass:E(()=>{const r=[s.e("popper")];return e.popperClass&&r.push(e.popperClass),r.join(" ")}),filterMethod:(r="")=>{e.filterMethod&&e.filterMethod(r),ze(()=>{var a;(a=n.value)==null||a.filter(r)})},onVisibleChange:r=>{var a;(a=t.onVisibleChange)==null||a.call(t,r),e.filterable&&r&&l.filterMethod()}});return l},yJ=te({extends:eu,setup(e,t){const n=eu.setup(e,t);return delete n.selectOptionClick,n},methods:{selectOptionClick(){this.$el.parentElement.click()}}}),wJ=(e,{attrs:t,slots:n,emit:o},{select:s,tree:l,key:r})=>{pe(()=>e.modelValue,()=>{e.showCheckbox&&ze(()=>{const u=l.value;u&&!_n(u.getCheckedKeys(),Rc(e.modelValue))&&u.setCheckedKeys(Rc(e.modelValue))})},{immediate:!0,deep:!0});const a=E(()=>ne({value:r.value},e.props)),i=(u,c)=>{var d;const f=a.value[u];return et(f)?f(c,(d=l.value)==null?void 0:d.getNode(i("value",c))):c[f]};return Te(ne(ne({},os(Ut(e),Object.keys(lu.props))),t),{nodeKey:r,defaultExpandedKeys:E(()=>e.defaultExpandedKeys?e.defaultExpandedKeys.concat(e.modelValue):Rc(e.modelValue)),renderContent:(u,{node:c,data:d,store:f})=>u(yJ,{value:i("value",d),label:i("label",d),disabled:i("disabled",d)},e.renderContent?()=>e.renderContent(u,{node:c,data:d,store:f}):n.default?()=>n.default({node:c,data:d,store:f}):void 0),filterNodeMethod:(u,c,d)=>{var f;return e.filterNodeMethod?e.filterNodeMethod(u,c,d):u?(f=i("label",c))==null?void 0:f.includes(u):!0},onNodeClick:(u,c,d)=>{var f,p,h;if((f=t.onNodeClick)==null||f.call(t,u,c,d),e.checkStrictly||c.isLeaf){if(!i("disabled",u)){const g=(p=s.value)==null?void 0:p.options.get(i("value",u));(h=s.value)==null||h.handleOptionSelect(g,!0)}}else d.ctx.handleExpandIconClick()},onCheck:(u,c)=>{var d,f;(d=t.onCheck)==null||d.call(t,u,c);const p=e.checkStrictly?c.checkedKeys:(f=l.value)==null?void 0:f.getCheckedKeys(!0),h=i("value",u);o(tt,e.multiple?p:p.includes(h)?h:void 0)}})};function Rc(e){return Array.isArray(e)?e:e||e===0?[e]:[]}const CJ=te({name:"ElTreeSelect",props:ne(ne({},ll.props),lu.props),setup(e,t){const{slots:n,expose:o}=t,s=A(),l=A(),r=E(()=>e.valueKey||e.nodeKey||"value"),a=bJ(e,t,{select:s,tree:l,key:r}),i=wJ(e,t,{select:s,tree:l,key:r}),u=yt({});return o(u),xe(()=>{Object.assign(u,ne(ne({},os(l.value,["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"])),os(s.value,["focus","blur"])))}),()=>Pe(ll,yt(Te(ne({},a),{ref:c=>s.value=c})),Te(ne({},n),{default:()=>Pe(lu,yt(Te(ne({},i),{ref:c=>l.value=c})))}))}});var Pi=ge(CJ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/tree-select/src/tree-select.vue"]]);Pi.install=e=>{e.component(Pi.name,Pi)};const $J=Pi,kJ=$J,Vp=Symbol(),SJ={key:-1,level:-1,data:{}};var Ir=(e=>(e.KEY="id",e.LABEL="label",e.CHILDREN="children",e.DISABLED="disabled",e))(Ir||{}),qd=(e=>(e.ADD="add",e.DELETE="delete",e))(qd||{});const EJ=Ve({data:{type:$e(Array),default:()=>Pt([])},emptyText:{type:String},height:{type:Number,default:200},props:{type:$e(Object),default:()=>Pt({children:"children",label:"label",disabled:"disabled",value:"id"})},highlightCurrent:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},defaultCheckedKeys:{type:$e(Array),default:()=>Pt([])},checkStrictly:{type:Boolean,default:!1},defaultExpandedKeys:{type:$e(Array),default:()=>Pt([])},indent:{type:Number,default:16},icon:{type:String},expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:{type:Boolean,default:!1},currentNodeKey:{type:$e([String,Number])},accordion:{type:Boolean,default:!1},filterMethod:{type:$e(Function)},perfMode:{type:Boolean,default:!0}}),_J=Ve({node:{type:$e(Object),default:()=>Pt(SJ)},expanded:{type:Boolean,default:!1},checked:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},current:{type:Boolean,default:!1},hiddenExpandIcon:{type:Boolean,default:!1}}),TJ=Ve({node:{type:$e(Object),required:!0}}),DC="node-click",PC="node-expand",LC="node-collapse",RC="current-change",BC="check",VC="check-change",FC="node-contextmenu",AJ={[DC]:(e,t,n)=>e&&t&&n,[PC]:(e,t)=>e&&t,[LC]:(e,t)=>e&&t,[RC]:(e,t)=>e&&t,[BC]:(e,t)=>e&&t,[VC]:(e,t)=>e&&typeof t=="boolean",[FC]:(e,t,n)=>e&&t&&n},NJ={click:(e,t)=>!!(e&&t),toggle:e=>!!e,check:(e,t)=>e&&typeof t=="boolean"};function MJ(e,t){const n=A(new Set),o=A(new Set),{emit:s}=nt();pe(()=>t.value,()=>ze(()=>{y(e.defaultCheckedKeys)}),{immediate:!0});const l=()=>{if(!t.value||!e.showCheckbox||e.checkStrictly)return;const{levelTreeNodeMap:w,maxLevel:S}=t.value,$=n.value,k=new Set;for(let T=S-1;T>=1;--T){const O=w.get(T);!O||O.forEach(L=>{const B=L.children;if(B){let V=!0,H=!1;for(const R of B){const z=R.key;if($.has(z))H=!0;else if(k.has(z)){V=!1,H=!0;break}else V=!1}V?$.add(L.key):H?(k.add(L.key),$.delete(L.key)):($.delete(L.key),k.delete(L.key))}})}o.value=k},r=w=>n.value.has(w.key),a=w=>o.value.has(w.key),i=(w,S,$=!0)=>{const k=n.value,T=(O,L)=>{k[L?qd.ADD:qd.DELETE](O.key);const B=O.children;!e.checkStrictly&&B&&B.forEach(V=>{V.disabled||T(V,L)})};T(w,S),l(),$&&u(w,S)},u=(w,S)=>{const{checkedNodes:$,checkedKeys:k}=h(),{halfCheckedNodes:T,halfCheckedKeys:O}=g();s(BC,w.data,{checkedKeys:k,checkedNodes:$,halfCheckedKeys:O,halfCheckedNodes:T}),s(VC,w.data,S)};function c(w=!1){return h(w).checkedKeys}function d(w=!1){return h(w).checkedNodes}function f(){return g().halfCheckedKeys}function p(){return g().halfCheckedNodes}function h(w=!1){const S=[],$=[];if((t==null?void 0:t.value)&&e.showCheckbox){const{treeNodeMap:k}=t.value;n.value.forEach(T=>{const O=k.get(T);O&&(!w||w&&O.isLeaf)&&($.push(T),S.push(O.data))})}return{checkedKeys:$,checkedNodes:S}}function g(){const w=[],S=[];if((t==null?void 0:t.value)&&e.showCheckbox){const{treeNodeMap:$}=t.value;o.value.forEach(k=>{const T=$.get(k);T&&(S.push(k),w.push(T.data))})}return{halfCheckedNodes:w,halfCheckedKeys:S}}function m(w){n.value.clear(),o.value.clear(),y(w)}function v(w,S){if((t==null?void 0:t.value)&&e.showCheckbox){const $=t.value.treeNodeMap.get(w);$&&i($,S,!1)}}function y(w){if(t!=null&&t.value){const{treeNodeMap:S}=t.value;if(e.showCheckbox&&S&&w)for(const $ of w){const k=S.get($);k&&!r(k)&&i(k,!0,!1)}}}return{updateCheckedKeys:l,toggleCheckbox:i,isChecked:r,isIndeterminate:a,getCheckedKeys:c,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:p,setChecked:v,setCheckedKeys:m}}function OJ(e,t){const n=A(new Set([])),o=A(new Set([])),s=E(()=>et(e.filterMethod));function l(a){var i;if(!s.value)return;const u=new Set,c=o.value,d=n.value,f=[],p=((i=t.value)==null?void 0:i.treeNodes)||[],h=e.filterMethod;d.clear();function g(m){m.forEach(v=>{f.push(v),h!=null&&h(a,v.data)?f.forEach(w=>{u.add(w.key)}):v.isLeaf&&d.add(v.key);const y=v.children;if(y&&g(y),!v.isLeaf){if(!u.has(v.key))d.add(v.key);else if(y){let w=!0;for(const S of y)if(!d.has(S.key)){w=!1;break}w?c.add(v.key):c.delete(v.key)}}f.pop()})}return g(p),u}function r(a){return o.value.has(a.key)}return{hiddenExpandIconKeySet:o,hiddenNodeKeySet:n,doFilter:l,isForceHiddenExpandIcon:r}}function IJ(e,t){const n=A(new Set(e.defaultExpandedKeys)),o=A(),s=jt();pe(()=>e.currentNodeKey,Z=>{o.value=Z},{immediate:!0}),pe(()=>e.data,Z=>{Me(Z)},{immediate:!0});const{isIndeterminate:l,isChecked:r,toggleCheckbox:a,getCheckedKeys:i,getCheckedNodes:u,getHalfCheckedKeys:c,getHalfCheckedNodes:d,setChecked:f,setCheckedKeys:p}=MJ(e,s),{doFilter:h,hiddenNodeKeySet:g,isForceHiddenExpandIcon:m}=OJ(e,s),v=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.value)||Ir.KEY}),y=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.children)||Ir.CHILDREN}),w=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.disabled)||Ir.DISABLED}),S=E(()=>{var Z;return((Z=e.props)==null?void 0:Z.label)||Ir.LABEL}),$=E(()=>{const Z=n.value,ve=g.value,Ce=[],ke=s.value&&s.value.treeNodes||[];function Oe(){const We=[];for(let qe=ke.length-1;qe>=0;--qe)We.push(ke[qe]);for(;We.length;){const qe=We.pop();if(!!qe&&(ve.has(qe.key)||Ce.push(qe),Z.has(qe.key))){const K=qe.children;if(K){const X=K.length;for(let fe=X-1;fe>=0;--fe)We.push(K[fe])}}}}return Oe(),Ce}),k=E(()=>$.value.length>0);function T(Z){const ve=new Map,Ce=new Map;let ke=1;function Oe(qe,K=1,X=void 0){var fe;const ye=[];for(const be of qe){const _e=B(be),re={level:K,key:_e,data:be};re.label=H(be),re.parent=X;const se=L(be);re.disabled=V(be),re.isLeaf=!se||se.length===0,se&&se.length&&(re.children=Oe(se,K+1,re)),ye.push(re),ve.set(_e,re),Ce.has(K)||Ce.set(K,[]),(fe=Ce.get(K))==null||fe.push(re)}return K>ke&&(ke=K),ye}const We=Oe(Z);return{treeNodeMap:ve,levelTreeNodeMap:Ce,maxLevel:ke,treeNodes:We}}function O(Z){const ve=h(Z);ve&&(n.value=ve)}function L(Z){return Z[y.value]}function B(Z){return Z?Z[v.value]:""}function V(Z){return Z[w.value]}function H(Z){return Z[S.value]}function R(Z){n.value.has(Z.key)?I(Z):N(Z)}function z(Z,ve){t(DC,Z.data,Z,ve),W(Z),e.expandOnClickNode&&R(Z),e.showCheckbox&&e.checkOnClickNode&&!Z.disabled&&a(Z,!r(Z),!0)}function W(Z){Q(Z)||(o.value=Z.key,t(RC,Z.data,Z))}function P(Z,ve){a(Z,ve)}function N(Z){const ve=n.value;if((s==null?void 0:s.value)&&e.accordion){const{treeNodeMap:Ce}=s.value;ve.forEach(ke=>{const Oe=Ce.get(ke);Oe&&Oe.level===Oe.level&&ve.delete(ke)})}ve.add(Z.key),t(PC,Z.data,Z)}function I(Z){n.value.delete(Z.key),t(LC,Z.data,Z)}function U(Z){return n.value.has(Z.key)}function q(Z){return!!Z.disabled}function Q(Z){const ve=o.value;return!!ve&&ve===Z.key}function J(){var Z,ve;if(!!o.value)return(ve=(Z=s==null?void 0:s.value)==null?void 0:Z.treeNodeMap.get(o.value))==null?void 0:ve.data}function ae(){return o.value}function Ee(Z){o.value=Z}function Me(Z){ze(()=>s.value=T(Z))}return{tree:s,flattenTree:$,isNotEmpty:k,getKey:B,getChildren:L,toggleExpand:R,toggleCheckbox:a,isExpanded:U,isChecked:r,isIndeterminate:l,isDisabled:q,isCurrent:Q,isForceHiddenExpandIcon:m,handleNodeClick:z,handleNodeCheck:P,getCurrentNode:J,getCurrentKey:ae,setCurrentKey:Ee,getCheckedKeys:i,getCheckedNodes:u,getHalfCheckedKeys:c,getHalfCheckedNodes:d,setChecked:f,setCheckedKeys:p,filter:O,setData:Me}}var DJ=te({name:"ElTreeNodeContent",props:TJ,setup(e){const t=Ne(Vp),n=we("tree");return()=>{const o=e.node,{data:s}=o;return t!=null&&t.ctx.slots.default?t.ctx.slots.default({node:o,data:s}):Pe("span",{class:n.be("node","label")},[o==null?void 0:o.label])}}});const PJ="caret-right",LJ=te({name:"ElTreeNode",components:{ElIcon:je,CaretRight:D0,ElCheckbox:ao,ElNodeContent:DJ},props:_J,emits:NJ,setup(e,{emit:t}){const n=Ne(Vp),o=we("tree"),s=E(()=>{var c;return(c=n==null?void 0:n.props.indent)!=null?c:16}),l=E(()=>{var c;return(c=n==null?void 0:n.props.icon)!=null?c:PJ});return{ns:o,indent:s,icon:l,handleClick:c=>{t("click",e.node,c)},handleExpandIconClick:()=>{t("toggle",e.node)},handleCheckChange:c=>{t("check",e.node,c)},handleContextMenu:c=>{var d,f,p,h;(p=(f=(d=n==null?void 0:n.instance)==null?void 0:d.vnode)==null?void 0:f.props)!=null&&p.onNodeContextmenu&&(c.stopPropagation(),c.preventDefault()),n==null||n.ctx.emit(FC,c,(h=e.node)==null?void 0:h.data,e.node)}}}}),RJ=["aria-expanded","aria-disabled","aria-checked","data-key"];function BJ(e,t,n,o,s,l){var r,a,i;const u=le("el-icon"),c=le("el-checkbox"),d=le("el-node-content");return C(),M("div",{ref:"node$",class:_([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.current),e.ns.is("focusable",!e.disabled),e.ns.is("checked",!e.disabled&&e.checked)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.disabled,"aria-checked":e.checked,"data-key":(r=e.node)==null?void 0:r.key,onClick:t[1]||(t[1]=Ke((...f)=>e.handleClick&&e.handleClick(...f),["stop"])),onContextmenu:t[2]||(t[2]=(...f)=>e.handleContextMenu&&e.handleContextMenu(...f))},[D("div",{class:_(e.ns.be("node","content")),style:De({paddingLeft:`${(e.node.level-1)*e.indent}px`})},[e.icon?(C(),x(u,{key:0,class:_([e.ns.is("leaf",!!((a=e.node)!=null&&a.isLeaf)),e.ns.is("hidden",e.hiddenExpandIcon),{expanded:!((i=e.node)!=null&&i.isLeaf)&&e.expanded},e.ns.be("node","expand-icon")]),onClick:Ke(e.handleExpandIconClick,["stop"])},{default:j(()=>[(C(),x(ft(e.icon)))]),_:1},8,["class","onClick"])):G("v-if",!0),e.showCheckbox?(C(),x(c,{key:1,"model-value":e.checked,indeterminate:e.indeterminate,disabled:e.disabled,onChange:e.handleCheckChange,onClick:t[0]||(t[0]=Ke(()=>{},["stop"]))},null,8,["model-value","indeterminate","disabled","onChange"])):G("v-if",!0),Y(d,{node:e.node},null,8,["node"])],6)],42,RJ)}var VJ=ge(LJ,[["render",BJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree-v2/src/tree-node.vue"]]);const FJ=te({name:"ElTreeV2",components:{ElTreeNode:VJ,FixedSizeList:dC},props:EJ,emits:AJ,setup(e,t){st(Vp,{ctx:t,props:e,instance:nt()});const{t:n}=kt(),o=we("tree"),{flattenTree:s,isNotEmpty:l,toggleExpand:r,isExpanded:a,isIndeterminate:i,isChecked:u,isDisabled:c,isCurrent:d,isForceHiddenExpandIcon:f,toggleCheckbox:p,handleNodeClick:h,handleNodeCheck:g,getCurrentNode:m,getCurrentKey:v,setCurrentKey:y,getCheckedKeys:w,getCheckedNodes:S,getHalfCheckedKeys:$,getHalfCheckedNodes:k,setChecked:T,setCheckedKeys:O,filter:L,setData:B}=IJ(e,t.emit);return t.expose({getCurrentNode:m,getCurrentKey:v,setCurrentKey:y,getCheckedKeys:w,getCheckedNodes:S,getHalfCheckedKeys:$,getHalfCheckedNodes:k,setChecked:T,setCheckedKeys:O,filter:L,setData:B}),{t:n,ns:o,flattenTree:s,itemSize:26,isNotEmpty:l,toggleExpand:r,toggleCheckbox:p,isExpanded:a,isIndeterminate:i,isChecked:u,isDisabled:c,isCurrent:d,isForceHiddenExpandIcon:f,handleNodeClick:h,handleNodeCheck:g}}});function HJ(e,t,n,o,s,l){var r;const a=le("el-tree-node"),i=le("fixed-size-list");return C(),M("div",{class:_([e.ns.b(),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[e.isNotEmpty?(C(),x(i,{key:0,"class-name":e.ns.b("virtual-list"),data:e.flattenTree,total:e.flattenTree.length,height:e.height,"item-size":e.itemSize,"perf-mode":e.perfMode},{default:j(({data:u,index:c,style:d})=>[(C(),x(a,{key:u[c].key,style:De(d),node:u[c],expanded:e.isExpanded(u[c]),"show-checkbox":e.showCheckbox,checked:e.isChecked(u[c]),indeterminate:e.isIndeterminate(u[c]),disabled:e.isDisabled(u[c]),current:e.isCurrent(u[c]),"hidden-expand-icon":e.isForceHiddenExpandIcon(u[c]),onClick:e.handleNodeClick,onToggle:e.toggleExpand,onCheck:e.handleNodeCheck},null,8,["style","node","expanded","show-checkbox","checked","indeterminate","disabled","current","hidden-expand-icon","onClick","onToggle","onCheck"]))]),_:1},8,["class-name","data","total","height","item-size","perf-mode"])):(C(),M("div",{key:1,class:_(e.ns.e("empty-block"))},[D("span",{class:_(e.ns.e("empty-text"))},he((r=e.emptyText)!=null?r:e.t("el.tree.emptyText")),3)],2))],2)}var zJ=ge(FJ,[["render",HJ],["__file","/home/runner/work/element-plus/element-plus/packages/components/tree-v2/src/tree.vue"]]);const KJ=ot(zJ),WJ="ElUpload";class jJ extends Error{constructor(t,n,o,s){super(t),this.name="UploadAjaxError",this.status=n,this.method=o,this.url=s}}function Rg(e,t,n){let o;return n.response?o=`${n.response.error||n.response}`:n.responseText?o=`${n.responseText}`:o=`fail to ${t.method} ${e} ${n.status}`,new jJ(o,n.status,t.method,e)}function YJ(e){const t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}const UJ=e=>{typeof XMLHttpRequest=="undefined"&&Kt(WJ,"XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",l=>{const r=l;r.percent=l.total>0?l.loaded/l.total*100:0,e.onProgress(r)});const o=new FormData;if(e.data)for(const[l,r]of Object.entries(e.data))Array.isArray(r)?o.append(l,...r):o.append(l,r);o.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(Rg(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(Rg(n,e,t));e.onSuccess(YJ(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const s=e.headers||{};if(s instanceof Headers)s.forEach((l,r)=>t.setRequestHeader(r,l));else for(const[l,r]of Object.entries(s))xf(r)||t.setRequestHeader(l,String(r));return t.send(o),t},HC=["text","picture","picture-card"];let qJ=1;const zC=()=>Date.now()+qJ++,KC=Ve({action:{type:String,required:!0},headers:{type:$e(Object)},method:{type:String,default:"post"},data:{type:Object,default:()=>Pt({})},multiple:{type:Boolean,default:!1},name:{type:String,default:"file"},drag:{type:Boolean,default:!1},withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},type:{type:String,default:"select"},fileList:{type:$e(Array),default:()=>Pt([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:HC,default:"text"},httpRequest:{type:$e(Function),default:UJ},disabled:Boolean,limit:Number}),GJ=Ve(Te(ne({},KC),{beforeUpload:{type:$e(Function),default:wt},beforeRemove:{type:$e(Function)},onRemove:{type:$e(Function),default:wt},onChange:{type:$e(Function),default:wt},onPreview:{type:$e(Function),default:wt},onSuccess:{type:$e(Function),default:wt},onProgress:{type:$e(Function),default:wt},onError:{type:$e(Function),default:wt},onExceed:{type:$e(Function),default:wt}})),XJ=Ve({files:{type:$e(Array),default:()=>Pt([])},disabled:{type:Boolean,default:!1},handlePreview:{type:$e(Function),default:wt},listType:{type:String,values:HC,default:"text"}}),JJ={remove:e=>!!e},ZJ=["onKeydown"],QJ=["src"],xJ=["onClick"],eZ=["onClick"],tZ=["onClick"],nZ={name:"ElUploadList"},oZ=te(Te(ne({},nZ),{props:XJ,emits:JJ,setup(e,{emit:t}){const n=e,{t:o}=kt(),s=we("upload"),l=we("icon"),r=we("list"),a=A(!1),i=d=>{n.handlePreview(d)},u=d=>{d.target.focus()},c=d=>{t("remove",d)};return(d,f)=>(C(),x(DT,{tag:"ul",class:_([b(s).b("list"),b(s).bm("list",d.listType),b(s).is("disabled",d.disabled)]),name:b(r).b()},{default:j(()=>[(C(!0),M(Le,null,rt(d.files,p=>(C(),M("li",{key:p.uid||p.name,class:_([b(s).be("list","item"),b(s).is(p.status),{focusing:a.value}]),tabindex:"0",onKeydown:lt(h=>!d.disabled&&c(p),["delete"]),onFocus:f[0]||(f[0]=h=>a.value=!0),onBlur:f[1]||(f[1]=h=>a.value=!1),onClick:u},[ie(d.$slots,"default",{file:p},()=>[d.listType==="picture"||p.status!=="uploading"&&d.listType==="picture-card"?(C(),M("img",{key:0,class:_(b(s).be("list","item-thumbnail")),src:p.url,alt:""},null,10,QJ)):G("v-if",!0),d.listType!=="picture"&&(p.status==="uploading"||d.listType!=="picture-card")?(C(),M("div",{key:1,class:_(b(s).be("list","item-info"))},[D("a",{class:_(b(s).be("list","item-name")),onClick:h=>i(p)},[Y(b(je),{class:_(b(l).m("document"))},{default:j(()=>[Y(b(xD))]),_:1},8,["class"]),it(" "+he(p.name),1)],10,xJ),p.status==="uploading"?(C(),x(b(eC),{key:0,type:d.listType==="picture-card"?"circle":"line","stroke-width":d.listType==="picture-card"?6:2,percentage:Number(p.percentage),style:De(d.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):G("v-if",!0)],2)):G("v-if",!0),D("label",{class:_(b(s).be("list","item-status-label"))},[d.listType==="text"?(C(),x(b(je),{key:0,class:_([b(l).m("upload-success"),b(l).m("circle-check")])},{default:j(()=>[Y(b(Zi))]),_:1},8,["class"])):["picture-card","picture"].includes(d.listType)?(C(),x(b(je),{key:1,class:_([b(l).m("upload-success"),b(l).m("check")])},{default:j(()=>[Y(b(Jl))]),_:1},8,["class"])):G("v-if",!0)],2),d.disabled?G("v-if",!0):(C(),x(b(je),{key:2,class:_(b(l).m("close")),onClick:h=>c(p)},{default:j(()=>[Y(b(Yn))]),_:2},1032,["class","onClick"])),G(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),G(" This is a bug which needs to be fixed "),G(" TODO: Fix the incorrect navigation interaction "),d.disabled?G("v-if",!0):(C(),M("i",{key:3,class:_(b(l).m("close-tip"))},he(b(o)("el.upload.deleteTip")),3)),d.listType==="picture-card"?(C(),M("span",{key:4,class:_(b(s).be("list","item-actions"))},[D("span",{class:_(b(s).be("list","item-preview")),onClick:h=>d.handlePreview(p)},[Y(b(je),{class:_(b(l).m("zoom-in"))},{default:j(()=>[Y(b(B0))]),_:1},8,["class"])],10,eZ),d.disabled?G("v-if",!0):(C(),M("span",{key:0,class:_(b(s).be("list","item-delete")),onClick:h=>c(p)},[Y(b(je),{class:_(b(l).m("delete"))},{default:j(()=>[Y(b(qD))]),_:1},8,["class"])],10,tZ))],2)):G("v-if",!0)])],42,ZJ))),128)),ie(d.$slots,"append")]),_:3},8,["class","name"]))}}));var Bg=ge(oZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload-list.vue"]]);const sZ=Ve({disabled:{type:Boolean,default:!1}}),lZ={file:e=>Xe(e)},rZ=["onDrop","onDragover"],aZ={name:"ElUploadDrag"},iZ=te(Te(ne({},aZ),{props:sZ,emits:lZ,setup(e,{emit:t}){const n=e,o="ElUploadDrag",s=Ne(t1);s||Kt(o,"usage: ");const l=we("upload"),r=A(!1),a=u=>{if(n.disabled)return;r.value=!1;const c=Array.from(u.dataTransfer.files),d=s.accept.value;if(!d){t("file",c);return}const f=c.filter(p=>{const{type:h,name:g}=p,m=g.includes(".")?`.${g.split(".").pop()}`:"",v=h.replace(/\/.*$/,"");return d.split(",").map(y=>y.trim()).filter(y=>y).some(y=>y.startsWith(".")?m===y:/\/\*$/.test(y)?v===y.replace(/\/\*$/,""):/^[^/]+\/[^/]+$/.test(y)?h===y:!1)});t("file",f)},i=()=>{n.disabled||(r.value=!0)};return(u,c)=>(C(),M("div",{class:_([b(l).b("dragger"),b(l).is("dragover",r.value)]),onDrop:Ke(a,["prevent"]),onDragover:Ke(i,["prevent"]),onDragleave:c[0]||(c[0]=Ke(d=>r.value=!1,["prevent"]))},[ie(u.$slots,"default")],42,rZ))}}));var uZ=ge(iZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload-dragger.vue"]]);const cZ=Ve(Te(ne({},KC),{fileList:{type:$e(Array),default:()=>Pt([])},beforeUpload:{type:$e(Function),default:wt},onRemove:{type:$e(Function),default:wt},onStart:{type:$e(Function),default:wt},onSuccess:{type:$e(Function),default:wt},onProgress:{type:$e(Function),default:wt},onError:{type:$e(Function),default:wt},onExceed:{type:$e(Function),default:wt}})),dZ=["onKeydown"],fZ=["name","multiple","accept"],pZ={name:"ElUploadContent",inheritAttrs:!1},hZ=te(Te(ne({},pZ),{props:cZ,setup(e,{expose:t}){const n=e,o=we("upload"),s=jt({}),l=jt(),r=p=>{if(p.length===0)return;const{autoUpload:h,limit:g,fileList:m,multiple:v,onStart:y,onExceed:w}=n;if(g&&m.length+p.length>g){w(p,m);return}v||(p=p.slice(0,1));for(const S of p){const $=S;$.uid=zC(),y($),h&&a($)}},a=async p=>{if(l.value.value="",!n.beforeUpload)return i(p);let h;try{h=await n.beforeUpload(p)}catch{h=!1}if(h===!1){n.onRemove(p);return}let g=p;if(h instanceof Blob){h instanceof File?g=h:g=new File([h],p.name,{type:p.type});for(const m of Object.keys(p))g[m]=p[m]}i(p)},i=p=>{const{headers:h,data:g,method:m,withCredentials:v,name:y,action:w,onProgress:S,onSuccess:$,onError:k,httpRequest:T}=n,{uid:O}=p,L={headers:h||{},withCredentials:v,file:p,data:g,method:m,filename:y,action:w,onProgress:V=>{S(V,p)},onSuccess:V=>{$(V,p),delete s.value[O]},onError:V=>{k(V,p),delete s.value[O]}},B=T(L);s.value[O]=B,B instanceof Promise&&B.then(L.onSuccess,L.onError)},u=p=>{const h=p.target.files;!h||r(Array.from(h))},c=()=>{n.disabled||(l.value.value="",l.value.click())},d=()=>{c()};return t({abort:p=>{xI(s.value).filter(p?([g])=>String(p.uid)===g:()=>!0).forEach(([g,m])=>{m instanceof XMLHttpRequest&&m.abort(),delete s.value[g]})},upload:a}),(p,h)=>(C(),M("div",{class:_([b(o).b(),b(o).m(p.listType)]),tabindex:"0",onClick:c,onKeydown:lt(Ke(d,["self"]),["enter","space"])},[p.drag?(C(),x(uZ,{key:0,disabled:p.disabled,onFile:r},{default:j(()=>[ie(p.$slots,"default")]),_:3},8,["disabled"])):ie(p.$slots,"default",{key:1}),D("input",{ref_key:"inputRef",ref:l,class:_(b(o).e("input")),name:p.name,multiple:p.multiple,accept:p.accept,type:"file",onChange:u},null,42,fZ)],42,dZ))}}));var Vg=ge(hZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload-content.vue"]]);const Bc="ElUpload",mZ=e=>{var t;(t=e.url)!=null&&t.startsWith("blob:")&&URL.revokeObjectURL(e.url)},vZ=(e,t)=>{const n=A([]),o=f=>n.value.find(p=>p.uid===f.uid);function s(f){var p;(p=t.value)==null||p.abort(f)}function l(f=["ready","uploading","success","fail"]){n.value=n.value.filter(p=>!f.includes(p.status))}const r=(f,p)=>{const h=o(p);!h||(h.status="fail",n.value.splice(n.value.indexOf(h),1),e.onError(f,h,n.value),e.onChange(h,n.value))},a=(f,p)=>{const h=o(p);!h||(e.onProgress(f,h,n.value),h.status="uploading",h.percentage=Math.round(f.percent))},i=(f,p)=>{const h=o(p);!h||(h.status="success",h.response=f,e.onSuccess(f,h,n.value),e.onChange(h,n.value))},u=f=>{const p={name:f.name,percentage:0,status:"ready",size:f.size,raw:f,uid:f.uid};if(e.listType==="picture-card"||e.listType==="picture")try{p.url=URL.createObjectURL(f)}catch(h){h.message,e.onError(h,p,n.value)}n.value.push(p),e.onChange(p,n.value)},c=async(f,p)=>{p&&Ma({scope:Bc,from:"handleRemove second argument",version:"2.2",replacement:"first argument `file`",ref:"https://element-plus.org/en-US/component/upload.html#methods"},!0);const h=p||f,g=h instanceof File?o(h):h;g||Kt(Bc,"file to be removed not found");const m=v=>{s(v);const y=n.value;y.splice(y.indexOf(v),1),e.onRemove(v,y),mZ(v)};e.beforeRemove?await e.beforeRemove(g,n.value)!==!1&&m(g):m(g)};function d(){n.value.filter(({status:f})=>f==="ready").forEach(({raw:f})=>{var p;return f&&((p=t.value)==null?void 0:p.upload(f))})}return pe(()=>e.listType,f=>{f!=="picture-card"&&f!=="picture"||(n.value=n.value.map(p=>{const{raw:h,url:g}=p;if(!g&&h)try{p.url=URL.createObjectURL(h)}catch(m){e.onError(m,p,n.value)}return p}))}),pe(()=>e.fileList,f=>{for(const p of f)p.uid||(p.uid=zC()),p.status||(p.status="success");n.value=f},{immediate:!0,deep:!0}),{abort:s,clearFiles:l,handleError:r,handleProgress:a,handleStart:u,handleSuccess:i,handleRemove:c,submit:d,uploadFiles:n}},gZ={name:"ElUpload"},bZ=te(Te(ne({},gZ),{props:GJ,setup(e,{expose:t}){const n=e,o=_a(),s=hl(),l=jt(),{abort:r,submit:a,clearFiles:i,uploadFiles:u,handleStart:c,handleError:d,handleRemove:f,handleSuccess:p,handleProgress:h}=vZ(n,l),g=E(()=>n.listType==="picture-card"),m=E(()=>Te(ne({},n),{onStart:c,onProgress:h,onSuccess:p,onError:d,onRemove:f}));return _t(()=>{u.value.forEach(({url:v})=>{v!=null&&v.startsWith("blob:")&&URL.revokeObjectURL(v)})}),st(t1,{accept:Yt(n,"accept")}),t({abort:r,submit:a,clearFiles:i,handleStart:c,handleRemove:f}),(v,y)=>(C(),M("div",null,[b(g)&&v.showFileList?(C(),x(Bg,{key:0,disabled:b(s),"list-type":v.listType,files:b(u),"handle-preview":v.onPreview,onRemove:b(f)},fs({append:j(()=>[v.listType==="picture-card"?(C(),x(Vg,Et({key:0,ref_key:"uploadRef",ref:l},b(m)),{default:j(()=>[b(o).trigger?ie(v.$slots,"trigger",{key:0}):G("v-if",!0),!b(o).trigger&&b(o).default?ie(v.$slots,"default",{key:1}):G("v-if",!0)]),_:3},16)):G("v-if",!0)]),_:2},[v.$slots.file?{name:"default",fn:j(({file:w})=>[ie(v.$slots,"file",{file:w})])}:void 0]),1032,["disabled","list-type","files","handle-preview","onRemove"])):G("v-if",!0),v.listType!=="picture-card"?(C(),x(Vg,Et({key:1,ref_key:"uploadRef",ref:l},b(m)),{default:j(()=>[b(o).trigger?ie(v.$slots,"trigger",{key:0}):G("v-if",!0),!b(o).trigger&&b(o).default?ie(v.$slots,"default",{key:1}):G("v-if",!0)]),_:3},16)):G("v-if",!0),v.$slots.trigger?ie(v.$slots,"default",{key:2}):G("v-if",!0),ie(v.$slots,"tip"),!b(g)&&v.showFileList?(C(),x(Bg,{key:3,disabled:b(s),"list-type":v.listType,files:b(u),"handle-preview":v.onPreview,onRemove:b(f)},fs({_:2},[v.$slots.file?{name:"default",fn:j(({file:w})=>[ie(v.$slots,"file",{file:w})])}:void 0]),1032,["disabled","list-type","files","handle-preview","onRemove"])):G("v-if",!0)]))}}));var yZ=ge(bZ,[["__file","/home/runner/work/element-plus/element-plus/packages/components/upload/src/upload.vue"]]);const wZ=ot(yZ);var CZ=[v6,T6,YR,QR,lB,A1,bB,yB,Kn,D1,AV,DV,YV,UV,iF,q5,hF,ao,f5,sw,gF,IF,DF,EF,rH,uH,CH,$H,kH,SH,EH,o9,c9,d9,k9,A9,V9,RK,BK,VK,$7,fW,pW,je,TW,Yw,Zn,Uw,FW,rj,aj,ij,hj,pY,bY,EY,_1,eC,cw,N5,A5,WY,GY,ZY,Uo,ll,eu,Wj,WU,ZU,QU,vq,kq,Nq,Mq,Kq,qG,GG,iX,uX,ju,pV,mX,wX,CX,mn,WX,oJ,gJ,kJ,KJ,wZ];const eo="ElInfiniteScroll",$Z=50,kZ=200,SZ=0,EZ={delay:{type:Number,default:kZ},distance:{type:Number,default:SZ},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Fp=(e,t)=>Object.entries(EZ).reduce((n,[o,s])=>{var l,r;const{type:a,default:i}=s,u=e.getAttribute(`infinite-scroll-${o}`);let c=(r=(l=t[u])!=null?l:u)!=null?r:i;return c=c==="false"?!1:c,c=a(c),n[o]=Number.isNaN(c)?i:c,n},{}),WC=e=>{const{observer:t}=e[eo];t&&(t.disconnect(),delete e[eo].observer)},_Z=(e,t)=>{const{container:n,containerEl:o,instance:s,observer:l,lastScrollTop:r}=e[eo],{disabled:a,distance:i}=Fp(e,s),{clientHeight:u,scrollHeight:c,scrollTop:d}=o,f=d-r;if(e[eo].lastScrollTop=d,l||a||f<0)return;let p=!1;if(n===e)p=c-(u+d)<=i;else{const{clientTop:h,scrollHeight:g}=e,m=XI(e,o);p=d+u>=m+h+g-i}p&&t.call(s)};function Vc(e,t){const{containerEl:n,instance:o}=e[eo],{disabled:s}=Fp(e,o);s||n.clientHeight===0||(n.scrollHeight<=n.clientHeight?t.call(o):WC(e))}const TZ={async mounted(e,t){const{instance:n,value:o}=t;et(o)||Kt(eo,"'v-infinite-scroll' binding value must be a function"),await ze();const{delay:s,immediate:l}=Fp(e,n),r=tp(e,!0),a=r===window?document.documentElement:r,i=qs(_Z.bind(null,e,o),s);if(!!r){if(e[eo]={instance:n,container:r,containerEl:a,delay:s,cb:o,onScroll:i,lastScrollTop:a.scrollTop},l){const u=new MutationObserver(qs(Vc.bind(null,e,o),$Z));e[eo].observer=u,u.observe(e,{childList:!0,subtree:!0}),Vc(e,o)}r.addEventListener("scroll",i)}},unmounted(e){const{container:t,onScroll:n}=e[eo];t==null||t.removeEventListener("scroll",n),WC(e)},async updated(e){e[eo]||await ze();const{containerEl:t,cb:n,observer:o}=e[eo];t.clientHeight&&o&&Vc(e,n)}},Gd=TZ;Gd.install=e=>{e.directive("InfiniteScroll",Gd)};const AZ=Gd;function NZ(e){let t;const n=A(!1),o=yt(Te(ne({},e),{originalPosition:"",originalOverflow:"",visible:!1}));function s(d){o.text=d}function l(){const d=o.parent;if(!d.vLoadingAddClassList){let f=d.getAttribute("loading-number");f=Number.parseInt(f)-1,f?d.setAttribute("loading-number",f.toString()):(fn(d,"el-loading-parent--relative"),d.removeAttribute("loading-number")),fn(d,"el-loading-parent--hidden")}r()}function r(){var d,f;(f=(d=c.$el)==null?void 0:d.parentNode)==null||f.removeChild(c.$el)}function a(){var d;if(e.beforeClose&&!e.beforeClose())return;const f=o.parent;f.vLoadingAddClassList=void 0,n.value=!0,clearTimeout(t),t=window.setTimeout(()=>{n.value&&(n.value=!1,l())},400),o.visible=!1,(d=e.closed)==null||d.call(e)}function i(){!n.value||(n.value=!1,l())}const c=Qy({name:"ElLoading",setup(){return()=>{const d=o.spinner||o.svg,f=Pe("svg",ne({class:"circular",viewBox:o.svgViewBox?o.svgViewBox:"25 25 50 50"},d?{innerHTML:d}:{}),[Pe("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none"})]),p=o.text?Pe("p",{class:"el-loading-text"},[o.text]):void 0;return Pe(zt,{name:"el-loading-fade",onAfterLeave:i},{default:j(()=>[Ge(Y("div",{style:{backgroundColor:o.background||""},class:["el-loading-mask",o.customClass,o.fullscreen?"is-fullscreen":""]},[Pe("div",{class:"el-loading-spinner"},[f,p])]),[[pt,o.visible]])])})}}}).mount(document.createElement("div"));return Te(ne({},Ut(o)),{setText:s,remvoeElLoadingChild:r,close:a,handleAfterLeave:i,vm:c,get $el(){return c.$el}})}let _r;const Xd=function(e={}){if(!ct)return;const t=MZ(e);t.fullscreen&&_r&&(_r.remvoeElLoadingChild(),_r.close());const n=NZ(Te(ne({},t),{closed:()=>{var s;(s=t.closed)==null||s.call(t),t.fullscreen&&(_r=void 0)}}));OZ(t,t.parent,n),Fg(t,t.parent,n),t.parent.vLoadingAddClassList=()=>Fg(t,t.parent,n);let o=t.parent.getAttribute("loading-number");return o?o=`${Number.parseInt(o)+1}`:o="1",t.parent.setAttribute("loading-number",o),t.parent.appendChild(n.$el),ze(()=>n.visible.value=t.visible),t.fullscreen&&(_r=n),n},MZ=e=>{var t,n,o,s;let l;return Qe(e.target)?l=(t=document.querySelector(e.target))!=null?t:document.body:l=e.target||document.body,{parent:l===document.body||e.body?document.body:l,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:l===document.body&&((n=e.fullscreen)!=null?n:!0),lock:(o=e.lock)!=null?o:!1,customClass:e.customClass||"",visible:(s=e.visible)!=null?s:!0,target:l}},OZ=async(e,t,n)=>{const{nextZIndex:o}=jo(),s={};if(e.fullscreen)n.originalPosition.value=bo(document.body,"position"),n.originalOverflow.value=bo(document.body,"overflow"),s.zIndex=o();else if(e.parent===document.body){n.originalPosition.value=bo(document.body,"position"),await ze();for(const l of["top","left"]){const r=l==="top"?"scrollTop":"scrollLeft";s[l]=`${e.target.getBoundingClientRect()[l]+document.body[r]+document.documentElement[r]-Number.parseInt(bo(document.body,`margin-${l}`),10)}px`}for(const l of["height","width"])s[l]=`${e.target.getBoundingClientRect()[l]}px`}else n.originalPosition.value=bo(t,"position");for(const[l,r]of Object.entries(s))n.$el.style[l]=r},Fg=(e,t,n)=>{n.originalPosition.value!=="absolute"&&n.originalPosition.value!=="fixed"?wo(t,"el-loading-parent--relative"):fn(t,"el-loading-parent--relative"),e.fullscreen&&e.lock?wo(t,"el-loading-parent--hidden"):fn(t,"el-loading-parent--hidden")},Jd=Symbol("ElLoading"),Hg=(e,t)=>{var n,o,s,l;const r=t.instance,a=f=>dt(t.value)?t.value[f]:void 0,i=f=>{const p=Qe(f)&&(r==null?void 0:r[f])||f;return p&&A(p)},u=f=>i(a(f)||e.getAttribute(`element-loading-${vs(f)}`)),c=(n=a("fullscreen"))!=null?n:t.modifiers.fullscreen,d={text:u("text"),svg:u("svg"),svgViewBox:u("svgViewBox"),spinner:u("spinner"),background:u("background"),customClass:u("customClass"),fullscreen:c,target:(o=a("target"))!=null?o:c?void 0:e,body:(s=a("body"))!=null?s:t.modifiers.body,lock:(l=a("lock"))!=null?l:t.modifiers.lock};e[Jd]={options:d,instance:Xd(d)}},IZ=(e,t)=>{for(const n of Object.keys(t))Lt(t[n])&&(t[n].value=e[n])},zg={mounted(e,t){t.value&&Hg(e,t)},updated(e,t){const n=e[Jd];t.oldValue!==t.value&&(t.value&&!t.oldValue?Hg(e,t):t.value&&t.oldValue?dt(t.value)&&IZ(t.value,n.options):n==null||n.instance.close())},unmounted(e){var t;(t=e[Jd])==null||t.instance.close()}},DZ={install(e){e.directive("loading",zg),e.config.globalProperties.$loading=Xd},directive:zg,service:Xd},jC=["success","info","warning","error"],PZ=Ve({customClass:{type:String,default:""},center:{type:Boolean,default:!1},dangerouslyUseHTMLString:{type:Boolean,default:!1},duration:{type:Number,default:3e3},icon:{type:nn,default:""},id:{type:String,default:""},message:{type:$e([String,Object,Function]),default:""},onClose:{type:$e(Function),required:!1},showClose:{type:Boolean,default:!1},type:{type:String,values:jC,default:"info"},offset:{type:Number,default:20},zIndex:{type:Number,default:0},grouping:{type:Boolean,default:!1},repeatNum:{type:Number,default:1}}),LZ={destroy:()=>!0},RZ=te({name:"ElMessage",components:ne({ElBadge:A1,ElIcon:je},Ru),props:PZ,emits:LZ,setup(e){const t=we("message"),n=A(!1),o=A(e.type?e.type==="error"?"danger":e.type:"info");let s;const l=E(()=>{const f=e.type;return{[t.bm("icon",f)]:f&&Ho[f]}}),r=E(()=>e.icon||Ho[e.type]||""),a=E(()=>({top:`${e.offset}px`,zIndex:e.zIndex}));function i(){e.duration>0&&({stop:s}=ol(()=>{n.value&&c()},e.duration))}function u(){s==null||s()}function c(){n.value=!1}function d({code:f}){f===Ie.esc?n.value&&c():i()}return xe(()=>{i(),n.value=!0}),pe(()=>e.repeatNum,()=>{u(),i()}),Ht(document,"keydown",d),{ns:t,typeClass:l,iconComponent:r,customStyle:a,visible:n,badgeType:o,close:c,clearTimer:u,startTimer:i}}}),BZ=["id"],VZ=["innerHTML"];function FZ(e,t,n,o,s,l){const r=le("el-badge"),a=le("el-icon"),i=le("close");return C(),x(zt,{name:e.ns.b("fade"),onBeforeLeave:e.onClose,onAfterLeave:t[2]||(t[2]=u=>e.$emit("destroy"))},{default:j(()=>[Ge(D("div",{id:e.id,class:_([e.ns.b(),{[e.ns.m(e.type)]:e.type&&!e.icon},e.ns.is("center",e.center),e.ns.is("closable",e.showClose),e.customClass]),style:De(e.customStyle),role:"alert",onMouseenter:t[0]||(t[0]=(...u)=>e.clearTimer&&e.clearTimer(...u)),onMouseleave:t[1]||(t[1]=(...u)=>e.startTimer&&e.startTimer(...u))},[e.repeatNum>1?(C(),x(r,{key:0,value:e.repeatNum,type:e.badgeType,class:_(e.ns.e("badge"))},null,8,["value","type","class"])):G("v-if",!0),e.iconComponent?(C(),x(a,{key:1,class:_([e.ns.e("icon"),e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(C(),M(Le,{key:1},[G(" Caution here, message could've been compromised, never use user's input as message "),D("p",{class:_(e.ns.e("content")),innerHTML:e.message},null,10,VZ)],2112)):(C(),M("p",{key:0,class:_(e.ns.e("content"))},he(e.message),3))]),e.showClose?(C(),x(a,{key:2,class:_(e.ns.e("closeBtn")),onClick:Ke(e.close,["stop"])},{default:j(()=>[Y(i)]),_:1},8,["class","onClick"])):G("v-if",!0)],46,BZ),[[pt,e.visible]])]),_:3},8,["name","onBeforeLeave"])}var HZ=ge(RZ,[["render",FZ],["__file","/home/runner/work/element-plus/element-plus/packages/components/message/src/message.vue"]]);const bn=[];let zZ=1;const tr=function(e={},t){if(!ct)return{close:()=>{}};if(ht(Id.max)&&bn.length>=Id.max)return{close:()=>{}};if(!Ft(e)&&dt(e)&&e.grouping&&!Ft(e.message)&&bn.length){const d=bn.find(f=>{var p,h,g;return`${(h=(p=f.vm.props)==null?void 0:p.message)!=null?h:""}`==`${(g=e.message)!=null?g:""}`});if(d)return d.vm.component.props.repeatNum+=1,d.vm.component.props.type=(e==null?void 0:e.type)||"info",{close:()=>c.component.proxy.visible=!1}}(Qe(e)||Ft(e))&&(e={message:e});let n=e.offset||20;bn.forEach(({vm:d})=>{var f;n+=(((f=d.el)==null?void 0:f.offsetHeight)||0)+16}),n+=16;const{nextZIndex:o}=jo(),s=`message_${zZ++}`,l=e.onClose,r=Te(ne({zIndex:o()},e),{offset:n,id:s,onClose:()=>{KZ(s,l)}});let a=document.body;sl(e.appendTo)?a=e.appendTo:Qe(e.appendTo)&&(a=document.querySelector(e.appendTo)),sl(a)||(a=document.body);const i=document.createElement("div");i.className=`container_${s}`;const u=r.message,c=Y(HZ,r,et(u)?{default:u}:Ft(u)?{default:()=>u}:null);return c.appContext=t||tr._context,c.props.onDestroy=()=>{Gl(null,i)},Gl(c,i),bn.push({vm:c}),a.appendChild(i.firstElementChild),{close:()=>c.component.proxy.visible=!1}};jC.forEach(e=>{tr[e]=(t={},n)=>((Qe(t)||Ft(t))&&(t={message:t}),tr(Te(ne({},t),{type:e}),n))});function KZ(e,t){const n=bn.findIndex(({vm:r})=>e===r.component.props.id);if(n===-1)return;const{vm:o}=bn[n];if(!o)return;t==null||t(o);const s=o.el.offsetHeight;bn.splice(n,1);const l=bn.length;if(!(l<1))for(let r=n;r=0;t--){const n=bn[t].vm.component;(e=n==null?void 0:n.proxy)==null||e.close()}}tr.closeAll=WZ;tr._context=null;const jZ=F0(tr,"$message"),YZ=te({name:"ElMessageBox",directives:{TrapFocus:H1},components:ne({ElButton:Kn,ElInput:Zn,ElOverlay:wp,ElIcon:je},Ru),inheritAttrs:!1,props:{buttonSize:{type:String,validator:On},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,roundButton:{default:!1,type:Boolean},container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{t:n}=kt(),o=A(!1),{nextZIndex:s}=jo(),l=yt({beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:null,inputValidator:null,inputErrorMessage:"",message:null,modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:s()}),r=E(()=>{const O=l.type;return O&&Ho[O]?`el-message-box-icon--${O}`:""}),a=Wt(E(()=>e.buttonSize),{prop:!0,form:!0,formItem:!0}),i=E(()=>l.icon||Ho[l.type]||""),u=E(()=>!!l.message),c=A(),d=A(),f=A(),p=A(),h=E(()=>l.confirmButtonClass);pe(()=>l.inputValue,async O=>{await ze(),e.boxType==="prompt"&&O!==null&&$()},{immediate:!0}),pe(()=>o.value,O=>{O&&((e.boxType==="alert"||e.boxType==="confirm")&&ze().then(()=>{var L,B,V;(V=(B=(L=p.value)==null?void 0:L.$el)==null?void 0:B.focus)==null||V.call(B)}),l.zIndex=s()),e.boxType==="prompt"&&(O?ze().then(()=>{f.value&&f.value.$el&&k().focus()}):(l.editorErrorMessage="",l.validateError=!1))});const g=E(()=>e.draggable);r1(c,d,g),xe(async()=>{await ze(),e.closeOnHashChange&&Tt(window,"hashchange",m)}),_t(()=>{e.closeOnHashChange&&Vt(window,"hashchange",m)});function m(){!o.value||(o.value=!1,ze(()=>{l.action&&t("action",l.action)}))}const v=()=>{e.closeOnClickModal&&S(l.distinguishCancelAndClose?"close":"cancel")},y=ip(v),w=O=>{if(l.inputType!=="textarea")return O.preventDefault(),S("confirm")},S=O=>{var L;e.boxType==="prompt"&&O==="confirm"&&!$()||(l.action=O,l.beforeClose?(L=l.beforeClose)==null||L.call(l,O,l,m):m())},$=()=>{if(e.boxType==="prompt"){const O=l.inputPattern;if(O&&!O.test(l.inputValue||""))return l.editorErrorMessage=l.inputErrorMessage||n("el.messagebox.error"),l.validateError=!0,!1;const L=l.inputValidator;if(typeof L=="function"){const B=L(l.inputValue);if(B===!1)return l.editorErrorMessage=l.inputErrorMessage||n("el.messagebox.error"),l.validateError=!0,!1;if(typeof B=="string")return l.editorErrorMessage=B,l.validateError=!0,!1}}return l.editorErrorMessage="",l.validateError=!1,!0},k=()=>{const O=f.value.$refs;return O.input||O.textarea},T=()=>{S("close")};return e.closeOnPressEscape?i1({handleClose:T},o):D8(o,"keydown",O=>O.code===Ie.esc),e.lockScroll&&a1(o),u1(o),Te(ne({},Ut(l)),{overlayEvent:y,visible:o,hasMessage:u,typeClass:r,btnSize:a,iconComponent:i,confirmButtonClasses:h,rootRef:c,headerRef:d,inputRef:f,confirmRef:p,doClose:m,handleClose:T,handleWrapperClick:v,handleInputEnter:w,handleAction:S,t:n})}}),UZ=["aria-label"],qZ={key:0,ref:"headerRef",class:"el-message-box__header"},GZ={class:"el-message-box__title"},XZ={class:"el-message-box__content"},JZ={class:"el-message-box__container"},ZZ={key:1,class:"el-message-box__message"},QZ={key:0},xZ=["innerHTML"],eQ={class:"el-message-box__input"},tQ={class:"el-message-box__btns"};function nQ(e,t,n,o,s,l){const r=le("el-icon"),a=le("close"),i=le("el-input"),u=le("el-button"),c=le("el-overlay"),d=Mn("trap-focus");return C(),x(zt,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=f=>e.$emit("vanish"))},{default:j(()=>[Ge(Y(c,{"z-index":e.zIndex,"overlay-class":["is-message-box",e.modalClass],mask:e.modal},{default:j(()=>[D("div",{class:"el-overlay-message-box",onClick:t[8]||(t[8]=(...f)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...f)),onMousedown:t[9]||(t[9]=(...f)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...f)),onMouseup:t[10]||(t[10]=(...f)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...f))},[Ge((C(),M("div",{ref:"rootRef",role:"dialog","aria-label":e.title||"dialog","aria-modal":"true",class:_(["el-message-box",e.customClass,{"el-message-box--center":e.center,"is-draggable":e.draggable}]),style:De(e.customStyle),onClick:t[7]||(t[7]=Ke(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(C(),M("div",qZ,[D("div",GZ,[e.iconComponent&&e.center?(C(),x(r,{key:0,class:_(["el-message-box__status",e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),D("span",null,he(e.title),1)]),e.showClose?(C(),M("button",{key:0,type:"button",class:"el-message-box__headerbtn","aria-label":"Close",onClick:t[0]||(t[0]=f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=lt(Ke(f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[Y(r,{class:"el-message-box__close"},{default:j(()=>[Y(a)]),_:1})],32)):G("v-if",!0)],512)):G("v-if",!0),D("div",XZ,[D("div",JZ,[e.iconComponent&&!e.center&&e.hasMessage?(C(),x(r,{key:0,class:_(["el-message-box__status",e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),e.hasMessage?(C(),M("div",ZZ,[ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(C(),M("p",{key:1,innerHTML:e.message},null,8,xZ)):(C(),M("p",QZ,he(e.message),1))])])):G("v-if",!0)]),Ge(D("div",eQ,[Y(i,{ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=f=>e.inputValue=f),type:e.inputType,placeholder:e.inputPlaceholder,class:_({invalid:e.validateError}),onKeydown:lt(e.handleInputEnter,["enter"])},null,8,["modelValue","type","placeholder","class","onKeydown"]),D("div",{class:"el-message-box__errormsg",style:De({visibility:e.editorErrorMessage?"visible":"hidden"})},he(e.editorErrorMessage),5)],512),[[pt,e.showInput]])]),D("div",tQ,[e.showCancelButton?(C(),x(u,{key:0,loading:e.cancelButtonLoading,class:_([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=f=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=lt(Ke(f=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:j(()=>[it(he(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["loading","class","round","size"])):G("v-if",!0),Ge(Y(u,{ref:"confirmRef",type:"primary",loading:e.confirmButtonLoading,class:_([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=f=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=lt(Ke(f=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:j(()=>[it(he(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["loading","class","round","disabled","size"]),[[pt,e.showConfirmButton]])])],14,UZ)),[[d]])],32)]),_:3},8,["z-index","overlay-class","mask"]),[[pt,e.visible]])]),_:3})}var oQ=ge(YZ,[["render",nQ],["__file","/home/runner/work/element-plus/element-plus/packages/components/message-box/src/index.vue"]]);const ha=new Map,sQ=(e,t,n=null)=>{const o=Pe(oQ,e);return o.appContext=n,Gl(o,t),document.body.appendChild(t.firstElementChild),o.component},lQ=()=>document.createElement("div"),rQ=(e,t)=>{const n=lQ();e.onVanish=()=>{Gl(null,n),ha.delete(s)},e.onAction=l=>{const r=ha.get(s);let a;e.showInput?a={value:s.inputValue,action:l}:a=l,e.callback?e.callback(a,o.proxy):l==="cancel"||l==="close"?e.distinguishCancelAndClose&&l!=="cancel"?r.reject("close"):r.reject("cancel"):r.resolve(a)};const o=sQ(e,n,t),s=o.proxy;for(const l in e)at(e,l)&&!at(s.$props,l)&&(s[l]=e[l]);return pe(()=>s.message,(l,r)=>{Ft(l)?o.slots.default=()=>[l]:Ft(r)&&!Ft(l)&&delete o.slots.default},{immediate:!0}),s.visible=!0,s};function hr(e,t=null){if(!ct)return Promise.reject();let n;return Qe(e)||Ft(e)?e={message:e}:n=e.callback,new Promise((o,s)=>{const l=rQ(e,t!=null?t:hr._context);ha.set(l,{options:e,callback:n,resolve:o,reject:s})})}const aQ=["alert","confirm","prompt"],iQ={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};aQ.forEach(e=>{hr[e]=uQ(e)});function uQ(e){return(t,n,o,s)=>{let l;return dt(n)?(o=n,l=""):Cn(n)?l="":l=n,hr(Object.assign(ne({title:l,message:t,type:""},iQ[e]),o,{boxType:e}),s)}}hr.close=()=>{ha.forEach((e,t)=>{t.doClose()}),ha.clear()};hr._context=null;const es=hr;es.install=e=>{es._context=e._context,e.config.globalProperties.$msgbox=es,e.config.globalProperties.$messageBox=es,e.config.globalProperties.$alert=es.alert,e.config.globalProperties.$confirm=es.confirm,e.config.globalProperties.$prompt=es.prompt};const cQ=es,YC=["success","info","warning","error"],dQ=Ve({customClass:{type:String,default:""},dangerouslyUseHTMLString:{type:Boolean,default:!1},duration:{type:Number,default:4500},icon:{type:$e([String,Object]),default:""},id:{type:String,default:""},message:{type:$e([String,Object]),default:""},offset:{type:Number,default:0},onClick:{type:$e(Function),default:()=>{}},onClose:{type:$e(Function),required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...YC,""],default:""},zIndex:{type:Number,default:0}}),fQ={destroy:()=>!0},pQ=te({name:"ElNotification",components:ne({ElIcon:je},Ru),props:dQ,emits:fQ,setup(e){const t=we("notification"),n=A(!1);let o;const s=E(()=>{const p=e.type;return p&&Ho[e.type]?t.m(p):""}),l=E(()=>Ho[e.type]||e.icon||""),r=E(()=>e.position.endsWith("right")?"right":"left"),a=E(()=>e.position.startsWith("top")?"top":"bottom"),i=E(()=>({[a.value]:`${e.offset}px`,zIndex:e.zIndex}));function u(){e.duration>0&&({stop:o}=ol(()=>{n.value&&d()},e.duration))}function c(){o==null||o()}function d(){n.value=!1}function f({code:p}){p===Ie.delete||p===Ie.backspace?c():p===Ie.esc?n.value&&d():u()}return xe(()=>{u(),n.value=!0}),Ht(document,"keydown",f),{ns:t,horizontalClass:r,typeClass:s,iconComponent:l,positionStyle:i,visible:n,close:d,clearTimer:c,startTimer:u}}}),hQ=["id"],mQ=["textContent"],vQ={key:0},gQ=["innerHTML"];function bQ(e,t,n,o,s,l){const r=le("el-icon"),a=le("close");return C(),x(zt,{name:e.ns.b("fade"),onBeforeLeave:e.onClose,onAfterLeave:t[3]||(t[3]=i=>e.$emit("destroy"))},{default:j(()=>[Ge(D("div",{id:e.id,class:_([e.ns.b(),e.customClass,e.horizontalClass]),style:De(e.positionStyle),role:"alert",onMouseenter:t[0]||(t[0]=(...i)=>e.clearTimer&&e.clearTimer(...i)),onMouseleave:t[1]||(t[1]=(...i)=>e.startTimer&&e.startTimer(...i)),onClick:t[2]||(t[2]=(...i)=>e.onClick&&e.onClick(...i))},[e.iconComponent?(C(),x(r,{key:0,class:_([e.ns.e("icon"),e.typeClass])},{default:j(()=>[(C(),x(ft(e.iconComponent)))]),_:1},8,["class"])):G("v-if",!0),D("div",{class:_(e.ns.e("group"))},[D("h2",{class:_(e.ns.e("title")),textContent:he(e.title)},null,10,mQ),Ge(D("div",{class:_(e.ns.e("content")),style:De(e.title?void 0:{margin:0})},[ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(C(),M(Le,{key:1},[G(" Caution here, message could've been compromized, nerver use user's input as message "),G(" eslint-disable-next-line "),D("p",{innerHTML:e.message},null,8,gQ)],2112)):(C(),M("p",vQ,he(e.message),1))])],6),[[pt,e.message]]),e.showClose?(C(),x(r,{key:0,class:_(e.ns.e("closeBtn")),onClick:Ke(e.close,["stop"])},{default:j(()=>[Y(a)]),_:1},8,["class","onClick"])):G("v-if",!0)],2)],46,hQ),[[pt,e.visible]])]),_:3},8,["name","onBeforeLeave"])}var yQ=ge(pQ,[["render",bQ],["__file","/home/runner/work/element-plus/element-plus/packages/components/notification/src/notification.vue"]]);const ru={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]},Zd=16;let wQ=1;const nr=function(e={},t=null){if(!ct)return{close:()=>{}};(typeof e=="string"||Ft(e))&&(e={message:e});const n=e.position||"top-right";let o=e.offset||0;ru[n].forEach(({vm:d})=>{var f;o+=(((f=d.el)==null?void 0:f.offsetHeight)||0)+Zd}),o+=Zd;const{nextZIndex:s}=jo(),l=`notification_${wQ++}`,r=e.onClose,a=Te(ne({zIndex:s(),offset:o},e),{id:l,onClose:()=>{CQ(l,n,r)}});let i=document.body;sl(e.appendTo)?i=e.appendTo:Qe(e.appendTo)&&(i=document.querySelector(e.appendTo)),sl(i)||(i=document.body);const u=document.createElement("div"),c=Y(yQ,a,Ft(a.message)?{default:()=>a.message}:null);return c.appContext=t!=null?t:nr._context,c.props.onDestroy=()=>{Gl(null,u)},Gl(c,u),ru[n].push({vm:c}),i.appendChild(u.firstElementChild),{close:()=>{c.component.proxy.visible=!1}}};YC.forEach(e=>{nr[e]=(t={})=>((typeof t=="string"||Ft(t))&&(t={message:t}),nr(Te(ne({},t),{type:e})))});function CQ(e,t,n){const o=ru[t],s=o.findIndex(({vm:u})=>{var c;return((c=u.component)==null?void 0:c.props.id)===e});if(s===-1)return;const{vm:l}=o[s];if(!l)return;n==null||n(l);const r=l.el.offsetHeight,a=t.split("-")[0];o.splice(s,1);const i=o.length;if(!(i<1))for(let u=s;u{t.component.proxy.visible=!1})}nr.closeAll=$Q;nr._context=null;const kQ=F0(nr,"$notify");var SQ=[AZ,DZ,jZ,cQ,kQ,_Y],EQ=c6([...CZ,...SQ]),UC={};(function(e){Object.defineProperty(e,"__esModule",{value:!0});var t={name:"zh-tw",el:{colorpicker:{confirm:"\u78BA\u8A8D",clear:"\u6E05\u7A7A"},datepicker:{now:"\u73FE\u5728",today:"\u4ECA\u5929",cancel:"\u53D6\u6D88",clear:"\u6E05\u7A7A",confirm:"\u78BA\u8A8D",selectDate:"\u9078\u64C7\u65E5\u671F",selectTime:"\u9078\u64C7\u6642\u9593",startDate:"\u958B\u59CB\u65E5\u671F",startTime:"\u958B\u59CB\u6642\u9593",endDate:"\u7D50\u675F\u65E5\u671F",endTime:"\u7D50\u675F\u6642\u9593",prevYear:"\u524D\u4E00\u5E74",nextYear:"\u5F8C\u4E00\u5E74",prevMonth:"\u4E0A\u500B\u6708",nextMonth:"\u4E0B\u500B\u6708",year:"\u5E74",month1:"1 \u6708",month2:"2 \u6708",month3:"3 \u6708",month4:"4 \u6708",month5:"5 \u6708",month6:"6 \u6708",month7:"7 \u6708",month8:"8 \u6708",month9:"9 \u6708",month10:"10 \u6708",month11:"11 \u6708",month12:"12 \u6708",weeks:{sun:"\u65E5",mon:"\u4E00",tue:"\u4E8C",wed:"\u4E09",thu:"\u56DB",fri:"\u4E94",sat:"\u516D"},months:{jan:"\u4E00\u6708",feb:"\u4E8C\u6708",mar:"\u4E09\u6708",apr:"\u56DB\u6708",may:"\u4E94\u6708",jun:"\u516D\u6708",jul:"\u4E03\u6708",aug:"\u516B\u6708",sep:"\u4E5D\u6708",oct:"\u5341\u6708",nov:"\u5341\u4E00\u6708",dec:"\u5341\u4E8C\u6708"}},select:{loading:"\u52A0\u8F09\u4E2D",noMatch:"\u7121\u5339\u914D\u8CC7\u6599",noData:"\u7121\u8CC7\u6599",placeholder:"\u8ACB\u9078\u64C7"},cascader:{noMatch:"\u7121\u5339\u914D\u8CC7\u6599",loading:"\u52A0\u8F09\u4E2D",placeholder:"\u8ACB\u9078\u64C7",noData:"\u7121\u8CC7\u6599"},pagination:{goto:"\u524D\u5F80",pagesize:"\u9805/\u9801",total:"\u5171 {total} \u9805",pageClassifier:"\u9801"},messagebox:{title:"\u63D0\u793A",confirm:"\u78BA\u5B9A",cancel:"\u53D6\u6D88",error:"\u8F38\u5165\u7684\u8CC7\u6599\u4E0D\u7B26\u898F\u5B9A!"},upload:{deleteTip:"\u6309 delete \u9375\u53EF\u522A\u9664",delete:"\u522A\u9664",preview:"\u67E5\u770B\u5716\u7247",continue:"\u7E7C\u7E8C\u4E0A\u50B3"},table:{emptyText:"\u66AB\u7121\u8CC7\u6599",confirmFilter:"\u7BE9\u9078",resetFilter:"\u91CD\u7F6E",clearFilter:"\u5168\u90E8",sumText:"\u5408\u8A08"},tree:{emptyText:"\u66AB\u7121\u8CC7\u6599"},transfer:{noMatch:"\u7121\u5339\u914D\u8CC7\u6599",noData:"\u7121\u8CC7\u6599",titles:["\u5217\u8868 1","\u5217\u8868 2"],filterPlaceholder:"\u8ACB\u8F38\u5165\u641C\u7D22\u5167\u5BB9",noCheckedFormat:"\u5171 {total} \u9805",hasCheckedFormat:"\u5DF2\u9078 {checked}/{total} \u9805"},image:{error:"\u52A0\u8F09\u5931\u6557"},pageHeader:{title:"\u8FD4\u56DE"},popconfirm:{confirmButtonText:"\u78BA\u8A8D",cancelButtonText:"\u53D6\u6D88"}}};e.default=t})(UC);var _Q=KB(UC);class TQ{static Sleep(t){return new Promise(n=>setTimeout(n,t))}}class AQ{constructor(t){ys(this,"BJ_Casino");ys(this,"ID");ys(this,"_conn",null);ys(this,"_client");this._client=t,this.BJ_Casino=t.BJ_Casino,this.ID=t.ID,this.onLoad()}async onLoad(){await this.ConnectServer()}async ConnectServer(){let n=this.BJ_Casino.Config.ServerList[this.ID];if(!n)return;const o=n.name,s=n.host,l=n.port;this._client.Name.value=o,this._client.Host.value=s,this._client.Port.value=l,await this.ConnectAsync(s,+l)}async ConnectAsync(t,n){let o=this;var s="https://api.ipify.org/?format=json",l=new XMLHttpRequest;let r="";for(l.onreadystatechange=function(){l.readyState===4&&l.status>=200&&l.status<400&&(r=JSON.parse(l.responseText).ip)},l.open("GET",s,!0),l.send(),console.log("[\u4E8B\u4EF6]\u6E96\u5099\u9023\u7DDA...");r==="";)await TQ.Sleep(1);let a="",i="";t.indexOf("https://")!=-1?(a="https",t=t.replace("https://","")):(a=window.location.href.substring(0,5),t=t.replace("http://","")),console.log("[\u4E8B\u4EF6]checkHttp=",a,t,n),a!="https"?i=`ws://${t}:${n}/?ip=${r}`:i=`wss://${t}:${n}/?ip=${r}`;let c=new WebSocket(i);c.onopen=function(d){console.log(`[\u4E8B\u4EF6] [${o._client.Name.value}] \u9023\u7DDA\u72C0\u614B: true`),o._client.IsConnect.value="true"},c.onmessage=function(d){},c.onclose=function(d){},c.onerror=function(d){o._client.IsConnect.value="\u7121\u56DE\u61C9"}}}const NQ=te({props:{BJ_Casino:null,ID:null},setup(e){const t=e;let n=A(""),o=A(""),s=A(""),l=A("false");const r={ID:t.ID,BJ_Casino:t.BJ_Casino,Name:n,Host:o,Port:s,IsConnect:l};return new AQ(r),(a,i)=>{const u=le("font");return C(),M("tr",null,[D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(n)),1)]),_:1})]),D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(o)),1)]),_:1})]),D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(s)),1)]),_:1})]),D("td",null,[Y(u,{size:"5"},{default:j(()=>[D("b",null,he(b(l)),1)]),_:1})])])}}}),MQ=[{name:"\u5167\u7248",host:"http://220.134.195.1",port:"19005"},{name:"\u8089\u4E7E 9006",host:"http://192.168.5.230",port:"9006"},{name:"\u8089\u4E7E 9007",host:"http://192.168.5.230",port:"9007"},{name:"\u8089\u4E7E 9008",host:"http://192.168.5.230",port:"9008"},{name:"\u8089\u4E7E 9009",host:"http://192.168.5.230",port:"9009"},{name:"40 9487",host:"http://192.168.5.12",port:"9487"},{name:"\u9001\u5BE9",host:"https://submit.online-bj.com",port:"9005"},{name:"\u5916\u7248",host:"https://game.online-bj.com",port:"9005"},{name:"testing1",host:"http://bj-testing1.casino.catan.com.tw",port:"9005"},{name:"testing2",host:"http://bj-testing2.casino.catan.com.tw",port:"9005"},{name:"testing3",host:"http://bj-testing3.casino.catan.com.tw",port:"9005"}];var OQ={ServerList:MQ};String.IsNullOrEmpty=function(e){return e==null||e.trim()===""};String.Format=function(e,...t){return e.replace(/{(\d+)}/g,(n,o)=>{let s=t[o];return s==null?"":""+s})};class IQ{constructor(t){ys(this,"Client");ys(this,"Config");this.Client=t,this.onLoad()}async onLoad(){this.Config=OQ}}const DQ={class:"d-flex justify-content-center"},PQ={class:"table table-striped table-info table-hover"},LQ=D("thead",null,[D("tr",null,[D("th",{align:"left"},"\u540D\u7A31"),D("th",{align:"left"},"Host"),D("th",{align:"left"},"Port"),D("th",{align:"left"},"\u72C0\u614B")])],-1),RQ=te({setup(e){const t={};let n=A("BJ_ServerState");const o=new IQ(t);return(s,l)=>(C(),M(Le,null,[D("h1",null,he(b(n)),1),D("div",DQ,[D("table",PQ,[LQ,(C(!0),M(Le,null,rt(b(o).Config.ServerList,(r,a)=>(C(),M("tbody",{key:a},[Y(NQ,{BJ_Casino:b(o),ID:a},null,8,["BJ_Casino","ID"])]))),128))])])],64))}});Qy(RQ).use(EQ,{locale:_Q}).mount("#app")});export default BQ(); diff --git a/public/index.html b/public/index.html index 9e17056..f938415 100644 --- a/public/index.html +++ b/public/index.html @@ -8,7 +8,7 @@ BJ_ServerState - + diff --git a/src/App.vue b/src/App.vue index a1de1d9..6a8d5f4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,49 +1,14 @@ \ No newline at end of file diff --git a/src/components/web2game.js b/src/components/web2game.js new file mode 100644 index 0000000..f796b99 --- /dev/null +++ b/src/components/web2game.js @@ -0,0 +1,117 @@ +/* eslint-disable no-undef */ +/* eslint-disable space-before-function-paren */ +class Web2Game { + /** + * 根据页码切换课件 + * + * @param {string} sceneName + * @param {Function} callback + * @memberof Web2Game + */ + changeGameByPageIndex(pageIndex, callback) { + cc.web2cocosSDK.changeGameByPageIndex(pageIndex, callback) + } + /** + * 加载场景 + * + * @param {string} sceneName + * @param {Function} callback + * @memberof Web2Game + */ + loadScene(launchScene, onProgress) { + // return cc.web2cocosSDK.loadScene(sceneName, callback) + 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); + } + } + } + ); + } + /** + * 加载游戏的预制体 + * + * @param {string} sceneName + * @param {Function} callback + * @memberof Web2Game + */ + loadGame(gameName, callback) { + cc.web2cocosSDK.loadGame(gameName, callback) + } + /** + * 卸载游戏 + * + * @param {string} sceneName + * @param {Function} callback + * @memberof Web2Game + */ + unloadGame() { + cc.web2cocosSDK.unloadGame() + } + /** + * 加载图片 --electron内使用 + * + * @param {string} sceneName + * @param {Function} callback + * @memberof Web2Game + */ + + loadCustomImage(imageName, callback) { + cc.web2cocosSDK.loadCustomImage(imageName, callback) + } + /** + * 重置game分辨率 + * + * @param {cc.Vec2} editorSize {width:2048,height:1152} + * @param {number} ratio 缩放的倍率 + * @param {Function} callFunc + */ + updateResolution(editorSize, ratio, callback) { + cc.web2cocosSDK.updateResolution(editorSize, ratio, callback) + } + /** + * 设置节点属性 + * + * @param {string} sceneName + * @param {Function} callback + * @memberof Web2Game + */ + setNodeAttribute({ node, attribute, value }) { + cc.web2cocosSDK.setNodeAttribute({ node, attribute, value }) + } + /** + * 触发cocos内的事件系统 + * + * @param {*} eventName + * @param {*} params + */ + emit(eventName, params) { + cc.web2cocosSDK.emitGameEvt(eventName, params) + } + static getInstance() { + let instance + return function () { + if (!instance) { + instance = new Web2Game() + } + return instance + } + } +} +const web2game = new Web2Game() + +export default web2game diff --git a/src/script/BJ_Casino_Data.ts b/src/script/BJ_Casino_Data.ts deleted file mode 100644 index 841dab6..0000000 --- a/src/script/BJ_Casino_Data.ts +++ /dev/null @@ -1,29 +0,0 @@ -import config from '../../src/assets/config.json'; -import "./Engine/CatanEngine/CSharp/String"; - -export class BJ_Casino_Data { - - //#region public - - public Client: any; - - public Config: any; - - //#endregion - - //#region Lifecycle - - /** - * - */ - constructor(client: any) { - this.Client = client; - this.onLoad(); - } - - public async onLoad(): Promise { - this.Config = config; - } - - //#endregion -} diff --git a/src/script/BJ_ServerState.ts b/src/script/BJ_ServerState.ts deleted file mode 100644 index 6095a70..0000000 --- a/src/script/BJ_ServerState.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { BJ_Casino_Data } from "./BJ_Casino_Data"; -import { NetConnector } from "./Engine/CatanEngine/NetManagerV2/NetConnector"; -import { Tools } from "./Tools"; - -export class BJ_ServerState { - //#region Lifecycle - - public BJ_Casino: BJ_Casino_Data; - - public ID: number; - - //#endregion - - //#region private - - private _conn: NetConnector = null; - - private _client: any; - - //#endregion - - //#region Lifecycle - - /** - * - */ - constructor(client: any) { - this._client = client; - this.BJ_Casino = client.BJ_Casino; - this.ID = client.ID; - this.onLoad(); - } - - public async onLoad(): Promise { - await this.ConnectServer(); - } - - //#endregion - - //#region 網路相關 - - /** 連線 */ - public async ConnectServer(): Promise { - let serverList = this.BJ_Casino.Config.ServerList; - let server = serverList[this.ID]; - if (!server) { - return; - } - const Name: string = server.name; - const Host: string = server.host; - const Port: string = server.port; - this._client.Name.value = Name; - this._client.Host.value = Host; - this._client.Port.value = Port; - await this.ConnectAsync(Host, +Port); - } - - /** 連線(目前沒有重連機制) */ - public async ConnectAsync(host: string, port: number): Promise { - let self = this; - var url: string = "https://api.ipify.org/?format=json"; - var xhr: XMLHttpRequest = new XMLHttpRequest(); - let ip: string = ""; - xhr.onreadystatechange = function (): void { - if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 400)) { - ip = JSON.parse(xhr.responseText)["ip"]; - } - }; - xhr.open("GET", url, true); - xhr.send(); - console.log("[事件]準備連線..."); - while (ip === "") { - await Tools.Sleep(1); - } - - let checkHttp: string = ""; - let ws: string = ""; - let index: number = host.indexOf("https://"); - if (index != -1) { - checkHttp = "https"; - host = host.replace("https://", ""); - } else { - checkHttp = window.location.href.substring(0, 5); - host = host.replace("http://", ""); - } - if (true) { - console.log("[事件]checkHttp=", checkHttp, host, port); - } - if (checkHttp != "https") { - ws = `ws://${host}:${port}/?ip=${ip}`; - } - else { - ws = `wss://${host}:${port}/?ip=${ip}`; - } - - let socket = new WebSocket(ws); - - socket.onopen = function (e) { - console.log(`[事件] [${self._client.Name.value}] 連線狀態: true`); - self._client.IsConnect.value = "true"; - }; - - socket.onmessage = function (event) { - // alert(`[message] Data received from server: ${event.data}`); - }; - - socket.onclose = function (event) { - // if (event.wasClean) { - // // alert(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`); - // } else { - // // 例如服务器进程被杀死或网络中断 - // // 在这种情况下,event.code 通常为 1006 - // // alert('[close] Connection died'); - // } - }; - - socket.onerror = function (error) { - // alert(`[error] ${error["message"]}`); - self._client.IsConnect.value = "無回應"; - }; - } - - //#endregion -} diff --git a/src/script/Base/BusinessTypeSetting.ts b/src/script/Base/BusinessTypeSetting.ts deleted file mode 100644 index a3d6d7b..0000000 --- a/src/script/Base/BusinessTypeSetting.ts +++ /dev/null @@ -1,237 +0,0 @@ -export module BusinessEnum { - export enum BusinessType { - Type1 = "H5", - Type2 = "App" - } - export enum ServerType { - /** WEB格式 */ - Web = 1, - /** 外版 */ - Out = 2, - /** 送審環境 */ - Submit = 3, - /** 內版商業DEMO測試(B2B) */ - Internal_release = 4, - /** 內版開發(內網&4G) */ - Internal_Dev = 5, - /** 外部商業DEMO(B2B) */ - Out_B2B = 6 - } - export enum LogoType { - /** 完美(目前只有WEB) */ - WM = 1 - } -} - -/** -產品商業類別設定檔 -@explain 讀不同表就代表不同商業類別.要多開GIT並設定新測試環境 -@explain 遊戲一定都一樣不能改動介面 - */ -export default class BusinessTypeSetting { - /** 產品商業類別字串(組合判斷用) */ - public static readonly TYPE_BUSINESS: string = "App"; - /** 編譯版本 */ - public static readonly COMPILE_VERSION: string = "1.3.1"; - /** 編譯程式碼版號 */ - public static readonly SCRIPT_BUNLE_LIST: string[] = [ - "FormTableScript", "CommonScript", "ElementUIScript", "LoginScript", "LobbyScript", "SlotScript" - ]; - public static readonly ART_UI_BUNLE_LIST: string[] = [ - "Common", "CommonSound", "Login", "Lobby", "GameCommon", - "Game_BottomUI_SD", "Game_BigWinJackpot", "GameMessage", "CommonLanguageTexture", "MainControl", - "BindAccount", "SettingPanel", "Shop", "Vip", "Ad", - "Mail", "Chat", "PlayerInfo", "Rank", "Gift", - "ResourceItem", "Backpack", "GettingPanel", "Activity", "Game_BottomUI_BJ" - ]; - public static readonly DEV_ART_UI_BUNLE_LIST: string[] = [ - - ] - public static readonly ART_GAME_BUNLE_LIST: string[] = [ - "Game_1201", "Game_1202", "Game_1302" - ] - public static readonly ART_REMOTE_GAME_BUNLE_LIST: string[] = [ - "Game_1", "Game_2", "Game_5", "Game_8", "Game_9", - "Game_10", "Game_12", "Game_15", "Game_16", "Game_18", - "Game_23", "Game_24", "Game_25", "Game_26", "Game_27", - "Game_28", "Game_29", "Game_30", "Game_32", "Game_33", - "Game_34", "Game_35", "Game_37", "Game_36", "Game_40", - "Game_44", "Game_48", "Game_50", "Game_51", "Game_58", - "Game_1101", "Game_1401", "Game_1501", "Game_2001", "Game_2003", - "Game_3002", "Game_3003", "Game_3012", - ] - /** 送審旗標(讀取外版自動判斷是否送審) */ - public static IsSubmit: boolean = false; - /** 跑送審2的手動旗標(若是送審且設為true跑2號環境) */ - public static IsSubmitTestFlight: boolean = false; - /** B2B手動旗標(true寫死B2B環境) */ - public static IsB2B: boolean = false; - - /** 商業LOGO圖代碼(讀同一張表但UI有改的設定) */ - public static Logo: number = null!; - /** 連線IP(網頁版會接網址參數所以要多開變數直接指定) */ - public static UseHost: string = null!; - /** 連接阜(網頁版會接網址參數所以要多開變數直接指定) */ - public static UsePort: number = null!; - /** 資源伺服器網址 */ - public static UsePatch: string = null!; - /** 帳號 */ - public static Account: string = null!; - /** 密碼 */ - public static Password: string = null!; - - // ======================================================================================= - /** 執行環境ProductEnum.ServerType */ - public static UseServerTpye: BusinessEnum.ServerType = BusinessEnum.ServerType.Web; - /** 網頁是否在伺服器上 */ - public static readonly CheckOnServer: boolean = - window.location.href.indexOf("localhost") == -1 - && window.location.href.indexOf("/build/") == -1; - /** 網頁測試讀取對應資源的位置 */ - public static readonly FolderUrlImg: string = "shared/img/"; - public static readonly FolderUrlBg: string = "shared/bg/"; - public static readonly FolderUrlJson: string = "shared/jsons/"; - public static readonly FolderUrlTxt: string = "shared/txt/"; - public static readonly FolderUrlLoading: string = "shared/loading/"; - public static readonly FolderUrlMp3: string = "shared/"; - public static readonly FolderUrlBundle: string = `Bundle_${true ? "Debug" : "Release"}/`; - public static readonly FolderOS: string = "Android/"; - /**遠端Bundle路徑為: URL + BundleName.非遊戲資源到各自平台資料夾找BUNDLE */ - public static GetRemoteFileUrl(bundleName: string): string { - let gameNumber: string = bundleName.split("Game_")[1]; - var regExp: RegExp = /^[0-9]+$/; - let isGame: boolean = regExp.test(gameNumber); - let bundleUrl: string = `${BusinessTypeSetting.UsePatch}${BusinessTypeSetting.FolderUrlBundle}`; - if (isGame) { - bundleUrl = `${bundleUrl}${bundleName}`; - } else { - bundleUrl = `${bundleUrl}${BusinessTypeSetting.FolderOS}${bundleName}`; - } - return bundleUrl; - } - /** - * 取得PACH資原路徑 - * @param type 執行環境() - * @returns - */ - public static GetPatchUrl(type: BusinessEnum.ServerType): string { - if (this.UseServerTpye == BusinessEnum.ServerType.Web) { - // TYP2網頁版資源路路徑判斷 - if (this.CheckOnServer) { - return "../shared/"; - } else { - return "http://patch-dev.online-bj.com//shared/"; - } - } - switch (type) { - case BusinessEnum.ServerType.Out: - return "https://patch.online-bj.com/game/"; - case BusinessEnum.ServerType.Submit: - if (!this.IsSubmitTestFlight) { - return "https://patch-submit.online-bj.com/game/"; - } else { - return "https://patch-submit2.online-bj.com/game/"; - } - - case BusinessEnum.ServerType.Out_B2B: - return "https://patch-demo.online-bj.com/game/"; - case BusinessEnum.ServerType.Internal_release: - return "http://patch-release.online-bj.com/"; - - case BusinessEnum.ServerType.Internal_Dev: - return "http://patch-dev.online-bj.com/"; - - default: - console.warn("GetPatchUrl Uncheck ServerType."); - return "http://patch-dev.online-bj.com/"; - } - } - /** - * 取得連線伺服器IP - * @param type 執行環境 - * @returns - */ - public static GetHostUrl(type: BusinessEnum.ServerType): string { - if (this.UseServerTpye == BusinessEnum.ServerType.Web) { - return "app.casino.catan.com.tw"; - } - switch (type) { - case BusinessEnum.ServerType.Out: - return "https://game.online-bj.com"; - case BusinessEnum.ServerType.Submit: - if (!this.IsSubmitTestFlight) { - return "https://submit.online-bj.com"; - } else { - return "https://submit2.online-bj.com"; - } - - case BusinessEnum.ServerType.Out_B2B: - return "https://demo.online-bj.com"; - case BusinessEnum.ServerType.Internal_release: - return "https://demo.online-bj.com"; - - case BusinessEnum.ServerType.Internal_Dev: - return "http://220.134.195.1"; - - default: - console.warn("GetHostUrl Uncheck ServerType."); - // 只有內網可憐IP - return "app.casino.catan.com.tw"; - } - } - /** - * 取得伺服器連接端口 - * @param type 執行環境 - * @returns - */ - public static GetPortNum(type: BusinessEnum.ServerType): number { - if (this.UseServerTpye == BusinessEnum.ServerType.Web) { - // 網頁版測試專用.正式接網頁參數 - return 9005; - } - switch (type) { - case BusinessEnum.ServerType.Out: - return 9005; - case BusinessEnum.ServerType.Submit: - if (!this.IsSubmitTestFlight) { - return 9005; - } else { - return 9005; - } - - case BusinessEnum.ServerType.Out_B2B: - return 9005; - case BusinessEnum.ServerType.Internal_release: - return 9005; - - case BusinessEnum.ServerType.Internal_Dev: - return 19005; - - default: - console.warn("GePortNum Uncheck ServerType."); - return 9005; - } - } - public static GetDownloadUrl(type: BusinessEnum.ServerType): string { - switch (type) { - case BusinessEnum.ServerType.Internal_Dev: - return "http://static-dev.online-bj.com/"; - default: - let url: string = this.GetHostUrl(type); - url = url.replace("http://", ""); - url = url.replace("https://", ""); - return "https://static-" + url; - } - } - - public static GetUploadUrl(type: BusinessEnum.ServerType): string { - let port: string = ":9080"; - switch (type) { - case BusinessEnum.ServerType.Internal_Dev: - return "http://static-dev.online-bj.com" + port; - default: - return this.GetHostUrl(type) + port; - } - } - // ======================================================================================= -} \ No newline at end of file diff --git a/src/script/Base/CSMessage.ts b/src/script/Base/CSMessage.ts deleted file mode 100644 index 9371555..0000000 --- a/src/script/Base/CSMessage.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** 訊息框相關 */ -export default class CSMessage { - /** 網路錯誤訊息 */ - public static NetError(method: string, state: number, str: string = ""): void { - let error: string = String.Format("[{0}] state:{1} {2}", method, state, str); - console.warn("網路錯誤訊息: ", error); - } -} \ No newline at end of file diff --git a/src/script/Base/Config.ts b/src/script/Base/Config.ts deleted file mode 100644 index 97544e1..0000000 --- a/src/script/Base/Config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/**放跟ProductSetting沒關係的變數 */ -export default class Config { - /**是否是連線模式 */ - public static IsOnlineMode: boolean = false; - /**內版帳號登入(目前只支援TYPE1.請從GM工具創好帳號在去DEMO場景加按鈕) */ - public static IsDemoLogin: boolean = false; - /**遊戲模式(0一般 1特色.WEB才有分) */ - public static GameMode: number = 0; - /**顯示金錢變動LOG */ - public static ShowMoneyLog: boolean = true; - /**顯示測試畫面 */ - public static ShowTest: boolean = false; - public static GetRunDevice(): number { - return 0; - } - public static IsANDROID(): boolean { - return false; - } - public static IsIOS(): boolean { - return false; - } -} diff --git a/src/script/Base/Request/AccountRequest.ts b/src/script/Base/Request/AccountRequest.ts deleted file mode 100644 index 9a3e665..0000000 --- a/src/script/Base/Request/AccountRequest.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { NetRequest } from "../../Engine/CatanEngine/NetManagerV2/NetRequest"; -import BusinessTypeSetting from "../BusinessTypeSetting"; -import Config from "../Config"; - -// ======================================================================================= -/** 通用回傳SERVER創的帳號 */ -interface CommonAccountResponse { - a: string; - pw: string; -} - -// ======================================================================================= -interface CreateResquest { - p: number; -} -/** 直接玩(訪客給SERVER創帳號) */ -export class AccountCreateRequest extends NetRequest { - get Method(): string { - return "account.create"; - } - constructor() { - super(); - this.Data = { - p: Config.GetRunDevice(), - }; - } -} -// ======================================================================================= -interface LoginResquest { - p: number; - device_info: string[]; - fcm_token: string; - a: string; - pw: string; - ver: string; -} -interface LoginResponse { - pr: string; - cu: string; -} -/** 通用登入 */ -export class AccountLoginRequest extends NetRequest { - get Method(): string { - return "account.login"; - } - constructor(account: string, password: string) { - super(); - this.Data = { - p: Config.GetRunDevice(), - device_info: ["Windows", "Windows"], - fcm_token: "", - a: account, - pw: password, - ver: BusinessTypeSetting.COMPILE_VERSION - }; - } -} -// ======================================================================================= -interface CustomResquest { - a: string; - pw: string; -} -/** 自定帳號榜定 */ -export class CustomBindRequest extends NetRequest { - get Method(): string { - return "register.account_bind"; - } - constructor(account: string, password: string) { - super(); - this.Data = { - a: account, - pw: password, - }; - } -} -/** 自定帳號登入(回傳SERVER帳號) */ -export class CustomLoginRequest extends NetRequest { - get Method(): string { - return "register.account_login"; - } - constructor(account: string, password: string) { - super(); - this.Data = { - a: account, - pw: password, - }; - } -} -// ======================================================================================= -interface FBResquest { - t: string; -} -/** FB綁定 */ -export class FBBindRequest extends NetRequest { - get Method(): string { - return "register.fb_bind"; - } - constructor(token: string) { - super(); - this.Data = { - t: token, - }; - } -} -/** FB登入(回傳SERVER帳號) */ -export class FBLoginRequest extends NetRequest { - get Method(): string { - return "register.fb_login"; - } - constructor(token: string) { - super(); - this.Data = { - t: token, - }; - } -} -// ======================================================================================= -interface GoogleResquest { - c: string; -} -/** GOOGLE綁定 */ -export class GoogleBindRequest extends NetRequest { - get Method(): string { - return "register.google_bind"; - } - constructor(token: string) { - super(); - this.Data = { - c: token, - }; - } -} -/** GOOGLE登入(回傳SERVER帳號) */ -export class GoogleLoginRequest extends NetRequest { - get Method(): string { - return "register.google_login"; - } - constructor(token: string) { - super(); - this.Data = { - c: token, - }; - } -} -// ======================================================================================= -interface AppleResquest { - c: string; -} -/** APPEL綁定 */ -export class AppleBindRequest extends NetRequest { - get Method(): string { - return "register.apple_bind"; - } - constructor(token: string) { - super(); - this.Data = { - c: token, - }; - } -} -/** APPLE登入(回傳SERVER帳號) */ -export class AppleLoginRequest extends NetRequest { - get Method(): string { - return "register.apple_login"; - } - constructor(token: string) { - super(); - this.Data = { - c: token, - }; - } -} -// ======================================================================================= -/** 電話驗證 */ -export interface PhoneCodeRequest { - p: string; -} - -export class PhoneGet extends NetRequest { - get Method(): string { - return "register.phone_code"; - } - constructor(p: string) { - super(); - this.Data = { - p: p - }; - } -} - -export interface PhoneBindRequest { - c: string; -} - -export class PhoneBind extends NetRequest { - get Method(): string { - return "register.phone_bind"; - } - constructor(c: string) { - super(); - this.Data = { - c: c - }; - } -} - -// ======================================================================================= -/** 旗標更新 */ -export class FlagOpenAdd extends NetRequest { - get Method(): string { - return "flag.open_add"; - } - constructor(type: number) { - super(); - this.Data = type; - } -} - -// ======================================================================================== -export interface ForgotInfo { - a: string; - p: string; -} - -/** 忘記密碼 */ -export class ForgotPassword extends NetRequest { - get Method(): string { - return "register.account_forget"; - } - constructor(account: string, phone: string) { - super(); - this.Data = { - a: account, - p: phone, - }; - } -} \ No newline at end of file diff --git a/src/script/Base/Request/RankRequest.ts b/src/script/Base/Request/RankRequest.ts deleted file mode 100644 index 77de694..0000000 --- a/src/script/Base/Request/RankRequest.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { NetRequest } from "../../Engine/CatanEngine/NetManagerV2/NetRequest"; - -export interface RankInfo { - t: number; - p?: number; - id?: number; -} - -export class AppRankInfo extends NetRequest { - get Method(): string { - return "rank.info"; - } - constructor(Type: number, Parameter?: number) { - super(); - this.Data = { - t: Type, - p: Parameter, - }; - } -} - -export class AppRankHistory extends NetRequest { - get Method(): string { - return "rank.history"; - } - constructor(Type: number, Parameter: number, DayId: number) { - super(); - this.Data = { - id: DayId, - t: Type, - p: Parameter - }; - } -} - -export interface RankReplayInfo { - id: number; - t: number; - r: number; - p: number; -} - - -export class AppRankLog extends NetRequest { - get Method(): string { - return "rank.log"; - } - constructor(DayId: number, Type: number, rank: number, Parameter: number) { - super(); - this.Data = { - id: DayId, - t: Type, - r: rank, - p: Parameter - }; - } -} - -export class TestAppRankLog extends NetRequest { - get Method(): string { - return "rank.log_test"; - } - constructor(DayId: number, Type: number, rank: number, Parameter: number) { - super(); - this.Data = { - id: DayId, - t: Type, - r: rank, - p: Parameter - }; - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine.meta b/src/script/Engine/CatanEngine.meta deleted file mode 100644 index f0d308f..0000000 --- a/src/script/Engine/CatanEngine.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "a69fe64f-177f-4e4b-83f0-1f418203d85f", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp.meta b/src/script/Engine/CatanEngine/CSharp.meta deleted file mode 100644 index ad81719..0000000 --- a/src/script/Engine/CatanEngine/CSharp.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "f9edb32f-c4ab-4e5d-8270-71fa609e1db7", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/String.ts b/src/script/Engine/CatanEngine/CSharp/String.ts deleted file mode 100644 index 2ad222b..0000000 --- a/src/script/Engine/CatanEngine/CSharp/String.ts +++ /dev/null @@ -1,20 +0,0 @@ -declare global { - interface StringConstructor { - IsNullOrEmpty: (value: string) => boolean; - Format: (format: string, ...args: any[]) => string; - } -} - -String.IsNullOrEmpty = function (value: string): boolean { - return value === undefined || value === null || value.trim() === ''; -}; - -String.Format = function (format: string, ...args: any[]): string { - return format.replace(/{(\d+)}/g, (match, index) => { - let value = args[index]; - if (value === null || value === undefined) return ''; - return '' + value; - }); -} - -export { }; diff --git a/src/script/Engine/CatanEngine/CSharp/String.ts.meta b/src/script/Engine/CatanEngine/CSharp/String.ts.meta deleted file mode 100644 index 42955f2..0000000 --- a/src/script/Engine/CatanEngine/CSharp/String.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "0c3d1ca6-bdaf-4a00-b209-6ef460802cdc", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System.meta b/src/script/Engine/CatanEngine/CSharp/System.meta deleted file mode 100644 index 4b20ca4..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "01b35dee-e6e0-4a6e-a73c-3b49c37f1c5f", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/Action.ts b/src/script/Engine/CatanEngine/CSharp/System/Action.ts deleted file mode 100644 index e681833..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/Action.ts +++ /dev/null @@ -1,125 +0,0 @@ -/** - * 回呼函數: fnname (arg: TArg): void - */ -interface ActionCallback { - (arg: TArg): void; -} - -interface Struct { - callback: ActionCallback; - target: any; - once?: boolean; -} - -export class Action { - private _queue: Struct[] = []; - - /** - * 監聽事件 - * @param callback 回呼函數: fnname (arg: TArg): void - * @param bindTarget 回呼時this綁定的對象 - */ - AddCallback(callback: ActionCallback, bindTarget?: any) { - let q = > { - callback: callback, - target: bindTarget - }; - this._queue.push(q); - } - - /** - * 監聽事件 (一次性) - * @param callback 回呼函數: fnname (arg: TArg): void - * @param bindTarget 回呼時this綁定的對象 - */ - AddCallbackOnce(callback: ActionCallback, bindTarget?: any) { - let q = > { - callback: callback, - target: bindTarget, - once: true - }; - this._queue.push(q); - } - - /** - * 移除事件 - * @param callback - */ - RemoveByCallback(callback: ActionCallback) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.callback === callback) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param bindTarget 回呼時this綁定的對象 - */ - RemoveByBindTarget(bindTarget: any) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.target === bindTarget) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除全部事件 - */ - RemoveAllCallbacks() { - this._queue.forEach(q => q.callback = undefined); - this._queue.length = 0; - } - - /** - * 發送事件 - * @param arg 參數 - */ - DispatchCallback(arg: TArg) { - let index = this._queue.length; - if (index > 0) { - let cleanRemoved = false; - this._queue.slice().forEach(q => { - if (!q.callback) { - cleanRemoved = true; - return; - } - - if (q.target) { - q.callback.call(q.target, arg); - } else { - q.callback(arg); - } - - if (q.once) { - q.callback = undefined; - cleanRemoved = true; - } - }); - - if (cleanRemoved) { - index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback) { - this._queue.splice(index, 1); - } - } - } - } - } - } -} diff --git a/src/script/Engine/CatanEngine/CSharp/System/Action.ts.meta b/src/script/Engine/CatanEngine/CSharp/System/Action.ts.meta deleted file mode 100644 index a62a428..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/Action.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "ea9bf762-40a7-4bab-b949-8d5b3d4289e2", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/ActionExample.ts b/src/script/Engine/CatanEngine/CSharp/System/ActionExample.ts deleted file mode 100644 index 555e498..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/ActionExample.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Action } from "./Action"; -import { ActionWithType } from "./ActionWithType"; -import { ActionWithType2 } from "./ActionWithType2"; - -const { ccclass, property } = console._decorator; - -enum CustomType { - Ex1, Ex2 -} - -class CustomEvent extends ActionWithType { } -class CustomEvent2 extends ActionWithType2 { } - -@ccclass -export default class NewClass extends console.Component { - callback: Action = new Action(); - customCallback: CustomEvent = new CustomEvent(); - customCallback2: CustomEvent2 = new CustomEvent2(); - - private num: number = 0; - - start() { - this.callback.AddCallback(this.CB, this); - this.callback.AddCallbackOnce(this.OnceCB, this); - - this.customCallback.AddCallback(CustomType.Ex1, this.CBType, this); - this.customCallback.AddCallbackOnce(CustomType.Ex2, this.OnceCBType, this); - - this.customCallback2.AddCallback(CustomType.Ex2, this.CBTypeAllin1, this); - this.customCallback2.AddCallbackOnce(CustomType.Ex1, this.CBTypeAllin1, this); - } - - DispatchClick() { - this.num++; - - this.callback.DispatchCallback(this.num); - - this.customCallback.DispatchCallback(CustomType.Ex1, this.num); - this.customCallback.DispatchCallback(CustomType.Ex2, this.num); - - this.customCallback2.DispatchCallback(CustomType.Ex1, this.num); - this.customCallback2.DispatchCallback(CustomType.Ex2, this.num); - } - - RemoveEventClick() { - this.callback.RemoveByCallback(this.CB); - // this.callback.RemoveByCallback(this.OnceCB); - // this.callback.RemoveByBindTarget(this); - // this.callback.RemoveAll(); - - // this.callbackWithType.RemoveByCallback(this.CBType); - // this.callbackWithType.RemoveByCallback(this.OnceCBType); - this.customCallback.RemoveByType(CustomType.Ex1); - // this.callbackWithType.RemoveByType(CustomType.Ex2); - // this.callbackWithType.RemoveByBindTarget(this); - // this.callbackWithType.RemoveAll(); - } - - OnceCB(x: number) { - console.log(`OnceCB [${this.num}]`); - } - - CB(x: number) { - console.log(`CB [${this.num}]`); - } - - OnceCBType(x: number) { - console.log(`OnceCBType [${this.num}]`); - } - - CBType(x: number) { - console.log(`CBType [${this.num}]`); - } - - CBTypeAllin1(type: CustomType, x: number) { - // switch (type) { - // case CustomType.Ex1: - // break; - // case CustomType.Ex2: - // break; - // } - - console.log(`CBTypeAllin1 [${CustomType[type]}][${this.num}]`); - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/ActionExample.ts.meta b/src/script/Engine/CatanEngine/CSharp/System/ActionExample.ts.meta deleted file mode 100644 index b2e8b66..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/ActionExample.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "cc645b73-6192-414d-a5bc-4220c24e322d", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType.ts b/src/script/Engine/CatanEngine/CSharp/System/ActionWithType.ts deleted file mode 100644 index 1a078ee..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType.ts +++ /dev/null @@ -1,166 +0,0 @@ -/** - * 回呼函數: fnname (arg: TArg): void - */ -interface ActionCallback { - (arg: TArg): void; -} - -interface Struct { - callback: ActionCallback; - target: any; - type: TType; - once?: boolean; -} - -export class ActionWithType { - private _queue: Struct[] = []; - - /** - * 監聽事件 - * @param callback 回呼函數: fnname (arg: TArg): void - * @param bindTarget 回呼時this綁定的對象 - */ - AddCallback(type: TType, callback: ActionCallback, bindTarget?: any) { - let q = > { - callback: callback, - target: bindTarget, - type: type - }; - this._queue.push(q); - } - - /** - * 監聽事件 (一次性) - * @param callback 回呼函數: fnname (arg: TArg): void - * @param bindTarget 回呼時this綁定的對象 - */ - AddCallbackOnce(type: TType, callback: ActionCallback, bindTarget?: any) { - let q = > { - callback: callback, - target: bindTarget, - type: type, - once: true - }; - this._queue.push(q); - } - - /** - * 移除事件 - * @param callback - */ - RemoveByCallback(callback: ActionCallback) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.callback === callback) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param bindTarget 回呼時this綁定的對象 - */ - RemoveByBindTarget(bindTarget: any) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.target === bindTarget) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param type 事件類型 - */ - RemoveByType(type: TType) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.type === type) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param type 事件類型 - * @param callback - */ - RemoveCallback(type:TType, callback: ActionCallback) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || (q.type === type && q.callback === callback)) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除全部事件 - */ - RemoveAllCallbacks() { - this._queue.forEach(q => q.callback = undefined); - this._queue.length = 0; - } - - /** - * 發送事件 - * @param type 事件類型 - * @param arg 參數 - */ - DispatchCallback(type: TType, arg: TArg) { - let index = this._queue.length; - if (index > 0) { - let cleanRemoved = false; - this._queue.slice().forEach(q => { - if (!q.callback) - { - cleanRemoved = true; - return; - } - if (q.type !== type) return; - - if (q.target) { - q.callback.call(q.target, arg); - } else { - q.callback(arg); - } - - if (q.once) { - q.callback = undefined; - cleanRemoved = true; - } - }); - - if (cleanRemoved) { - index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback) { - this._queue.splice(index, 1); - } - } - } - } - } - } -} diff --git a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType.ts.meta b/src/script/Engine/CatanEngine/CSharp/System/ActionWithType.ts.meta deleted file mode 100644 index e1e3d30..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "61d770ec-24e2-425b-b66b-2b03e192e45b", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType2.ts b/src/script/Engine/CatanEngine/CSharp/System/ActionWithType2.ts deleted file mode 100644 index 33e8c75..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType2.ts +++ /dev/null @@ -1,166 +0,0 @@ -/** - * 回呼函數: fnname (type: TType, arg: TArg): void - */ -interface ActionCallback { - (type: TType, arg: TArg): void; -} - -interface Struct { - callback: ActionCallback; - target: any; - type: TType; - once?: boolean; -} - -export class ActionWithType2 { - private _queue: Struct[] = []; - - /** - * 監聽事件 - * @param callback 回呼函數: fnname (type: TType, arg: TArg): void - * @param bindTarget 回呼時this綁定的對象 - */ - AddCallback(type: TType, callback: ActionCallback, bindTarget?: any) { - let q = > { - callback: callback, - target: bindTarget, - type: type - }; - this._queue.push(q); - } - - /** - * 監聽事件 (一次性) - * @param callback 回呼函數: fnname (type: TType, arg: TArg): void - * @param bindTarget 回呼時this綁定的對象 - */ - AddCallbackOnce(type: TType, callback: ActionCallback, bindTarget?: any) { - let q = > { - callback: callback, - target: bindTarget, - type: type, - once: true - }; - this._queue.push(q); - } - - /** - * 移除事件 - * @param callback - */ - RemoveByCallback(callback: ActionCallback) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.callback === callback) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param bindTarget 回呼時this綁定的對象 - */ - RemoveByBindTarget(bindTarget: any) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.target === bindTarget) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param type 事件類型 - */ - RemoveByType(type: TType) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || q.type === type) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除事件 - * @param type 事件類型 - * @param callback - */ - RemoveCallback(type:TType, callback: ActionCallback) { - let index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback || (q.type === type && q.callback === callback)) { - q.callback = undefined; - this._queue.splice(index, 1); - } - } - } - } - - /** - * 移除全部事件 - */ - RemoveAllCallbacks() { - this._queue.forEach(q => q.callback = undefined); - this._queue.length = 0; - } - - /** - * 發送事件 - * @param type 事件類型 - * @param arg 參數 - */ - DispatchCallback(type: TType, arg: TArg) { - let index = this._queue.length; - if (index > 0) { - let cleanRemoved = false; - this._queue.slice().forEach(q => { - if (!q.callback) - { - cleanRemoved = true; - return; - } - if (q.type !== type) return; - - if (q.target) { - q.callback.call(q.target, type, arg); - } else { - q.callback(type, arg); - } - - if (q.once) { - q.callback = undefined; - cleanRemoved = true; - } - }); - - if (cleanRemoved) { - index = this._queue.length; - if (index > 0) { - while (index--) { - let q = this._queue[index]; - if (!q.callback) { - this._queue.splice(index, 1); - } - } - } - } - } - } -} diff --git a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType2.ts.meta b/src/script/Engine/CatanEngine/CSharp/System/ActionWithType2.ts.meta deleted file mode 100644 index a37aa2c..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/ActionWithType2.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "ed703ebd-efd4-4ec9-9b84-de748ef8f9e8", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/Text.meta b/src/script/Engine/CatanEngine/CSharp/System/Text.meta deleted file mode 100644 index 7e3f112..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/Text.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "09d69d12-a6d1-4bb1-bcfe-faa811632467", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/Text/Encoding.ts b/src/script/Engine/CatanEngine/CSharp/System/Text/Encoding.ts deleted file mode 100644 index 62d0f16..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/Text/Encoding.ts +++ /dev/null @@ -1,68 +0,0 @@ -export module Encoding.UTF8 { - - export function GetBytes(str: string) { - let len = str.length, resPos = -1; - let resArr = new Uint8Array(len * 3); - for (let point = 0, nextcode = 0, i = 0; i !== len; ) { - point = str.charCodeAt(i), i += 1; - if (point >= 0xD800 && point <= 0xDBFF) { - if (i === len) { - resArr[resPos += 1] = 0xef; - resArr[resPos += 1] = 0xbf; - resArr[resPos += 1] = 0xbd; - break; - } - - nextcode = str.charCodeAt(i); - if (nextcode >= 0xDC00 && nextcode <= 0xDFFF) { - point = (point - 0xD800) * 0x400 + nextcode - 0xDC00 + 0x10000; - i += 1; - if (point > 0xffff) { - resArr[resPos += 1] = (0x1e << 3) | (point >>> 18); - resArr[resPos += 1] = (0x2 << 6) | ((point >>> 12) & 0x3f); - resArr[resPos += 1] = (0x2 << 6) | ((point >>> 6) & 0x3f); - resArr[resPos += 1] = (0x2 << 6) | (point & 0x3f); - continue; - } - } else { - resArr[resPos += 1] = 0xef; - resArr[resPos += 1] = 0xbf; - resArr[resPos += 1] = 0xbd; - continue; - } - } - if (point <= 0x007f) { - resArr[resPos += 1] = (0x0 << 7) | point; - } else if (point <= 0x07ff) { - resArr[resPos += 1] = (0x6 << 5) | (point >>> 6); - resArr[resPos += 1] = (0x2 << 6) | (point & 0x3f); - } else { - resArr[resPos += 1] = (0xe << 4) | (point >>> 12); - resArr[resPos += 1] = (0x2 << 6) | ((point >>> 6) & 0x3f); - resArr[resPos += 1] = (0x2 << 6) | (point & 0x3f); - } - } - return resArr.subarray(0, resPos + 1); - } - - export function GetString(array: Uint8Array) { - let str = ""; - let i = 0, len = array.length; - while(i < len) { - let c = array[i++]; - switch (c >> 4) - { - case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: - str += String.fromCharCode(c); - break; - case 12: case 13: - str += String.fromCharCode(((c & 0x1F) << 6) | (array[i++] & 0x3F)); - break; - case 14: - str += String.fromCharCode(((c & 0x0F) << 12) | ((array[i++] & 0x3F) << 6) | ((array[i++] & 0x3F) << 0)); - break; - } - } - return str; - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CSharp/System/Text/Encoding.ts.meta b/src/script/Engine/CatanEngine/CSharp/System/Text/Encoding.ts.meta deleted file mode 100644 index 02a34a1..0000000 --- a/src/script/Engine/CatanEngine/CSharp/System/Text/Encoding.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "43bf5724-e939-4189-b981-c32ef694e5a5", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2.meta b/src/script/Engine/CatanEngine/CoroutineV2.meta deleted file mode 100644 index 4fc05bc..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "9f510f2b-83d8-4097-8683-32d6134323fb", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/CancellationTokenSource.ts b/src/script/Engine/CatanEngine/CoroutineV2/CancellationTokenSource.ts deleted file mode 100644 index 6b264b9..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/CancellationTokenSource.ts +++ /dev/null @@ -1,43 +0,0 @@ -const CANCEL = Symbol(); - -export interface CancellationToken { - readonly IsCancellationRequested: boolean; - ThrowIfCancellationRequested(): void; -} - -export class CancellationTokenSource { - readonly Token: CancellationToken; - - constructor() { - this.Token = new CancellationTokenImpl(); - } - - Cancel() { - this.Token[CANCEL](); - } -} - -export class TaskCancelledException extends Error { - constructor() { - super("Task Cancelled"); - Reflect.setPrototypeOf(this, TaskCancelledException.prototype); - } -} - -class CancellationTokenImpl implements CancellationToken { - IsCancellationRequested: boolean; - - constructor() { - this.IsCancellationRequested = false; - } - - ThrowIfCancellationRequested() { - if (this.IsCancellationRequested) { - throw new TaskCancelledException(); - } - } - - [CANCEL]() { - this.IsCancellationRequested = true; - } -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/CancellationTokenSource.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/CancellationTokenSource.ts.meta deleted file mode 100644 index 4175ac3..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/CancellationTokenSource.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "9a414131-91a8-4d02-9921-9d1ee01764c3", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core.meta deleted file mode 100644 index 999a0f6..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "fbfe97a8-24ca-4f67-b049-323652c7194b", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/ActionEnumerator.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/ActionEnumerator.ts deleted file mode 100644 index ddd1dae..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/ActionEnumerator.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { BaseEnumerator } from "./BaseEnumerator"; - -export class ActionEnumerator extends BaseEnumerator { - private _action: Function; - - constructor(action: Function) { - super(); - this._action = action; - } - - next(value?: any): IteratorResult { - if (this._action) { - this._action(); - } - return { done: true, value: undefined }; - } -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/ActionEnumerator.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/ActionEnumerator.ts.meta deleted file mode 100644 index cfa8e0d..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/ActionEnumerator.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "3cf9e5c3-520f-48a9-8821-9be76d519765", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator.ts deleted file mode 100644 index f690291..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { IEnumeratorV2, IEnumeratorV2Started } from "../IEnumeratorV2"; -import { CoroutineExecutor } from "./CoroutineExecutor"; - -export abstract class BaseEnumerator implements IEnumeratorV2 { - public nextEnumerator: BaseEnumerator; - - abstract next(value?: any): IteratorResult; - - Start(target?: any): IEnumeratorV2Started { - let executor = LazyLoad.EnumeratorExecutor(this, target); - CoroutineExecutor.instance.StartCoroutine(executor); - return executor; - } - - Then(iterator: Iterator): IEnumeratorV2 { - if (!iterator) return this; - - if (iterator instanceof BaseEnumerator) { - BaseEnumerator.getLastEnumerator(this).nextEnumerator = iterator; - return this; - } else { - let enumerator = LazyLoad.SingleEnumerator(iterator); - BaseEnumerator.getLastEnumerator(this).nextEnumerator = enumerator; - return this; - } - } - - ThenSerial(...iterators: Iterator[]): IEnumeratorV2 { - let last = BaseEnumerator.getLastEnumerator(this); - for (let iterator of iterators) { - if (iterator instanceof BaseEnumerator) { - last.nextEnumerator = iterator; - } else { - let enumerator = LazyLoad.SingleEnumerator(iterator); - last.nextEnumerator = enumerator; - } - last = last.nextEnumerator; - } - return this; - } - - ThenParallel(...iterators: Iterator[]): IEnumeratorV2 { - return this.Then(LazyLoad.ParallelEnumerator(...iterators)); - } - - ThenAction(action: Function, delaySeconds?:number): IEnumeratorV2 { - if (delaySeconds > 0) { - return this.ThenSerial(LazyLoad.WaitTimeEnumerator(delaySeconds), LazyLoad.ActionEnumerator(action)); - } else { - return this.Then(LazyLoad.ActionEnumerator(action)); - } - } - - ThenWaitTime(seconds: number): IEnumeratorV2 { - return this.Then(LazyLoad.WaitTimeEnumerator(seconds)); - } - - static getLastEnumerator(enumerator: BaseEnumerator): BaseEnumerator { - let next = enumerator; - while (next.nextEnumerator) { - next = next.nextEnumerator; - } - return next; - } -} - -module LazyLoad { - export function EnumeratorExecutor(enumerator: BaseEnumerator, target: any) { - return new (require("./EnumeratorExecutor") as typeof import("./EnumeratorExecutor")).EnumeratorExecutor(enumerator, target); - } - - export function SingleEnumerator(iterator: Iterator) { - return new (require("./SingleEnumerator") as typeof import("./SingleEnumerator")).SingleEnumerator(iterator); - } - - export function ParallelEnumerator(...iterators: Iterator[]) { - return new (require("./ParallelEnumerator") as typeof import("./ParallelEnumerator")).ParallelEnumerator(iterators); - } - - export function WaitTimeEnumerator(seconds: number) { - return new (require("./WaitTimeEnumerator") as typeof import("./WaitTimeEnumerator")).WaitTimeEnumerator(seconds); - } - - export function ActionEnumerator(action: Function) { - return new (require("./ActionEnumerator") as typeof import("./ActionEnumerator")).ActionEnumerator(action); - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator.ts.meta deleted file mode 100644 index 3756fe6..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/BaseEnumerator.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "4084537c-c7e8-4d47-b283-39be77ef9685", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/CoroutineExecutor.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/CoroutineExecutor.ts deleted file mode 100644 index 656101d..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/CoroutineExecutor.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { EnumeratorExecutor } from "./EnumeratorExecutor"; - -export class CoroutineExecutor { - private static _instance: CoroutineExecutor; - static get instance() { - return CoroutineExecutor._instance = CoroutineExecutor._instance || new CoroutineExecutor(); - } - - private _executors: EnumeratorExecutor[] = []; - private _nextExecutors: EnumeratorExecutor[] = []; - private _isRunning: boolean = false; - private _cleanRemoved: boolean = false; - private _scheduler: console.Scheduler; - - constructor() { - this._scheduler = console.director.getScheduler(); - this._scheduler.enableForTarget(this); - this._scheduler.scheduleUpdate(this, 0, true); - } - - StartCoroutine(executor: EnumeratorExecutor) { - executor.next(0); - //TODO: 這邊要考量next後馬上接BaseEnumerator/Iterator的情形 - - if (!this._isRunning) { - this._executors.push(executor); - - if (this._scheduler.isTargetPaused(this)) { - this._scheduler.resumeTarget(this); - } - } else { - this._nextExecutors.push(executor); - } - } - - StopCoroutineBy(target: any) { - if (!target) return; - - for (let r of this._executors) { - if (target === r.target) { - r.Stop(); - } - } - - for (let r of this._nextExecutors) { - if (target === r.target) { - r.Stop(); - } - } - } - - update(delta: number) { - if (this._nextExecutors.length) { - this._executors.push(...this._nextExecutors); - this._nextExecutors.length = 0; - } - - if (this._cleanRemoved) { - // 移除[doneFlag=true]的協程 - let index = this._executors.length; - while (index--) { - let r = this._executors[index]; - if (r.doneFlag) { - this._executors.splice(index, 1); - } - } - this._cleanRemoved = false; - } - - if (this._executors.length == 0) { - if (true) { - console.log("[CoroutineV2] All coroutines done"); - } - this._scheduler.pauseTarget(this); - return; - } - - this._isRunning = true; - - // 執行協程 - for (let r of this._executors) { - if (r.doneFlag || r.pauseFlag || r.childFlag) { - if (r.doneFlag) { - this._cleanRemoved = true; - } - continue; - } - - r.next(delta); - } - - this._isRunning = false; - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/CoroutineExecutor.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/CoroutineExecutor.ts.meta deleted file mode 100644 index fc6d10b..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/CoroutineExecutor.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "f25b1e42-90d8-4fc0-9925-6e7e92296d57", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/EnumeratorExecutor.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/EnumeratorExecutor.ts deleted file mode 100644 index 3802de3..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/EnumeratorExecutor.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { IEnumeratorV2Started } from "../IEnumeratorV2"; -import { BaseEnumerator } from "./BaseEnumerator"; -import { SingleEnumerator } from "./SingleEnumerator"; - -export class EnumeratorExecutor implements IEnumeratorV2Started { - public Current: any; - - public target: any; - public pauseFlag: boolean; - public doneFlag: boolean; - public childFlag: boolean; - public asyncFlag: boolean; - public error: any; - - private _executor: EnumeratorExecutor; - private _enumerator: BaseEnumerator; - - constructor(enumerator: BaseEnumerator, target: any) { - this.target = target; - this._enumerator = enumerator; - } - - next(delta?: any): IteratorResult { - if (this._executor && this._executor.doneFlag) { - this._executor = null; - } - - if (this.doneFlag || (!this._enumerator && !this._executor)) { - this.doneFlag = true; - return { done: true, value: undefined }; - } - - if (this.asyncFlag || this.pauseFlag) return { done: false, value: undefined }; - - let result: IteratorResult; - - if (this._executor) { - result = this._executor.next(delta); - this.Current = this._executor.Current; - if (this._executor.doneFlag) { - this._executor = null; - } else { - result.done = false; - return result; - } - } - - if (!this._enumerator) { - this.doneFlag = true; - return { done: true, value: undefined }; - } - - try { - result = this._enumerator.next(delta); - let value = result.value; - let done = result.done; - - if (value) { - // Iterator - if (typeof value[Symbol.iterator] === 'function') { - value = new SingleEnumerator(>value); - } - - if (value instanceof BaseEnumerator) { - if (!done) { - BaseEnumerator.getLastEnumerator(value).nextEnumerator = this._enumerator; - } - this._enumerator = value; - result = this._enumerator.next(delta); - value = result.value; - done = result.done; - - if (value) { - // Iterator again - if (typeof value[Symbol.iterator] === 'function') { - value = new SingleEnumerator(>value); - } - - if (value instanceof BaseEnumerator) { - if (!done) { - BaseEnumerator.getLastEnumerator(value).nextEnumerator = this._enumerator; - } - this._enumerator = value; - result.done = false; - done = false; - } - } - } - - if (value instanceof EnumeratorExecutor) { - if (done) { - this._enumerator = this._enumerator.nextEnumerator; - } - value.childFlag = true; - result.done = false; - done = false; - this._executor = value; - } else if (Promise.resolve(value) === value) { - this.asyncFlag = true; - result.done = false; - done = false; - (>value) - .then(v => { - this.asyncFlag = false; - this.Current = v; - if (done) { - this._enumerator = this._enumerator.nextEnumerator; - } - }) - .catch(e => { - this.asyncFlag = false; - this.doneFlag = true; - this._enumerator = null; - this.error = e; - if (e instanceof Error) { - console.error(e.stack); - } else { - console.error(`Error: ${JSON.stringify(e)}`); - } - }); - } - - this.Current = value; - } - - if (done) { - this._enumerator = this._enumerator.nextEnumerator; - if (this._enumerator) { - result.done = false; - } - } - } - catch (e) { - this.doneFlag = true; - this.error = e; - if (e instanceof Error) { - console.error(e.stack); - } else { - console.error(`Error: ${JSON.stringify(e)}`); - } - result = { done: true, value: e }; - } - - return result; - } - - Stop(): void { - this.doneFlag = true; - if (this._executor) { - this._executor.Stop(); - } - } - - Pause(): void { - this.pauseFlag = true; - if (this._executor) { - this._executor.Pause(); - } - } - - Resume(): void { - this.pauseFlag = false; - if (this._executor) { - this._executor.Resume(); - } - } - -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/EnumeratorExecutor.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/EnumeratorExecutor.ts.meta deleted file mode 100644 index 8a4b319..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/EnumeratorExecutor.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "91cb70ed-e6f9-4ce0-b7c5-1720087b3bd7", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/ParallelEnumerator.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/ParallelEnumerator.ts deleted file mode 100644 index 5aa146e..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/ParallelEnumerator.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { BaseEnumerator } from "./BaseEnumerator"; -import { EnumeratorExecutor } from "./EnumeratorExecutor"; -import { SingleEnumerator } from "./SingleEnumerator"; - -export class ParallelEnumerator extends BaseEnumerator { - private _executors: EnumeratorExecutor[] = []; - - constructor(iterators: Iterator[]) { - super(); - if (iterators && iterators.length) { - for (let iterator of iterators) { - if (iterator instanceof BaseEnumerator) { - this._executors.push(new EnumeratorExecutor(iterator, null)); - } else { - this._executors.push(new EnumeratorExecutor(new SingleEnumerator(iterator), null)); - } - } - } - } - - next(value?: any): IteratorResult { - if (this._executors.length) { - // 先移除[doneFlag=true]協程 - let index = this._executors.length; - while (index--) { - let r = this._executors[index]; - if (r.doneFlag) { - this._executors.splice(index, 1); - } - } - - if (this._executors.length == 0) { - return { done: true, value: undefined }; - } - - // 執行協程 - for (let r of this._executors) { - r.next(value); - } - - return { done: false, value: undefined }; - } - - return { done: true, value: undefined }; - } -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/ParallelEnumerator.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/ParallelEnumerator.ts.meta deleted file mode 100644 index 70c1480..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/ParallelEnumerator.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "017ebc9a-5152-4f94-bbaf-e3b914e87b41", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/SingleEnumerator.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/SingleEnumerator.ts deleted file mode 100644 index 10eae34..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/SingleEnumerator.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BaseEnumerator } from "./BaseEnumerator"; - -export class SingleEnumerator extends BaseEnumerator { - private _iterator: Iterator; - - constructor(iterator: Iterator) { - super(); - this._iterator = iterator; - } - - next(value?: any): IteratorResult { - if (!this._iterator) { - return { done: true, value: undefined }; - } - - return this._iterator.next(value); - } -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/SingleEnumerator.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/SingleEnumerator.ts.meta deleted file mode 100644 index 96ae7b1..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/SingleEnumerator.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "c439d019-2da8-48b8-a65b-bff928d0fda8", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/WaitTimeEnumerator.ts b/src/script/Engine/CatanEngine/CoroutineV2/Core/WaitTimeEnumerator.ts deleted file mode 100644 index 04d7b2e..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/WaitTimeEnumerator.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BaseEnumerator } from "./BaseEnumerator"; - -export class WaitTimeEnumerator extends BaseEnumerator { - private _seconds: number; - - constructor(seconds: number) { - super(); - this._seconds = seconds; - } - - next(value?: any): IteratorResult { - let delta = value as number; - this._seconds -= delta; - - if (this._seconds <= 0) { - return { done: true, value: 0 }; - } else { - return { done: false, value: this._seconds }; - } - } -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/Core/WaitTimeEnumerator.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/Core/WaitTimeEnumerator.ts.meta deleted file mode 100644 index 0572bd6..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/Core/WaitTimeEnumerator.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "a3038e6f-1bb4-4aff-a686-b69209df3592", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineExample.ts b/src/script/Engine/CatanEngine/CoroutineV2/CoroutineExample.ts deleted file mode 100644 index e6326ba..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineExample.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { CoroutineV2 } from "./CoroutineV2"; -import { IEnumeratorV2Started } from "./IEnumeratorV2"; - -const { ccclass, property } = console._decorator; - -class A { - private numbers: number[] = [1, 2]; - private index = 0; - - [Symbol.iterator](): IterableIterator { - return this; - } - - next(value?: any): IteratorResult { - if (this.index < this.numbers.length) { - let value = this.numbers[this.index++]; - console.log(`A=> ${value}`); - return { - done: false, - value: value - }; - } - - return { done: true, value: undefined }; - } -} - -@ccclass -export default class CoroutineExample extends console.Component { - private _routine: IEnumeratorV2Started; - private _obj: Object = { "a": true }; - private _obj2: Object = { "b": true }; - - private _num: number = 3; - - button1Clicked() { - // this._routine = CoroutineV2 - // .Parallel(this.Coroutine1(1, 3), this.Coroutine1(4, 6)) - // .ThenWaitTime(2) - // .Then(this.Coroutine1(7, 9)) - // .ThenWaitTime(2) - // .ThenAction(() => console.log("action callback 1")) - // .ThenWaitTime(2) - // .ThenAction(this.actionCallback) - // //.Start(this); - // .Start(this); - // this._routine = CoroutineV2.Single(this.FunA()).Start(this); - - this._routine = CoroutineV2.Single(this.Test1_1()).Start(this); - // this._routine = CoroutineV2.Single(this.Test2_1()).Start(this); - } - - *Test1_1() { - yield null; - yield* this.Test1_2(); - // CoroutineV2.Single(this.Test1_3()).Start(this); - yield this.Test1_3(); - } - - *Test1_2() { - yield null; - } - - *Test1_3() { - yield this.Test1_3_1(); - yield CoroutineV2.Single(this.Test1_4()).Start(this._obj); - // yield CoroutineV2.Single(this.Test1_4()); //.Start(this); - // yield *this.Test1_4(); - console.log("main wait 3"); - yield CoroutineV2.WaitTime(2); - console.log("done"); - } - - *Test1_3_1() { - yield this.Test1_3_2(); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_1.1"); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_1.2"); - } - - *Test1_3_2() { - yield this.Test1_3_3(); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_2.1"); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_2.2"); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_2.3"); - } - - *Test1_3_3() { - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_3.1"); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_3.2"); - yield CoroutineV2.WaitTime(1); - console.log("Test1_3_3.3"); - } - - *Test1_4() { - this._num++; - console.log(`WaitTime2 ${this._num}`); - yield CoroutineV2.WaitTime(2).Start(this._obj2); - this._num++; - console.log(`WaitTime2 ${this._num}`); - yield CoroutineV2.WaitTime(2).Start(this._obj2); - this._num++; - console.log(`WaitTime2 ${this._num}`); - } - - *Test2_1() { - console.log("111"); - CoroutineV2.Single(this.Test2_2()).Start(this); - console.log("333"); - } - - *Test2_2() { - console.log("222"); - return; - } - - button2Clicked() { - // this._routine && this._routine.Stop(); - if (this._obj2) { - CoroutineV2.StopCoroutinesBy(this._obj2); - this._obj2 = null; - return; - } - if (this._obj) { - CoroutineV2.StopCoroutinesBy(this._obj); - this._obj = null; - return; - } - - CoroutineV2.StopCoroutinesBy(this); - - } - - button3Clicked() { - // CoroutineV2.StopCoroutinesBy(this); - this._routine && this._routine.Pause(); - } - - button4Clicked() { - // CoroutineV2.StopCoroutinesBy(this); - this._routine && this._routine.Resume(); - } - - *Coroutine1(start: number, end: number) { - for (let i = start; i <= end; i++) { - // yield CoroutineV2.WaitTime(1).Start(); // Start()可以省略, 會由外層啟動 - // yield CoroutineV2.WaitTime(1).Start(this); // target也可以省略, 由外層的target控制 - - yield CoroutineV2.WaitTime(1).Start(); - console.log(`C1 => ${i}`); - - // 嵌套 - yield CoroutineV2 - .WaitTime(1) - .ThenParallel( - // 再嵌套 - CoroutineV2.Action(() => console.log("start parallel")), - this.Coroutine2(10, 2), - this.Coroutine2(20, 2), - new A()) - .ThenAction(() => console.log("end parallel")) - .Start(); - - // Promise - yield this.loadItemAsync("settings.json"); - } - } - - *Coroutine2(num: number, repeat: number) { - for (let i = 0; i < repeat; i++) { - //yield CoroutineV2.WaitTime(2); - yield 0; - console.log(`C2: ${num}`); - // yield CoroutineV2.WaitTime(1); - } - } - - actionCallback() { - console.log("action callback 2"); - } - - loadItemAsync(id: string): Promise<{ id: string }> { - return new Promise((resolve) => { - console.log('loading item start:', id); - setTimeout(() => { - resolve({ id: id }); - console.log('loading item done:', id); - }, 3000); - }); - } -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineExample.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/CoroutineExample.ts.meta deleted file mode 100644 index 1c2b129..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineExample.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "dfd32c11-76f6-4e38-9272-1d7966d1ef3c", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineV2.ts b/src/script/Engine/CatanEngine/CoroutineV2/CoroutineV2.ts deleted file mode 100644 index 5606b57..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineV2.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { IEnumeratorV2, IEnumeratorV2Started } from "./IEnumeratorV2"; -import { BaseEnumerator } from "./Core/BaseEnumerator"; -import { SingleEnumerator } from "./Core/SingleEnumerator"; -import { ParallelEnumerator } from "./Core/ParallelEnumerator"; -import { WaitTimeEnumerator } from "./Core/WaitTimeEnumerator"; -import { ActionEnumerator } from "./Core/ActionEnumerator"; -import { CoroutineExecutor } from "./Core/CoroutineExecutor"; - -export module CoroutineV2 { - /** - * 啟動一般協程 - */ - export function StartCoroutine(iterator: Iterator, target?: any): IEnumeratorV2Started { - return Single(iterator).Start(target); - } - - /** - * 依據IEnumeratorV2.Start(target)綁定的目標, 來停止協程 - * @param target - */ - export function StopCoroutinesBy(target: any) { - CoroutineExecutor.instance.StopCoroutineBy(target); - } - - /** - * 單一協程 - */ - export function Single(iterator: Iterator): IEnumeratorV2 { - if (iterator instanceof BaseEnumerator) { - return iterator; - } else { - return new SingleEnumerator(iterator); - } - } - - /** - * 平行協程 - */ - export function Parallel(...iterators: Iterator[]): IEnumeratorV2 { - return new ParallelEnumerator(iterators); - } - - /** - * 序列協程 - */ - export function Serial(...iterators: Iterator[]): IEnumeratorV2 { - let [iterator, ...others] = iterators; - if (iterator instanceof BaseEnumerator) { - return iterator.ThenSerial(...others); - } else { - return new SingleEnumerator(iterator).ThenSerial(...others); - } - } - - /** - * 執行方法協程 - * @param action 方法 - * @param delaySeconds 延遲秒數 - */ - export function Action(action: Function, delaySeconds?: number): IEnumeratorV2 { - if (delaySeconds > 0) { - return new WaitTimeEnumerator(delaySeconds).Then(new ActionEnumerator(action)); - } else { - return new ActionEnumerator(action); - } - } - - /** - * 等待時間協程 - * @param seconds 秒數 - */ - export function WaitTime(seconds: number): IEnumeratorV2 { - return new WaitTimeEnumerator(seconds); - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineV2.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/CoroutineV2.ts.meta deleted file mode 100644 index 6ac7bb1..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/CoroutineV2.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "fc38e505-bd37-44c3-9e0a-fd463bb88c51", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/CoroutineV2/IEnumeratorV2.ts b/src/script/Engine/CatanEngine/CoroutineV2/IEnumeratorV2.ts deleted file mode 100644 index c684c4d..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/IEnumeratorV2.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface IEnumeratorV2 extends Iterator { - Start(target?: any): IEnumeratorV2Started; - Then(iterator: Iterator): IEnumeratorV2; - ThenSerial(...iterators: Iterator[]): IEnumeratorV2; - ThenParallel(...iterators: Iterator[]): IEnumeratorV2; - ThenAction(action: Function, delaySeconds?: number): IEnumeratorV2; - ThenWaitTime(seconds: number): IEnumeratorV2; -} - -export interface IEnumeratorV2Started { - readonly Current: any; - - Pause(): void; - Resume(): void; - Stop(): void; -} diff --git a/src/script/Engine/CatanEngine/CoroutineV2/IEnumeratorV2.ts.meta b/src/script/Engine/CatanEngine/CoroutineV2/IEnumeratorV2.ts.meta deleted file mode 100644 index a4feac9..0000000 --- a/src/script/Engine/CatanEngine/CoroutineV2/IEnumeratorV2.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "df3ab07d-3d2b-4552-b454-29b95223ea85", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2.meta b/src/script/Engine/CatanEngine/NetManagerV2.meta deleted file mode 100644 index cb48b8a..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "6f870efd-e869-4415-9cf2-138ab667cd5d", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core.meta b/src/script/Engine/CatanEngine/NetManagerV2/Core.meta deleted file mode 100644 index a05aca1..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "5e6c027f-ce4b-47fa-968c-f3bb6059ad81", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetConnector.ts b/src/script/Engine/CatanEngine/NetManagerV2/Core/INetConnector.ts deleted file mode 100644 index a9d801b..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetConnector.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Action } from "../../CSharp/System/Action"; -import { INetRequest } from "./INetRequest"; -import { INetResponse } from "./INetResponse"; - -export interface INetConnector { - readonly OnDataReceived: Action>; - readonly OnDisconnected: Action; - readonly IsConnected: boolean; - - SendAsync(req: INetRequest): Iterator; - Send(req: INetRequest); - Logout(); -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetConnector.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/Core/INetConnector.ts.meta deleted file mode 100644 index 75c86ab..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetConnector.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "f97991b5-0da6-4220-ab29-13c8f8f7e405", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetRequest.ts b/src/script/Engine/CatanEngine/NetManagerV2/Core/INetRequest.ts deleted file mode 100644 index e7852ee..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetRequest.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { INetResponse } from "./INetResponse"; - -export interface INetRequest { - readonly Method: string; - readonly MethodBack: string; - - Data: TRequest; - Result: INetResponse; - - SendAsync(): Promise>; - Send(); -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetRequest.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/Core/INetRequest.ts.meta deleted file mode 100644 index dc644ba..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetRequest.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "339fcf27-bdb9-4b8f-ae18-dd54c9500145", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetResponse.ts b/src/script/Engine/CatanEngine/NetManagerV2/Core/INetResponse.ts deleted file mode 100644 index 502b4cf..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface INetResponse { - readonly Method: string; - readonly Status: number; - readonly Data: TResponse; - readonly IsValid: boolean; -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetResponse.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/Core/INetResponse.ts.meta deleted file mode 100644 index 1861d9d..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Core/INetResponse.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "c4cb0cd4-b98c-4f8e-b1e6-ac3b51281b28", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Examples.meta b/src/script/Engine/CatanEngine/NetManagerV2/Examples.meta deleted file mode 100644 index ddcf31a..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Examples.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "94e55972-723c-4dab-9ebc-870bd5043fca", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Examples/NetTester.ts b/src/script/Engine/CatanEngine/NetManagerV2/Examples/NetTester.ts deleted file mode 100644 index 22c3adb..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Examples/NetTester.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { CoroutineV2 } from "../../CoroutineV2/CoroutineV2"; -import { INetResponse } from "../Core/INetResponse"; -import { NetConnector } from "../NetConnector"; -import { NetManager } from "../NetManager"; -import { Slot1_SpinRequestExample } from "./Slot1_SpinRequestExample"; - -const { ccclass, property } = console._decorator; - -@ccclass -export default class NetTester extends console.Component { - - onConnectClicked() { - CoroutineV2.StartCoroutine(this.ConnectAsync()); - } - - *ConnectAsync() { - if (!NetManager.HasInit) { - let conn = new NetConnector("192.168.7.165", 9005); - conn.OnDataReceived.AddCallback(this.OnNetDataReceived, this); - conn.OnDisconnected.AddCallback(this.OnNetDisconnected, this); - conn.OnLoadUIMask.AddCallback(this.OnLoadUIMask, this); - - NetManager.Initialize(conn); - } - - console.log("連線中..."); - yield NetManager.ConnectAsync(); // 同個connector要再次連線, 可以不用叫CasinoNetManager.Initialize(), 但要先叫CasinoNetManager.Disconnect() - console.log(`連線狀態: ${NetManager.IsConnected}`); - } - - onDisconnectClicked() { - console.log("中斷連線中..."); - NetManager.Disconnect(); // 中斷連線 - } - - onSendMessageClicked1() { - console.log("發送訊息(不使用協程)"); - let req = new Slot1_SpinRequestExample(401); - req.Send(); - // CasinoNetManager.Send(req); - } - - onSendMessageClicked2() { - CoroutineV2.StartCoroutine(this.SendAsync()); - } - - *SendAsync() { - console.log("發送訊息中(使用協程)..."); - let req = new Slot1_SpinRequestExample(399); - yield req.SendAsync(); - // yield CasinoNetManager.SendAsync(req); - - let resp = req.Result; - console.log(`發送協程完畢, Server回應: ${resp.Method}(${JSON.stringify(resp.Data)}), 狀態: ${resp.Status}`); - // console.log(`使用介面資料: ${resp.Data.slot}`); - } - - private OnNetDisconnected() { - console.log("[事件] 收到連線中斷事件"); - } - - private OnNetDataReceived(resp: INetResponse) { - console.log(`[事件] 收到server呼叫: ${resp.Method}(${JSON.stringify(resp.Data)}), 狀態: ${resp.Status}`); - } - - private OnLoadUIMask(value: boolean) { - console.log(`[事件] LoadUIMask: ${value}`); - } -} diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Examples/NetTester.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/Examples/NetTester.ts.meta deleted file mode 100644 index 9cfea89..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Examples/NetTester.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "0cb7df7a-d0e7-4ce1-832e-4583cf3385e5", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Examples/Slot1_SpinRequestExample.ts b/src/script/Engine/CatanEngine/NetManagerV2/Examples/Slot1_SpinRequestExample.ts deleted file mode 100644 index 60e9bac..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Examples/Slot1_SpinRequestExample.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NetRequest } from "../NetRequest"; - -// 送給server的結構 -interface Request { - pay: number; -} - -// server回應的結構 -interface Response { - pay: [[number, number]]; - /**拉霸結果 */ - slot: number[]; - get: any[]; -} - -// class Account_CreateRequest extends CasinoRequest { // 也可以是基本類或any, 但不建議用any, 使用介面ts才會有提示 -export class Slot1_SpinRequestExample extends NetRequest { - get Method(): string { - return "slot1.spin"; - } - - // MethodBack預設回傳Method, 不一樣才需要覆寫 - // get MethodBack(): string { - // return "slot1.freespin"; - // } - - constructor(totalBet: number) { - super(); - - // 原本的SingleValue拿掉, 統一使用Data來存送出結構 - - // this.Data = 2; - this.Data = { - pay: totalBet, - }; - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/Examples/Slot1_SpinRequestExample.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/Examples/Slot1_SpinRequestExample.ts.meta deleted file mode 100644 index 8a7d3bc..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/Examples/Slot1_SpinRequestExample.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "1af9e6af-3dc3-4d02-8b24-481adc07932a", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetConfig.ts b/src/script/Engine/CatanEngine/NetManagerV2/NetConfig.ts deleted file mode 100644 index f367907..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetConfig.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default class NetConfig { - /**是否顯示RPC接送JSON的LOG */ - public static ShowServerLog: boolean = true; -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetConfig.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/NetConfig.ts.meta deleted file mode 100644 index 14afee9..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetConfig.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "c7f5f6a9-94fd-4f5f-9f0a-545cd14edca9", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetConnector.ts b/src/script/Engine/CatanEngine/NetManagerV2/NetConnector.ts deleted file mode 100644 index b6f15a7..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetConnector.ts +++ /dev/null @@ -1,263 +0,0 @@ -import { Tools } from "../../../Tools"; -import { BaseEnumerator } from "../CoroutineV2/Core/BaseEnumerator"; -import { Action } from "../CSharp/System/Action"; -import { Encoding } from "../CSharp/System/Text/Encoding"; -import { INetRequest } from "./Core/INetRequest"; -import { INetResponse } from "./Core/INetResponse"; -import NetConfig from "./NetConfig"; -import { NetManager } from "./NetManager"; - -export class NetConnector { - readonly OnDataReceived: Action> = new Action>(); - readonly OnDisconnected: Action = new Action(); - readonly OnLoadUIMask: Action = new Action(); - - get IsConnected() { - return this._ws && this._ws.readyState === WebSocket.OPEN; - } - - private _host: string; - private _ws: WebSocket = null!; - private _waitings: WsRequestEnumerator[] = []; - - constructor(host: string, port: number, ip: string) { - let checkHttp: string = ""; - let index: number = host.indexOf("https://"); - if (index != -1) { - checkHttp = "https"; - host = host.replace("https://", ""); - } else { - checkHttp = window.location.href.substring(0, 5); - host = host.replace("http://", ""); - } - if (true) { - console.log("[事件]checkHttp=", checkHttp, host, port); - } - if (checkHttp != "https") { - this._host = `ws://${host}:${port}/?ip=${ip}`; - } - else { - this._host = `wss://${host}:${port}/?ip=${ip}`; - } - } - - async ConnectAsync() { - if (this._ws) { - throw new Error("請先執行CasinoNetManager.Disconnect()中斷連線"); - } - this._ws = new WebSocket(this._host); - - this._ws.binaryType = 'arraybuffer'; - this._ws.onopen = this.OnWebSocketOpen.bind(this); - this._ws.onmessage = this.OnWebSocketMessage.bind(this); - this._ws.onerror = this.OnWebSocketError.bind(this); - this._ws.onclose = this.OnWebSocketClose.bind(this); - - while (!NetManager.IsConnected) { - await Tools.Sleep(1); - } - return new WsConnectEnumerator(this._ws); - } - - async Send(req: INetRequest) { - if (!this.IsConnected) return; - - let json = [req.Method]; - if (req.Data != null && req.Data != undefined && req.Data) { - json[1] = req.Data; - } - - if (true && NetConfig.ShowServerLog) { - if (req.Data != null && req.Data != undefined && req.Data) { - console.log(`[RPC] 傳送server資料: ${req.Method}(${JSON.stringify(req.Data)})`); - } else { - console.log(`[RPC] 傳送server資料: ${req.Method}()`); - } - } - - let str = JSON.stringify(json); - if (str.length > 65535) { - throw new Error('要傳的資料太大囉'); - } - - let strary = Encoding.UTF8.GetBytes(str); - let buffer = new Uint8Array(4 + strary.byteLength); - let u16ary = new Uint16Array(buffer.buffer, 0, 3); - u16ary[0] = strary.byteLength; - buffer[3] = 0x01; - buffer.set(strary, 4); - - await this._ws.send(buffer); - } - - async SendAsync(req: INetRequest, mask: boolean) { - let iterator = new WsRequestEnumerator(req); - if (!this.IsConnected) { - iterator.SetResponse(ErrorResponse); - } else { - this._waitings.push(iterator); - if (mask) { - this.OnLoadUIMask.DispatchCallback(true); - } - this.Send(req); - while (!iterator.Done) { - await Tools.Sleep(1); - } - - } - return iterator; - }; - - Disconnect() { - this.WebSocketEnded(); - } - - private WebSocketEnded() { - if (!this._ws) return; - - this._ws.close(); - this._ws.onopen = null; - this._ws.onmessage = null; - this._ws.onclose = () => { }; - this._ws = null!; - - this.CleanWaitings(); - this.OnDisconnected.DispatchCallback(); - } - - private CleanWaitings() { - for (let w of this._waitings) { - w.SetResponse(ErrorResponse); - this.OnLoadUIMask.DispatchCallback(false); - } - this._waitings.length = 0; - } - - private OnWebSocketOpen(e: Event) { - if (true) { - console.log(`[RPC] ${this._host} Connected.`); - } - } - - private OnWebSocketMessage(e: MessageEvent) { - if (e.data instanceof ArrayBuffer) { - this.ParseRpcMessage(e.data); - } else if (e.data instanceof Blob) { - let reader = new FileReader(); - reader.onload = (e) => { this.ParseRpcMessage(reader.result); reader.onload = null; } - reader.readAsArrayBuffer(e.data); - } else { - throw new Error(`未知的OnWebSocketMessage(e.data)類型: ${e.data}`); - } - } - - private ParseRpcMessage(buffer: ArrayBuffer) { - let startIndex = 0, byteLength = buffer.byteLength; - while (startIndex + 4 < byteLength) { - let strlen = new DataView(buffer, startIndex, 3).getUint16(0, true); - let str = Encoding.UTF8.GetString(new Uint8Array(buffer, startIndex + 4, strlen)); - startIndex += strlen + 4; - - try { - let json = JSON.parse(str); - let method = json[0]; - let status = json[1][0]; - let data = json[1][1]; - - let resp = >{ - Method: method, - Status: status, - Data: data, - IsValid: method && status === 0 - }; - - if (true && NetConfig.ShowServerLog) { - if (data) { - console.log(`[RPC] 收到server呼叫:(${resp.Status}): ${resp.Method}(${JSON.stringify(resp.Data)})`); - } else { - console.log(`[RPC] 收到server呼叫:(${resp.Status}): ${resp.Method}()`); - } - } - - let dispatch = true; - for (let i = 0, len = this._waitings.length; i < len; i++) { - let w = this._waitings[i]; - if (w.MethodBack === resp.Method) { - dispatch = false; - this._waitings.splice(i, 1); - w.SetResponse(resp); - this.OnLoadUIMask.DispatchCallback(false); - break; - } - } - - if (dispatch) { - this.OnDataReceived.DispatchCallback(resp); - } - } - catch - { - throw new Error(`[RPC] 無法解析Server回應: ${str}`); - } - } - } - - private OnWebSocketError(ev: Event) { - throw new Error(`[RPC] 無法解析Server回應: ${ev}`); - } - - private OnWebSocketClose(e: CloseEvent) { - this.WebSocketEnded(); - } -} - -const ErrorResponse: INetResponse = { - Status: -1, - Method: "", - Data: {}, - IsValid: false, -}; - -class WsConnectEnumerator extends BaseEnumerator { - private _ws: WebSocket; - - constructor(ws: WebSocket) { - super(); - this._ws = ws; - } - - next(value?: any): IteratorResult { - return { - done: this._ws.readyState === WebSocket.OPEN || this._ws.readyState === WebSocket.CLOSED, - value: undefined - }; - } -} - -class WsRequestEnumerator extends BaseEnumerator { - readonly MethodBack: string; - - private _req: INetRequest; - private _done: boolean = false; - - public get Done(): boolean { return this._done; } - - constructor(req: INetRequest) { - super(); - - this._req = req; - this.MethodBack = req.MethodBack; - } - - SetResponse(resp: INetResponse) { - this._req.Result = resp; - this._done = true; - } - - next(value?: any): IteratorResult { - return { - done: this._done, - value: undefined - }; - } -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetConnector.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/NetConnector.ts.meta deleted file mode 100644 index 99a8b42..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetConnector.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "221e1688-cc40-450d-9248-464978540a85", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetManager.ts b/src/script/Engine/CatanEngine/NetManagerV2/NetManager.ts deleted file mode 100644 index 0db9100..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetManager.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { INetRequest } from "./Core/INetRequest"; -import { NetConnector } from "./NetConnector"; - -export class NetManager { - static get IsConnected() { return this._connector && this._connector.IsConnected; } - static get HasInit() { return this._connector != null; } - - private static _connector: NetConnector; - - static Initialize(connector: NetConnector) { - this._connector = connector; - } - - static async ConnectAsync() { - this.CheckConnector(); - return await this._connector.ConnectAsync(); - } - - /** - * 斷線 - */ - static Disconnect() { - this.CheckConnector(); - this._connector.Disconnect(); - } - - /** - * 傳送資料給Server, 不等待回應 - * @param req - */ - static Send(req: INetRequest) { - this.CheckConnector(); - this._connector.Send(req); - } - - /** - * 傳送資料給Server, 並等待回應 - * @param req - */ - static async SendAsync(req: INetRequest, mask: boolean) { - this.CheckConnector(); - return await this._connector.SendAsync(req, mask); - } - - private static CheckConnector() { - if (!this._connector) throw new Error("請先呼叫CasinoNetManager.Initialize()初始化connector"); - } - -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetManager.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/NetManager.ts.meta deleted file mode 100644 index 3b9b3ba..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetManager.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "7c3e375d-3672-42e7-8a45-dd5ecf9d5fe8", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetRequest.ts b/src/script/Engine/CatanEngine/NetManagerV2/NetRequest.ts deleted file mode 100644 index dd94144..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetRequest.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { INetRequest } from "./Core/INetRequest"; -import { NetManager } from "./NetManager"; - -export abstract class NetRequest implements INetRequest { - abstract get Method(): string; - - get MethodBack(): string { - return this.Method; - } - - Data: TResquest; - Result: import("./Core/INetResponse").INetResponse; - - async SendAsync(mask: boolean = false): Promise> { - return await NetManager.SendAsync(this, mask); - } - - Send() { - NetManager.Send(this); - } -} diff --git a/src/script/Engine/CatanEngine/NetManagerV2/NetRequest.ts.meta b/src/script/Engine/CatanEngine/NetManagerV2/NetRequest.ts.meta deleted file mode 100644 index 13db2ab..0000000 --- a/src/script/Engine/CatanEngine/NetManagerV2/NetRequest.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "36534597-4273-48e8-bbeb-8dde4857d26f", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NoSleep.ts b/src/script/Engine/CatanEngine/NoSleep.ts deleted file mode 100644 index c96f1e4..0000000 --- a/src/script/Engine/CatanEngine/NoSleep.ts +++ /dev/null @@ -1,81 +0,0 @@ -export class NoSleep { - static oldIOS: boolean = typeof navigator !== 'undefined' && parseFloat(('' + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ''])[1]).replace('undefined', '3_2').replace('_', '.').replace('_', '')) < 10 && !window["MSStream"]; - static webm: string = 'data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA='; - static mp4: string = 'data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA='; - - static hasInit: boolean = false; - static noSleepTimer: number; - static noSleepVideo: HTMLVideoElement; - static isStart: boolean; - - public static init() { - if (this.hasInit) return; - - if (!this.oldIOS) { - let noSleepVideo = document.createElement('video'); - - noSleepVideo.setAttribute('muted', ''); - noSleepVideo.setAttribute('title', 'Intro'); - noSleepVideo.setAttribute('playsinline', ''); - - this.addSourceToVideo(noSleepVideo, 'webm', this.webm); - this.addSourceToVideo(noSleepVideo, 'mp4', this.mp4); - - noSleepVideo.addEventListener('loadedmetadata', function () { - if (noSleepVideo.duration <= 1) { - noSleepVideo.setAttribute('loop', ''); - } else { - noSleepVideo.addEventListener('timeupdate', function () { - if (noSleepVideo.currentTime > 0.5) { - noSleepVideo.currentTime = Math.random(); - } - }); - } - }); - - document.body.appendChild(noSleepVideo); - this.noSleepVideo = noSleepVideo; - } - - this.hasInit = true; - this.isStart = false; - } - - public static start() { - if (!this.isStart) { - console.log("nosleep start"); - if (this.oldIOS) { - this.stop(); - this.noSleepTimer = window.setInterval(() => { - if (!document.hidden) { - window.location.href = window.location.href.split('#')[0]; - window.setTimeout(window.stop, 0); - } - }, 15000); - } else { - this.noSleepVideo.play(); - } - this.isStart = true; - } - } - - public static stop() { - if (this.oldIOS) { - if (this.noSleepTimer) { - window.clearInterval(this.noSleepTimer); - this.noSleepTimer = 0; - } - } else { - this.noSleepVideo.pause(); - } - this.isStart = false; - } - - static addSourceToVideo(element: HTMLVideoElement, type: string, dataURI: string) { - let source = document.createElement('source'); - source.src = dataURI; - source.type = 'video/' + type; - element.appendChild(source); - } - -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/NoSleep.ts.meta b/src/script/Engine/CatanEngine/NoSleep.ts.meta deleted file mode 100644 index 836b5c4..0000000 --- a/src/script/Engine/CatanEngine/NoSleep.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "90f2152c-2c37-4c7c-b3a3-04c8aee53c34", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/TableV3.meta b/src/script/Engine/CatanEngine/TableV3.meta deleted file mode 100644 index dcae6d1..0000000 --- a/src/script/Engine/CatanEngine/TableV3.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "8e05805d-5ab8-4526-8463-f4c837e23534", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/CatanEngine/公司自架接功能.txt b/src/script/Engine/CatanEngine/公司自架接功能.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/script/Engine/CatanEngine/公司自架接功能.txt.meta b/src/script/Engine/CatanEngine/公司自架接功能.txt.meta deleted file mode 100644 index 689bc66..0000000 --- a/src/script/Engine/CatanEngine/公司自架接功能.txt.meta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ver": "2.0.0", - "uuid": "6ab253ff-8c5d-419f-9f8b-5cf0ef661a28", - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Component.meta b/src/script/Engine/Component.meta deleted file mode 100644 index 5b7af33..0000000 --- a/src/script/Engine/Component.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "c87ad2c2-0bf9-4822-84db-00b939f614ee", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Data.meta b/src/script/Engine/Data.meta deleted file mode 100644 index 00c18b4..0000000 --- a/src/script/Engine/Data.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "89d65072-29d8-4f58-a9d7-5750406209e6", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/HotUpdate.meta b/src/script/Engine/HotUpdate.meta deleted file mode 100644 index fcdb51f..0000000 --- a/src/script/Engine/HotUpdate.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "10da37ee-322f-492b-b19b-ed0cd210e884", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils.meta b/src/script/Engine/Utils.meta deleted file mode 100644 index 7b1bd0e..0000000 --- a/src/script/Engine/Utils.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "1207e3f9-4c55-4435-a3be-3d04c6806a1f", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Act.meta b/src/script/Engine/Utils/Act.meta deleted file mode 100644 index ca8d9f1..0000000 --- a/src/script/Engine/Utils/Act.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "b43bf5ea-67c5-4fc8-9893-1f406a52508f", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Act/Shake.ts b/src/script/Engine/Utils/Act/Shake.ts deleted file mode 100644 index d46b60d..0000000 --- a/src/script/Engine/Utils/Act/Shake.ts +++ /dev/null @@ -1,55 +0,0 @@ -const { ccclass } = console._decorator; - -@ccclass -export default class Shake extends console.ActionInterval { - private _init: boolean = false; - private _initial_x: number = 0; - private _initial_y: number = 0; - private _strength_x: number = 0; - private _strength_y: number = 0; - - /** - * 建立抖動動畫 - * @param {number} duration 動畫持續時長 - * @param {number} strength_x 抖動幅度: x方向 - * @param {number} strength_y 抖動幅度: y方向 - * @returns {Shake} - */ - public static create(duration: number, strength_x: number, strength_y: number): Shake { - let act: Shake = new Shake(); - act.initWithDuration(duration, strength_x, strength_y); - return act; - } - - public initWithDuration(duration: number, strength_x: number, strength_y: number): boolean { - console.ActionInterval.prototype['initWithDuration'].apply(this, arguments); - this._strength_x = strength_x; - this._strength_y = strength_y; - return true; - } - - public fgRangeRand(min: number, max: number): number { - let rnd: number = Math.random(); - return rnd * (max - min) + min; - } - - public update(time: number): void { - let randx = this.fgRangeRand(-this._strength_x, this._strength_x); - let randy = this.fgRangeRand(-this._strength_y, this._strength_y); - this.getTarget().setPosition(randx + this._initial_x, randy + this._initial_y); - } - - public startWithTarget(target: console.Node): void { - console.ActionInterval.prototype['startWithTarget'].apply(this, arguments); - if (!this._init) { - this._init = true; - this._initial_x = target.x; - this._initial_y = target.y; - } - } - - public stop(): void { - this.getTarget().setPosition(new console.Vec2(this._initial_x, this._initial_y)); - console.ActionInterval.prototype['stop'].apply(this); - } -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Act/Shake.ts.meta b/src/script/Engine/Utils/Act/Shake.ts.meta deleted file mode 100644 index e6b212e..0000000 --- a/src/script/Engine/Utils/Act/Shake.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "c5872cc0-91a4-49cb-a055-e037accd801d", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Audio.meta b/src/script/Engine/Utils/Audio.meta deleted file mode 100644 index 6f27799..0000000 --- a/src/script/Engine/Utils/Audio.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "d042d487-d962-4d90-920e-70ab9b8b383c", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Audio/CSAudio.ts b/src/script/Engine/Utils/Audio/CSAudio.ts deleted file mode 100644 index 2879cd1..0000000 --- a/src/script/Engine/Utils/Audio/CSAudio.ts +++ /dev/null @@ -1,184 +0,0 @@ -import LocalStorageData from "../../Data/LocalStorageData"; - -export default class CSAudio { - private static _instance: CSAudio = null; - public static get Instance(): CSAudio { return this._instance; } - private _idToClip: Map = new Map(); - private _idToPath: Map = new Map(); - private _idToAudioId: Map = new Map(); - private _currentMusic: number = -1; - /**判斷音效播放太過頻繁不疊加 */ - private _lastPlaySoundTime: Map = new Map(); - private readonly _canPlaySoundCutTime: number = 10; - - constructor() { - CSAudio._instance = this; - if (LocalStorageData.Instance.MusicType) { - this.SetMusicVolume(+LocalStorageData.Instance.MusicType); - } else { - this.SetMusicVolume(0.3); - } - if (LocalStorageData.Instance.SoundType) { - this.SetSoundVolume(+LocalStorageData.Instance.SoundType); - } else { - this.SetSoundVolume(0.3); - } - } - - public AddClipsInfo(clips: Map, pathes: Map): void { - this._idToClip = clips; - this._idToPath = pathes; - } - - /** - * 設定AudioID - * @param id - * @param audioId - */ - private _setAudioId(id: number, audioId: number): void { - this._idToAudioId.set(id, audioId); - } - - /** - * 取得AudioID - * @param id - */ - private _getAudioId(id: number): number { - if (this._idToAudioId.has(id)) { - return this._idToAudioId.get(id); - } else { - return -1; - } - } - - /** - * 打開音效音量 - */ - public OpenSound(): void { - this.SetSoundVolume(0.3); - } - /** - * 關閉音效音量 - */ - public CloseSound(): void { - this.SetSoundVolume(0.0); - } - - /** - * 設定音效音量 - * @param volume - */ - public SetSoundVolume(volume: number): void { - LocalStorageData.Instance.SoundType = volume.toString(); - console.audioEngine.setEffectsVolume(volume); - } - - /** - * 播放音效 - * @param id - * @param loop - */ - public PlaySound(id: number, loop: boolean = false): void { - // 靜音後有一禎仍然會撥放的問題:音量>0才撥放 - if (console.audioEngine.getEffectsVolume() <= 0) { - return; - } - if (this._idToClip.has(id)) { - let path: string = this._idToPath.get(id); - let timenum: number = new Date().getTime(); - if (!this._lastPlaySoundTime.has(path)) { - this._lastPlaySoundTime.set(path, timenum); - let audioId: number = console.audioEngine.playEffect(this._idToClip.get(id), loop); - this._setAudioId(id, audioId); - } else { - let lastTime: number = this._lastPlaySoundTime.get(path); - if (timenum - lastTime > this._canPlaySoundCutTime) { - this._lastPlaySoundTime.set(path, timenum); - let audioId: number = console.audioEngine.playEffect(this._idToClip.get(id), loop); - this._setAudioId(id, audioId); - } - } - } else { - console.error("未知的Sound Id: ", id); - } - } - - /** - * 停止音效 - * @param id - */ - public StopSound(id: number): void { - let audioId = this._getAudioId(id); - if (audioId >= 0) { - console.audioEngine.stopEffect(audioId); - } - } - - /** - * 打開音樂音量 - */ - public OpenMusic(): void { - this.SetMusicVolume(0.3); - } - /** - * 關閉音樂音量 - */ - public CloseMusic(): void { - this.SetMusicVolume(0.0); - } - - /** - * 設定音樂音量 - * @param volume - */ - public SetMusicVolume(volume: number): void { - console.audioEngine.setMusicVolume(volume); - LocalStorageData.Instance.MusicType = volume.toString(); - // 靜音後有一禎仍然會撥放的問題:背景音樂要回復 - if (this._currentMusic != -1 && volume > 0 && !console.audioEngine.isMusicPlaying()) { - this._ccMusicPlayId = console.audioEngine.playMusic(this._idToClip.get(this._currentMusic), true); - } - } - - /** - * 撥放音樂 - * @param id - * @param loop - */ - public PlayMusic(id: number, loop: boolean = true): void { - if (this._currentMusic != id) { - if (this._idToClip.has(id)) { - // 靜音後有一禎仍然會撥放的問題:音量>0才撥放 - if (console.audioEngine.getMusicVolume() > 0) { - this._ccMusicPlayId = console.audioEngine.playMusic(this._idToClip.get(id), loop); - } - this._currentMusic = id; - } - else { - console.error("未知的Music Id: ", id); - } - } - } - private _ccMusicPlayId: number = -1; - private _currentMusicTime: number = -1; - public pauseOrResume(isPause?: boolean) { - if (isPause) { - this._currentMusicTime = console.audioEngine.getCurrentTime(this._ccMusicPlayId); - console.audioEngine.pauseAll(); - console.audioEngine.stopMusic(); - } else { - console.audioEngine.resumeAll(); - console.audioEngine.setCurrentTime(this._ccMusicPlayId, this._currentMusicTime); - } - } - - /** - * 停止音樂 - * @param id - */ - public StopMusic(): void { - console.audioEngine.stopMusic(); - this._currentMusic = -1; - } - -} diff --git a/src/script/Engine/Utils/Audio/CSAudio.ts.meta b/src/script/Engine/Utils/Audio/CSAudio.ts.meta deleted file mode 100644 index c788d2c..0000000 --- a/src/script/Engine/Utils/Audio/CSAudio.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "f3ba292a-ecad-4485-ab60-1cd3ee94979a", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Audio/CSCommonAudios.ts b/src/script/Engine/Utils/Audio/CSCommonAudios.ts deleted file mode 100644 index c961453..0000000 --- a/src/script/Engine/Utils/Audio/CSCommonAudios.ts +++ /dev/null @@ -1,167 +0,0 @@ -import CSAudio from "./CSAudio"; - -export default class CSAppAudios extends CSAudio { - private static _instanceApp: CSAppAudios = null; - public static get InstanceApp(): CSAppAudios { return this._instanceApp; } - private _idToAppClip: Map = new Map(); - private _idToAppPath: Map = new Map(); - private _idToAppAudioId: Map = new Map(); - private _currentAppMusic: number = -1; - /** 判斷音效播放太過頻繁不疊加 */ - private _lastAppPlaySoundTime: Map = new Map(); - private readonly _appCanPlaySoundCutTime: number = 10; - constructor() { - super(); - CSAppAudios._instanceApp = this; - } - - public AddAppClipsInfo(clips: Map, pathes: Map): void { - this._idToAppClip = clips; - this._idToAppPath = pathes; - } - - /** - * 設定AudioID - * @param id - * @param audioId - */ - private _setAppAudioId(id: number, audioId: number): void { - this._idToAppAudioId.set(id, audioId); - } - - /** - * 打開音效音量 - */ - public OpenSound(): void { - super.OpenSound(); - } - /** - * 關閉音效音量 - */ - public CloseSound(): void { - super.CloseSound(); - } - - /** - * 取得AudioID - * @param id - */ - private _getAppAudioId(id: number): number { - if (this._idToAppAudioId.has(id)) { - return this._idToAppAudioId.get(id); - } else { - return -1; - } - } - - /** - * 播放音效 - * @param id - * @param loop - */ - public PlayAppSound(id: number, loop: boolean = false): void { - // 靜音後有一禎仍然會撥放的問題:音量>0才撥放 - if (console.audioEngine.getEffectsVolume() <= 0) { - return; - } - if (this._idToAppClip.has(id)) { - let path: string = this._idToAppPath.get(id); - let timenum: number = new Date().getTime(); - if (!this._lastAppPlaySoundTime.has(path)) { - this._lastAppPlaySoundTime.set(path, timenum); - let audioId: number = console.audioEngine.playEffect(this._idToAppClip.get(id), loop); - this._setAppAudioId(id, audioId); - } else { - let lastTime: number = this._lastAppPlaySoundTime.get(path); - if (timenum - lastTime > this._appCanPlaySoundCutTime) { - this._lastAppPlaySoundTime.set(path, timenum); - let audioId: number = console.audioEngine.playEffect(this._idToAppClip.get(id), loop); - this._setAppAudioId(id, audioId); - } - } - } else { - console.error("未知的Sound Id: ", id); - } - } - - /** - * 停止音效 - * @param id - */ - public StopAppSound(id: number): void { - let audioId: number = this._getAppAudioId(id); - if (audioId >= 0) { - console.audioEngine.stopEffect(audioId); - } - } - - /** - * 打開音樂音量 - */ - public OpenMusic(): void { - super.OpenMusic(); - this._setAppMusicVolume(0.3); - } - /** - * 關閉音樂音量 - */ - public CloseMusic(): void { - super.CloseMusic(); - this._setAppMusicVolume(0.0); // 這邊再改改 - } - - /** - * 設定音樂音量 - * @param volume - */ - private _setAppMusicVolume(volume: number): void { - // 靜音後有一禎仍然會撥放的問題:背景音樂要回復 - if (this._currentAppMusic != -1 && volume > 0 && !console.audioEngine.isMusicPlaying()) { - this._ccAppMusicPlayId = console.audioEngine.playMusic(this._idToAppClip.get(this._currentAppMusic), true); - } - } - - /** - * 撥放音樂 - * @param id - * @param loop - */ - public PlayAppMusic(id: number, loop: boolean = true): void { - if (this._currentAppMusic != id) { - if (this._idToAppClip.has(id)) { - // 靜音後有一禎仍然會撥放的問題:音量>0才撥放 - if (console.audioEngine.getMusicVolume() > 0) { - this._ccAppMusicPlayId = console.audioEngine.playMusic(this._idToAppClip.get(id), loop); - } - this._currentAppMusic = id; - } else { - console.error("未知的Music Id: ", id); - } - } - } - - private _ccAppMusicPlayId: number = -1; - private _currentAppMusicTime: number = -1; - - public pauseOrResume(isPause?: boolean): void { - super.pauseOrResume(); - if (isPause) { - this._currentAppMusicTime = console.audioEngine.getCurrentTime(this._ccAppMusicPlayId); - console.audioEngine.pauseAll(); - console.audioEngine.stopMusic(); - } else { - console.audioEngine.resumeAll(); - console.audioEngine.setCurrentTime(this._ccAppMusicPlayId, this._currentAppMusicTime); - } - } - - /** - * 停止音樂 - * @param id - */ - public StopMusic(): void { - console.audioEngine.stopMusic(); - this._currentAppMusic = -1; - } - -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Audio/CSCommonAudios.ts.meta b/src/script/Engine/Utils/Audio/CSCommonAudios.ts.meta deleted file mode 100644 index bfb0744..0000000 --- a/src/script/Engine/Utils/Audio/CSCommonAudios.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "ce946cad-16db-4383-a734-43bb8f14089e", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Bezier.meta b/src/script/Engine/Utils/Bezier.meta deleted file mode 100644 index e6eb2ec..0000000 --- a/src/script/Engine/Utils/Bezier.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "4e2d4321-bbfb-46d8-87bc-15a7c99c000d", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Bezier/Bezier.ts b/src/script/Engine/Utils/Bezier/Bezier.ts deleted file mode 100644 index f8d5ccf..0000000 --- a/src/script/Engine/Utils/Bezier/Bezier.ts +++ /dev/null @@ -1,16 +0,0 @@ -export module Bezier { - - export function GetPoint(p0: console.Vec2, p1: console.Vec2, p2: console.Vec2, p3: console.Vec2, t: number): console.Vec2 { - if (t < 0) { - t = 0; - } - else if (t > 1) { - t = 1 - } - let OneMinusT = 1 - t; - return p0.mul(OneMinusT * OneMinusT * OneMinusT) - .add(p1.mul(3 * OneMinusT * OneMinusT * t)) - .add(p2.mul(3 * OneMinusT * t * t)) - .add(p3.mul(t * t * t)); - } -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Bezier/Bezier.ts.meta b/src/script/Engine/Utils/Bezier/Bezier.ts.meta deleted file mode 100644 index 946290b..0000000 --- a/src/script/Engine/Utils/Bezier/Bezier.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "b47d81c4-01a1-45cd-94f8-19daf96f17a8", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/CCExtensions.meta b/src/script/Engine/Utils/CCExtensions.meta deleted file mode 100644 index b4ecd16..0000000 --- a/src/script/Engine/Utils/CCExtensions.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "dcb480f5-98b4-4a48-9d82-e3e1fe837e8d", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/CCExtensions/ArrayExtension.ts b/src/script/Engine/Utils/CCExtensions/ArrayExtension.ts deleted file mode 100644 index 399dd72..0000000 --- a/src/script/Engine/Utils/CCExtensions/ArrayExtension.ts +++ /dev/null @@ -1,15 +0,0 @@ -declare interface Array { - /** - * 移除一個值並且回傳 - * @param index - */ - ExRemoveAt(index: number): T; -} - -Array.prototype.ExRemoveAt || Object.defineProperty(Array.prototype, 'ExRemoveAt', { - enumerable: false, - value: function (index: number) { - let item = this.splice(index, 1); - return item[0]; - } -}) \ No newline at end of file diff --git a/src/script/Engine/Utils/CCExtensions/ArrayExtension.ts.meta b/src/script/Engine/Utils/CCExtensions/ArrayExtension.ts.meta deleted file mode 100644 index d50500a..0000000 --- a/src/script/Engine/Utils/CCExtensions/ArrayExtension.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "02aa6cd7-21a1-4c22-bcbe-296bb938badd", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/CCExtensions/CCExtension.ts b/src/script/Engine/Utils/CCExtensions/CCExtension.ts deleted file mode 100644 index 5966567..0000000 --- a/src/script/Engine/Utils/CCExtensions/CCExtension.ts +++ /dev/null @@ -1,223 +0,0 @@ -declare namespace cc { - - export interface Node { - /** - * 設定世界座標 - * @param worldPoint - */ - SetWorldPosition(worldPoint: console.Vec2): void; - /** - * 取得世界座標 - */ - GetWorldPosition(): console.Vec2; - /** - * 設定長寬 - * @param size - */ - SetSizeDelta(size: console.Vec2); - /** - * 取得長寬 - */ - GetSizeDelta(): console.Vec2; - /** - * 增加一個子物件 - * @param childObj - */ - ExAddChild(childObj: console.Prefab | console.Node, childActive?: boolean): console.Node; - - /**設定層級為最低層 */ - ExSetLowestOrder(): void; - - /**設定層級為最高層 */ - ExSetHighestOrder(): void; - - /**設定層級,比目標OBJ再低一層 */ - ExSetOrderUnderTheObj(obj: console.Node, isNew?: boolean): number; - - /**設定層級,比目標OBJ再高一層 */ - ExSetOrderOverTheObj(obj: console.Node, isNew?: boolean): number; - /**位置維持在原位 */ - ExSetParent(parentObj: console.Node): void; - ExSetGray(showGray: boolean): void; - } -} - -console.Node.prototype.SetWorldPosition || Object.defineProperty(console.Node.prototype, 'SetWorldPosition', { - enumerable: false, - value: function (cocosWorldPos: console.Vec2) { - // let cocosWorldPos = new console.Vec2(unityWorldPos.x + 711, unityWorldPos.y + 400); - this.setPosition(this.parent.convertToNodeSpaceAR(cocosWorldPos)); - } -}) -console.Node.prototype.GetWorldPosition || Object.defineProperty(console.Node.prototype, 'GetWorldPosition', { - enumerable: false, - value: function () { - let cocosWorldPos = this.parent.convertToWorldSpaceAR(this.position); - // let unityWorldPos = new console.Vec2(cocosWorldPos.x - 711, cocosWorldPos.y - 400); - return cocosWorldPos; - } -}) -console.Node.prototype.SetSizeDelta || Object.defineProperty(console.Node.prototype, 'SetSizeDelta', { - enumerable: false, - value: function (size: console.Vec2) { - this.setContentSize(size.x, size.y); - } -}) -console.Node.prototype.GetSizeDelta || Object.defineProperty(console.Node.prototype, 'GetSizeDelta', { - enumerable: false, - value: function () { - let size: console.Size = this.GetSizeDelta(); - return new console.Vec2(size.width, size.width); - } -}) -console.Node.prototype.ExAddChild || Object.defineProperty(console.Node.prototype, 'ExAddChild', { - enumerable: false, - value: function (childObj: console.Prefab | console.Node, childActive: boolean = true) { - let gameObj = null; - if (childObj instanceof console.Prefab) { - gameObj = console.instantiate(childObj); - } - else { - gameObj = console.instantiate(childObj); - } - gameObj.active = childActive ? true : childActive; - gameObj.parent = this; - return gameObj; - } -}) -console.Node.prototype.ExSetLowestOrder || Object.defineProperty(console.Node.prototype, 'ExSetLowestOrder', { - enumerable: false, - value: function () { - this.setSiblingIndex(0); - } -}) -console.Node.prototype.ExSetHighestOrder || Object.defineProperty(console.Node.prototype, 'ExSetHighestOrder', { - enumerable: false, - value: function () { - this.setSiblingIndex(Number.MAX_VALUE); - } -}) -console.Node.prototype.ExSetOrderUnderTheObj || Object.defineProperty(console.Node.prototype, 'ExSetOrderUnderTheObj', { - enumerable: false, - value: function (obj: console.Node, isNew?: boolean) { - - let newIndex: number; - let objIndex = obj.getSiblingIndex(); - - // 如果是新創的元件 - if (isNew) { - newIndex = objIndex; - } - // 如果是已經在場景上的元件 - else { - let myIndex = this.getSiblingIndex(); - - // 如果一開始就在它下面 - if (myIndex < objIndex) { - newIndex = objIndex - 1; - } - else { - newIndex = objIndex; - } - } - this.setSiblingIndex(newIndex); - return newIndex; - } -}) -console.Node.prototype.ExSetOrderOverTheObj || Object.defineProperty(console.Node.prototype, 'ExSetOrderOverTheObj', { - enumerable: false, - value: function (obj: console.Node, isNew?: boolean) { - let newIndex: number; - let objIndex = obj.getSiblingIndex(); - - // 如果是新創的元件 - if (isNew) { - newIndex = objIndex + 1; - } - // 如果是已經在場景上的元件 - else { - let myIndex = this.getSiblingIndex(); - - // 如果一開始就在它下面 - if (myIndex < objIndex) { - newIndex = objIndex; - } - else { - newIndex = objIndex + 1; - } - } - this.setSiblingIndex(newIndex); - return newIndex; - } -}) -console.Node.prototype.ExSetParent || Object.defineProperty(console.Node.prototype, 'ExSetParent', { - enumerable: false, - value: function (parentObj: console.Node) { - let oriPos = this.GetWorldPosition(); - this.setParent(parentObj); - this.SetWorldPosition(oriPos); - } -}) -console.Node.prototype.ExSetGray || Object.defineProperty(console.Node.prototype, 'ExSetGray', { - enumerable: false, - value: function (showGray: boolean): void { - let btn: console.Button = this.getComponent(console.Button); - if (btn) { - btn.interactable = !showGray; - } - let material: console.Material = console.Material.createWithBuiltin(showGray ? console.Material.BUILTIN_NAME.GRAY_SPRITE.toString() : console.Material.BUILTIN_NAME.SPRITE.toString(), 0); - !showGray && material.define("USE_TEXTURE", true, 0); - let spriteComs: any[] = this.getComponentsInChildren(console.Sprite).concat(this.getComponentsInChildren(console.Label)); - for (let sprite of spriteComs) { - sprite.setMaterial(0, material); - } - - // 先使用createWithBuiltin,如果材質球一直Create沒被刪除,會在修改。 - // let material: console.Material = console.Material.getBuiltinMaterial(showGray ? console.Material.BUILTIN_NAME.GRAY_SPRITE.toString() : console.Material.BUILTIN_NAME.SPRITE.toString()); - // for (let sprite of spriteComs) { - // if (showGray) { - // sprite.setMaterial(0, console.Material.getBuiltinMaterial('2d-gray-sprite')); - // } - // else { - // sprite.setMaterial(0, console.Material.getBuiltinMaterial('2d-sprite')); - // } - // } - }, -}); -// console.Node.prototype.SetWorldPosition = function (cocosWorldPos: console.Vec2): void { -// // let cocosWorldPos = new console.Vec2(unityWorldPos.x + 711, unityWorldPos.y + 400); -// this.setPosition(this.parent.convertToNodeSpaceAR(cocosWorldPos)); -// } -// console.Node.prototype.GetWorldPosition = function (): console.Vec2 { -// let cocosWorldPos = this.parent.convertToWorldSpaceAR(this.position); -// // let unityWorldPos = new console.Vec2(cocosWorldPos.x - 711, cocosWorldPos.y - 400); -// return cocosWorldPos; -// } - -// console.Node.prototype.SetSizeDelta = function (size: console.Vec2) { -// this.setContentSize(size.x, size.y); -// } -// console.Node.prototype.GetSizeDelta = function (): console.Vec2 { -// let size: console.Size = this.GetSizeDelta(); -// return new console.Vec2(size.width, size.width); -// } - -// console.Node.prototype.ExAddChild = function (childObj: console.Prefab | console.Node): console.Node { - -// let gameObj = null; -// if (childObj instanceof console.Prefab) { -// gameObj = console.instantiate(childObj); -// } -// else { -// gameObj = console.instantiate(childObj); -// } -// gameObj.parent = this; -// return gameObj; -// } - -// console.Node.prototype.ExSetLowestOrder = function (): void { -// this.setSiblingIndex(0); -// } -// console.Node.prototype.ExSetHighestOrder = function (): void { -// this.setSiblingIndex(Number.MAX_VALUE); -// } diff --git a/src/script/Engine/Utils/CCExtensions/CCExtension.ts.meta b/src/script/Engine/Utils/CCExtensions/CCExtension.ts.meta deleted file mode 100644 index 5d1f492..0000000 --- a/src/script/Engine/Utils/CCExtensions/CCExtension.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "b373f805-9297-4af5-8ea6-0a250649b5b0", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/CCExtensions/NumberExtension.ts b/src/script/Engine/Utils/CCExtensions/NumberExtension.ts deleted file mode 100644 index 5d39881..0000000 --- a/src/script/Engine/Utils/CCExtensions/NumberExtension.ts +++ /dev/null @@ -1,189 +0,0 @@ - -declare interface Number { - - /** - * 金額每三位數(千)加逗號, 並且補到小數點第2位 - * 輸出 41,038,560.00 - * @param precision 補到小數點第幾位 - * @param isPadZero 是否要補零 - * */ - ExFormatNumberWithComma(precision?: number, isPadZero?: boolean): string; - /** - * 基本4位數(9,999-999B-T) - * */ - ExTransferToBMK(precision?: number,offset?: number): string; - /** - * 數字轉字串, 頭補0 - * @param size - */ - Pad(size: number): string; - /** - * 四捨五入到小數點第X位 (同server計算規則) - * @param precision - */ - ExToNumRoundDecimal(precision: number): number; - /** - * 無條件捨去到小數點第X位 - * @param precision - */ - ExToNumFloorDecimal(precision: number): number; - /** - * 無條件捨去強制保留X位小數,如:2,會在2後面補上00.即2.00 - * @param precision 補到小數點第幾位 - * @param isPadZero 是否要補零 - */ - ExToStringFloorDecimal(precision: number, isPadZero?: boolean): string; - /** - * 取整數) - */ - ExToInt():number; - /** - * 小數轉整數(支援科學符號) - */ - Float2Fixed():number; - /** - * 數字長度(支援科學符號) - */ - DigitLength():number; - - target: number; - - -} - -Number.prototype.ExFormatNumberWithComma || Object.defineProperty(Number.prototype, 'ExFormatNumberWithComma', { - enumerable: false, - value: function (precision: number = 2, isPadZero: boolean = true) { - - // let arr = String(this).split('.'); - let arr = this.ExToStringFloorDecimal(precision, isPadZero).split('.'); - let num = arr[0], result = ''; - while (num.length > 3) { - result = ',' + num.slice(-3) + result; - num = num.slice(0, num.length - 3); - } - if (num.length > 0) result = num + result; - return arr[1] ? result + '.' + arr[1] : result; - } -}) - - -Number.prototype.ExTransferToBMK || Object.defineProperty(Number.prototype, 'ExTransferToBMK', { - enumerable: false, - value: function (precision: number=2,offset: number = 0) { - /**千 */ - let MONEY_1K: number = 1000; - /**萬 */ - // let MONEY_10K: number = 10000; - /**十萬 */ - // let MONEY_100K: number = 100000; - /**百萬 */ - let MONEY_1M: number = 1000000; - /**千萬 */ - // let MONEY_10M: number = 10000000; - /**億 */ - // let MONEY_100M: number = 100000000; - /**十億 */ - let MONEY_1B: number = 1000000000; - /**百億 */ - // let MONEY_10B: number = 10000000000; - /**千億 */ - // let MONEY_100B: number = 100000000000; - /**兆 */ - // let MONEY_1T: number = 1000000000000; - offset = Math.pow(10, offset); - // if (this >= MONEY_1T * offset) { - // //(3)1,000T - // //1T~ - // return (~~(this / MONEY_1T)).ExFormatNumberWithComma(0) + "T"; - // } - if (this >= MONEY_1B * offset) { - //1,000B~900,000B - //1B~900B - return (this / MONEY_1B).ExFormatNumberWithComma(3, false) + "B"; - } - else if (this >= MONEY_1M * offset) { - //1,000M~900,000M - //1M~900M - return (this / MONEY_1M).ExFormatNumberWithComma(3, false) + "M"; - } - else if (this >= MONEY_1K * offset) { - //1,000K~900,000K - //1K~90K - return (this / MONEY_1K).ExFormatNumberWithComma(3, false) + "K"; - } - else { - //0~9,000,000 - //0~9,000 - return this.ExFormatNumberWithComma(precision); - } - } -}) -Number.prototype.Pad || Object.defineProperty(Number.prototype, 'Pad', { - enumerable: false, - value: function (size: number) { - let s = this + ""; - while (s.length < size) s = "0" + s; - return s; - } -}) -Number.prototype.ExToNumRoundDecimal || Object.defineProperty(Number.prototype, 'ExToNumRoundDecimal', { - enumerable: false, - value: function (precision: number) { - return Math.round(Math.round(this * Math.pow(10, (precision || 0) + 1)) / 10) / Math.pow(10, (precision || 0)); - } -}) -Number.prototype.ExToInt || Object.defineProperty(Number.prototype, 'ExToInt',{ - enumerable: false, - value: function (){ - return ~~this; - } -}) -Number.prototype.ExToNumFloorDecimal || Object.defineProperty(Number.prototype, 'ExToNumFloorDecimal', { - enumerable: false, - value: function (precision: number) { - let str = this.toPrecision(12); - let dotPos = str.indexOf('.'); - return dotPos == -1 ? this : +`${str.substr(0, dotPos + 1 + precision)}`; - } -}) -Number.prototype.ExToStringFloorDecimal || Object.defineProperty(Number.prototype, 'ExToStringFloorDecimal', { - enumerable: false, - value: function (precision: number, isPadZero: boolean = true) { - // 取小數點第X位 - let f = this.ExToNumFloorDecimal(precision); - let s = f.toString(); - // 補0 - if (isPadZero) { - let rs = s.indexOf('.'); - if (rs < 0) { - rs = s.length; - s += '.'; - } - while (s.length <= rs + precision) { - s += '0'; - } - } - return s; - } -}) -Number.prototype.Float2Fixed || Object.defineProperty(Number.prototype, 'Float2Fixed', { - enumerable: false, - value: function () { - if (this.toString().indexOf('e') === -1) { - return Number(this.toString().replace('.', '')); - } - const dLen = this.DigitLength(); - return dLen > 0 ? +parseFloat((this * Math.pow(10, dLen)).toPrecision(12)) : this; - } -}) -Number.prototype.DigitLength || Object.defineProperty(Number.prototype, 'DigitLength', { - enumerable: false, - value: function () { - const eSplit = this.toString().split(/[eE]/); - const len = (eSplit[0].split('.')[1] || '').length - (+(eSplit[1] || 0)); - return len > 0 ? len : 0; - } -}) - - \ No newline at end of file diff --git a/src/script/Engine/Utils/CCExtensions/NumberExtension.ts.meta b/src/script/Engine/Utils/CCExtensions/NumberExtension.ts.meta deleted file mode 100644 index 2216eef..0000000 --- a/src/script/Engine/Utils/CCExtensions/NumberExtension.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "788e7381-bee6-4b74-addb-c4aa4c4ff4e3", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Number.meta b/src/script/Engine/Utils/Number.meta deleted file mode 100644 index 4c6cba6..0000000 --- a/src/script/Engine/Utils/Number.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "d6e55fc6-00b6-496a-aae2-74d694c1223b", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Number/NumberEx.ts b/src/script/Engine/Utils/Number/NumberEx.ts deleted file mode 100644 index 76f48e2..0000000 --- a/src/script/Engine/Utils/Number/NumberEx.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { CoroutineV2 } from "../../CatanEngine/CoroutineV2/CoroutineV2"; -import { RandomEx } from "./RandomEx"; - -export module NumberEx { - /** - * 數字滾動 - * @param startNum - * @param endNum - * @param callbackfn - * @param chabgeRate - */ - export function* ChangeScore(startNum: number, endNum: number, callbackfn: (num: number) => void, sec: number) { - let fps = 30; - let waitTime = 0.03; - let changeRate = sec * fps; // -1為了讓changeRate數字能混亂點 - changeRate = changeRate - 1 <= 0 ? changeRate : changeRate - 1; - changeRate = 1 / changeRate; - let diff = endNum - startNum; - let isIncrease = endNum >= startNum; - let tempScore = startNum; - let counter = 0; - let randomRate = 0; - while (true) { - if (endNum != tempScore) { - if (counter % 2 == 0) { - if (isIncrease) { randomRate = RandomEx.GetFloat(0, diff * changeRate).ExToNumFloorDecimal(2); } - else { randomRate = RandomEx.GetFloat(0, -diff * changeRate).ExToNumFloorDecimal(2); } - } - else { - randomRate = -randomRate; - } - - tempScore += diff * changeRate + randomRate; - // 遞增 - if (isIncrease && tempScore > endNum) { - tempScore = endNum; - } - // 遞減 - if (!isIncrease && tempScore < endNum) { - tempScore = endNum; - } - callbackfn(tempScore); - // yield null; - counter++; - yield CoroutineV2.WaitTime(waitTime); - } - else { - callbackfn(endNum); - break; - } - } - } - - /** - * 數字跳動 - * @param minNum 起始數字 - * @param maxNum 最終數字 - * @param callbackfn callbackfn - * @param sec 時間 - */ - export function* BeatScore(minNum: number, maxNum: number, endNum: number, callbackfn: (num: number) => void, sec: number): IterableIterator { - let fps: number = 13; - let waitTime: number = 0.07; - let changeRate: number = sec * fps; // -1為了讓changeRate數字能混亂點 - changeRate = changeRate - 1 <= 0 ? changeRate : changeRate - 1; - changeRate = 1 / changeRate; - let diff: number = maxNum - minNum; - let isIncrease: boolean = maxNum >= minNum; - let tempScore: number = minNum; - let counter: number = 0; - let randomRate: number = 0; - let lastNum: number = minNum; - let nowNum: number = minNum; - while (true) { - if (maxNum !== tempScore) { - if (counter % 2 === 0) { - if (isIncrease) { - randomRate = RandomEx.GetFloat(0, diff * changeRate).ExToNumFloorDecimal(2); - } else { - randomRate = RandomEx.GetFloat(0, -diff * changeRate).ExToNumFloorDecimal(2); - } - } else { - randomRate = -randomRate; - } - - tempScore += diff * changeRate + randomRate; - // 遞增 - if (isIncrease && tempScore > maxNum) { - tempScore = maxNum; - } - // 遞減 - if (!isIncrease && tempScore < maxNum) { - tempScore = maxNum; - } - while(nowNum === lastNum) { - nowNum = RandomEx.GetInt(minNum, maxNum + 1); - } - lastNum = nowNum; - callbackfn(nowNum); - // yield null; - counter++; - yield CoroutineV2.WaitTime(waitTime); - } else { - callbackfn(endNum); - break; - } - } - } - - /** - * 检测数字是否越界,如果越界给出提示 - * @param {*number} num 输入数 - */ - function checkBoundary(num: number) { - if (_boundaryCheckingState) { - if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) { - console.warn(`${num} is beyond boundary when transfer to integer, the results may not be accurate`); - } - } - } - - /** - * 精确乘法 - */ - export function times(num1: number, num2: number, ...others: number[]): number { - if (others.length > 0) { - return times(times(num1, num2), others[0], ...others.slice(1)); - } - const num1Changed = num1.Float2Fixed(); - const num2Changed = num2.Float2Fixed(); - const baseNum = num1.DigitLength() + num2.DigitLength(); - const leftValue = num1Changed * num2Changed; - - checkBoundary(leftValue); - - return leftValue / Math.pow(10, baseNum); - } - - /** - * 精确加法 - */ - export function plus(num1: number, num2: number, ...others: number[]): number { - if (others.length > 0) { - return plus(plus(num1, num2), others[0], ...others.slice(1)); - } - const baseNum = Math.pow(10, Math.max(num1.DigitLength(), num2.DigitLength())); - return (times(num1, baseNum) + times(num2, baseNum)) / baseNum; - } - - /** - * 精确减法 - */ - export function minus(num1: number, num2: number, ...others: number[]): number { - if (others.length > 0) { - return minus(minus(num1, num2), others[0], ...others.slice(1)); - } - const baseNum = Math.pow(10, Math.max(num1.DigitLength(), num2.DigitLength())); - return (times(num1, baseNum) - times(num2, baseNum)) / baseNum; - } - - /** - * 精确除法 - */ - export function divide(num1: number, num2: number, ...others: number[]): number { - if (others.length > 0) { - return divide(divide(num1, num2), others[0], ...others.slice(1)); - } - const num1Changed = num1.Float2Fixed(); - const num2Changed = num2.Float2Fixed(); - checkBoundary(num1Changed); - checkBoundary(num2Changed); - return times((num1Changed / num2Changed), Math.pow(10, num2.DigitLength() - num1.DigitLength())); - } - - /** - * 四舍五入 - */ - export function round(num: number, ratio: number): number { - const base = Math.pow(10, ratio); - return divide(Math.round(times(num, base)), base); - } - - let _boundaryCheckingState = true; - /** - * 是否进行边界检查,默认开启 - * @param flag 标记开关,true 为开启,false 为关闭,默认为 true - */ - function enableBoundaryChecking(flag = true) { - _boundaryCheckingState = flag; - } -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Number/NumberEx.ts.meta b/src/script/Engine/Utils/Number/NumberEx.ts.meta deleted file mode 100644 index 63edb76..0000000 --- a/src/script/Engine/Utils/Number/NumberEx.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "363f5f7f-0623-4013-8571-0bb5c1dc95e6", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/Number/RandomEx.ts b/src/script/Engine/Utils/Number/RandomEx.ts deleted file mode 100644 index 4d33e13..0000000 --- a/src/script/Engine/Utils/Number/RandomEx.ts +++ /dev/null @@ -1,42 +0,0 @@ - -export module RandomEx { - - /** - * 取得隨機布林值 - */ - export function GetBool() { - return GetInt() >= 0; - } - /** - * 取得隨機整數(回傳min ~ max - 1) - * @param min - * @param max - */ - export function GetInt(min: number = Number.MIN_VALUE, max: number = Number.MAX_VALUE): number { - return Math.floor(Math.random() * (max - min)) + min; - } - /** - * 取得隨機小數 - * @param min - * @param max - */ - export function GetFloat(min: number = Number.MIN_VALUE, max: number = Number.MAX_VALUE): number { - return Math.random() * (max - min) + min; - } - /** - * 隨機取得複數個不重複回傳 - * @param num 取得數量 - * @param items 陣列 - */ - export function GetMultiNoRepeat(num: number, items: any[]): any[] { - let result: any[] = []; - for (let i: number = 0; i < num; i++) { - let ran: number = Math.floor(Math.random() * items.length); - let item = items.splice(ran, 1)[0]; - if (result.indexOf(item) == -1) { - result.push(item); - } - }; - return result; - } -} diff --git a/src/script/Engine/Utils/Number/RandomEx.ts.meta b/src/script/Engine/Utils/Number/RandomEx.ts.meta deleted file mode 100644 index bcf2fa8..0000000 --- a/src/script/Engine/Utils/Number/RandomEx.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "ba4dee5b-ca5b-4435-a068-c4f5dd832bab", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/ScrollView.meta b/src/script/Engine/Utils/ScrollView.meta deleted file mode 100644 index 2b459b6..0000000 --- a/src/script/Engine/Utils/ScrollView.meta +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ver": "1.1.2", - "uuid": "f6471056-03d8-4d55-b039-6b62d056547c", - "isBundle": false, - "bundleName": "", - "priority": 1, - "compressionType": {}, - "optimizeHotUpdate": {}, - "inlineSpriteFrames": {}, - "isRemoteBundle": {}, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/ScrollView/UISuperItem.ts b/src/script/Engine/Utils/ScrollView/UISuperItem.ts deleted file mode 100644 index 9f50e93..0000000 --- a/src/script/Engine/Utils/ScrollView/UISuperItem.ts +++ /dev/null @@ -1,379 +0,0 @@ -/* - * @Author: steveJobs - * @Email: icipiqkm@gmail.com - * @Date: 2020-11-19 01:15:38 - * @Last Modified by: steveJobs - * @Last Modified time: 2020-12-04 14:41:01 - * @Description: Description - */ -import UISuperLayout, { UIChangeBrotherEvnet } from "./UISuperLayout"; -const { ccclass, property, menu } = console._decorator; -@ccclass -@menu("Plug-in/ScrollView/UISpuerItem") -export default class UISpuerItem extends console.Component { - private layout: UISuperLayout; - private brother: console.Node; - private originSize: console.Size; - private originScale: console.Vec2; - public index: number; - private remove: Function; - private _useScript: any = null; - /** 根据可视范围 和 一组item的个数 去掉 边距/间隔 来计算本item的真实宽度 */ - private get _width(): number { - if (this.layout.vertical) { - // 垂直滑动时 固定宽度 - return (this.layout.accommodWidth - this.layout.spacingWidth) / this.layout.column; - } else { - // 水平模式时 宽度随意 - return this.node.width * this.layout.getUsedScaleValue(this.node.scaleX); - } - } - /** 根据可视范围 和 一组item的个数 去掉 边距/间隔 来计算本item的真实高度 */ - private get _height(): number { - if (this.layout.horizontal) { - // 水平模式时 固定高度 - return (this.layout.accommodHeight - this.layout.spacingWidth) / this.layout.column; - } else { - // 垂直滑动时 高度随意 - return this.node.height * this.layout.getUsedScaleValue(this.node.scaleY); - } - } - onLoad(): void { - // 向node写入一个方法 省去了先获取组件然后调用的步骤 - this.node["watchSelf"] = this.watchSelf.bind(this); - this.node["saveOriginSize"] = this.SaveOriginSize.bind(this); - let widget: console.Widget = this.node.getComponent(console.Widget); - if (widget) { - console.warn("UISuperItem: item不允许挂console.Widget组件 请手动移除"); - this.node.removeComponent(widget); - } - } - - public SetInfo(index: number, remove: Function, ...iniData: any[]): void { - this.index = index; - this.remove = remove; - this._useScript.ImplementSet(...iniData); - } - private onRemove() { - this.remove(this.index); - } - private onClick() { - - } - public SaveOriginSize(): void { - this.originSize = console.size(this.node.width, this.node.height); - this.node.setContentSize(this.originSize); - this.originScale = console.v2(this.node.scaleX, this.node.scaleY); - } - public Init(layout: UISuperLayout, useScript: any): void { - this._useScript = useScript; - this.layout = layout; - this.layout.node.on(UIChangeBrotherEvnet, this.onChangeBrother, this); - this.SaveOriginSize(); - this.node.on(console.Node.EventType.SIZE_CHANGED, this.watchSize, this); - this.node.on(console.Node.EventType.SCALE_CHANGED, this.watchSize, this); - this.onChangeBrother(); - } - onDestroy(): void { - if (this.layout != null) { - this.layout.node.off(UIChangeBrotherEvnet, this.onChangeBrother, this); - } - this.node.off(console.Node.EventType.SIZE_CHANGED, this.watchSize, this); - this.node.off(console.Node.EventType.SCALE_CHANGED, this.watchSize, this); - this.unlisten(); - } - /** - * 当兄弟节点的顺序变化时 来改变自己监听的对象 - * 0,1,2,3,4,5,6,7,8,9 例如列表中共有10个item 0是header 9是footer - * 正序排列时 监听的顺序是 9->8->7->6->5->4->3->2->1->0 0的 brother=null - * 向下填充的逻辑是 0跑到9后面 0=footer 0的brother=9 相对9的位置设置自己 此时1=header - * 向上填充的逻辑是 9跑到0前面 此时9=header 9的brother=null 主动设置自己相对于0前面位置之后 0的brother=9 8=footer - */ - private onChangeBrother() { - let brother: console.Node = this.layout.getBrotherNode(this.node); // 获取我应该监听的那个兄弟 - if (brother?.uuid === this.brother?.uuid) { - return; // 如果没有变化 则跳过 - } - this.unlisten(); // 我的兄弟换人了?先移除我原来的 - this.brother = brother; // 他是我的兄弟 - this.listen(); // 监听他 - this.watchBrother(); // 相对兄弟节点来设置自己的位置 - } - private listen() { - this.brother?.on("leave", this.unlisten, this); - this.brother?.on(console.Node.EventType.POSITION_CHANGED, this.watchBrother, this); - } - private unlisten() { - this.brother?.off("leave", this.unlisten, this); - this.brother?.off(console.Node.EventType.POSITION_CHANGED, this.watchBrother, this); - this.brother = null; - } - /** 当我的尺寸/缩放改变时 */ - private watchSize() { - if (this.layout.column > 1) { // 如果是Grid模式 不允许修改尺寸/缩放 强制改回来 - this.node.setContentSize(this.originSize); - this.node.setScale(this.originScale); - } else { - if (this.layout.vertical && (this.node.getContentSize().width != this.originSize.width || this.node.scaleX != this.originScale.x)) { - this.node.width = this.originSize.width; - this.node.scaleX = this.originScale.x; - - } else if (this.layout.horizontal && (this.node.getContentSize().height != this.originSize.height || this.node.scaleY != this.originScale.y)) { - this.node.height = this.originSize.height; - this.node.scaleY = this.originScale.y; - } - // 如果我监听了兄弟节点就设置自己相对兄弟节点的位置,否则 我就发送一个位置变化的消息 让监听我的兄弟相对我做出变化 - this.brother && this.watchBrother(); - this.layout.resetScrollView(); - this.node.emit(console.Node.EventType.POSITION_CHANGED); - } - if (this.node["index"] == 0 && this.layout.isNormalSize) { - this.node.setPosition(this.layout.getGroupHeader(this.node)); - } - } - // 设置自己相对于上一个兄弟节点的位置 - public watchBrother() { - if (!this.brother) { return } - if (this.layout.headerToFooter) { // 正序排列时 - this.headerToFooterRelativeToFooter(this.brother); - } else {// 倒序排列时 - this.footerToHeaderRelativeToFooter(this.brother); - } - } - private isOutOfBoundary(offset: console.Vec2) { - if (this.layout.vertical && offset.y == 0) { return true } - if (this.layout.horizontal && offset.x == 0) { return true } - return false; - } - /** 从下到上排序方向 检查头部是否需要向上填充 */ - private footerToHeaderWatchHeader() { - // 如果不是头部一组的任意一个时跳过 比如一组有3个item 只计算 0,1,2 - if (this.layout.getSiblingIndex(this.node) >= this.layout.column) { return } - // 如果此时【尾部】已经是最后一个数据时 - let index = this.layout.footer["index"] + 1; - if (index >= this.layout.maxItemTotal) { - if (!this.layout.footerLoop || this.layout.scrollToHeaderOrFooter) { return } - index = 0; - } - // 计算超出的偏移量 (从下到上排序方向时 头部在 下尾部在上 检测【头部】是否超出下边框) - let offset = this.layout.isOutOfBoundaryFooter(this.node); - // 没有超出时跳过 - if (!this.isOutOfBoundary(offset)) { return } - // 将自己的数据索引 + 1 - this.node["index"] = index; - // 发送通知到应用层 刷新显示 - this.layout.notifyRefreshItem(this.node); - // 发给监听我的节点 通知我离开了 移除对我的所有监听 - this.node.emit("leave"); - // 将自己的节点索引设置到尾部 - this.layout.setSiblingIndex(this.node, this.layout.children.length - 1); - } - /** 从下到上排序方向 检查尾部是否需要向下填充 */ - private footerToHeaderWatchFooter() { - // 如果不是尾部一组的任意一个时跳过 比如一组有3个item 只计算末尾的3个item - if (this.layout.getSiblingIndex(this.node) < this.layout.children.length - this.layout.column) { return } - // 如果此时【头部】已经是第一个数据时 - let index = this.layout.header["index"] - 1; - if (index < 0) { - // 如果没有使用无限循环功能 否则不往下走 - if (!this.layout.headerLoop || this.layout.scrollToHeaderOrFooter) { return } - index = this.node["index"]; - } - // 计算超出的偏移量 (从下到上排序方向时 头部在 下尾部在上 检测【尾部】是否超出下边框) - let offset = this.layout.isOutOfBoundaryHeader(this.node); - // 没有超出时跳过 - if (!this.isOutOfBoundary(offset)) { return } - // 将自己的数据索引 - 1 - this.node["index"] = index; - // 发送通知到应用层 刷新显示 - this.layout.notifyRefreshItem(this.node); - // 发给监听我的兄弟 通知我离开了 移除对我的所有监听 - this.node.emit("leave"); - // 因为我是尾部 我监听了别人,此时移除我的所有监听 因为我马上就要成为老大 老大不需要监听任何人 - this.unlisten(); - // 因为我是老大 我不能相对别人来设置自己的相对位置,所以我需要主动设置自己(相对上一个老大的位置来设置自己) 别人都会相对我的位置做出变化 - this.footerToHeaderRelativeToHeader(this.layout.header); - // 将自己的节点索引设置到头部 - this.layout.setSiblingIndex(this.node, 0); - } - /** 从上到下排序方向 检查头部是否需要向下填充 */ - private headerToFooterWatchHeader() { - // 如果不是头部一组的任意一个时跳过 比如一组有3个item 只计算 0,1,2 - if (this.layout.getSiblingIndex(this.node) >= this.layout.column) { return } - // 如果此时【尾部】已经是第一个数据时 - let index = this.layout.footer["index"] + 1; - if (index > this.layout.maxItemTotal - 1) { - // 如果没有使用无限循环功能 否则不往下走 - if (!this.layout.footerLoop || this.layout.scrollToHeaderOrFooter) { return } - index = 0; - } - // 计算超出的偏移量 (从下到上排序方向时 头部在下 尾部在上 检测【尾部】是否超出下边框) - let offset = this.layout.isOutOfBoundaryHeader(this.node); - // 没有超出时跳过 - if (!this.isOutOfBoundary(offset)) { return } - // 将自己的数据索引 + 1 - this.node["index"] = index; - // 发送通知到应用层 刷新显示 - this.layout.notifyRefreshItem(this.node); - // 发给监听我的兄弟 通知我离开了 移除对我的所有监听 - this.node.emit("leave"); - // 将自己的节点索引设置到尾部 - this.layout.setSiblingIndex(this.node, this.layout.children.length - 1); - } - /** 从上到下排序方向 检查尾部是否需要向上填充 */ - private headerToFooterWatchFooter() { - // 如果不是尾部一组的任意一个时跳过 比如一组有3个item 只计算末尾的3个item - if (this.layout.getSiblingIndex(this.node) < this.layout.children.length - this.layout.column) { return } - // 如果此时【头部】已经是第一个数据时 - let index = this.layout.header["index"] - 1; - if (index < 0) { - // 如果没有使用无限循环功能 否则不往下走 - if (!this.layout.headerLoop || this.layout.scrollToHeaderOrFooter) { return } - index = this.node["index"]; - } - // 计算超出的偏移量 (从上到下排序方向时 头部在上 尾部在下 检测【尾部】是否超出下边框) - let offset = this.layout.isOutOfBoundaryFooter(this.node); - // 没有超出时跳过 - if (!this.isOutOfBoundary(offset)) { return } - // 将自己的数据索引 - 1 - this.node["index"] = index; - // 发送通知到应用层 刷新显示 - this.layout.notifyRefreshItem(this.node); - // 发给监听我的兄弟 通知我离开了 移除对我的所有监听 - this.node.emit("leave"); - // 因为我是尾部 我监听了别人,此时移除我的所有监听 因为我马上就要成为老大 老大不需要监听任何人 - this.unlisten(); - // 因为我是老大 我不能相对别人来设置自己的相对位置,所以我需要主动设置自己(相对上一个老大的位置来设置自己) 别人都会相对我的位置做出变化 - this.headerToFooterRelativeToHeader(this.layout.header); - // 将自己的节点索引设置到尾部 - this.layout.setSiblingIndex(this.node, 0); - } - /** isScrollToFooter=true 向下滑动 */ - public watchSelf(isScrollToFooter: boolean) { - if (isScrollToFooter) { - if (this.layout.headerToFooter) { - // 从【上到下排序】方向 检查【尾部】是否需要向上填充 - this.headerToFooterWatchFooter(); - } else { - // 从【下到上排序】方向 检查【头部】是否需要向上填充 - this.footerToHeaderWatchHeader(); - } - } else { - if (this.layout.headerToFooter) { - // 从【上到下排序】方向 检查【头部】是否需要向下填充 - this.headerToFooterWatchHeader(); - } else { - // 从【下到上排序】方向 检查【尾部】是否需要向下填充 - this.footerToHeaderWatchFooter(); - } - } - } - /** 从下到上 从右到左 排序方向 设置自己到相对node的头部 */ - private footerToHeaderRelativeToHeader(relative: console.Node) { - let pos = this.node.getPosition(); - // 从下到上 - if (this.layout.vertical) { - if (this.layout.isGroupHeader(relative)) { - pos.x = this.layout.getGroupFooter(this.node).x; - pos.y = this.layout.getGroupBottomY(this.node, relative); - } else { - pos.x = this.layout.getGroupLeftX(this.node, relative); - pos.y = relative.y; - } - if (this.node["index"] == 0) { - pos.x = this.layout.getGroupHeader(this.node).x; - } - } else { - // 从右到左 - if (this.layout.isGroupHeader(relative)) { - pos.x = this.layout.getGroupRightX(this.node, relative); - pos.y = this.layout.getGroupFooter(this.node).y; - } else { - pos.x = relative.x; - pos.y = this.layout.getGroupTopY(this.node, relative); - } - if (this.node["index"] == 0) { - pos.y = this.layout.getGroupHeader(this.node).y; - } - } - this.node.setPosition(pos); - } - /** 从下到上 从右到左 排序方向 设置自己到相对node的尾部 */ - private footerToHeaderRelativeToFooter(relative: console.Node) { - let pos = this.node.getPosition(); - // 从下到上 - if (this.layout.vertical) { - if (this.layout.isGroupFooter(relative)) { - pos.x = this.layout.getGroupHeader(this.node).x; - pos.y = this.layout.getGroupTopY(this.node, relative); - } else { - pos.x = this.layout.getGroupRightX(this.node, relative); - pos.y = relative.y; - } - } else { - // 从右到左 - if (this.layout.isGroupFooter(relative)) { - pos.x = this.layout.getGroupLeftX(this.node, relative); - pos.y = this.layout.getGroupHeader(this.node).y; - } else { - pos.x = relative.x; - pos.y = this.layout.getGroupBottomY(this.node, relative); - } - } - this.node.setPosition(pos); - } - /** 从上到下 从左到右 排序方向 设置自己到相对node的头部 */ - private headerToFooterRelativeToHeader(relative: console.Node) { - let pos = this.node.getPosition(); - // 从上到下 - if (this.layout.vertical) { - if (this.layout.isGroupHeader(relative)) { - pos.x = this.layout.getGroupFooter(this.node).x; - pos.y = this.layout.getGroupTopY(this.node, relative); - } else { - pos.x = this.layout.getGroupLeftX(this.node, relative); - pos.y = relative.y; - } - if (this.node["index"] == 0) { - pos.x = this.layout.getGroupHeader(this.node).x; - } - } else { - // 从左到右 - if (this.layout.isGroupHeader(relative)) { - pos.x = this.layout.getGroupLeftX(this.node, relative); - pos.y = this.layout.getGroupFooter(this.node).y; - } else { - pos.x = relative.x; - pos.y = this.layout.getGroupTopY(this.node, relative); - } - if (this.node["index"] == 0) { - pos.y = this.layout.getGroupHeader(this.node).y; - } - } - this.node.setPosition(pos); - } - /** 从上到下 从左到右 排序方向 设置自己到相对node尾部 */ - private headerToFooterRelativeToFooter(relative: console.Node) { - let pos = this.node.getPosition(); - // 从上到下 - if (this.layout.vertical) { - if (this.layout.isGroupFooter(relative)) { - pos.x = this.layout.getGroupHeader(this.node).x; - pos.y = this.layout.getGroupBottomY(this.node, relative); - } else { - pos.x = this.layout.getGroupRightX(this.node, relative); - pos.y = relative.y; - } - } else { - // 从左到右 - if (this.layout.isGroupFooter(relative)) { - pos.x = this.layout.getGroupRightX(this.node, relative); - pos.y = this.layout.getGroupHeader(this.node).y; - } else { - pos.x = relative.x; - pos.y = this.layout.getGroupBottomY(this.node, relative); - } - } - this.node.setPosition(pos); - } -} diff --git a/src/script/Engine/Utils/ScrollView/UISuperItem.ts.meta b/src/script/Engine/Utils/ScrollView/UISuperItem.ts.meta deleted file mode 100644 index 55d2f86..0000000 --- a/src/script/Engine/Utils/ScrollView/UISuperItem.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "486070ed-7155-4fa6-8cc4-81695cc3b28b", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/ScrollView/UISuperLayout.ts b/src/script/Engine/Utils/ScrollView/UISuperLayout.ts deleted file mode 100644 index 360026e..0000000 --- a/src/script/Engine/Utils/ScrollView/UISuperLayout.ts +++ /dev/null @@ -1,720 +0,0 @@ -import UISpuerItem from "./UISuperItem"; -import UISpuerScrollView from "./UISuperScrollView"; -const { ccclass, property, menu } = console._decorator; -const EPSILON: number = 1e-4; -export const UIChangeBrotherEvnet = "UIChangeBrotherEvnet"; -export enum UISuperAxis { - HORIZONTAL = 0, - VERTICAL = 1 -} -export enum UISuperDirection { - HEADER_TO_FOOTER = 0, - FOOTER_TO_HEADER = 1, -} -@ccclass -@menu("Plug-in/ScrollView/UISuperLayout") -export default class UISuperLayout extends console.Component { - @property({ type: console.Enum(UISuperAxis), displayName: "排列方向" }) - public StartAxis: UISuperAxis = UISuperAxis.VERTICAL; - @property({ type: console.Enum(UISuperDirection), displayName: "排列子节点的方向" }) direction: UISuperDirection = UISuperDirection.HEADER_TO_FOOTER; - @property({ displayName: "上边距" }) paddingTop: number = 0; - @property({ displayName: "下边距" }) paddingBottom: number = 0; - @property({ displayName: "左边距" }) paddingLeft: number = 0; - @property({ displayName: "右边距" }) paddingRight: number = 0; - @property({ displayName: "间隔" }) spacing: console.Vec2 = console.Vec2.ZERO; - @property({ displayName: "每组item个数", tooltip: "单行的列数 或 单列的行数" }) column: number = 2; - @property({ displayName: "item创建倍率", tooltip: "相对于view的尺寸 默认2倍" }) multiple: number = 2; - @property({ type: console.Prefab, displayName: "item Prefab" }) prefab: console.Prefab = null; - @property({ displayName: "头部滑动循环" }) headerLoop: boolean = false; - @property({ displayName: "尾部滑动循环" }) footerLoop: boolean = false; - @property affectedByScale: boolean = true; - @property(console.Component.EventHandler) refreshItemEvents: console.Component.EventHandler[] = []; - private _gener: Generator; - private _isinited: boolean = false; - private _maxPrefabTotal: number = 0; - private _children: console.Node[] = []; // 和this.node.children 保持同步 - private _viewSize: console.Size; - private _scrollView: UISpuerScrollView = null; - private _maxItemTotal: number = 0; - private _prevLayoutPosition: console.Vec2 = console.Vec2.ZERO; - /** 当前的滚动是否是由 scrollTo 方法执行的 和touch滑动做个区分 */ - public scrollToHeaderOrFooter: boolean = false; - /** 根据上一次和本次的坐标变化计算滑动方向 */ - private get layoutDirection(): console.Vec2 { - let pos = console.Vec2.ZERO; - if (this.vertical) { - pos.y = this.node.y - this._prevLayoutPosition.y; - } else { - pos.x = this.node.x - this._prevLayoutPosition.x; - } - this._prevLayoutPosition = this.node.getPosition(); - return pos; - } - /** 是否是向下滑动 */ - private get isScrollToFooter(): boolean { - if (this.vertical) { - return this.layoutDirection.y < 0; - } else { - return this.layoutDirection.x > 0; - } - } - /** 自己维护的子节点数组 和this.node.children 保持同步 */ - public get children() { return this._children; } - /** 最大数据总数 */ - public get maxItemTotal() { return this._maxItemTotal; } - /** 当前被创建的item总数 */ - public get maxPrefabTotal() { return this._maxPrefabTotal; } - /** scrollView.view尺寸 */ - public get viewSize(): console.Size { - return this.scrollView.view.getContentSize(); - } - /** 是否是垂直模式 */ - public get vertical(): boolean { - return this.StartAxis == UISuperAxis.VERTICAL; - } - /** 是否是水平模式 */ - public get horizontal(): boolean { - return this.StartAxis == UISuperAxis.HORIZONTAL; - } - /** 是否是正序排列 */ - public get headerToFooter(): boolean { - return this.direction == UISuperDirection.HEADER_TO_FOOTER; - } - /** 是否是倒序排列 */ - public get footerToHeader(): boolean { - return this.direction == UISuperDirection.FOOTER_TO_HEADER; - } - /** 水平间隔总宽度 (Grid 模式返回多个间隔总宽度) */ - public get spacingWidth() { - return this.spacing.x * (this.column - 1); - } - /** 水平间隔总高度 (Grid 模式返回多个间隔总高度) */ - public get spacingHeight() { - return this.spacing.y * (this.column - 1); - } - /** 可容纳item的真实宽度 */ - public get accommodWidth() { - return this.viewSize.width - this.paddingLeft - this.paddingRight; - } - /** 可容纳item的真实高度 */ - public get accommodHeight() { - return this.viewSize.height - this.paddingTop - this.paddingBottom; - } - public get scrollView(): UISpuerScrollView { - if (!this._scrollView) { this._scrollView = this.node.parent.parent.getComponent(UISpuerScrollView); } - return this._scrollView; - } - /** 当前头部的item */ - public get header(): console.Node { - return this._children[0]; - } - /** 当前尾部的item */ - public get footer(): console.Node { - return this._children[this._children.length - 1]; - } - /** 真实的上边距 */ - public get topBoundary() { - if (this.headerToFooter) { - return this.headerBoundaryY + this.paddingTop; - } else { - return this.footerBoundaryY + this.paddingTop; - } - } - /** 真实的下边距 */ - public get bottomBoundary() { - if (this.headerToFooter) { - return this.footerBoundaryY - this.paddingBottom; - } else { - return this.headerBoundaryY - this.paddingBottom; - } - } - /** 真实的左边距 */ - public get leftBoundary() { - if (this.headerToFooter) { - return this.headerBoundaryX - this.paddingLeft; - } else { - return this.footerBoundaryX - this.paddingLeft; - } - } - /** 真实的右边距 */ - public get rightBoundary() { - if (this.headerToFooter) { - return this.footerBoundaryX + this.paddingRight; - } else { - return this.headerBoundaryX + this.paddingRight; - } - } - /** 头部item的世界坐标边框 类似 xMin、xMax */ - public get headerBoundaryX() { - if (this.headerToFooter) { - return this.node.x + this.header.x - this.header.anchorX * this.getScaleWidth(this.header); - } else { - return this.node.x + this.header.x + (1 - this.header.anchorX) * this.getScaleWidth(this.header); - } - } - /** 头部item的世界坐标边框 类似 yMin、yMax */ - public get headerBoundaryY() { - if (this.headerToFooter) { - return this.node.y + this.header.y + (1 - this.header.anchorY) * this.getScaleHeight(this.header); - } else { - return this.node.y + this.header.y - this.header.anchorY * this.getScaleHeight(this.header); - } - } - /** 尾部item的世界坐标边框 类似 xMin、xMax */ - public get footerBoundaryX() { - if (this.headerToFooter) { - return this.node.x + this.footer.x + (1 - this.footer.anchorX) * this.getScaleWidth(this.footer); - } else { - return this.node.x + this.footer.x - this.footer.anchorX * this.getScaleWidth(this.footer); - } - } - /** 尾部item的世界坐标边框 类似 yMin、yMax */ - public get footerBoundaryY() { - if (this.headerToFooter) { - return this.node.y + this.footer.y - this.footer.anchorY * this.getScaleHeight(this.footer); - } else { - return this.node.y + this.footer.y + (1 - this.footer.anchorY) * this.getScaleHeight(this.footer); - } - } - public get isNormalSize(): boolean { - return this.node.getContentSize().equals(this.viewSize); - } - - /** 重写 this.node.getContentSize 动态计算头尾item 返回虚拟的尺寸 非content设置的尺寸 */ - public getContentSize() { - let size = this.getReallySize(); - let viewSize = this.scrollView.view.getContentSize(); - // 列表为空时 直接返回 scrollView.view 的尺寸 - if (size.height < viewSize.height) { - size.height = viewSize.height; - } - if (size.width < viewSize.width) { - size.width = viewSize.width; - } - return size; - } - /** 返回 header到 footer 之间的整体尺寸 */ - public getReallySize() { - if (this.node.childrenCount == 0) { return this.viewSize; } - let size = console.Size.ZERO; - if (this.headerToFooter) { // 根据header和footer计算出真实的content尺寸 - size.width = this.footerBoundaryX + -this.headerBoundaryX + this.paddingLeft + this.paddingRight; - size.height = this.headerBoundaryY + -this.footerBoundaryY + this.paddingTop + this.paddingBottom; - } else { - size.width = this.headerBoundaryX + -this.footerBoundaryX + this.paddingLeft + this.paddingRight; - size.height = this.footerBoundaryY + -this.headerBoundaryY + this.paddingTop + this.paddingBottom; - } - return size; - } - /** 重置scrollview */ - public resetScrollView() { - this.scrollView.reset(); - } - /** 获取缩放系数 */ - public getUsedScaleValue(value: number) { - return this.affectedByScale ? Math.abs(value) : 1; - } - /** 设置最大item数量 */ - public async CreateItem(...iniData: any[]) { - this.scrollView.stopAutoScroll(); - this.scrollView.release(); // 释放(功能用于上拉加载 下拉刷新) - this.initlized(); // 初始化 - await this.asyncCreateItem(iniData); // 分帧创建item - let dataOffset = this.getDataOffset(iniData[0]); // 获取数据偏移量(根据value相对于 _maxItemTotal 计算增加、减少的数量) - let reallyOffset = this.getReallyOffset(dataOffset); // 获取真实的数据偏移(Grid模式 功能用于判断是否需要偏移header来将下方填满) - this.refreshItems(iniData[0], reallyOffset); // 通过已有的item['index'] 加上数据偏移 来是刷新显示 - this._maxItemTotal = iniData[0]; // 记录当前总数 - } - /** 获取兄弟节点 */ - public getBrotherNode(node: console.Node) { - let index = this.getSiblingIndex(node) - 1; // 此 getSiblingIndex 非 this.node.getSiblingIndex - return this._children[index]; - } - /** 是否是一组item中第一个(垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public isGroupHeader(node: console.Node): boolean { - let xOry = this.getGroupHeader(node); - let pos = this.vertical ? console.v2(xOry.x, 0) : console.v2(0, xOry.y); - let self = this.vertical ? console.v2(node.x, 0) : console.v2(0, node.y); - return self.fuzzyEquals(pos, EPSILON); - } - /** 是否是一组item中最后一个(垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public isGroupFooter(node: console.Node): boolean { - let xOry = this.getGroupFooter(node); - let pos = this.vertical ? console.v2(xOry.x, 0) : console.v2(0, xOry.y); - let self = this.vertical ? console.v2(node.x, 0) : console.v2(0, node.y); - return self.fuzzyEquals(pos, EPSILON); - } - /** 获取一组item中起始位置 (垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public getGroupHeader(node: console.Node): console.Vec2 { - let pos = console.Vec2.ZERO; - if (!node) { return pos; } - if (this.vertical) { - if (this.headerToFooter) { - pos.x = node.anchorX * this.getScaleWidth(node) + (this.paddingLeft * node.scaleX) - (this.node.anchorX * this.viewSize.width * node.scaleX); - pos.y = (1 - node.anchorY) * -this.getScaleHeight(node) - this.paddingTop + (1 - this.node.anchorY) * this.viewSize.height; - } else { - pos.x = node.anchorX * this.getScaleWidth(node) + this.paddingLeft - this.node.anchorX * this.viewSize.width; - pos.y = node.anchorY * this.getScaleHeight(node) + this.paddingBottom - this.node.anchorY * this.viewSize.height; - } - } else { - if (this.headerToFooter) { - pos.x = node.anchorX * this.getScaleWidth(node) + this.paddingLeft - this.node.anchorX * this.viewSize.width; - pos.y = (1 - node.anchorY) * -node.height - this.paddingTop + (1 - this.node.anchorY) * this.viewSize.height; - } else { - pos.x = this.accommodWidth * this.node.anchorX - this.getScaleWidth(node) * (1 - node.anchorX); - pos.y = (1 - node.anchorY) * -node.height - this.paddingTop + (1 - this.node.anchorY) * this.viewSize.height; - } - } - return pos; - } - /** 获取一组item中结束位置 (垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public getGroupFooter(node: console.Node): console.Vec2 { - let pos = console.Vec2.ZERO; - if (!node) { return pos; } - if (this.vertical) { - pos.x = (this.accommodWidth + this.paddingLeft) * this.node.anchorX - (this.getScaleWidth(node) * (1 - node.anchorX) + this.node.anchorX * this.paddingRight); - pos.y = node.y; - } else { - pos.x = node.x; - pos.y = -((this.accommodHeight + this.paddingTop) * this.node.anchorY - this.getScaleHeight(node) * node.anchorY) + (1 - node.anchorY) * this.paddingBottom; - } - return pos; - } - /** 获取一组item中 node 相对 relative 右偏移量 (垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public getGroupRightX(node: console.Node, relative: console.Node) { - if (!node || !relative) { return this.getGroupHeader(node).x; } - let prevWidth = relative.x + this.getScaleWidth(relative) * (1 - relative.anchorX); - let selfWidth = this.getScaleWidth(node) * node.anchorX; - return prevWidth + selfWidth + this.spacing.x; - } - /** 获取一组item中 node 相对 relative 左偏移量 (垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public getGroupLeftX(node: console.Node, relative: console.Node) { - if (!node || !relative) { return this.getGroupFooter(node).x; } - let prevWidth = relative.x - this.getScaleWidth(relative) * relative.anchorX; - let selfWidth = this.getScaleWidth(node) * (1 - node.anchorX); - return prevWidth - selfWidth - this.spacing.x; - } - /** 获取一组item中 node 相对 relative 下偏移量 (垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public getGroupBottomY(node: console.Node, relative: console.Node) { - let prevHeight = relative.y - this.getScaleHeight(relative) * relative.anchorY; - let selfHeight = this.getScaleHeight(node) * (1 - node.anchorY); - return prevHeight - selfHeight - this.spacing.y; - } - /** 获取一组item中 node 相对 relative 上偏移量 (垂直滑动中 一组item 就是单行的所有列 、水平滑动中 一组item 就是单列中所有行)*/ - public getGroupTopY(node: console.Node, relative: console.Node) { - let prevHeight = relative.y + this.getScaleHeight(relative) * (1 - relative.anchorY); - let selfHeight = this.getScaleHeight(node) * node.anchorY; - return prevHeight + selfHeight + this.spacing.y; - } - /** 判断给定的 node 乘以 multiple 倍数后 是否超出了头部边框 ( multiple = 1 就是一个node的尺寸 默认1.5倍)*/ - public isOutOfBoundaryHeader(node: console.Node, multiple: number = 1.5) { - let width = node.width * this.getUsedScaleValue(node.scaleX) * multiple; - let height = -node.height * this.getUsedScaleValue(node.scaleY) * multiple; - let offset = this.scrollView.getHowMuchOutOfBoundary(console.v2(width, height)); - return offset; - } - /** 判断给定的 node 乘以 multiple 倍数后 是否超出了尾部部边框 ( multiple = 1 就是一个node的尺寸 默认1.5倍)*/ - public isOutOfBoundaryFooter(node: console.Node, multiple: number = 1.5) { - let width = -node.width * this.getUsedScaleValue(node.scaleX) * multiple; - let height = node.height * this.getUsedScaleValue(node.scaleY) * multiple; - let offset = this.scrollView.getHowMuchOutOfBoundary(console.v2(width, height)); - return offset; - } - /** 滚动到头部 (根据 排列方向、排列子节点的方向)来调用 scrollView.scrollTo... 方法 */ - public scrollToHeader(timeInSecond?: number, attenuated?: boolean) { - this.scrollToHeaderOrFooter = timeInSecond > 0; - this.scrollView.stopAutoScroll(); - this.resetToHeader(); - if (this.headerToFooter) { - if (this.vertical) { - this.scrollView.scrollToTop(timeInSecond, attenuated); - } else { - this.scrollView.scrollToLeft(timeInSecond, attenuated); - } - } else { - if (this.vertical) { - this.scrollView.scrollToBottom(timeInSecond, attenuated); - } else { - this.scrollView.scrollToRight(timeInSecond, attenuated); - } - } - } - /** 滚动到尾部(根据 排列方向、排列子节点的方向)来调用 scrollView.scrollTo... 方法 */ - public scrollToFooter(timeInSecond?: number, attenuated?: boolean) { - this.scrollToHeaderOrFooter = timeInSecond > 0; - this.scrollView.stopAutoScroll(); - this.resetToFooter(); - if (this.headerToFooter) { - if (this.vertical) { - this.scrollView.scrollToBottom(timeInSecond, attenuated); - } else { - this.scrollView.scrollToRight(timeInSecond, attenuated); - } - } else { - if (this.vertical) { - this.scrollView.scrollToTop(timeInSecond, attenuated); - } else { - this.scrollView.scrollToLeft(timeInSecond, attenuated); - } - } - } - /** 通知给定的node刷新数据 */ - public notifyRefreshItem(target: console.Node) { - console.Component.EventHandler.emitEvents(this.refreshItemEvents, target, target["index"]); - } - /** 获取节点索引 */ - public getSiblingIndex(node: console.Node) { - return this._children.indexOf(node); - } - /** 自定义索引方法 这里不是通过实时修改节点索引的方法,只是模拟类似的功能,实际上并没有真正改变节点的实际顺序(优化项) */ - public setSiblingIndex(node: console.Node, index: number) { - // 此方法时参考引擎原setSiblingIndex方法 去掉了修改节点索引位置的调用(item本身的zIndex没有任何变化) - index = index !== -1 ? index : this._children.length - 1; - var oldIndex = this._children.indexOf(node); - if (index !== oldIndex) { - this._children.splice(oldIndex, 1); - if (index < this._children.length) { - this._children.splice(index, 0, node); - } else { - this._children.push(node); - } - /** - * 这里区别于原方法 原方法是改变node节点顺序后发送console.Node.EventType.SIBLING_ORDER_CHANGED通知 这里不需要修改节点顺序 - * 这里发送一个自定义事件 模拟 SIBLING_ORDER_CHANGED 通知 - */ - this.node.emit(UIChangeBrotherEvnet); - } - } - onLoad() { - this.initlized(); - } - /** 初始化 */ - private initlized() { - if (this._isinited) { return; } - this.node.anchorX = 0.5; // 固定content的锚点为中心 - this.node.anchorY = 0.5; - this.node.setContentSize(this.viewSize); // 将content的尺寸设置与view相同 (功能用于空列表时也可以下拉刷新和加载) - // 重写 this.node.getContentSize 方法 因为content的真实尺寸不会随着item的数量变化 - this.node.getContentSize = this.getContentSize.bind(this); - this.node.setPosition(console.Vec2.ZERO); - this.column = this.column < 1 ? 1 : this.column; // 一组item的数量 最少是1 也就是普通的水平/垂直 大于1就是Grid模式 - // 监听content位置变化 刷新header footer节点的相对位置 - this.node.on(console.Node.EventType.POSITION_CHANGED, this.onChangePosition, this); - this.scrollView.view.on(console.Node.EventType.SIZE_CHANGED, this.resetItemSize, this); - this._isinited = true; - } - onDestroy() { - this.node.off(console.Node.EventType.POSITION_CHANGED, this.onChangePosition, this); - this.scrollView.view.off(console.Node.EventType.SIZE_CHANGED, this.resetItemSize, this); - } - private onChangePosition() { - let flag = this.isScrollToFooter; // this.isScrollToFooter = true 向下滑动 false 向上滑动 - if (this.headerToFooter) { - flag ? this.footerToHeaderWatchChilds(flag) : this.headerToFooterWatchChilds(flag); // 倒序刷新 - } else { - flag ? this.headerToFooterWatchChilds(flag) : this.footerToHeaderWatchChilds(flag); // 正序刷新 - } - // 当item 由多到少 并且 当content的位置被重置到初始状态时 重新设置头部的item归位 - if (this.vertical && 0 == this.node.y || this.horizontal && 0 == this.node.x) { - this.header.setPosition(this.getGroupHeader(this.header)); - } - } - public resetItemSize() { - // 重新设置原始尺寸 - for (let i = 0; i < this.children.length; i++) { - this.children[i]["saveOriginSize"](); - } - // 改变头部位置 - let pos = this.getGroupHeader(this.header); - if (this.vertical) { - this.header.x = pos.x; - } else { - this.header.y = pos.y; - } - // 通知改变坐标事件 - for (let i = 0; i < this.children.length; i++) { - this.children[i].emit(console.Node.EventType.POSITION_CHANGED); - } - } - /** 获取缩放宽度 */ - private getScaleWidth(node: console.Node): number { - return node.width * this.getUsedScaleValue(node.scaleX); - } - /** 获取缩放高度 */ - private getScaleHeight(node: console.Node): number { - return node.height * this.getUsedScaleValue(node.scaleY); - } - /** 简单的浅拷贝 */ - private getTempChildren() { - let list = []; - for (let i = 0; i < this._children.length; i++) { - const child = this._children[i]; - list.push(child); - } - return list; - } - /** 正序更新item */ - private headerToFooterWatchChilds(flag) { - let children = this.getTempChildren(); - for (let i = 0; i < children.length; i++) { - const child = children[i]; - child["watchSelf"](flag); - } - } - /** 倒序更新item */ - private footerToHeaderWatchChilds(flag) { - let children = this.getTempChildren(); - for (let i = children.length - 1; i >= 0; i--) { - const child = children[i]; - child["watchSelf"](flag); - } - } - /** 当数据增加、减少时 获取数据偏移 */ - private getDataOffset(value: number) { - // 返回删除数据偏移 (比如当前最大数据值=10,新数据=9 返回-1) - if (this.footer && this.footer["index"] + 1 >= value) { - let offset = this.footer["index"] + 1 - value; - return offset == 0 ? 0 : -offset; - } - // 返回增加数据偏移 - if (this._maxItemTotal == 0 || value < this._maxItemTotal || this._maxItemTotal < this._maxPrefabTotal) { return 0; } // 比如当前最多允许创建10个item 当前显示5个 返回0 - if (this.isGroupFooter(this.footer)) { return 0; } // Grid模式 如果尾部的位置是在一组item中末尾的位置时 返回 0 - return value - this._maxItemTotal; - } - /** - * 当数据增加、减少时 获取节点偏移量 - * 当前数据是这样的 增加1个 增加2个 - * 0,1,2,3 1,2,3 2,3 - * 4,5,6 4,5,6,7 4,5,6,7 - * 8 - */ - private getReallyOffset(dataOffset: number) { - if (!this.header) { return 0; } - if (dataOffset > 0) { // 代表增加item 表格模式下 通过偏移头部来让下方填满 填满后停止偏移 - for (let i = 0; i < dataOffset; i++) { - if (this.isGroupFooter(this.footer)) { return i; } // 返回真实的偏移量 - // 此时如果header 已经是一组item中最后一个时 向下位移 并 设置到一组item的起始位置 - let pos = this.header.getPosition(); - if (this.vertical) { // 垂直滑动时 - if (this.isGroupFooter(this.header)) { // 当列表中第一个item正在一组item中末尾位置时 - if (this.headerToFooter) { - pos.y = this.getGroupBottomY(this.header, this.header); // 正序排列时 Y轴向下偏移(垂直排列时 一组item 头在左尾在右) - } else { - pos.y = this.getGroupTopY(this.header, this.header); // 倒序排列时 Y轴向上偏移(垂直排列时 一组item 头在左尾在右) - } - pos.x = this.getGroupHeader(this.header).x; // X轴向头部偏移 - } else { // 第一个item没有在一组item中末尾的位置 只将第一个item向右偏移 (只偏移X轴) - pos.x = this.getGroupRightX(this.header, this.header); // X轴向右偏移 - } - } else { // 水平滑动时 - if (this.isGroupFooter(this.header)) { // 当列表中第一个item正在一组item中末尾位置时 - if (this.headerToFooter) { - pos.x = this.getGroupRightX(this.header, this.header); // 正序排列时 X轴向右偏移(水平排列时 一组item 头在上尾在下) - } else { - pos.x = this.getGroupLeftX(this.header, this.header); // 倒序排列时 X轴向左偏移(水平排列时 一组item 头在上尾在下) - } - pos.y = this.getGroupHeader(this.header).y; // Y轴向头部偏移 - } else { // 第一个item没有在一组item中末尾的位置 只将第一个item向下偏移 (只偏移Y轴) - pos.y = this.getGroupBottomY(this.header, this.header); // Y轴向下偏移 - } - } - this.header.setPosition(pos); - } - return dataOffset; - } - // 代表减少了item 计算偏移量 offset<0 【注意!这里的逻辑和上面正好相反】 - for (let i = 0; i < Math.abs(dataOffset); i++) { - let pos = console.Vec2.ZERO; - if (this.vertical) { - if (this.isGroupHeader(this.header)) { - pos.x = this.getGroupFooter(this.header).x; - if (this.headerToFooter) { - pos.y = this.getGroupTopY(this.header, this.header); - } else { - pos.y = this.getGroupBottomY(this.header, this.header); - } - } else { - pos.x = this.getGroupLeftX(this.header, this.header); - pos.y = this.header.y; - } - } else { - if (this.isGroupHeader(this.header)) { - pos.y = this.getGroupFooter(this.header).y; - if (this.headerToFooter) { - pos.x = this.getGroupLeftX(this.header, this.header); - } else { - pos.x = this.getGroupRightX(this.header, this.header); - } - } else { - pos.y = this.getGroupTopY(this.header, this.header); - pos.x = this.header.x; - } - } - this.header.setPosition(pos); - } - this.scrollView.calculateBoundary(); - return dataOffset; - } - /** 刷新所有item数据 根据当前item的 index 刷新 */ - private refreshItems(value: number, offset: number = 0) { - if (!this.header) { return; } - let startIndex = this.header["index"] - 1 + offset; // 获取头部item持有的index 加上 数据偏移来计算起始index - for (let i = 0; i < this._children.length; i++) { - const child = this._children[i]; - startIndex++; - // 这里的判断用于无限循环滚动的逻辑 如果索引大于数据总数 索引归零 - if (startIndex > value - 1) { - startIndex = 0; - } else if (startIndex < 0) { // 索引小于0 索引定位到数据尾部 保持首尾相连 - startIndex = value - 1; - } - child["index"] = startIndex; // 设置当前索引 - this.notifyRefreshItem(child); - } - } - /** 从头部到尾部重置数据 */ - private resetToHeader() { - for (let i = 0; i < this._children.length; i++) { - const child = this._children[i]; - child["index"] = i; - this.notifyRefreshItem(child); - } - if (!this.headerLoop && !this.footerLoop) { - this.header?.setPosition(this.getGroupHeader(this.header)); - } else if (!this.scrollToHeaderOrFooter) { - this.header?.setPosition(this.getGroupHeader(this.header)); - } - } - /** 从尾部到头部重置数据 */ - private resetToFooter() { - let index = this._maxItemTotal; - for (let i = this._children.length - 1; i >= 0; i--) { - var child = this._children[i]; - child["index"] = --index; - this.notifyRefreshItem(child); - } - } - /** 删除多余的item */ - private removeChilds(value: number) { - // 有多余的item 需要删除 - let length = this.node.childrenCount - value; - // 删除掉多余的item - for (let i = 0; i < length; i++) { - var child = this.footer; - this.remChild(child); - child.destroy(); - this.node.removeChild(child); - } - if (!this.header) { return; } - // 将头部节点的位置重置到一组item的第一个位置 - let pos = this.getGroupHeader(this.header); - if (this.vertical) { - this.header.x = pos.x; - } else { - this.header.y = pos.y; - } - } - /** 分帧创建item */ - private async asyncCreateItem(...iniData: any[]) { - let self = this; - let data: any[] = iniData[0]; - this._gener?.return("");// 取消上一次的分帧任务(如果任务正在执行) - // 有多余的item 需要删除 不处理 - if (this.node.childrenCount > data[0]) { return this.removeChilds(data[0]); } - // 已经固定item总数 不处理 - if (this._maxPrefabTotal > 0 && this._maxPrefabTotal == this.node.childrenCount) { return; } - // 开始分帧创建item - let total = data[0] - this.node.childrenCount; // 计算当前应该创建的总数 - this._gener = this.getGeneratorLength(total, () => { - // 获取或添加 UISuperItem - // let script = UIPanel.CreateUI(this.prefab, this.node); - // let child = script.node; - // CoroutineV2.Single(script.Show()).Start(); - // child["index"] = this.node.childrenCount - 1; - let child = console.instantiate(self.prefab); - let script = child.getComponent(data[1]); - child["index"] = self.node.childrenCount; - self.addChild(child); - // let item = UIPanel.CreateUI(this.prefab, this.node, data[2]); - // let child = item.node; - let spuerItem = child.getComponent(UISpuerItem) || child.addComponent(UISpuerItem); - self.node.addChild(child); - spuerItem.Init(self, script); - // item在首次创建时立即刷新 避免显示item初始状态 - self.notifyRefreshItem(child); - // 如果创建的是第一个item 设置他的起始位置 之后的item会自动相对于他来设置自己 我们只需要确定第一个位置就行了 - if (self.node.childrenCount == 1) { - let pos = self.getGroupHeader(self.header); // 获取一组item中头部位置 - self.header.setPosition(pos); - /** - * 利用console.ScrollView的方法来设置content的起始位置 由于content在初始化的时候固定了锚点都为0.5 所以这里必然是坐标0 - * 如果你没有其他需求确定用0.5锚点的话 这里可以自己设置为console.Vec2.ZERO 节省不必要的计算(实际上计算量可忽略不计) - */ - self.scrollView.calculateBoundary(); - } - let selfHorW, viewHorW; - if (self.vertical) { - selfHorW = self.getReallySize().height; - viewHorW = self.viewSize.height; - } else { - selfHorW = self.getReallySize().width; - viewHorW = self.viewSize.width; - } - /** - * 根据排列方向 来判断对比宽度还是高度 - * 这里使用参数this.multiple来判断是否需要继续创建 默认为2倍 比如view可视尺寸为800 2倍就是1600 - * 根据之前所创建的所有item的尺寸计算是否满足这个尺寸 如果满足则不再继续创建 - * 由于是分帧加载 所以下一次创建会等这一次的返回结果 返回false 则终止分帧任务 - */ - if (selfHorW >= viewHorW * self.multiple && self.isGroupFooter(self.footer)) { - self._maxPrefabTotal = self.node.childrenCount; // 固定item数量 不在继续创建 - return false; - } - return true; - }); - await this.exeGenerator(this._gener, 10); // 执行分帧任务 1帧创建10个 - } - /** 同步添加本地变量 children 并发送 UIChangeBrotherEvnet 通知*/ - private addChild(node: console.Node) { - this._children.push(node); - this.node.emit(UIChangeBrotherEvnet); - } - /** 同步移除本地变量 children 并发送 UIChangeBrotherEvnet 通知 */ - private remChild(node: console.Node) { - let index = this._children.indexOf(node); - if (index == -1) { return; } - this._children.splice(index, 1); - this.node.emit(UIChangeBrotherEvnet); - } - /** 分帧加载 */ - private * getGeneratorLength(length: number, callback: Function, ...params: any): Generator { - for (let i = 0; i < length; i++) { - let result = callback(i, ...params); - if (result) { - yield; - } else { - return; - } - } - } - /** 分帧执行 */ - private exeGenerator(generator: Generator, duration: number) { - return new Promise((resolve, reject) => { - let gen = generator; - let execute = () => { - let startTime = new Date().getTime(); - for (let iter = gen.next(); ; iter = gen.next()) { - if (iter == null || iter.done) { - resolve(null); - return; - } - if (new Date().getTime() - startTime > duration) { - setTimeout(() => execute(), console.director.getDeltaTime() * 1000); - return; - } - } - }; - execute(); - }); - } -} diff --git a/src/script/Engine/Utils/ScrollView/UISuperLayout.ts.meta b/src/script/Engine/Utils/ScrollView/UISuperLayout.ts.meta deleted file mode 100644 index 821baf9..0000000 --- a/src/script/Engine/Utils/ScrollView/UISuperLayout.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "67f1a0e4-877e-4ad0-bc1b-e1175c620ca1", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/Utils/ScrollView/UISuperScrollView.ts b/src/script/Engine/Utils/ScrollView/UISuperScrollView.ts deleted file mode 100644 index 566f836..0000000 --- a/src/script/Engine/Utils/ScrollView/UISuperScrollView.ts +++ /dev/null @@ -1,284 +0,0 @@ -/* - * @Author: steveJobs - * @Email: icipiqkm@gmail.com - * @Date: 2020-11-19 01:15:04 - * @Last Modified by: steveJobs - * @Last Modified time: 2020-12-04 14:35:43 - * @Description: Description - */ -import UISuperLayout from "./UISuperLayout"; -const { ccclass, property, menu } = console._decorator; -const EPSILON = 1e-4; -export interface UISuperHeaderAndFooterEvent { - /** 执行动作 true:满足触发条件 */ - action: boolean; - /** 根据参数headerOutOffset或footerOutOffset 来计算的进度值 */ - progress: number; - /** 当前进度状态 - * touch=触摸中 正在触摸滑动中 - * wait=等待中 已经满足了触发的更新动作的条件 - * lock=锁定中 当前正在执行刷新或加载 - * release=释放中 - */ - progressStage: "touch" | "wait" | "lock" | "release"; -} -@ccclass -@menu("Plug-in/ScrollView/UISpuerScrollView") -export default class UISpuerScrollView extends console.ScrollView { - @property({ - displayName: "顶部偏移量", - tooltip: "下拉时超过此偏移会发送下拉事件" - }) headerOutOffset: number = 200; - @property({ displayName: "满足触发Header的倍数" }) headerMultiple: number = 2; - @property({ - displayName: "底部偏移量", - tooltip: "上拉时超过此偏移会发送上拉事件" - }) footerOutOffset: number = 200; - @property({ displayName: "满足触发Footer的倍数" }) footerMultiple: number = 2; - @property({ - type: console.Component.EventHandler, - displayName: "下拉事件" - }) pullDownEvents: console.Component.EventHandler[] = []; - @property({ - type: console.Component.EventHandler, - displayName: "上拉事件" - }) pullUpEvents: console.Component.EventHandler[] = []; - public get view(): console.Node { return this["_view"]; } - public set autoScrolling(value: boolean) { this["_autoScrolling"] = value; } - public get autoScrolling() { return this["_autoScrolling"]; } - private isMoveHeader: boolean = false; - private isMoveFooter: boolean = false; - private isLockHeader: boolean = false; - private isLockFooter: boolean = false; - private headerProgress: number = 0; - private footerProgress: number = 0; - private _layout: UISuperLayout = null; - private get layout(): UISuperLayout { - if (this._layout == null) { this._layout = this.content.getComponent(UISuperLayout) } - return this._layout; - } - /** 当前头部的item是否真的是数据的开头 也就是0 */ - private get isHeader() { - if (this.layout.headerToFooter) { - if (this.layout?.header) { - return this.layout?.header["index"] == 0; - } - } else { - if (this.layout?.footer) { - return this.layout?.footer["index"] == this.layout.maxItemTotal - 1; - } - } - return true; - } - /** 当前尾部的item是否真的是数据的结尾 */ - private get isFooter() { - if (this.layout.headerToFooter) { - if (this.layout?.footer) { - return this.layout.footer["index"] == this.layout.maxItemTotal - 1; - } - } else { - if (this.layout?.header) { - return this.layout?.header["index"] == 0; - } - } - return true; - } - /** 是否需要计算?如果上拉/下拉事件没有监听者则不需要相关的计算 */ - public get isCalculPull() { - return this.pullDownEvents.length > 0 || this.pullUpEvents.length > 0; - } - public calculateBoundary() { - this["_calculateBoundary"](); - - } - public getHowMuchOutOfBoundary(offset?: console.Vec2) { - return this["_getHowMuchOutOfBoundary"](offset); - } - onLoad() { - this.node.on(console.Node.EventType.SIZE_CHANGED, this.onChangeSize, this); - } - onDestroy() { - this.node.off(console.Node.EventType.SIZE_CHANGED, this.onChangeSize, this); - } - private onChangeSize() { - let widget = this.view.getComponent(console.Widget); - if (!widget) { return } - widget.updateAlignment(); - } - /** 释放 功能用于上拉加载下拉刷新 解锁头尾固定的尺寸 */ - public release() { - this.isMoveHeader = false; - this.isMoveFooter = false; - if (this.isLockHeader || this.isLockFooter) { - let outOfBoundary = this.getHowMuchOutOfBoundary(); - let offset = this.vertical ? outOfBoundary.y : -outOfBoundary.x; - let autoScroll = true; - if (offset == 0 || this.isLockHeader && offset < 0 || this.isLockFooter && offset > 0) { - this.clearProgress(); - autoScroll = false; - } - this.isLockHeader = false; - this.isLockFooter = false; - if (autoScroll) { - this["_outOfBoundaryAmountDirty"] = true; - this["_processInertiaScroll"](); - } - } else { - this.clearProgress(); - } - } - - /**重置列表 当列表滑动到底部时 然后不管通过什么方式(同步|异步)减少了整体的(高度|缩放|尺寸) 时保证内容显示正确 */ - public reset() { - this["_outOfBoundaryAmountDirty"] = true; - let offset = this.getHowMuchOutOfBoundary(); - if (!offset.fuzzyEquals(console.v2(0, 0), EPSILON)) { - this["_processInertiaScroll"](); - } - } - private _onTouchMoved(event: console.Event.EventTouch, captureListeners) { - super["_onTouchMoved"](event, captureListeners); - if (this.isCalculPull) { - let outOfBoundary = this.getHowMuchOutOfBoundary(); - let offset = this.vertical ? outOfBoundary.y : -outOfBoundary.x; - if (offset > 0 && this.isHeader && !this.isLockHeader && !this.isLockFooter) { - this.headerProgress = offset < EPSILON ? 0 : offset / this.headerOutOffset; - this.isMoveHeader = this.headerProgress >= this.headerMultiple; - this.emitPullDownEvent({ action: false, progress: this.headerProgress, progressStage: this.isMoveHeader ? "wait" : "touch" }); - this.emitPullUpEvent({ action: false, progress: 0, progressStage: "release" }); - } else if (offset < 0 && this.isFooter && !this.isLockFooter && !this.isLockHeader) { - this.footerProgress = -offset < EPSILON ? 0 : -offset / this.footerOutOffset; - this.isMoveFooter = this.footerProgress >= this.footerMultiple; - this.emitPullUpEvent({ action: false, progress: this.footerProgress, progressStage: this.isMoveFooter ? "wait" : "touch" }); - this.emitPullDownEvent({ action: false, progress: 0, progressStage: "release" }); - } - } - } - private _dispatchEvent(event) { - super["_dispatchEvent"](event); - if (event == "scroll-ended") { - this.layout.scrollToHeaderOrFooter = false; // 功能用于控制循环滚动时使用scrollTo方法滚动带来的效果问题 - } - } - private _getContentTopBoundary() { - let viewSize = this.view.getContentSize(); - let local = 0; - if (this.layout?.header && this.layout.getReallySize().height > viewSize.height) { - local = this.layout.topBoundary; // 返回头部item上边距 - } else { - // 功能用于无内容/少量内容时也可以上拉加载下拉刷新 如果所有item加起来的尺寸不足以撑满整个可视区域时 直接使用view可视尺寸 - local = this._getContentBottomBoundary() + viewSize.height; - } - if (this.isHeader && this.isLockHeader) { - local += this.headerOutOffset; // 功能用于上拉加载 下拉刷新 让整个content多一个 headerOutOffset 的尺寸 - } - return local; - } - private _getContentBottomBoundary() { - let viewSize = this.view.getContentSize(); - let local = 0; - if (this.layout?.footer && this.layout.getReallySize().height > viewSize.height) { - local = this.layout.bottomBoundary; // 返回尾部item上边距 - } else { - // 功能用于无内容/少量内容时也可以上拉加载下拉刷新 如果所有item加起来的尺寸不足以撑满整个可视区域时 直接使用view可视尺寸 - local = this.layout.node.y - this.layout.node.getAnchorPoint().y * viewSize.height; - } - if (this.isFooter && this.isLockFooter) { - local -= this.footerOutOffset; // 功能用于上拉加载 下拉刷新 让整个content多一个 footerOutOffset 的尺寸 - } - return local; - } - private _getContentLeftBoundary() { - let viewSize = this.view.getContentSize(); - let local = 0; - if (this.layout?.header && this.layout.getReallySize().width > viewSize.width) { - local = this.layout.leftBoundary; // 返回头部item左边距 - } else { - // 功能用于无内容/少量内容时也可以上拉加载下拉刷新 如果所有item加起来的尺寸不足以撑满整个可视区域时 直接使用view可视尺寸 - local = this.layout.node.x - this.layout.node.getAnchorPoint().x * viewSize.width; - } - if (this.isHeader && this.isLockHeader) { - local -= this.headerOutOffset; // 功能用于上拉加载 下拉刷新 让整个content多一个 headerOutOffset 的尺寸 - } - return local; - } - private _getContentRightBoundary() { - let viewSize = this.view.getContentSize(); - let local = 0; - if (this.layout?.footer && this.layout.getReallySize().width > viewSize.width) { - local = this.layout.rightBoundary; // 返回头部item右边距 - } else { - // 功能用于无内容/少量内容时也可以上拉加载下拉刷新 如果所有item加起来的尺寸不足以撑满整个可视区域时 直接使用view可视尺寸 - local = this._getContentLeftBoundary() + viewSize.width; - } - if (this.isFooter && this.isLockFooter) { - local += this.footerOutOffset; // 功能用于上拉加载 下拉刷新 让整个content多一个 footerOutOffset 的尺寸 - } - return local; - } - private _startAutoScroll(deltaMove, timeInSecond, attenuated) { - if (this.isCalculPull) { // 如果没有刷新/加载的监听者 则不计算 - if (this.isMoveHeader && !this.isLockHeader) { // 锁住头部 意思就是已经触发了下拉事件 应用层应该做些刷新的动作 - this.isLockHeader = true; - this.vertical && (deltaMove.y -= this.headerOutOffset); - this.horizontal && (deltaMove.x += this.headerOutOffset); - this.emitPullDownEvent({ action: true, progress: this.headerProgress, progressStage: "lock" }); - } else if (this.isMoveFooter && !this.isLockFooter) { // 锁住尾部 意思就是已经触发了上拉事件 应用层应该做些加载的动作 - this.isLockFooter = true; - this.vertical && (deltaMove.y += this.footerOutOffset); - this.horizontal && (deltaMove.x -= this.footerOutOffset); - this.emitPullUpEvent({ action: true, progress: this.footerProgress, progressStage: "lock" }); - } - } - super["_startAutoScroll"](deltaMove, timeInSecond, attenuated); - } - private _updateScrollBar(outOfBoundary) { - super["_updateScrollBar"](outOfBoundary); - if (!this.isCalculPull) { return } // 如果没有刷新/加载的监听者 则不计算 - if (this["_autoScrollBraking"]) { return } // 自动回弹时不计算 (非手动) - if (!this.autoScrolling) { return } // 非自动滚动时不计算 - let offset = this.vertical ? outOfBoundary.y : -outOfBoundary.x; - if (offset > 0) { // 下滑 - let progress = offset < EPSILON ? 0 : offset / this.headerOutOffset; // 根据参数 headerOutOffset 计算当前下滑的办百分比 - let progressStage; - if (this.isLockHeader) { - this.headerProgress = this.headerProgress == 1 ? this.headerProgress : Math.max(progress, 1); - progressStage = "lock" // 锁定状态 - } else { - this.headerProgress = progress < this.headerProgress ? progress : this.headerProgress; - progressStage = "release" // 释放状态 - } - this.emitPullDownEvent({ action: false, progress: this.headerProgress, progressStage: progressStage }); - - } else if (offset < 0) { // 上拉 - let progress = -offset < EPSILON ? 0 : -offset / this.footerOutOffset; // 根据参数 footerOutOffset 计算当前下滑的办百分比 - let progressStage; - if (this.isLockFooter) { - this.footerProgress = this.footerProgress == 1 ? this.footerProgress : Math.max(progress, 1); - progressStage = "lock" // 锁定状态 - } else { - this.footerProgress = progress < this.footerProgress ? progress : this.footerProgress; - progressStage = "release" // 释放状态 - } - this.emitPullUpEvent({ action: false, progress: this.footerProgress, progressStage: progressStage }); - - } else if (offset == 0) { - // 正常滑动时 如果没有锁定头和尾时 释放所有进度 - if (!this.isLockHeader && !this.isLockFooter) { - this.clearProgress(); - } - } - } - private clearProgress() { - this.headerProgress = 0; - this.footerProgress = 0; - this.emitPullDownEvent({ action: false, progress: 0, progressStage: "release" }); - this.emitPullUpEvent({ action: false, progress: 0, progressStage: "release" }); - } - private emitPullDownEvent(data: UISuperHeaderAndFooterEvent) { - console.Component.EventHandler.emitEvents(this.pullDownEvents, this, data); - } - private emitPullUpEvent(data: UISuperHeaderAndFooterEvent) { - console.Component.EventHandler.emitEvents(this.pullUpEvents, this, data); - } -} diff --git a/src/script/Engine/Utils/ScrollView/UISuperScrollView.ts.meta b/src/script/Engine/Utils/ScrollView/UISuperScrollView.ts.meta deleted file mode 100644 index 52edee1..0000000 --- a/src/script/Engine/Utils/ScrollView/UISuperScrollView.ts.meta +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ver": "1.0.8", - "uuid": "dfb04646-c016-4594-b7b3-8d83fa7a925a", - "isPlugin": false, - "loadPluginInWeb": true, - "loadPluginInNative": true, - "loadPluginInEditor": false, - "subMetas": {} -} \ No newline at end of file diff --git a/src/script/Engine/catan.d.ts b/src/script/Engine/catan.d.ts deleted file mode 100644 index c299267..0000000 --- a/src/script/Engine/catan.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare var require: (id: string) => any; \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/internal/config.json b/static/cocos-build/web-mobile/assets/internal/config.json new file mode 100644 index 0000000..7d30b8c --- /dev/null +++ b/static/cocos-build/web-mobile/assets/internal/config.json @@ -0,0 +1,137 @@ +{ + "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" + ], + "82migssElAGb04Ws6NimQX": [ + "effects/builtin-3d-particle", + "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" + ], + "43L6CczwNM/6GGmCYEQIoH": [ + "materials/builtin-3d-particle", + "cc.Material" + ], + "46bU+b5fROqIXVPG6aZWWK": [ + "materials/builtin-3d-trail", + "cc.Material" + ], + "cffgu4qBxEqa150o1DmRAy": [ + "materials/builtin-clear-stencil", + "cc.Material" + ], + "2aKWBXJHxKHLvrBUi2yYZQ": [ + "materials/builtin-unlit", + "cc.Material" + ] + }, + "uuids": [ + "02delMVqdBD70a/HSD99FK", + "0ek66qC1NOQLjgYmi04HvX", + "14TDKXr2NJ6LjvHPops74o", + "28dPjdQWxEQIG3VVl1Qm6T", + "2aKWBXJHxKHLvrBUi2yYZQ", + "2afAA24LNP4YmYiaVLiivs", + "30aC+Hnw1PF4pEcoY3kUYb", + "3ae7efMv1CLq2ilvUY/tQi", + "43L6CczwNM/6GGmCYEQIoH", + "46bU+b5fROqIXVPG6aZWWK", + "60AwGqM1dKELCGhPAR+jK6", + "6dkeWRTOBGXICfYQ7JUBnG", + "6fgBCSDDdPMInvyNlggls2", + "7a/QZLET9IDreTiBfRn2PD", + "82migssElAGb04Ws6NimQX", + "a1U5RdJRFMFL57BdJC9H1X", + "c0BAyVxX9JzZy8EjFrc9DU", + "cffgu4qBxEqa150o1DmRAy", + "e0LYfU5ZlNFoAB4UiRrGUG", + "ecpdLyjvZBwrvm+cedCcQy", + "f1h0LXVtJOta5JLZ1xCzfI" + ], + "scenes": {}, + "redirect": [], + "deps": [], + "packs": { + "0b6c4470e": [ + "02delMVqdBD70a/HSD99FK", + "0ek66qC1NOQLjgYmi04HvX", + "14TDKXr2NJ6LjvHPops74o", + "28dPjdQWxEQIG3VVl1Qm6T", + "2aKWBXJHxKHLvrBUi2yYZQ", + "2afAA24LNP4YmYiaVLiivs", + "30aC+Hnw1PF4pEcoY3kUYb", + "3ae7efMv1CLq2ilvUY/tQi", + "43L6CczwNM/6GGmCYEQIoH", + "46bU+b5fROqIXVPG6aZWWK", + "60AwGqM1dKELCGhPAR+jK6", + "6dkeWRTOBGXICfYQ7JUBnG", + "6fgBCSDDdPMInvyNlggls2", + "7a/QZLET9IDreTiBfRn2PD", + "82migssElAGb04Ws6NimQX", + "a1U5RdJRFMFL57BdJC9H1X", + "c0BAyVxX9JzZy8EjFrc9DU", + "cffgu4qBxEqa150o1DmRAy", + "e0LYfU5ZlNFoAB4UiRrGUG", + "ecpdLyjvZBwrvm+cedCcQy", + "f1h0LXVtJOta5JLZ1xCzfI" + ] + }, + "name": "internal", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false +} \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/internal/import/0b/0b6c4470e.json b/static/cocos-build/web-mobile/assets/internal/import/0b/0b6c4470e.json new file mode 100644 index 0000000..5fb984e --- /dev/null +++ b/static/cocos-build/web-mobile/assets/internal/import/0b/0b6c4470e.json @@ -0,0 +1,3053 @@ +[ + 1, + [ + "02delMVqdBD70a/HSD99FK", + "28dPjdQWxEQIG3VVl1Qm6T", + "6dkeWRTOBGXICfYQ7JUBnG", + "14TDKXr2NJ6LjvHPops74o", + "60AwGqM1dKELCGhPAR+jK6", + "82migssElAGb04Ws6NimQX", + "2afAA24LNP4YmYiaVLiivs", + "0ek66qC1NOQLjgYmi04HvX", + "30aC+Hnw1PF4pEcoY3kUYb", + "c0BAyVxX9JzZy8EjFrc9DU", + "f1h0LXVtJOta5JLZ1xCzfI" + ], + [ + "_effectAsset", + "mainTexture", + "diffuseTexture" + ], + [ + "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 + ], + [ + 2, + 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-particle", + [ + {}, + "0", + 11, + [ + { + "defines": { + "CC_USE_BILLBOARD": true, + "CC_USE_STRETCHED_BILLBOARD": false, + "CC_USE_HORIZONTAL_BILLBOARD": false, + "CC_USE_VERTICAL_BILLBOARD": false, + "CC_USE_MESH": false + } + }, + "props", + 11, + [ + {}, + "mainTiling_Offset", + 8, + [ + 2, + 1, + 1, + 0, + 0 + ], + "tintColor", + 8, + [ + 4, + 2141562284 + ], + "mainTexture", + 6, + 0 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 4, + 5 + ] + ], + [ + [ + [ + 2, + "builtin-3d-trail", + [ + {}, + "0", + 11, + [ + {}, + "props", + 11, + [ + {}, + "mainTexture", + 6, + 0 + ] + ] + ] + ] + ], + 0, + 0, + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 6 + ] + ], + [ + [ + "0,9729,9729,33071,33071,1,0,0", + -1 + ], + [ + 0 + ], + 0, + [], + [], + [] + ], + [ + [ + [ + 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 + ], + [ + 7 + ] + ], + [ + [ + [ + 0, + "builtin-3d-particle", + [ + { + "hash": 1682193167, + "record": null, + "name": "builtin-3d-particle|particle-vs-legacy:lpvs_main|tinted-fs:add", + "glsl3": { + "vert": "\nprecision highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\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;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nin vec3 a_position;\nin vec3 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n in vec3 a_color1;\n#endif\n#if CC_USE_MESH\n in vec3 a_texCoord3;\n in vec3 a_normal;\n in vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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;\nuniform FragConstants {\n vec4 tintColor;\n};\nvec4 add () {\n vec4 col = 2.0 * color * tintColor * texture(mainTexture, uv);\n return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = add(); }" + }, + "glsl1": { + "vert": "\nprecision highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\nuniform vec4 mainTiling_Offset;\nuniform vec4 frameTile_velLenScale;\nuniform vec4 scale;\nuniform mat4 cc_matView;\nuniform mat4 cc_matViewInv;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nattribute vec3 a_position;\nattribute vec3 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n attribute vec3 a_color1;\n#endif\n#if CC_USE_MESH\n attribute vec3 a_texCoord3;\n attribute vec3 a_normal;\n attribute vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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;\nuniform vec4 tintColor;\nvec4 add () {\n vec4 col = 2.0 * color * tintColor * texture2D(mainTexture, uv);\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_USE_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_STRETCHED_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_HORIZONTAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_VERTICAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MESH", + "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": 1933642753, + "record": null, + "name": "builtin-3d-particle|particle-vs-legacy:lpvs_main|tinted-fs:multiply", + "glsl3": { + "vert": "\nprecision highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\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;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nin vec3 a_position;\nin vec3 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n in vec3 a_color1;\n#endif\n#if CC_USE_MESH\n in vec3 a_texCoord3;\n in vec3 a_normal;\n in vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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;\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 return CCFragOutput(col);\n}\nout vec4 cc_FragColor;\nvoid main() { cc_FragColor = multiply(); }" + }, + "glsl1": { + "vert": "\nprecision highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\nuniform vec4 mainTiling_Offset;\nuniform vec4 frameTile_velLenScale;\nuniform vec4 scale;\nuniform mat4 cc_matView;\nuniform mat4 cc_matViewInv;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nattribute vec3 a_position;\nattribute vec3 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n attribute vec3 a_color1;\n#endif\n#if CC_USE_MESH\n attribute vec3 a_texCoord3;\n attribute vec3 a_normal;\n attribute vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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;\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 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_USE_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_STRETCHED_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_HORIZONTAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_VERTICAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MESH", + "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": 1851787849, + "record": null, + "name": "builtin-3d-particle|particle-vs-legacy:lpvs_main|no-tint-fs:addSmooth", + "glsl3": { + "vert": "\nprecision highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\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;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nin vec3 a_position;\nin vec3 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n in vec3 a_color1;\n#endif\n#if CC_USE_MESH\n in vec3 a_texCoord3;\n in vec3 a_normal;\n in vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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 highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\nuniform vec4 mainTiling_Offset;\nuniform vec4 frameTile_velLenScale;\nuniform vec4 scale;\nuniform mat4 cc_matView;\nuniform mat4 cc_matViewInv;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nattribute vec3 a_position;\nattribute vec3 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n attribute vec3 a_color1;\n#endif\n#if CC_USE_MESH\n attribute vec3 a_texCoord3;\n attribute vec3 a_normal;\n attribute vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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_USE_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_STRETCHED_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_HORIZONTAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_VERTICAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MESH", + "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": 145387972, + "record": null, + "name": "builtin-3d-particle|particle-vs-legacy:lpvs_main|no-tint-fs:premultiplied", + "glsl3": { + "vert": "\nprecision highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\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;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nin vec3 a_position;\nin vec3 a_texCoord;\nin vec3 a_texCoord1;\nin vec3 a_texCoord2;\nin vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n in vec3 a_color1;\n#endif\n#if CC_USE_MESH\n in vec3 a_texCoord3;\n in vec3 a_normal;\n in vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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 highp float;\nvec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){\n mat3 m = mat3(xAxis,yAxis,zAxis);\n float trace = m[0][0] + m[1][1] + m[2][2];\n vec4 quat;\n if (trace > 0.) {\n float s = 0.5 / sqrt(trace + 1.0);\n quat.w = 0.25 / s;\n quat.x = (m[2][1] - m[1][2]) * s;\n quat.y = (m[0][2] - m[2][0]) * s;\n quat.z = (m[1][0] - m[0][1]) * s;\n } else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {\n float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);\n quat.w = (m[2][1] - m[1][2]) / s;\n quat.x = 0.25 * s;\n quat.y = (m[0][1] + m[1][0]) / s;\n quat.z = (m[0][2] + m[2][0]) / s;\n } else if (m[1][1] > m[2][2]) {\n float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);\n quat.w = (m[0][2] - m[2][0]) / s;\n quat.x = (m[0][1] + m[1][0]) / s;\n quat.y = 0.25 * s;\n quat.z = (m[1][2] + m[2][1]) / s;\n } else {\n float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);\n quat.w = (m[1][0] - m[0][1]) / s;\n quat.x = (m[0][2] + m[2][0]) / s;\n quat.y = (m[1][2] + m[2][1]) / s;\n quat.z = 0.25 * s;\n }\n float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;\n if (len > 0.) {\n len = 1. / sqrt(len);\n quat.x = quat.x * len;\n quat.y = quat.y * len;\n quat.z = quat.z * len;\n quat.w = quat.w * len;\n }\n return quat;\n}\nvec4 quaternionFromEuler(vec3 angle){\n float x = angle.x / 2.;\n float y = angle.y / 2.;\n float z = angle.z / 2.;\n float sx = sin(x);\n float cx = cos(x);\n float sy = sin(y);\n float cy = cos(y);\n float sz = sin(z);\n float cz = cos(z);\n vec4 quat = vec4(0);\n quat.x = sx * cy * cz + cx * sy * sz;\n quat.y = cx * sy * cz + sx * cy * sz;\n quat.z = cx * cy * sz - sx * sy * cz;\n quat.w = cx * cy * cz - sx * sy * sz;\n return quat;\n}\nmat4 matrixFromRT(vec4 q, vec3 p){\n float x2 = q.x + q.x;\n float y2 = q.y + q.y;\n float z2 = q.z + q.z;\n float xx = q.x * x2;\n float xy = q.x * y2;\n float xz = q.x * z2;\n float yy = q.y * y2;\n float yz = q.y * z2;\n float zz = q.z * z2;\n float wx = q.w * x2;\n float wy = q.w * y2;\n float wz = q.w * z2;\n return mat4(\n 1. - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1. - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1. - (xx + yy), 0,\n p.x, p.y, p.z, 1\n );\n}\nmat4 matFromRTS(vec4 q, vec3 t, vec3 s){\n float x = q.x, y = q.y, z = q.z, w = q.w;\n float x2 = x + x;\n float y2 = y + y;\n float z2 = z + z;\n float xx = x * x2;\n float xy = x * y2;\n float xz = x * z2;\n float yy = y * y2;\n float yz = y * z2;\n float zz = z * z2;\n float wx = w * x2;\n float wy = w * y2;\n float wz = w * z2;\n float sx = s.x;\n float sy = s.y;\n float sz = s.z;\n return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,\n (xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,\n (xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,\n t.x, t.y, t.z, 1);\n}\nvec4 quatMultiply(vec4 a, vec4 b){\n vec4 quat;\n quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;\n quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;\n quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;\n quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;\n return quat;\n}\nvoid rotateVecFromQuat(inout vec3 v, vec4 q){\n float ix = q.w * v.x + q.y * v.z - q.z * v.y;\n float iy = q.w * v.y + q.z * v.x - q.x * v.z;\n float iz = q.w * v.z + q.x * v.y - q.y * v.x;\n float iw = -q.x * v.x - q.y * v.y - q.z * v.z;\n v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;\n v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;\n v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;\n}\nvec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){\n float z = pos.z;\n float x = pos.x;\n float y = pos.y;\n vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);\n vec4 rotQuat = quatMultiply(viewQuat, q);\n rotateVecFromQuat(pos, rotQuat);\n return pos;\n}\nvoid rotateCorner(inout vec2 corner, float angle){\n float xOS = cos(angle) * corner.x - sin(angle) * corner.y;\n float yOS = sin(angle) * corner.x + cos(angle) * corner.y;\n corner.x = xOS;\n corner.y = yOS;\n}\nuniform vec4 mainTiling_Offset;\nuniform vec4 frameTile_velLenScale;\nuniform vec4 scale;\nuniform mat4 cc_matView;\nuniform mat4 cc_matViewInv;\nuniform mat4 cc_matViewProj;\nuniform vec4 cc_cameraPos;\nuniform mat4 cc_matWorld;\nvarying vec2 uv;\nvarying vec4 color;\nvoid computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s\n#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , mat4 viewInv\n#endif\n#if CC_USE_STRETCHED_BILLBOARD\n , vec3 eye\n , vec4 velocity\n , float velocityScale\n , float lengthScale\n , float xIndex\n#endif\n) {\n#if CC_USE_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));\n vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));\n vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);\n#elif CC_USE_STRETCHED_BILLBOARD\n vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;\n vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;\n pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;\n#elif CC_USE_HORIZONTAL_BILLBOARD\n vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);\n vec3 camX = vec3(1, 0, 0);\n vec3 camY = vec3(0, 0, -1);\n pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);\n#elif CC_USE_VERTICAL_BILLBOARD\n vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);\n rotateCorner(viewSpaceVert, q.z);\n vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));\n vec3 camY = vec3(0, 1, 0);\n vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;\n pos.xyz += offset;\n#else\n pos.x += vertOffset.x;\n pos.y += vertOffset.y;\n#endif\n}\nvec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){\n vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));\n aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);\n#if !CC_USE_MESH\n vertIndex.y = 1. - vertIndex.y;\n#endif\n return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);\n}\nattribute vec3 a_position;\nattribute vec3 a_texCoord;\nattribute vec3 a_texCoord1;\nattribute vec3 a_texCoord2;\nattribute vec4 a_color;\n#if CC_USE_STRETCHED_BILLBOARD\n attribute vec3 a_color1;\n#endif\n#if CC_USE_MESH\n attribute vec3 a_texCoord3;\n attribute vec3 a_normal;\n attribute vec4 a_color1;\n#endif\nvec4 lpvs_main() {\n vec3 compScale = scale.xyz * a_texCoord1;\n vec4 pos = vec4(a_position, 1);\n#if CC_USE_STRETCHED_BILLBOARD\n vec4 velocity = vec4(a_color1.xyz, 0);\n#endif\n#if !CC_USE_WORLD_SPACE\n pos = cc_matWorld * pos;\n #if CC_USE_STRETCHED_BILLBOARD\n velocity = cc_matWorld * velocity;\n #endif\n#endif\n#if !CC_USE_MESH\n vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));\n #if CC_USE_BILLBOARD\n vec3 rotEuler = a_texCoord2;\n #elif CC_USE_STRETCHED_BILLBOARD\n vec3 rotEuler = vec3(0.);\n #else\n vec3 rotEuler = vec3(0., 0., a_texCoord2.z);\n #endif\n computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale\n #if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD\n , cc_matViewInv\n #endif\n #if CC_USE_STRETCHED_BILLBOARD\n , cc_cameraPos.xyz\n , velocity\n , frameTile_velLenScale.z\n , frameTile_velLenScale.w\n , a_texCoord.x\n #endif\n );\n color = a_color;\n#else\n mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);\n mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);\n pos = xform * vec4(a_texCoord3, 1);\n vec4 normal = xformNoScale * vec4(a_normal, 0);\n color = a_color * a_color1;\n#endif\n uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;\n pos = cc_matViewProj * pos;\n return pos;\n}\nvoid main() { gl_Position = lpvs_main(); }", + "frag": "\nprecision highp 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_USE_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_STRETCHED_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_HORIZONTAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_VERTICAL_BILLBOARD", + "type": "boolean", + "defines": [] + }, + { + "name": "CC_USE_MESH", + "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": "opaque-add", + "passes": [ + { + "stage": "opaque", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_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 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "opaque-alpha-blend", + "passes": [ + { + "stage": "opaque", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|tinted-fs:add", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "opaque-add-multiply", + "passes": [ + { + "stage": "opaque", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|tinted-fs:multiply", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "opaque-add-smooth", + "passes": [ + { + "stage": "opaque", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|no-tint-fs:addSmooth", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "opaque-premultiply-blend", + "passes": [ + { + "stage": "opaque", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|no-tint-fs:premultiplied", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "transparent-add", + "passes": [ + { + "stage": "transparent", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_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 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "transparent-alpha-blend", + "passes": [ + { + "stage": "transparent", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|tinted-fs:add", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "transparent-add-multiply", + "passes": [ + { + "stage": "transparent", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|tinted-fs:multiply", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + }, + "tintColor": { + "type": 16, + "value": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "inspector": { + "type": "color" + } + } + } + } + ] + }, + { + "name": "transparent-add-smooth", + "passes": [ + { + "stage": "transparent", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|no-tint-fs:addSmooth", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + }, + { + "name": "transparent-premultiply-blend", + "passes": [ + { + "stage": "transparent", + "program": "builtin-3d-particle|particle-vs-legacy:lpvs_main|no-tint-fs:premultiplied", + "rasterizerState": { + "cullMode": 0 + }, + "blendState": { + "targets": [ + { + "blend": true, + "blendSrc": 770, + "blendDst": 771, + "blendSrcAlpha": 770, + "blendDstAlpha": 771 + } + ] + }, + "depthStencilState": { + "depthTest": true, + "depthWrite": false + }, + "properties": { + "mainTexture": { + "value": "grey", + "type": 29 + }, + "mainTiling_Offset": { + "type": 16, + "value": [ + 1, + 1, + 0, + 0 + ] + } + } + } + ] + } + ] + ] + ], + 0, + 0, + [], + [], + [] + ], + [ + [ + [ + 1, + "builtin-2d-graphics", + { + "0": { + "defines": {} + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 8 + ] + ], + [ + [ + [ + 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 + ], + [ + 9 + ] + ], + [ + [ + [ + 1, + "builtin-2d-label", + { + "0": { + "defines": { + "USE_TEXTURE": true + } + } + } + ] + ], + 0, + 0, + [ + 0 + ], + [ + 0 + ], + [ + 10 + ] + ], + [ + [ + [ + 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/static/cocos-build/web-mobile/assets/internal/index.js b/static/cocos-build/web-mobile/assets/internal/index.js new file mode 100644 index 0000000..f3e1735 --- /dev/null +++ b/static/cocos-build/web-mobile/assets/internal/index.js @@ -0,0 +1,28 @@ +(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; +})({}, {}, []); \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.png b/static/cocos-build/web-mobile/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.png new file mode 100644 index 0000000..fa6376e Binary files /dev/null and b/static/cocos-build/web-mobile/assets/internal/native/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.png differ diff --git a/static/cocos-build/web-mobile/assets/internal/native/60/600301aa-3357-4a10-b086-84f011fa32ba.png b/static/cocos-build/web-mobile/assets/internal/native/60/600301aa-3357-4a10-b086-84f011fa32ba.png new file mode 100644 index 0000000..c6adfe9 Binary files /dev/null and b/static/cocos-build/web-mobile/assets/internal/native/60/600301aa-3357-4a10-b086-84f011fa32ba.png differ diff --git a/static/cocos-build/web-mobile/assets/main/config.json b/static/cocos-build/web-mobile/assets/main/config.json new file mode 100644 index 0000000..1978adf --- /dev/null +++ b/static/cocos-build/web-mobile/assets/main/config.json @@ -0,0 +1,32 @@ +{ + "paths": {}, + "uuids": [ + "2dL3kvpAxJu6GJ7RdqJG5J", + "31vIlawANFZqnzLlSuHBfc", + "41D7kWhyFGY7q4NDlzkazn", + "6aoKpq6+5BVaCIpoemqt7E", + "a8Anh32NZGRZegUtSgEj26" + ], + "scenes": { + "db://assets/Scene/helloworld.fire": "2dL3kvpAxJu6GJ7RdqJG5J" + }, + "redirect": [], + "deps": [], + "packs": { + "05dd1dc0e": [ + "2dL3kvpAxJu6GJ7RdqJG5J", + "31vIlawANFZqnzLlSuHBfc", + "41D7kWhyFGY7q4NDlzkazn" + ], + "0cfd22b7a": [ + "6aoKpq6+5BVaCIpoemqt7E", + "a8Anh32NZGRZegUtSgEj26" + ] + }, + "name": "main", + "importBase": "import", + "nativeBase": "native", + "debug": true, + "isZip": false, + "encrypted": false +} \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/main/import/05/05dd1dc0e.json b/static/cocos-build/web-mobile/assets/main/import/05/05dd1dc0e.json new file mode 100644 index 0000000..ddcd956 --- /dev/null +++ b/static/cocos-build/web-mobile/assets/main/import/05/05dd1dc0e.json @@ -0,0 +1,546 @@ +[ + 1, + [ + "41D7kWhyFGY7q4NDlzkazn", + "31vIlawANFZqnzLlSuHBfc", + "6aoKpq6+5BVaCIpoemqt7E", + "a8Anh32NZGRZegUtSgEj26" + ], + [ + "node", + "_spriteFrame", + "_textureSetter", + "label", + "scene", + "_parent" + ], + [ + [ + "cc.Node", + [ + "_name", + "_id", + "_components", + "_contentSize", + "_color", + "_trs", + "_parent", + "_children" + ], + 1, + 9, + 5, + 5, + 7, + 1, + 2 + ], + "cc.SpriteFrame", + [ + "cc.Widget", + [ + "_alignFlags", + "_originalWidth", + "_originalHeight", + "_wasAlignOnce", + "node" + ], + -1, + 1 + ], + [ + "cc.Sprite", + [ + "_type", + "_sizeMode", + "node", + "_spriteFrame" + ], + 1, + 1, + 6 + ], + [ + "cc.SceneAsset", + [ + "_name", + "asyncLoadAssets" + ], + 1 + ], + [ + "cc.Node", + [ + "_name", + "_parent", + "_components", + "_contentSize", + "_trs" + ], + 2, + 1, + 2, + 5, + 7 + ], + [ + "cc.Canvas", + [ + "node" + ], + 3, + 1 + ], + [ + "e1b90/rohdEk4SdmmEZANaD", + [ + "node", + "label" + ], + 3, + 1, + 1 + ], + [ + "cc.Scene", + [ + "_name", + "_children", + "_anchorPoint", + "_trs" + ], + 2, + 2, + 5, + 7 + ], + [ + "cc.Label", + [ + "_string", + "_fontSize", + "_lineHeight", + "_N$horizontalAlign", + "_N$verticalAlign", + "node" + ], + -2, + 1 + ] + ], + [ + [ + 4, + 0, + 1, + 3 + ], + [ + 0, + 0, + 1, + 7, + 2, + 4, + 3, + 5, + 3 + ], + [ + 0, + 0, + 6, + 2, + 4, + 3, + 2 + ], + [ + 0, + 0, + 6, + 2, + 3, + 5, + 2 + ], + [ + 5, + 0, + 1, + 2, + 3, + 4, + 2 + ], + [ + 6, + 0, + 1 + ], + [ + 7, + 0, + 1, + 1 + ], + [ + 2, + 0, + 4, + 2 + ], + [ + 2, + 0, + 1, + 2, + 3, + 4, + 5 + ], + [ + 3, + 0, + 1, + 2, + 3, + 3 + ], + [ + 3, + 2, + 3, + 1 + ], + [ + 8, + 0, + 1, + 2, + 3, + 2 + ], + [ + 9, + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] + ], + [ + [ + [ + [ + 0, + "helloworld", + null + ], + [ + 1, + "Canvas", + "a286bbGknJLZpRpxROV6M94", + [ + -5, + -6, + -7 + ], + [ + [ + 5, + -1 + ], + [ + 6, + -3, + -2 + ], + [ + 7, + 45, + -4 + ] + ], + [ + 4, + 4294769916 + ], + [ + 5, + 960, + 640 + ], + [ + 480, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 2, + "background", + 1, + [ + [ + 8, + 45, + 200, + 150, + {}, + -8 + ], + [ + 9, + 1, + 0, + -9, + 0 + ] + ], + [ + 4, + 4281214491 + ], + [ + 5, + 960, + 640 + ] + ], + [ + 11, + "New Node", + [ + 1 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 3, + "cocos", + 1, + [ + [ + 10, + -10, + 1 + ] + ], + [ + 5, + 195, + 270 + ], + [ + 0, + 50, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 4, + "label", + 1, + [ + -11 + ], + [ + 5, + 342.33, + 60 + ], + [ + 0, + -180, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + ], + [ + 12, + "Hello, World!", + 60, + 60, + 1, + 1, + 5 + ] + ], + 0, + [ + 0, + 0, + 1, + 0, + 3, + 6, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + -1, + 2, + 0, + -2, + 4, + 0, + -3, + 5, + 0, + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 4, + 0, + -1, + 6, + 0, + 4, + 3, + 1, + 5, + 3, + 11 + ], + [ + 0, + 0 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ] + ], + [ + [ + { + "name": "HelloWorld", + "rect": [ + 0, + 0, + 195, + 270 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 195, + 270 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 2 + ] + ], + [ + [ + { + "name": "singleColor", + "rect": [ + 0, + 0, + 2, + 2 + ], + "offset": [ + 0, + 0 + ], + "originalSize": [ + 2, + 2 + ], + "capInsets": [ + 0, + 0, + 0, + 0 + ] + } + ], + [ + 1 + ], + 0, + [ + 0 + ], + [ + 2 + ], + [ + 3 + ] + ] + ] +] \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/main/import/0c/0cfd22b7a.json b/static/cocos-build/web-mobile/assets/main/import/0c/0cfd22b7a.json new file mode 100644 index 0000000..528c658 --- /dev/null +++ b/static/cocos-build/web-mobile/assets/main/import/0c/0cfd22b7a.json @@ -0,0 +1,4 @@ +{ + "type": "cc.Texture2D", + "data": "0,9729,9729,33071,33071,0,0,1|0,9729,9729,33071,33071,0,0,1" +} \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/main/index.js b/static/cocos-build/web-mobile/assets/main/index.js new file mode 100644 index 0000000..fb462ba --- /dev/null +++ b/static/cocos-build/web-mobile/assets/main/index.js @@ -0,0 +1,80 @@ +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; +}({ + Helloworld: [ function(require, module, exports) { + "use strict"; + cc._RF.push(module, "e1b90/rohdEk4SdmmEZANaD", "Helloworld"); + "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 Helloworld = function(_super) { + __extends(Helloworld, _super); + function Helloworld() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.label = null; + _this.text = "hello"; + return _this; + } + Helloworld.prototype.start = function() { + this.label.string = this.text; + }; + __decorate([ property(cc.Label) ], Helloworld.prototype, "label", void 0); + __decorate([ property ], Helloworld.prototype, "text", void 0); + Helloworld = __decorate([ ccclass ], Helloworld); + return Helloworld; + }(cc.Component); + exports.default = Helloworld; + cc._RF.pop(); + }, {} ] +}, {}, [ "Helloworld" ]); \ No newline at end of file diff --git a/static/cocos-build/web-mobile/assets/main/native/6a/6aa0aa6a-ebee-4155-a088-a687a6aadec4.png b/static/cocos-build/web-mobile/assets/main/native/6a/6aa0aa6a-ebee-4155-a088-a687a6aadec4.png new file mode 100644 index 0000000..21d4326 Binary files /dev/null and b/static/cocos-build/web-mobile/assets/main/native/6a/6aa0aa6a-ebee-4155-a088-a687a6aadec4.png differ diff --git a/static/cocos-build/web-mobile/assets/main/native/a8/a8027877-d8d6-4645-97a0-52d4a0123dba.png b/static/cocos-build/web-mobile/assets/main/native/a8/a8027877-d8d6-4645-97a0-52d4a0123dba.png new file mode 100644 index 0000000..fa6376e Binary files /dev/null and b/static/cocos-build/web-mobile/assets/main/native/a8/a8027877-d8d6-4645-97a0-52d4a0123dba.png differ diff --git a/static/cocos-build/web-mobile/cocos2d-js.js b/static/cocos-build/web-mobile/cocos2d-js.js new file mode 100644 index 0000000..91a6534 --- /dev/null +++ b/static/cocos-build/web-mobile/cocos2d-js.js @@ -0,0 +1,103781 @@ +(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": 239, + "../core/utils/misc": 324 + }], + 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": 239, + "../core/platform/js": 260 + }], + 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": 317, + "./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": 317, + "./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": 317, + "./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": 317, + "./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": 70 + }], + 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 EventTarget = require("../core/event/event-target"); + var sys = require("../core/platform/CCSys"); + var LoadMode = require("../core/assets/CCAudioClip").LoadMode; + var touchBinded = false; + var touchPlayList = []; + var Audio = function Audio(src) { + EventTarget.call(this); + this._shouldRecycleOnEnded = false; + this._src = src; + this._element = null; + this.id = 0; + this._state = Audio.State.INITIALZING; + var self = this; + this._onended = function () { + self._state = Audio.State.STOPPED; + self.emit("ended"); + }; + this._onendedSecond = function () { + self._unbindEnded(self._onendedSecond); + self._bindEnded(); + }; + }; + cc.js.extend(Audio, EventTarget); + Audio.State = { + ERROR: -1, + INITIALZING: 0, + PLAYING: 1, + PAUSED: 2, + STOPPED: 3 + }; + (function (proto) { + proto._bindEnded = function (callback) { + callback = callback || this._onended; + if (callback._binded) return; + callback._binded = true; + var elem = this._element; + this._src && elem instanceof HTMLAudioElement ? elem.addEventListener("ended", callback) : elem.onended = callback; + }; + proto._unbindEnded = function (callback) { + callback = callback || this._onended; + if (!callback._binded) return; + callback._binded = false; + var elem = this._element; + elem instanceof HTMLAudioElement ? elem.removeEventListener("ended", callback) : elem && (elem.onended = null); + }; + proto._onLoaded = function () { + this._createElement(); + this._state = Audio.State.INITIALZING; + this.setVolume(1); + this.setLoop(false); + }; + proto._createElement = function () { + var elem = this._src._nativeAsset; + if (elem instanceof HTMLAudioElement) { + this._element || (this._element = document.createElement("audio")); + this._element.src = elem.src; + } else this._element = new WebAudioElement(elem, this); + }; + proto.play = function () { + var self = this; + this._src && this._src._ensureLoaded((function () { + self._state = Audio.State.PLAYING; + self._bindEnded(); + var playPromise = self._element.play(); + window.Promise && playPromise instanceof Promise && playPromise["catch"]((function (err) { })); + self._touchToPlay(); + })); + }; + proto._touchToPlay = function () { + this._src && this._src.loadMode === LoadMode.DOM_AUDIO && this._element.paused && touchPlayList.push({ + instance: this, + offset: 0, + audio: this._element + }); + if (touchBinded) return; + touchBinded = true; + var touchEventName = "ontouchend" in window ? "touchend" : "mousedown"; + cc.game.canvas.addEventListener(touchEventName, (function () { + var item; + while (item = touchPlayList.pop()) item.audio.play(item.offset); + })); + }; + proto.destroy = function () { + this._element = null; + }; + proto.pause = function () { + if (this.getState() !== Audio.State.PLAYING) return; + var self = this; + this._src && this._src._ensureLoaded((function () { + self._unbindEnded(); + self._element.pause(); + self._state = Audio.State.PAUSED; + })); + }; + proto.resume = function () { + if (this.getState() !== Audio.State.PAUSED) return; + var self = this; + this._src && this._src._ensureLoaded((function () { + self._bindEnded(); + self._element.play(); + self._state = Audio.State.PLAYING; + })); + }; + proto.stop = function () { + var self = this; + this._src && this._src._ensureLoaded((function () { + self._element.pause(); + self._element.currentTime = 0; + for (var i = 0; i < touchPlayList.length; i++) if (touchPlayList[i].instance === self) { + touchPlayList.splice(i, 1); + break; + } + self._unbindEnded(); + self.emit("stop"); + self._state = Audio.State.STOPPED; + })); + }; + proto.setLoop = function (loop) { + var self = this; + this._src && this._src._ensureLoaded((function () { + self._element.loop = loop; + })); + }; + proto.getLoop = function () { + return !!this._element && this._element.loop; + }; + proto.setVolume = function (num) { + var self = this; + this._src && this._src._ensureLoaded((function () { + self._element.volume = num; + })); + }; + proto.getVolume = function () { + return this._element ? this._element.volume : 1; + }; + proto.setCurrentTime = function (num) { + var self = this; + this._src && this._src._ensureLoaded((function () { + self._unbindEnded(); + self._bindEnded(self._onendedSecond); + self._element.currentTime = num; + })); + }; + proto.getCurrentTime = function () { + return this._element ? this._element.currentTime : 0; + }; + proto.getDuration = function () { + return this._src ? this._src.duration : 0; + }; + proto.getState = function (forceUpdating) { + void 0 === forceUpdating && (forceUpdating = true); + forceUpdating && this._forceUpdatingState(); + return this._state; + }; + proto._forceUpdatingState = function () { + var elem = this._element; + elem && (Audio.State.PLAYING === this._state && elem.paused ? this._state = Audio.State.STOPPED : Audio.State.STOPPED !== this._state || elem.paused || (this._state = Audio.State.PLAYING)); + }; + Object.defineProperty(proto, "src", { + get: function get() { + return this._src; + }, + set: function set(clip) { + this._unbindEnded(); + if (clip) { + if (clip !== this._src) { + this._src = clip; + if (clip.loaded) this._onLoaded(); else { + var self = this; + clip.once("load", (function () { + clip === self._src && self._onLoaded(); + })); + } + } + } else { + this._src = null; + this._element instanceof WebAudioElement ? this._element = null : this._element && (this._element.src = ""); + this._state = Audio.State.INITIALZING; + } + return clip; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, "paused", { + get: function get() { + return !this._element || this._element.paused; + }, + enumerable: true, + configurable: true + }); + })(Audio.prototype); + var TIME_CONSTANT; + TIME_CONSTANT = cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE || cc.sys.browserType === cc.sys.BROWSER_TYPE_BAIDU || cc.sys.browserType === cc.sys.BROWSER_TYPE_UC ? .01 : 0; + var WebAudioElement = function WebAudioElement(buffer, audio) { + this._audio = audio; + this._context = sys.__audioSupport.context; + this._buffer = buffer; + this._gainObj = this._context["createGain"](); + this.volume = 1; + this._gainObj["connect"](this._context["destination"]); + this._loop = false; + this._startTime = -1; + this._currentSource = null; + this.playedLength = 0; + this._currentTimer = null; + this._endCallback = function () { + this.onended && this.onended(this); + }.bind(this); + }; + (function (proto) { + proto.play = function (offset) { + if (this._currentSource && !this.paused) { + this._currentSource.onended = null; + this._currentSource.stop(0); + this.playedLength = 0; + } + var audio = this._context["createBufferSource"](); + audio.buffer = this._buffer; + audio["connect"](this._gainObj); + audio.loop = this._loop; + this._startTime = this._context.currentTime; + offset = offset || this.playedLength; + offset && (this._startTime -= offset); + var duration = this._buffer.duration; + var startTime = offset; + var endTime; + if (this._loop) audio.start ? audio.start(0, startTime) : audio["notoGrainOn"] ? audio["noteGrainOn"](0, startTime) : audio["noteOn"](0, startTime); else { + endTime = duration - offset; + audio.start ? audio.start(0, startTime, endTime) : audio["noteGrainOn"] ? audio["noteGrainOn"](0, startTime, endTime) : audio["noteOn"](0, startTime, endTime); + } + this._currentSource = audio; + audio.onended = this._endCallback; + if ((!audio.context.state || "suspended" === audio.context.state) && 0 === this._context.currentTime) { + var self = this; + clearTimeout(this._currentTimer); + this._currentTimer = setTimeout((function () { + 0 === self._context.currentTime && touchPlayList.push({ + instance: self._audio, + offset: offset, + audio: self + }); + }), 10); + } + var sys = cc.sys; + sys.os === sys.OS_IOS && sys.isBrowser && sys.isMobile && ("suspended" === audio.context.state && 0 !== this._context.currentTime || "interrupted" === audio.context.state) && audio.context.resume(); + }; + proto.pause = function () { + clearTimeout(this._currentTimer); + if (this.paused) return; + this.playedLength = this._context.currentTime - this._startTime; + this.playedLength %= this._buffer.duration; + var audio = this._currentSource; + this._currentSource = null; + this._startTime = -1; + audio && audio.stop(0); + }; + Object.defineProperty(proto, "paused", { + get: function get() { + if (this._currentSource && this._currentSource.loop) return false; + if (-1 === this._startTime) return true; + return this._context.currentTime - this._startTime > this._buffer.duration; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, "loop", { + get: function get() { + return this._loop; + }, + set: function set(bool) { + this._currentSource && (this._currentSource.loop = bool); + return this._loop = bool; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, "volume", { + get: function get() { + return this._volume; + }, + set: function set(num) { + this._volume = num; + if (this._gainObj.gain.setTargetAtTime) try { + this._gainObj.gain.setTargetAtTime(num, this._context.currentTime, TIME_CONSTANT); + } catch (e) { + this._gainObj.gain.setTargetAtTime(num, this._context.currentTime, .01); + } else this._gainObj.gain.value = num; + if (sys.os === sys.OS_IOS && !this.paused && this._currentSource) { + this._currentSource.onended = null; + this.pause(); + this.play(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, "currentTime", { + get: function get() { + if (this.paused) return this.playedLength; + this.playedLength = this._context.currentTime - this._startTime; + this.playedLength %= this._buffer.duration; + return this.playedLength; + }, + set: function set(num) { + if (this.paused) this.playedLength = num; else { + this.pause(); + this.playedLength = num; + this.play(); + } + return num; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(proto, "duration", { + get: function get() { + return this._buffer.duration; + }, + enumerable: true, + configurable: true + }); + })(WebAudioElement.prototype); + module.exports = cc._Audio = Audio; + }), { + "../core/assets/CCAudioClip": 107, + "../core/event/event-target": 186, + "../core/platform/CCSys": 248 + }], + 22: [(function (require, module, exports) { + "use strict"; + var Audio = require("./CCAudio"); + var AudioClip = require("../core/assets/CCAudioClip"); + var js = cc.js; + var _instanceId = 0; + var _id2audio = js.createMap(true); + var _url2id = {}; + var _audioPool = []; + var recycleAudio = function recycleAudio(audio) { + if (!audio._shouldRecycleOnEnded) return; + audio._finishCallback = null; + audio.off("ended"); + audio.off("stop"); + audio.src = null; + _audioPool.includes(audio) || (_audioPool.length < 32 ? _audioPool.push(audio) : audio.destroy()); + audio._shouldRecycleOnEnded = false; + }; + var getAudioFromPath = function getAudioFromPath(path) { + var id = _instanceId++; + var list = _url2id[path]; + list || (list = _url2id[path] = []); + if (audioEngine._maxAudioInstance <= list.length) { + var oldId = list.shift(); + var oldAudio = getAudioFromId(oldId); + oldAudio.stop(); + } + var audio = _audioPool.pop() || new Audio(); + var callback = function callback() { + var audioInList = getAudioFromId(this.id); + if (audioInList) { + delete _id2audio[this.id]; + var index = list.indexOf(this.id); + cc.js.array.fastRemoveAt(list, index); + } + recycleAudio(this); + }; + audio.on("ended", (function () { + this._finishCallback && this._finishCallback(); + this.getLoop() || callback.call(this); + }), audio); + audio.on("stop", callback, audio); + audio.id = id; + _id2audio[id] = audio; + list.push(id); + return audio; + }; + var getAudioFromId = function getAudioFromId(id) { + return _id2audio[id]; + }; + var handleVolume = function handleVolume(volume) { + void 0 === volume ? volume = 1 : "string" === typeof volume && (volume = Number.parseFloat(volume)); + return volume; + }; + var audioEngine = { + AudioState: Audio.State, + _maxAudioInstance: 24, + _id2audio: _id2audio, + play: function play(clip, loop, volume) { + if (!(clip instanceof AudioClip)) return cc.error("Wrong type of AudioClip."); + var path = clip.nativeUrl; + var audio = getAudioFromPath(path); + audio.src = clip; + clip._ensureLoaded(); + audio._shouldRecycleOnEnded = true; + audio.setLoop(loop || false); + volume = handleVolume(volume); + audio.setVolume(volume); + audio.play(); + return audio.id; + }, + setLoop: function setLoop(audioID, loop) { + var audio = getAudioFromId(audioID); + if (!audio || !audio.setLoop) return; + audio.setLoop(loop); + }, + isLoop: function isLoop(audioID) { + var audio = getAudioFromId(audioID); + if (!audio || !audio.getLoop) return false; + return audio.getLoop(); + }, + setVolume: function setVolume(audioID, volume) { + var audio = getAudioFromId(audioID); + audio && audio.setVolume(volume); + }, + getVolume: function getVolume(audioID) { + var audio = getAudioFromId(audioID); + return audio ? audio.getVolume() : 1; + }, + setCurrentTime: function setCurrentTime(audioID, sec) { + var audio = getAudioFromId(audioID); + if (audio) { + audio.setCurrentTime(sec); + return true; + } + return false; + }, + getCurrentTime: function getCurrentTime(audioID) { + var audio = getAudioFromId(audioID); + return audio ? audio.getCurrentTime() : 0; + }, + getDuration: function getDuration(audioID) { + var audio = getAudioFromId(audioID); + return audio ? audio.getDuration() : 0; + }, + getState: function getState(audioID) { + var audio = getAudioFromId(audioID); + return audio ? audio.getState() : this.AudioState.ERROR; + }, + setFinishCallback: function setFinishCallback(audioID, callback) { + var audio = getAudioFromId(audioID); + if (!audio) return; + audio._finishCallback = callback; + }, + pause: function pause(audioID) { + var audio = getAudioFromId(audioID); + if (audio) { + audio.pause(); + return true; + } + return false; + }, + _pauseIDCache: [], + pauseAll: function pauseAll() { + for (var id in _id2audio) { + var audio = _id2audio[id]; + var state = audio.getState(); + if (state === Audio.State.PLAYING) { + this._pauseIDCache.push(id); + audio.pause(); + } + } + }, + resume: function resume(audioID) { + var audio = getAudioFromId(audioID); + audio && audio.resume(); + }, + resumeAll: function resumeAll() { + for (var i = 0; i < this._pauseIDCache.length; ++i) { + var id = this._pauseIDCache[i]; + var audio = getAudioFromId(id); + audio && audio.resume(); + } + this._pauseIDCache.length = 0; + }, + stop: function stop(audioID) { + var audio = getAudioFromId(audioID); + if (audio) { + audio.stop(); + return true; + } + return false; + }, + stopAll: function stopAll() { + for (var id in _id2audio) { + var audio = _id2audio[id]; + audio && audio.stop(); + } + }, + setMaxAudioInstance: function setMaxAudioInstance(num) { + true; + cc.warn("Since v2.4.0, maxAudioInstance has become a read only property.\naudioEngine.setMaxAudioInstance() method will be removed in the future"); + }, + getMaxAudioInstance: function getMaxAudioInstance() { + return this._maxAudioInstance; + }, + uncache: function uncache(clip) { + var filePath = clip; + if ("string" === typeof clip) { + cc.warnID(8401, "cc.audioEngine", "cc.AudioClip", "AudioClip", "cc.AudioClip", "audio"); + filePath = clip; + } else { + if (!clip) return; + filePath = clip.nativeUrl; + } + var list = _url2id[filePath]; + if (!list) return; + while (list.length > 0) { + var id = list.pop(); + var audio = _id2audio[id]; + if (audio) { + audio.stop(); + delete _id2audio[id]; + } + } + }, + uncacheAll: function uncacheAll() { + this.stopAll(); + var audio; + for (var id in _id2audio) { + audio = _id2audio[id]; + audio && audio.destroy(); + } + while (audio = _audioPool.pop()) audio.destroy(); + _id2audio = js.createMap(true); + _url2id = {}; + }, + _breakCache: null, + _break: function _break() { + this._breakCache = []; + for (var id in _id2audio) { + var audio = _id2audio[id]; + var state = audio.getState(); + if (state === Audio.State.PLAYING) { + this._breakCache.push(id); + audio.pause(); + } + } + }, + _restore: function _restore() { + if (!this._breakCache) return; + while (this._breakCache.length > 0) { + var id = this._breakCache.pop(); + var audio = getAudioFromId(id); + audio && audio.resume && audio.resume(); + } + this._breakCache = null; + }, + _music: { + id: -1, + loop: false, + volume: 1 + }, + _effect: { + volume: 1, + pauseCache: [] + }, + playMusic: function playMusic(clip, loop) { + var music = this._music; + this.stop(music.id); + music.id = this.play(clip, loop, music.volume); + music.loop = loop; + return music.id; + }, + stopMusic: function stopMusic() { + this.stop(this._music.id); + }, + pauseMusic: function pauseMusic() { + this.pause(this._music.id); + return this._music.id; + }, + resumeMusic: function resumeMusic() { + this.resume(this._music.id); + return this._music.id; + }, + getMusicVolume: function getMusicVolume() { + return this._music.volume; + }, + setMusicVolume: function setMusicVolume(volume) { + volume = handleVolume(volume); + var music = this._music; + music.volume = volume; + this.setVolume(music.id, music.volume); + return music.volume; + }, + isMusicPlaying: function isMusicPlaying() { + return this.getState(this._music.id) === this.AudioState.PLAYING; + }, + playEffect: function playEffect(clip, loop) { + return this.play(clip, loop || false, this._effect.volume); + }, + setEffectsVolume: function setEffectsVolume(volume) { + volume = handleVolume(volume); + var musicId = this._music.id; + this._effect.volume = volume; + for (var id in _id2audio) { + var audio = _id2audio[id]; + if (!audio || audio.id === musicId) continue; + audioEngine.setVolume(id, volume); + } + }, + getEffectsVolume: function getEffectsVolume() { + return this._effect.volume; + }, + pauseEffect: function pauseEffect(audioID) { + return this.pause(audioID); + }, + pauseAllEffects: function pauseAllEffects() { + var musicId = this._music.id; + var effect = this._effect; + effect.pauseCache.length = 0; + for (var id in _id2audio) { + var audio = _id2audio[id]; + if (!audio || audio.id === musicId) continue; + var state = audio.getState(); + if (state === this.AudioState.PLAYING) { + effect.pauseCache.push(id); + audio.pause(); + } + } + }, + resumeEffect: function resumeEffect(id) { + this.resume(id); + }, + resumeAllEffects: function resumeAllEffects() { + var pauseIDCache = this._effect.pauseCache; + for (var i = 0; i < pauseIDCache.length; ++i) { + var id = pauseIDCache[i]; + var audio = _id2audio[id]; + audio && audio.resume(); + } + }, + stopEffect: function stopEffect(audioID) { + return this.stop(audioID); + }, + stopAllEffects: function stopAllEffects() { + var musicId = this._music.id; + for (var id in _id2audio) { + var audio = _id2audio[id]; + if (!audio || audio.id === musicId) continue; + var state = audio.getState(); + state === audioEngine.AudioState.PLAYING && audio.stop(); + } + } + }; + module.exports = cc.audioEngine = audioEngine; + }), { + "../core/assets/CCAudioClip": 107, + "./CCAudio": 21 + }], + 23: [(function (require, module, exports) { + "use strict"; + var codec = { + name: "Jacob__Codec" + }; + codec.Base64 = require("./base64"); + codec.GZip = require("./gzip"); + codec.unzip = function () { + return codec.GZip.gunzip.apply(codec.GZip, arguments); + }; + codec.unzipBase64 = function () { + var buffer = codec.Base64.decode.apply(codec.Base64, arguments); + try { + return codec.GZip.gunzip.call(codec.GZip, buffer); + } catch (e) { + return buffer.slice(7); + } + }; + codec.unzipBase64AsArray = function (input, bytes) { + bytes = bytes || 1; + var dec = this.unzipBase64(input), ar = [], i, j, len; + for (i = 0, len = dec.length / bytes; i < len; i++) { + ar[i] = 0; + for (j = bytes - 1; j >= 0; --j) ar[i] += dec.charCodeAt(i * bytes + j) << 8 * j; + } + return ar; + }; + codec.unzipAsArray = function (input, bytes) { + bytes = bytes || 1; + var dec = this.unzip(input), ar = [], i, j, len; + for (i = 0, len = dec.length / bytes; i < len; i++) { + ar[i] = 0; + for (j = bytes - 1; j >= 0; --j) ar[i] += dec.charCodeAt(i * bytes + j) << 8 * j; + } + return ar; + }; + cc.codec = module.exports = codec; + }), { + "./base64": 24, + "./gzip": 25 + }], + 24: [(function (require, module, exports) { + "use strict"; + var misc = require("../core/utils/misc"); + var strValue = misc.BASE64_VALUES; + var Base64 = { + name: "Jacob__Codec__Base64" + }; + Base64.decode = function Jacob__Codec__Base64__decode(input) { + var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = strValue[input.charCodeAt(i++)]; + enc2 = strValue[input.charCodeAt(i++)]; + enc3 = strValue[input.charCodeAt(i++)]; + enc4 = strValue[input.charCodeAt(i++)]; + chr1 = enc1 << 2 | enc2 >> 4; + chr2 = (15 & enc2) << 4 | enc3 >> 2; + chr3 = (3 & enc3) << 6 | enc4; + output.push(String.fromCharCode(chr1)); + 64 !== enc3 && output.push(String.fromCharCode(chr2)); + 64 !== enc4 && output.push(String.fromCharCode(chr3)); + } + output = output.join(""); + return output; + }; + Base64.decodeAsArray = function Jacob__Codec__Base64___decodeAsArray(input, bytes) { + var dec = this.decode(input), ar = [], i, j, len; + for (i = 0, len = dec.length / bytes; i < len; i++) { + ar[i] = 0; + for (j = bytes - 1; j >= 0; --j) ar[i] += dec.charCodeAt(i * bytes + j) << 8 * j; + } + return ar; + }; + module.exports = Base64; + }), { + "../core/utils/misc": 324 + }], + 25: [(function (require, module, exports) { + "use strict"; + var GZip = function Jacob__GZip(data) { + this.data = data; + this.debug = false; + this.gpflags = void 0; + this.files = 0; + this.unzipped = []; + this.buf32k = new Array(32768); + this.bIdx = 0; + this.modeZIP = false; + this.bytepos = 0; + this.bb = 1; + this.bits = 0; + this.nameBuf = []; + this.fileout = void 0; + this.literalTree = new Array(GZip.LITERALS); + this.distanceTree = new Array(32); + this.treepos = 0; + this.Places = null; + this.len = 0; + this.fpos = new Array(17); + this.fpos[0] = 0; + this.flens = void 0; + this.fmax = void 0; + }; + GZip.gunzip = function (string) { + string.constructor === Array || string.constructor === String; + var gzip = new GZip(string); + return gzip.gunzip()[0][0]; + }; + GZip.HufNode = function () { + this.b0 = 0; + this.b1 = 0; + this.jump = null; + this.jumppos = -1; + }; + GZip.LITERALS = 288; + GZip.NAMEMAX = 256; + GZip.bitReverse = [0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, 4, 132, 68, 196, 36, 164, 100, 228, 20, 148, 84, 212, 52, 180, 116, 244, 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, 9, 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, 5, 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, 13, 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, 3, 131, 67, 195, 35, 163, 99, 227, 19, 147, 83, 211, 51, 179, 115, 243, 11, 139, 75, 203, 43, 171, 107, 235, 27, 155, 91, 219, 59, 187, 123, 251, 7, 135, 71, 199, 39, 167, 103, 231, 23, 151, 87, 215, 55, 183, 119, 247, 15, 143, 79, 207, 47, 175, 111, 239, 31, 159, 95, 223, 63, 191, 127, 255]; + GZip.cplens = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]; + GZip.cplext = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99]; + GZip.cpdist = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577]; + GZip.cpdext = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]; + GZip.border = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + GZip.prototype.gunzip = function () { + this.outputArr = []; + this.nextFile(); + return this.unzipped; + }; + GZip.prototype.readByte = function () { + this.bits += 8; + return this.bytepos < this.data.length ? this.data.charCodeAt(this.bytepos++) : -1; + }; + GZip.prototype.byteAlign = function () { + this.bb = 1; + }; + GZip.prototype.readBit = function () { + var carry; + this.bits++; + carry = 1 & this.bb; + this.bb >>= 1; + if (0 === this.bb) { + this.bb = this.readByte(); + carry = 1 & this.bb; + this.bb = this.bb >> 1 | 128; + } + return carry; + }; + GZip.prototype.readBits = function (a) { + var res = 0, i = a; + while (i--) res = res << 1 | this.readBit(); + a && (res = GZip.bitReverse[res] >> 8 - a); + return res; + }; + GZip.prototype.flushBuffer = function () { + this.bIdx = 0; + }; + GZip.prototype.addBuffer = function (a) { + this.buf32k[this.bIdx++] = a; + this.outputArr.push(String.fromCharCode(a)); + 32768 === this.bIdx && (this.bIdx = 0); + }; + GZip.prototype.IsPat = function () { + while (1) { + if (this.fpos[this.len] >= this.fmax) return -1; + if (this.flens[this.fpos[this.len]] === this.len) return this.fpos[this.len]++; + this.fpos[this.len]++; + } + }; + GZip.prototype.Rec = function () { + var curplace = this.Places[this.treepos]; + var tmp; + if (17 === this.len) return -1; + this.treepos++; + this.len++; + tmp = this.IsPat(); + if (tmp >= 0) curplace.b0 = tmp; else { + curplace.b0 = 32768; + if (this.Rec()) return -1; + } + tmp = this.IsPat(); + if (tmp >= 0) { + curplace.b1 = tmp; + curplace.jump = null; + } else { + curplace.b1 = 32768; + curplace.jump = this.Places[this.treepos]; + curplace.jumppos = this.treepos; + if (this.Rec()) return -1; + } + this.len--; + return 0; + }; + GZip.prototype.CreateTree = function (currentTree, numval, lengths, show) { + var i; + this.Places = currentTree; + this.treepos = 0; + this.flens = lengths; + this.fmax = numval; + for (i = 0; i < 17; i++) this.fpos[i] = 0; + this.len = 0; + if (this.Rec()) return -1; + return 0; + }; + GZip.prototype.DecodeValue = function (currentTree) { + var len, i, xtreepos = 0, X = currentTree[xtreepos], b; + while (1) { + b = this.readBit(); + if (b) { + if (!(32768 & X.b1)) return X.b1; + X = X.jump; + len = currentTree.length; + for (i = 0; i < len; i++) if (currentTree[i] === X) { + xtreepos = i; + break; + } + } else { + if (!(32768 & X.b0)) return X.b0; + xtreepos++; + X = currentTree[xtreepos]; + } + } + return -1; + }; + GZip.prototype.DeflateLoop = function () { + var last, c, type, i, len; + do { + last = this.readBit(); + type = this.readBits(2); + if (0 === type) { + var blockLen, cSum; + this.byteAlign(); + blockLen = this.readByte(); + blockLen |= this.readByte() << 8; + cSum = this.readByte(); + cSum |= this.readByte() << 8; + 65535 & (blockLen ^ ~cSum) && document.write("BlockLen checksum mismatch\n"); + while (blockLen--) { + c = this.readByte(); + this.addBuffer(c); + } + } else if (1 === type) { + var j; + while (1) { + j = GZip.bitReverse[this.readBits(7)] >> 1; + if (j > 23) { + j = j << 1 | this.readBit(); + if (j > 199) { + j -= 128; + j = j << 1 | this.readBit(); + } else { + j -= 48; + j > 143 && (j += 136); + } + } else j += 256; + if (j < 256) this.addBuffer(j); else { + if (256 === j) break; + var len, dist; + j -= 257; + len = this.readBits(GZip.cplext[j]) + GZip.cplens[j]; + j = GZip.bitReverse[this.readBits(5)] >> 3; + if (GZip.cpdext[j] > 8) { + dist = this.readBits(8); + dist |= this.readBits(GZip.cpdext[j] - 8) << 8; + } else dist = this.readBits(GZip.cpdext[j]); + dist += GZip.cpdist[j]; + for (j = 0; j < len; j++) { + var c = this.buf32k[this.bIdx - dist & 32767]; + this.addBuffer(c); + } + } + } + } else if (2 === type) { + var j, n, literalCodes, distCodes, lenCodes; + var ll = new Array(320); + literalCodes = 257 + this.readBits(5); + distCodes = 1 + this.readBits(5); + lenCodes = 4 + this.readBits(4); + for (j = 0; j < 19; j++) ll[j] = 0; + for (j = 0; j < lenCodes; j++) ll[GZip.border[j]] = this.readBits(3); + len = this.distanceTree.length; + for (i = 0; i < len; i++) this.distanceTree[i] = new GZip.HufNode(); + if (this.CreateTree(this.distanceTree, 19, ll, 0)) { + this.flushBuffer(); + return 1; + } + n = literalCodes + distCodes; + i = 0; + var z = -1; + while (i < n) { + z++; + j = this.DecodeValue(this.distanceTree); + if (j < 16) ll[i++] = j; else if (16 === j) { + var l; + j = 3 + this.readBits(2); + if (i + j > n) { + this.flushBuffer(); + return 1; + } + l = i ? ll[i - 1] : 0; + while (j--) ll[i++] = l; + } else { + j = 17 === j ? 3 + this.readBits(3) : 11 + this.readBits(7); + if (i + j > n) { + this.flushBuffer(); + return 1; + } + while (j--) ll[i++] = 0; + } + } + len = this.literalTree.length; + for (i = 0; i < len; i++) this.literalTree[i] = new GZip.HufNode(); + if (this.CreateTree(this.literalTree, literalCodes, ll, 0)) { + this.flushBuffer(); + return 1; + } + len = this.literalTree.length; + for (i = 0; i < len; i++) this.distanceTree[i] = new GZip.HufNode(); + var ll2 = new Array(); + for (i = literalCodes; i < ll.length; i++) ll2[i - literalCodes] = ll[i]; + if (this.CreateTree(this.distanceTree, distCodes, ll2, 0)) { + this.flushBuffer(); + return 1; + } + while (1) { + j = this.DecodeValue(this.literalTree); + if (j >= 256) { + var len, dist; + j -= 256; + if (0 === j) break; + j--; + len = this.readBits(GZip.cplext[j]) + GZip.cplens[j]; + j = this.DecodeValue(this.distanceTree); + if (GZip.cpdext[j] > 8) { + dist = this.readBits(8); + dist |= this.readBits(GZip.cpdext[j] - 8) << 8; + } else dist = this.readBits(GZip.cpdext[j]); + dist += GZip.cpdist[j]; + while (len--) { + var c = this.buf32k[this.bIdx - dist & 32767]; + this.addBuffer(c); + } + } else this.addBuffer(j); + } + } + } while (!last); + this.flushBuffer(); + this.byteAlign(); + return 0; + }; + GZip.prototype.unzipFile = function (name) { + var i; + this.gunzip(); + for (i = 0; i < this.unzipped.length; i++) if (this.unzipped[i][1] === name) return this.unzipped[i][0]; + }; + GZip.prototype.nextFile = function () { + this.outputArr = []; + this.modeZIP = false; + var tmp = []; + tmp[0] = this.readByte(); + tmp[1] = this.readByte(); + if (120 === tmp[0] && 218 === tmp[1]) { + this.DeflateLoop(); + this.unzipped[this.files] = [this.outputArr.join(""), "geonext.gxt"]; + this.files++; + } + if (31 === tmp[0] && 139 === tmp[1]) { + this.skipdir(); + this.unzipped[this.files] = [this.outputArr.join(""), "file"]; + this.files++; + } + if (80 === tmp[0] && 75 === tmp[1]) { + this.modeZIP = true; + tmp[2] = this.readByte(); + tmp[3] = this.readByte(); + if (3 === tmp[2] && 4 === tmp[3]) { + tmp[0] = this.readByte(); + tmp[1] = this.readByte(); + this.gpflags = this.readByte(); + this.gpflags |= this.readByte() << 8; + var method = this.readByte(); + method |= this.readByte() << 8; + this.readByte(); + this.readByte(); + this.readByte(); + this.readByte(); + var compSize = this.readByte(); + compSize |= this.readByte() << 8; + compSize |= this.readByte() << 16; + compSize |= this.readByte() << 24; + var size = this.readByte(); + size |= this.readByte() << 8; + size |= this.readByte() << 16; + size |= this.readByte() << 24; + var filelen = this.readByte(); + filelen |= this.readByte() << 8; + var extralen = this.readByte(); + extralen |= this.readByte() << 8; + i = 0; + this.nameBuf = []; + while (filelen--) { + var c = this.readByte(); + "/" === c | ":" === c ? i = 0 : i < GZip.NAMEMAX - 1 && (this.nameBuf[i++] = String.fromCharCode(c)); + } + this.fileout || (this.fileout = this.nameBuf); + var i = 0; + while (i < extralen) { + c = this.readByte(); + i++; + } + if (8 === method) { + this.DeflateLoop(); + this.unzipped[this.files] = [this.outputArr.join(""), this.nameBuf.join("")]; + this.files++; + } + this.skipdir(); + } + } + }; + GZip.prototype.skipdir = function () { + var tmp = []; + var compSize, size, os, i, c; + if (8 & this.gpflags) { + tmp[0] = this.readByte(); + tmp[1] = this.readByte(); + tmp[2] = this.readByte(); + tmp[3] = this.readByte(); + compSize = this.readByte(); + compSize |= this.readByte() << 8; + compSize |= this.readByte() << 16; + compSize |= this.readByte() << 24; + size = this.readByte(); + size |= this.readByte() << 8; + size |= this.readByte() << 16; + size |= this.readByte() << 24; + } + this.modeZIP && this.nextFile(); + tmp[0] = this.readByte(); + if (8 !== tmp[0]) return 0; + this.gpflags = this.readByte(); + this.readByte(); + this.readByte(); + this.readByte(); + this.readByte(); + this.readByte(); + os = this.readByte(); + if (4 & this.gpflags) { + tmp[0] = this.readByte(); + tmp[2] = this.readByte(); + this.len = tmp[0] + 256 * tmp[1]; + for (i = 0; i < this.len; i++) this.readByte(); + } + if (8 & this.gpflags) { + i = 0; + this.nameBuf = []; + while (c = this.readByte()) { + "7" !== c && ":" !== c || (i = 0); + i < GZip.NAMEMAX - 1 && (this.nameBuf[i++] = c); + } + } + if (16 & this.gpflags) while (c = this.readByte()); + if (2 & this.gpflags) { + this.readByte(); + this.readByte(); + } + this.DeflateLoop(); + size = this.readByte(); + size |= this.readByte() << 8; + size |= this.readByte() << 16; + size |= this.readByte() << 24; + this.modeZIP && this.nextFile(); + }; + module.exports = GZip; + }), {}], + 26: [(function (require, module, exports) { + "use strict"; + (function () { + function i(a) { + throw a; + } + var r = void 0, v = !0, aa = this; + function y(a, c) { + var b = a.split("."), e = aa; + !(b[0] in e) && e.execScript && e.execScript("var " + b[0]); + for (var f; b.length && (f = b.shift());) b.length || c === r ? e = e[f] ? e[f] : e[f] = {} : e[f] = c; + } + var H = "undefined" !== typeof Uint8Array && "undefined" !== typeof Uint16Array && "undefined" !== typeof Uint32Array; + function ba(a) { + if ("string" === typeof a) { + var c = a.split(""), b, e; + b = 0; + for (e = c.length; b < e; b++) c[b] = (255 & c[b].charCodeAt(0)) >>> 0; + a = c; + } + for (var f = 1, d = 0, g = a.length, h, m = 0; 0 < g;) { + h = 1024 < g ? 1024 : g; + g -= h; + do { + f += a[m++], d += f; + } while (--h); + f %= 65521; + d %= 65521; + } + return (d << 16 | f) >>> 0; + } + function J(a, c) { + this.index = "number" === typeof c ? c : 0; + this.i = 0; + this.buffer = a instanceof (H ? Uint8Array : Array) ? a : new (H ? Uint8Array : Array)(32768); + 2 * this.buffer.length <= this.index && i(Error("invalid index")); + this.buffer.length <= this.index && this.f(); + } + J.prototype.f = function () { + var a = this.buffer, c, b = a.length, e = new (H ? Uint8Array : Array)(b << 1); + if (H) e.set(a); else for (c = 0; c < b; ++c) e[c] = a[c]; + return this.buffer = e; + }; + J.prototype.d = function (a, c, b) { + var e = this.buffer, f = this.index, d = this.i, g = e[f], h; + b && 1 < c && (a = 8 < c ? (N[255 & a] << 24 | N[a >>> 8 & 255] << 16 | N[a >>> 16 & 255] << 8 | N[a >>> 24 & 255]) >> 32 - c : N[a] >> 8 - c); + if (8 > c + d) g = g << c | a, d += c; else for (h = 0; h < c; ++h) g = g << 1 | a >> c - h - 1 & 1, + 8 === ++d && (d = 0, e[f++] = N[g], g = 0, f === e.length && (e = this.f())); + e[f] = g; + this.buffer = e; + this.i = d; + this.index = f; + }; + J.prototype.finish = function () { + var a = this.buffer, c = this.index, b; + 0 < this.i && (a[c] <<= 8 - this.i, a[c] = N[a[c]], c++); + H ? b = a.subarray(0, c) : (a.length = c, b = a); + return b; + }; + var ca = new (H ? Uint8Array : Array)(256), ha; + for (ha = 0; 256 > ha; ++ha) { + for (var R = ha, ia = R, ja = 7, R = R >>> 1; R; R >>>= 1) ia <<= 1, ia |= 1 & R, + --ja; + ca[ha] = (ia << ja & 255) >>> 0; + } + var N = ca; + var ka = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117]; + H && new Uint32Array(ka); + function la(a) { + this.buffer = new (H ? Uint16Array : Array)(2 * a); + this.length = 0; + } + la.prototype.getParent = function (a) { + return 2 * ((a - 2) / 4 | 0); + }; + la.prototype.push = function (a, c) { + var b, e, f = this.buffer, d; + b = this.length; + f[this.length++] = c; + for (f[this.length++] = a; 0 < b;) { + if (e = this.getParent(b), !(f[b] > f[e])) break; + d = f[b], f[b] = f[e], f[e] = d, d = f[b + 1], f[b + 1] = f[e + 1], f[e + 1] = d, + b = e; + } + return this.length; + }; + la.prototype.pop = function () { + var a, c, b = this.buffer, e, f, d; + c = b[0]; + a = b[1]; + this.length -= 2; + b[0] = b[this.length]; + b[1] = b[this.length + 1]; + for (d = 0; ;) { + f = 2 * d + 2; + if (f >= this.length) break; + f + 2 < this.length && b[f + 2] > b[f] && (f += 2); + if (!(b[f] > b[d])) break; + e = b[d], b[d] = b[f], b[f] = e, e = b[d + 1], b[d + 1] = b[f + 1], b[f + 1] = e; + d = f; + } + return { + index: a, + value: c, + length: this.length + }; + }; + function S(a) { + var c = a.length, b = 0, e = Number.POSITIVE_INFINITY, f, d, g, h, m, j, s, n, l; + for (n = 0; n < c; ++n) a[n] > b && (b = a[n]), a[n] < e && (e = a[n]); + f = 1 << b; + d = new (H ? Uint32Array : Array)(f); + g = 1; + h = 0; + for (m = 2; g <= b;) { + for (n = 0; n < c; ++n) if (a[n] === g) { + j = 0; + s = h; + for (l = 0; l < g; ++l) j = j << 1 | 1 & s, s >>= 1; + for (l = j; l < f; l += m) d[l] = g << 16 | n; + ++h; + } + ++g; + h <<= 1; + m <<= 1; + } + return [d, b, e]; + } + function ma(a, c) { + this.h = pa; + this.w = 0; + this.input = a; + this.b = 0; + c && (c.lazy && (this.w = c.lazy), "number" === typeof c.compressionType && (this.h = c.compressionType), + c.outputBuffer && (this.a = H && c.outputBuffer instanceof Array ? new Uint8Array(c.outputBuffer) : c.outputBuffer), + "number" === typeof c.outputIndex && (this.b = c.outputIndex)); + this.a || (this.a = new (H ? Uint8Array : Array)(32768)); + } + var pa = 2, qa = { + NONE: 0, + r: 1, + j: pa, + N: 3 + }, ra = [], T; + for (T = 0; 288 > T; T++) switch (v) { + case 143 >= T: + ra.push([T + 48, 8]); + break; + + case 255 >= T: + ra.push([T - 144 + 400, 9]); + break; + + case 279 >= T: + ra.push([T - 256 + 0, 7]); + break; + + case 287 >= T: + ra.push([T - 280 + 192, 8]); + break; + + default: + i("invalid literal: " + T); + } + ma.prototype.n = function () { + var a, c, b, e, f = this.input; + switch (this.h) { + case 0: + b = 0; + for (e = f.length; b < e;) { + c = H ? f.subarray(b, b + 65535) : f.slice(b, b + 65535); + b += c.length; + var d = c, g = b === e, h = r, m = r, j = r, s = r, n = r, l = this.a, q = this.b; + if (H) { + for (l = new Uint8Array(this.a.buffer); l.length <= q + d.length + 5;) l = new Uint8Array(l.length << 1); + l.set(this.a); + } + h = g ? 1 : 0; + l[q++] = 0 | h; + m = d.length; + j = 65536 + ~m & 65535; + l[q++] = 255 & m; + l[q++] = m >>> 8 & 255; + l[q++] = 255 & j; + l[q++] = j >>> 8 & 255; + if (H) l.set(d, q), q += d.length, l = l.subarray(0, q); else { + s = 0; + for (n = d.length; s < n; ++s) l[q++] = d[s]; + l.length = q; + } + this.b = q; + this.a = l; + } + break; + + case 1: + var E = new J(new Uint8Array(this.a.buffer), this.b); + E.d(1, 1, v); + E.d(1, 2, v); + var t = sa(this, f), z, K, A; + z = 0; + for (K = t.length; z < K; z++) if (A = t[z], J.prototype.d.apply(E, ra[A]), 256 < A) E.d(t[++z], t[++z], v), + E.d(t[++z], 5), E.d(t[++z], t[++z], v); else if (256 === A) break; + this.a = E.finish(); + this.b = this.a.length; + break; + + case pa: + var x = new J(new Uint8Array(this.a), this.b), B, k, p, D, C, da = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], W, Ma, ea, Na, na, va = Array(19), Oa, $, oa, F, Pa; + B = pa; + x.d(1, 1, v); + x.d(B, 2, v); + k = sa(this, f); + W = ta(this.L, 15); + Ma = ua(W); + ea = ta(this.K, 7); + Na = ua(ea); + for (p = 286; 257 < p && 0 === W[p - 1]; p--); + for (D = 30; 1 < D && 0 === ea[D - 1]; D--); + var Qa = p, Ra = D, M = new (H ? Uint32Array : Array)(Qa + Ra), u, O, w, fa, L = new (H ? Uint32Array : Array)(316), I, G, P = new (H ? Uint8Array : Array)(19); + for (u = O = 0; u < Qa; u++) M[O++] = W[u]; + for (u = 0; u < Ra; u++) M[O++] = ea[u]; + if (!H) { + u = 0; + for (fa = P.length; u < fa; ++u) P[u] = 0; + } + u = I = 0; + for (fa = M.length; u < fa; u += O) { + for (O = 1; u + O < fa && M[u + O] === M[u]; ++O); + w = O; + if (0 === M[u]) if (3 > w) for (; 0 < w--;) L[I++] = 0, P[0]++; else for (; 0 < w;) G = 138 > w ? w : 138, + G > w - 3 && G < w && (G = w - 3), 10 >= G ? (L[I++] = 17, L[I++] = G - 3, P[17]++) : (L[I++] = 18, + L[I++] = G - 11, P[18]++), w -= G; else if (L[I++] = M[u], P[M[u]]++, w--, 3 > w) for (; 0 < w--;) L[I++] = M[u], + P[M[u]]++; else for (; 0 < w;) G = 6 > w ? w : 6, G > w - 3 && G < w && (G = w - 3), + L[I++] = 16, L[I++] = G - 3, P[16]++, w -= G; + } + a = H ? L.subarray(0, I) : L.slice(0, I); + na = ta(P, 7); + for (F = 0; 19 > F; F++) va[F] = na[da[F]]; + for (C = 19; 4 < C && 0 === va[C - 1]; C--); + Oa = ua(na); + x.d(p - 257, 5, v); + x.d(D - 1, 5, v); + x.d(C - 4, 4, v); + for (F = 0; F < C; F++) x.d(va[F], 3, v); + F = 0; + for (Pa = a.length; F < Pa; F++) if ($ = a[F], x.d(Oa[$], na[$], v), 16 <= $) { + F++; + switch ($) { + case 16: + oa = 2; + break; + + case 17: + oa = 3; + break; + + case 18: + oa = 7; + break; + + default: + i("invalid code: " + $); + } + x.d(a[F], oa, v); + } + var Sa = [Ma, W], Ta = [Na, ea], Q, Ua, ga, ya, Va, Wa, Xa, Ya; + Va = Sa[0]; + Wa = Sa[1]; + Xa = Ta[0]; + Ya = Ta[1]; + Q = 0; + for (Ua = k.length; Q < Ua; ++Q) if (ga = k[Q], x.d(Va[ga], Wa[ga], v), 256 < ga) x.d(k[++Q], k[++Q], v), + ya = k[++Q], x.d(Xa[ya], Ya[ya], v), x.d(k[++Q], k[++Q], v); else if (256 === ga) break; + this.a = x.finish(); + this.b = this.a.length; + break; + + default: + i("invalid compression type"); + } + return this.a; + }; + function wa(a, c) { + this.length = a; + this.G = c; + } + function xa() { + var a = za; + switch (v) { + case 3 === a: + return [257, a - 3, 0]; + + case 4 === a: + return [258, a - 4, 0]; + + case 5 === a: + return [259, a - 5, 0]; + + case 6 === a: + return [260, a - 6, 0]; + + case 7 === a: + return [261, a - 7, 0]; + + case 8 === a: + return [262, a - 8, 0]; + + case 9 === a: + return [263, a - 9, 0]; + + case 10 === a: + return [264, a - 10, 0]; + + case 12 >= a: + return [265, a - 11, 1]; + + case 14 >= a: + return [266, a - 13, 1]; + + case 16 >= a: + return [267, a - 15, 1]; + + case 18 >= a: + return [268, a - 17, 1]; + + case 22 >= a: + return [269, a - 19, 2]; + + case 26 >= a: + return [270, a - 23, 2]; + + case 30 >= a: + return [271, a - 27, 2]; + + case 34 >= a: + return [272, a - 31, 2]; + + case 42 >= a: + return [273, a - 35, 3]; + + case 50 >= a: + return [274, a - 43, 3]; + + case 58 >= a: + return [275, a - 51, 3]; + + case 66 >= a: + return [276, a - 59, 3]; + + case 82 >= a: + return [277, a - 67, 4]; + + case 98 >= a: + return [278, a - 83, 4]; + + case 114 >= a: + return [279, a - 99, 4]; + + case 130 >= a: + return [280, a - 115, 4]; + + case 162 >= a: + return [281, a - 131, 5]; + + case 194 >= a: + return [282, a - 163, 5]; + + case 226 >= a: + return [283, a - 195, 5]; + + case 257 >= a: + return [284, a - 227, 5]; + + case 258 === a: + return [285, a - 258, 0]; + + default: + i("invalid length: " + a); + } + } + var Aa = [], za, Ba; + for (za = 3; 258 >= za; za++) Ba = xa(), Aa[za] = Ba[2] << 24 | Ba[1] << 16 | Ba[0]; + var Ca = H ? new Uint32Array(Aa) : Aa; + function sa(a, c) { + function b(a, c) { + var b = a.G, d = [], e = 0, f; + f = Ca[a.length]; + d[e++] = 65535 & f; + d[e++] = f >> 16 & 255; + d[e++] = f >> 24; + var g; + switch (v) { + case 1 === b: + g = [0, b - 1, 0]; + break; + + case 2 === b: + g = [1, b - 2, 0]; + break; + + case 3 === b: + g = [2, b - 3, 0]; + break; + + case 4 === b: + g = [3, b - 4, 0]; + break; + + case 6 >= b: + g = [4, b - 5, 1]; + break; + + case 8 >= b: + g = [5, b - 7, 1]; + break; + + case 12 >= b: + g = [6, b - 9, 2]; + break; + + case 16 >= b: + g = [7, b - 13, 2]; + break; + + case 24 >= b: + g = [8, b - 17, 3]; + break; + + case 32 >= b: + g = [9, b - 25, 3]; + break; + + case 48 >= b: + g = [10, b - 33, 4]; + break; + + case 64 >= b: + g = [11, b - 49, 4]; + break; + + case 96 >= b: + g = [12, b - 65, 5]; + break; + + case 128 >= b: + g = [13, b - 97, 5]; + break; + + case 192 >= b: + g = [14, b - 129, 6]; + break; + + case 256 >= b: + g = [15, b - 193, 6]; + break; + + case 384 >= b: + g = [16, b - 257, 7]; + break; + + case 512 >= b: + g = [17, b - 385, 7]; + break; + + case 768 >= b: + g = [18, b - 513, 8]; + break; + + case 1024 >= b: + g = [19, b - 769, 8]; + break; + + case 1536 >= b: + g = [20, b - 1025, 9]; + break; + + case 2048 >= b: + g = [21, b - 1537, 9]; + break; + + case 3072 >= b: + g = [22, b - 2049, 10]; + break; + + case 4096 >= b: + g = [23, b - 3073, 10]; + break; + + case 6144 >= b: + g = [24, b - 4097, 11]; + break; + + case 8192 >= b: + g = [25, b - 6145, 11]; + break; + + case 12288 >= b: + g = [26, b - 8193, 12]; + break; + + case 16384 >= b: + g = [27, b - 12289, 12]; + break; + + case 24576 >= b: + g = [28, b - 16385, 13]; + break; + + case 32768 >= b: + g = [29, b - 24577, 13]; + break; + + default: + i("invalid distance"); + } + f = g; + d[e++] = f[0]; + d[e++] = f[1]; + d[e++] = f[2]; + var h, j; + h = 0; + for (j = d.length; h < j; ++h) l[q++] = d[h]; + t[d[0]]++; + z[d[3]]++; + E = a.length + c - 1; + n = null; + } + var e, f, d, g, h, m = {}, j, s, n, l = H ? new Uint16Array(2 * c.length) : [], q = 0, E = 0, t = new (H ? Uint32Array : Array)(286), z = new (H ? Uint32Array : Array)(30), K = a.w, A; + if (!H) { + for (d = 0; 285 >= d;) t[d++] = 0; + for (d = 0; 29 >= d;) z[d++] = 0; + } + t[256] = 1; + e = 0; + for (f = c.length; e < f; ++e) { + d = h = 0; + for (g = 3; d < g && e + d !== f; ++d) h = h << 8 | c[e + d]; + m[h] === r && (m[h] = []); + j = m[h]; + if (!(0 < E--)) { + for (; 0 < j.length && 32768 < e - j[0];) j.shift(); + if (e + 3 >= f) { + n && b(n, -1); + d = 0; + for (g = f - e; d < g; ++d) A = c[e + d], l[q++] = A, ++t[A]; + break; + } + if (0 < j.length) { + var x = r, B = r, k = 0, p = r, D = r, C = r, da = r, W = c.length, D = 0, da = j.length; + a: for (; D < da; D++) { + x = j[da - D - 1]; + p = 3; + if (3 < k) { + for (C = k; 3 < C; C--) if (c[x + C - 1] !== c[e + C - 1]) continue a; + p = k; + } + for (; 258 > p && e + p < W && c[x + p] === c[e + p];) ++p; + p > k && (B = x, k = p); + if (258 === p) break; + } + s = new wa(k, e - B); + n ? n.length < s.length ? (A = c[e - 1], l[q++] = A, ++t[A], b(s, 0)) : b(n, -1) : s.length < K ? n = s : b(s, 0); + } else n ? b(n, -1) : (A = c[e], l[q++] = A, ++t[A]); + } + j.push(e); + } + l[q++] = 256; + t[256]++; + a.L = t; + a.K = z; + return H ? l.subarray(0, q) : l; + } + function ta(a, c) { + function b(a) { + var c = z[a][K[a]]; + c === n ? (b(a + 1), b(a + 1)) : --E[c]; + ++K[a]; + } + var e = a.length, f = new la(572), d = new (H ? Uint8Array : Array)(e), g, h, m, j, s; + if (!H) for (j = 0; j < e; j++) d[j] = 0; + for (j = 0; j < e; ++j) 0 < a[j] && f.push(j, a[j]); + g = Array(f.length / 2); + h = new (H ? Uint32Array : Array)(f.length / 2); + if (1 === g.length) return d[f.pop().index] = 1, d; + j = 0; + for (s = f.length / 2; j < s; ++j) g[j] = f.pop(), h[j] = g[j].value; + var n = h.length, l = new (H ? Uint16Array : Array)(c), q = new (H ? Uint8Array : Array)(c), E = new (H ? Uint8Array : Array)(n), t = Array(c), z = Array(c), K = Array(c), A = (1 << c) - n, x = 1 << c - 1, B, k, p, D, C; + l[c - 1] = n; + for (k = 0; k < c; ++k) A < x ? q[k] = 0 : (q[k] = 1, A -= x), A <<= 1, l[c - 2 - k] = (l[c - 1 - k] / 2 | 0) + n; + l[0] = q[0]; + t[0] = Array(l[0]); + z[0] = Array(l[0]); + for (k = 1; k < c; ++k) l[k] > 2 * l[k - 1] + q[k] && (l[k] = 2 * l[k - 1] + q[k]), + t[k] = Array(l[k]), z[k] = Array(l[k]); + for (B = 0; B < n; ++B) E[B] = c; + for (p = 0; p < l[c - 1]; ++p) t[c - 1][p] = h[p], z[c - 1][p] = p; + for (B = 0; B < c; ++B) K[B] = 0; + 1 === q[c - 1] && (--E[0], ++K[c - 1]); + for (k = c - 2; 0 <= k; --k) { + D = B = 0; + C = K[k + 1]; + for (p = 0; p < l[k]; p++) D = t[k + 1][C] + t[k + 1][C + 1], D > h[B] ? (t[k][p] = D, + z[k][p] = n, C += 2) : (t[k][p] = h[B], z[k][p] = B, ++B); + K[k] = 0; + 1 === q[k] && b(k); + } + m = E; + j = 0; + for (s = g.length; j < s; ++j) d[g[j].index] = m[j]; + return d; + } + function ua(a) { + var c = new (H ? Uint16Array : Array)(a.length), b = [], e = [], f = 0, d, g, h, m; + d = 0; + for (g = a.length; d < g; d++) b[a[d]] = 1 + (0 | b[a[d]]); + d = 1; + for (g = 16; d <= g; d++) e[d] = f, f += 0 | b[d], f > 1 << d && i("overcommitted"), + f <<= 1; + 65536 > f && i("undercommitted"); + d = 0; + for (g = a.length; d < g; d++) { + f = e[a[d]]; + e[a[d]] += 1; + h = c[d] = 0; + for (m = a[d]; h < m; h++) c[d] = c[d] << 1 | 1 & f, f >>>= 1; + } + return c; + } + function Da(a, c) { + this.input = a; + this.a = new (H ? Uint8Array : Array)(32768); + this.h = U.j; + var b = {}, e; + !c && (c = {}) || "number" !== typeof c.compressionType || (this.h = c.compressionType); + for (e in c) b[e] = c[e]; + b.outputBuffer = this.a; + this.z = new ma(this.input, b); + } + var U = qa; + Da.prototype.n = function () { + var a, c, b, e, f, d, g, h = 0; + g = this.a; + a = Ea; + switch (a) { + case Ea: + c = Math.LOG2E * Math.log(32768) - 8; + break; + + default: + i(Error("invalid compression method")); + } + b = c << 4 | a; + g[h++] = b; + switch (a) { + case Ea: + switch (this.h) { + case U.NONE: + f = 0; + break; + + case U.r: + f = 1; + break; + + case U.j: + f = 2; + break; + + default: + i(Error("unsupported compression type")); + } + break; + + default: + i(Error("invalid compression method")); + } + e = f << 6 | 0; + g[h++] = e | 31 - (256 * b + e) % 31; + d = ba(this.input); + this.z.b = h; + g = this.z.n(); + h = g.length; + H && (g = new Uint8Array(g.buffer), g.length <= h + 4 && (this.a = new Uint8Array(g.length + 4), + this.a.set(g), g = this.a), g = g.subarray(0, h + 4)); + g[h++] = d >> 24 & 255; + g[h++] = d >> 16 & 255; + g[h++] = d >> 8 & 255; + g[h++] = 255 & d; + return g; + }; + y("Zlib.Deflate", Da); + y("Zlib.Deflate.compress", (function (a, c) { + return new Da(a, c).n(); + })); + y("Zlib.Deflate.CompressionType", U); + y("Zlib.Deflate.CompressionType.NONE", U.NONE); + y("Zlib.Deflate.CompressionType.FIXED", U.r); + y("Zlib.Deflate.CompressionType.DYNAMIC", U.j); + function V(a, c) { + this.k = []; + this.l = 32768; + this.e = this.g = this.c = this.q = 0; + this.input = H ? new Uint8Array(a) : a; + this.s = !1; + this.m = Fa; + this.B = !1; + !c && (c = {}) || (c.index && (this.c = c.index), c.bufferSize && (this.l = c.bufferSize), + c.bufferType && (this.m = c.bufferType), c.resize && (this.B = c.resize)); + switch (this.m) { + case Ga: + this.b = 32768; + this.a = new (H ? Uint8Array : Array)(32768 + this.l + 258); + break; + + case Fa: + this.b = 0; + this.a = new (H ? Uint8Array : Array)(this.l); + this.f = this.J; + this.t = this.H; + this.o = this.I; + break; + + default: + i(Error("invalid inflate mode")); + } + } + var Ga = 0, Fa = 1, Ha = { + D: Ga, + C: Fa + }; + V.prototype.p = function () { + for (; !this.s;) { + var a = X(this, 3); + 1 & a && (this.s = v); + a >>>= 1; + switch (a) { + case 0: + var c = this.input, b = this.c, e = this.a, f = this.b, d = r, g = r, h = r, m = e.length, j = r; + this.e = this.g = 0; + d = c[b++]; + d === r && i(Error("invalid uncompressed block header: LEN (first byte)")); + g = d; + d = c[b++]; + d === r && i(Error("invalid uncompressed block header: LEN (second byte)")); + g |= d << 8; + d = c[b++]; + d === r && i(Error("invalid uncompressed block header: NLEN (first byte)")); + h = d; + d = c[b++]; + d === r && i(Error("invalid uncompressed block header: NLEN (second byte)")); + h |= d << 8; + g === ~h && i(Error("invalid uncompressed block header: length verify")); + b + g > c.length && i(Error("input buffer is broken")); + switch (this.m) { + case Ga: + for (; f + g > e.length;) { + j = m - f; + g -= j; + if (H) e.set(c.subarray(b, b + j), f), f += j, b += j; else for (; j--;) e[f++] = c[b++]; + this.b = f; + e = this.f(); + f = this.b; + } + break; + + case Fa: + for (; f + g > e.length;) e = this.f({ + v: 2 + }); + break; + + default: + i(Error("invalid inflate mode")); + } + if (H) e.set(c.subarray(b, b + g), f), f += g, b += g; else for (; g--;) e[f++] = c[b++]; + this.c = b; + this.b = f; + this.a = e; + break; + + case 1: + this.o(Ia, Ja); + break; + + case 2: + Ka(this); + break; + + default: + i(Error("unknown BTYPE: " + a)); + } + } + return this.t(); + }; + var La = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], Za = H ? new Uint16Array(La) : La, $a = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 258, 258], ab = H ? new Uint16Array($a) : $a, bb = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0], cb = H ? new Uint8Array(bb) : bb, db = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], eb = H ? new Uint16Array(db) : db, fb = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], gb = H ? new Uint8Array(fb) : fb, hb = new (H ? Uint8Array : Array)(288), Y, ib; + Y = 0; + for (ib = hb.length; Y < ib; ++Y) hb[Y] = 143 >= Y ? 8 : 255 >= Y ? 9 : 279 >= Y ? 7 : 8; + var Ia = S(hb), jb = new (H ? Uint8Array : Array)(30), kb, lb; + kb = 0; + for (lb = jb.length; kb < lb; ++kb) jb[kb] = 5; + var Ja = S(jb); + function X(a, c) { + for (var b = a.g, e = a.e, f = a.input, d = a.c, g; e < c;) g = f[d++], g === r && i(Error("input buffer is broken")), + b |= g << e, e += 8; + g = b & (1 << c) - 1; + a.g = b >>> c; + a.e = e - c; + a.c = d; + return g; + } + function mb(a, c) { + for (var b = a.g, e = a.e, f = a.input, d = a.c, g = c[0], h = c[1], m, j, s; e < h;) m = f[d++], + m === r && i(Error("input buffer is broken")), b |= m << e, e += 8; + j = g[b & (1 << h) - 1]; + s = j >>> 16; + a.g = b >> s; + a.e = e - s; + a.c = d; + return 65535 & j; + } + function Ka(a) { + function c(a, b, c) { + var d, e, f, g; + for (g = 0; g < a;) switch (d = mb(this, b), d) { + case 16: + for (f = 3 + X(this, 2); f--;) c[g++] = e; + break; + + case 17: + for (f = 3 + X(this, 3); f--;) c[g++] = 0; + e = 0; + break; + + case 18: + for (f = 11 + X(this, 7); f--;) c[g++] = 0; + e = 0; + break; + + default: + e = c[g++] = d; + } + return c; + } + var b = X(a, 5) + 257, e = X(a, 5) + 1, f = X(a, 4) + 4, d = new (H ? Uint8Array : Array)(Za.length), g, h, m, j; + for (j = 0; j < f; ++j) d[Za[j]] = X(a, 3); + g = S(d); + h = new (H ? Uint8Array : Array)(b); + m = new (H ? Uint8Array : Array)(e); + a.o(S(c.call(a, b, g, h)), S(c.call(a, e, g, m))); + } + V.prototype.o = function (a, c) { + var b = this.a, e = this.b; + this.u = a; + for (var f = b.length - 258, d, g, h, m; 256 !== (d = mb(this, a));) if (256 > d) e >= f && (this.b = e, + b = this.f(), e = this.b), b[e++] = d; else { + g = d - 257; + m = ab[g]; + 0 < cb[g] && (m += X(this, cb[g])); + d = mb(this, c); + h = eb[d]; + 0 < gb[d] && (h += X(this, gb[d])); + e >= f && (this.b = e, b = this.f(), e = this.b); + for (; m--;) b[e] = b[e++ - h]; + } + for (; 8 <= this.e;) this.e -= 8, this.c--; + this.b = e; + }; + V.prototype.I = function (a, c) { + var b = this.a, e = this.b; + this.u = a; + for (var f = b.length, d, g, h, m; 256 !== (d = mb(this, a));) if (256 > d) e >= f && (b = this.f(), + f = b.length), b[e++] = d; else { + g = d - 257; + m = ab[g]; + 0 < cb[g] && (m += X(this, cb[g])); + d = mb(this, c); + h = eb[d]; + 0 < gb[d] && (h += X(this, gb[d])); + e + m > f && (b = this.f(), f = b.length); + for (; m--;) b[e] = b[e++ - h]; + } + for (; 8 <= this.e;) this.e -= 8, this.c--; + this.b = e; + }; + V.prototype.f = function () { + var a = new (H ? Uint8Array : Array)(this.b - 32768), c = this.b - 32768, b, e, f = this.a; + if (H) a.set(f.subarray(32768, a.length)); else { + b = 0; + for (e = a.length; b < e; ++b) a[b] = f[b + 32768]; + } + this.k.push(a); + this.q += a.length; + if (H) f.set(f.subarray(c, c + 32768)); else for (b = 0; 32768 > b; ++b) f[b] = f[c + b]; + this.b = 32768; + return f; + }; + V.prototype.J = function (a) { + var c, b = this.input.length / this.c + 1 | 0, e, f, d, g = this.input, h = this.a; + a && ("number" === typeof a.v && (b = a.v), "number" === typeof a.F && (b += a.F)); + 2 > b ? (e = (g.length - this.c) / this.u[2], d = e / 2 * 258 | 0, f = d < h.length ? h.length + d : h.length << 1) : f = h.length * b; + H ? (c = new Uint8Array(f), c.set(h)) : c = h; + return this.a = c; + }; + V.prototype.t = function () { + var a = 0, c = this.a, b = this.k, e, f = new (H ? Uint8Array : Array)(this.q + (this.b - 32768)), d, g, h, m; + if (0 === b.length) return H ? this.a.subarray(32768, this.b) : this.a.slice(32768, this.b); + d = 0; + for (g = b.length; d < g; ++d) { + e = b[d]; + h = 0; + for (m = e.length; h < m; ++h) f[a++] = e[h]; + } + d = 32768; + for (g = this.b; d < g; ++d) f[a++] = c[d]; + this.k = []; + return this.buffer = f; + }; + V.prototype.H = function () { + var a, c = this.b; + H ? this.B ? (a = new Uint8Array(c), a.set(this.a.subarray(0, c))) : a = this.a.subarray(0, c) : (this.a.length > c && (this.a.length = c), + a = this.a); + return this.buffer = a; + }; + function nb(a, c) { + var b, e; + this.input = a; + this.c = 0; + !c && (c = {}) || (c.index && (this.c = c.index), c.verify && (this.M = c.verify)); + b = a[this.c++]; + e = a[this.c++]; + switch (15 & b) { + case Ea: + this.method = Ea; + break; + + default: + i(Error("unsupported compression method")); + } + 0 !== ((b << 8) + e) % 31 && i(Error("invalid fcheck flag:" + ((b << 8) + e) % 31)); + 32 & e && i(Error("fdict flag is not supported")); + this.A = new V(a, { + index: this.c, + bufferSize: c.bufferSize, + bufferType: c.bufferType, + resize: c.resize + }); + } + nb.prototype.p = function () { + var a = this.input, c, b; + c = this.A.p(); + this.c = this.A.c; + this.M && (b = (a[this.c++] << 24 | a[this.c++] << 16 | a[this.c++] << 8 | a[this.c++]) >>> 0, + b !== ba(c) && i(Error("invalid adler-32 checksum"))); + return c; + }; + y("Zlib.Inflate", nb); + y("Zlib.Inflate.BufferType", Ha); + Ha.ADAPTIVE = Ha.C; + Ha.BLOCK = Ha.D; + y("Zlib.Inflate.prototype.decompress", nb.prototype.p); + var ob = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + H && new Uint16Array(ob); + var pb = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 258, 258]; + H && new Uint16Array(pb); + var qb = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0]; + H && new Uint8Array(qb); + var rb = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577]; + H && new Uint16Array(rb); + var sb = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]; + H && new Uint8Array(sb); + var tb = new (H ? Uint8Array : Array)(288), Z, ub; + Z = 0; + for (ub = tb.length; Z < ub; ++Z) tb[Z] = 143 >= Z ? 8 : 255 >= Z ? 9 : 279 >= Z ? 7 : 8; + S(tb); + var vb = new (H ? Uint8Array : Array)(30), wb, xb; + wb = 0; + for (xb = vb.length; wb < xb; ++wb) vb[wb] = 5; + S(vb); + var Ea = 8; + }).call(window); + var _p = window.Zlib; + _p.Deflate = _p["Deflate"]; + _p.Deflate.compress = _p.Deflate["compress"]; + _p.Inflate = _p["Inflate"]; + _p.Inflate.BufferType = _p.Inflate["BufferType"]; + _p.Inflate.prototype.decompress = _p.Inflate.prototype["decompress"]; + module.exports = _p; + }), {}], + 27: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _enums = _interopRequireDefault(require("../../renderer/enums")); + var _color = _interopRequireDefault(require("../value-types/color")); + var _valueTypes = require("../value-types"); + var _index = _interopRequireDefault(require("../renderer/index")); + var _CCEnum = _interopRequireDefault(require("../platform/CCEnum")); + var _CCComponent2 = _interopRequireDefault(require("../components/CCComponent")); + var _CCClassDecorator = require("../platform/CCClassDecorator"); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _class3, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var RendererLight = null; + false; + RendererLight = require("../../renderer/scene/light"); + var LightType = (0, _CCEnum["default"])({ + DIRECTIONAL: 0, + POINT: 1, + SPOT: 2, + AMBIENT: 3 + }); + var LightShadowType = (0, _CCEnum["default"])({ + NONE: 0, + HARD: 2, + SOFT_PCF3X3: 3, + SOFT_PCF5X5: 4 + }); + var Light = (_dec = (0, _CCClassDecorator.ccclass)("cc.Light"), _dec2 = (0, _CCClassDecorator.menu)("i18n:MAIN_MENU.component.renderers/Light"), + _dec3 = (0, _CCClassDecorator.inspector)("packages://inspector/inspectors/comps/light.js"), + _dec4 = (0, _CCClassDecorator.property)({ + type: LightType + }), _dec5 = (0, _CCClassDecorator.property)({ + type: LightShadowType + }), _dec(_class = _dec2(_class = (0, _CCClassDecorator.executeInEditMode)(_class = _dec3(_class = (_class2 = (_temp = _class3 = (function (_CCComponent) { + _inheritsLoose(Light, _CCComponent); + _createClass(Light, [{ + key: "type", + get: function get() { + return this._type; + }, + set: function set(val) { + this._type = val; + var type = _enums["default"].LIGHT_DIRECTIONAL; + val === LightType.POINT ? type = _enums["default"].LIGHT_POINT : val === LightType.SPOT ? type = _enums["default"].LIGHT_SPOT : val === LightType.AMBIENT && (type = _enums["default"].LIGHT_AMBIENT); + this._light.setType(type); + } + }, { + key: "color", + get: function get() { + return this._color; + }, + set: function set(val) { + this._color.equals(val) || this._color.set(val); + this._light.setColor(val.r / 255, val.g / 255, val.b / 255); + } + }, { + key: "intensity", + get: function get() { + return this._intensity; + }, + set: function set(val) { + this._intensity = val; + this._light.setIntensity(val); + } + }, { + key: "range", + get: function get() { + return this._range; + }, + set: function set(val) { + this._range = val; + this._light.setRange(val); + } + }, { + key: "spotAngle", + get: function get() { + return this._spotAngle; + }, + set: function set(val) { + this._spotAngle = val; + this._light.setSpotAngle((0, _valueTypes.toRadian)(val)); + } + }, { + key: "spotExp", + get: function get() { + return this._spotExp; + }, + set: function set(val) { + this._spotExp = val; + this._light.setSpotExp(val); + } + }, { + key: "shadowType", + get: function get() { + return this._shadowType; + }, + set: function set(val) { + this._shadowType = val; + this._light.setShadowType(val); + } + }, { + key: "shadowResolution", + get: function get() { + return this._shadowResolution; + }, + set: function set(val) { + this._shadowResolution = val; + this._light.setShadowResolution(val); + } + }, { + key: "shadowDarkness", + get: function get() { + return this._shadowDarkness; + }, + set: function set(val) { + this._shadowDarkness = val; + this._light.setShadowDarkness(val); + } + }, { + key: "shadowMinDepth", + get: function get() { + return this._shadowMinDepth; + }, + set: function set(val) { + this._shadowMinDepth = val; + this._light.setShadowMinDepth(val); + } + }, { + key: "shadowMaxDepth", + get: function get() { + return this._shadowMaxDepth; + }, + set: function set(val) { + this._shadowMaxDepth = val; + this._light.setShadowMaxDepth(val); + } + }, { + key: "shadowFrustumSize", + get: function get() { + return this._shadowFrustumSize; + }, + set: function set(val) { + this._shadowFrustumSize = val; + this._light.setShadowFrustumSize(val); + } + }]); + function Light() { + var _this; + _this = _CCComponent.call(this) || this; + _initializerDefineProperty(_this, "_type", _descriptor, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_color", _descriptor2, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_intensity", _descriptor3, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_range", _descriptor4, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_spotAngle", _descriptor5, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_spotExp", _descriptor6, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowType", _descriptor7, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowResolution", _descriptor8, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowDarkness", _descriptor9, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowMinDepth", _descriptor10, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowMaxDepth", _descriptor11, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowFrustumSize", _descriptor12, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_shadowBias", _descriptor13, _assertThisInitialized(_this)); + _this._light = new RendererLight(); + return _this; + } + var _proto = Light.prototype; + _proto.onLoad = function onLoad() { + this._light.setNode(this.node); + this.type = this._type; + this.color = this._color; + this.intensity = this._intensity; + this.range = this._range; + this.spotAngle = this._spotAngle; + this.spotExp = this._spotExp; + this.shadowType = this._shadowType; + this.shadowResolution = this._shadowResolution; + this.shadowDarkness = this._shadowDarkness; + this.shadowMaxDepth = this._shadowMaxDepth; + this.shadowFrustumSize = this._shadowFrustumSize; + this.shadowBias = this._shadowBias; + }; + _proto.onEnable = function onEnable() { + _index["default"].scene.addLight(this._light); + }; + _proto.onDisable = function onDisable() { + _index["default"].scene.removeLight(this._light); + }; + return Light; + })(_CCComponent2["default"]), _class3.Type = LightType, _class3.ShadowType = LightShadowType, + _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_type", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return LightType.DIRECTIONAL; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_color", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _color["default"].WHITE; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "_intensity", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "_range", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1e3; + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "_spotAngle", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 60; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "_spotExp", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "_shadowType", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return LightShadowType.NONE; + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "_shadowResolution", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1024; + } + }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "_shadowDarkness", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .5; + } + }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "_shadowMinDepth", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "_shadowMaxDepth", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 4096; + } + }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "_shadowFrustumSize", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1024; + } + }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "_shadowBias", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 5e-4; + } + }), _applyDecoratedDescriptor(_class2.prototype, "type", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "type"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "color", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "color"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "intensity", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "intensity"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "range", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "range"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "spotAngle", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "spotAngle"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "spotExp", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "spotExp"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "shadowType", [_dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "shadowType"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "shadowResolution", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "shadowResolution"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "shadowDarkness", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "shadowDarkness"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "shadowMinDepth", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "shadowMinDepth"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "shadowMaxDepth", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "shadowMaxDepth"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "shadowFrustumSize", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "shadowFrustumSize"), _class2.prototype), + _class2)) || _class) || _class) || _class) || _class); + exports["default"] = Light; + cc.Light = Light; + module.exports = exports["default"]; + }), { + "../../renderer/enums": 367, + "../../renderer/scene/light": 393, + "../components/CCComponent": 149, + "../platform/CCClassDecorator": 240, + "../platform/CCEnum": 241, + "../renderer/index": 271, + "../value-types": 339, + "../value-types/color": 338 + }], + 28: [(function (require, module, exports) { + "use strict"; + var Model = cc.Class({ + name: "cc.Model", + extends: cc.Asset, + ctor: function ctor() { + this._rootNode = null; + this.loaded = false; + }, + properties: { + _nodes: { + default: [] + }, + _precomputeJointMatrix: false, + nodes: { + get: function get() { + return this._nodes; + } + }, + rootNode: { + get: function get() { + return this._rootNode; + } + }, + precomputeJointMatrix: { + get: function get() { + return this._precomputeJointMatrix; + } + } + }, + onLoad: function onLoad() { + var nodes = this._nodes; + this._rootNode = nodes[0]; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + node.position = cc.v3.apply(this, node.position); + node.scale = cc.v3.apply(this, node.scale); + node.quat = cc.quat.apply(this, node.quat); + node.uniqueBindPose && (node.uniqueBindPose = cc.mat4.apply(this, node.uniqueBindPose)); + var pose = node.bindpose; + if (pose) for (var _i in pose) pose[_i] = cc.mat4.apply(this, pose[_i]); + var children = node.children; + if (children) for (var _i2 = 0; _i2 < children.length; _i2++) children[_i2] = nodes[children[_i2]]; + } + } + }); + cc.Model = module.exports = Model; + }), {}], + 29: [(function (require, module, exports) { + "use strict"; + var _quat = _interopRequireDefault(require("../value-types/quat")); + var _vec = _interopRequireDefault(require("../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _quat_tmp = cc.quat(); + var _vec3_tmp = cc.v3(); + cc.Rotate3DTo = cc.Class({ + name: "cc.Rotate3DTo", + extends: cc.ActionInterval, + ctor: function ctor(duration, dstAngleX, dstAngleY, dstAngleZ) { + this._startQuat = cc.quat(); + this._dstQuat = cc.quat(); + void 0 !== dstAngleX && this.initWithDuration(duration, dstAngleX, dstAngleY, dstAngleZ); + }, + initWithDuration: function initWithDuration(duration, dstAngleX, dstAngleY, dstAngleZ) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + var dstQuat = this._dstQuat; + if (dstAngleX instanceof cc.Quat) dstQuat.set(dstAngleX); else { + if (dstAngleX instanceof cc.Vec3) { + dstAngleY = dstAngleX.y; + dstAngleZ = dstAngleX.z; + dstAngleX = dstAngleX.x; + } else { + dstAngleY = dstAngleY || 0; + dstAngleZ = dstAngleZ || 0; + } + _quat["default"].fromEuler(dstQuat, dstAngleX, dstAngleY, dstAngleZ); + } + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.Rotate3DTo(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._dstQuat); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + this._startQuat.set(target.quat); + }, + reverse: function reverse() { + cc.logID(1016); + }, + update: function update(dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + _quat["default"].slerp(_quat_tmp, this._startQuat, this._dstQuat, dt); + this.target.setRotation(_quat_tmp); + } + } + }); + cc.rotate3DTo = function (duration, dstAngleX, dstAngleY, dstAngleZ) { + return new cc.Rotate3DTo(duration, dstAngleX, dstAngleY, dstAngleZ); + }; + cc.Rotate3DBy = cc.Class({ + name: "cc.Rotate3DBy", + extends: cc.ActionInterval, + ctor: function ctor(duration, deltaAngleX, deltaAngleY, deltaAngleZ) { + this._startQuat = cc.quat(); + this._dstQuat = cc.quat(); + this._deltaAngle = cc.v3(); + void 0 !== deltaAngleX && this.initWithDuration(duration, deltaAngleX, deltaAngleY, deltaAngleZ); + }, + initWithDuration: function initWithDuration(duration, deltaAngleX, deltaAngleY, deltaAngleZ) { + if (cc.ActionInterval.prototype.initWithDuration.call(this, duration)) { + if (deltaAngleX instanceof cc.Vec3) { + deltaAngleY = deltaAngleX.y; + deltaAngleZ = deltaAngleX.z; + deltaAngleX = deltaAngleX.x; + } else { + deltaAngleY = deltaAngleY || 0; + deltaAngleZ = deltaAngleZ || 0; + } + _vec["default"].set(this._deltaAngle, deltaAngleX, deltaAngleY, deltaAngleZ); + return true; + } + return false; + }, + clone: function clone() { + var action = new cc.Rotate3DBy(); + this._cloneDecoration(action); + action.initWithDuration(this._duration, this._angle); + return action; + }, + startWithTarget: function startWithTarget(target) { + cc.ActionInterval.prototype.startWithTarget.call(this, target); + var startAngle = target.eulerAngles; + var deltaAngle = this._deltaAngle; + _quat["default"].fromEuler(this._dstQuat, startAngle.x + deltaAngle.x, startAngle.y + deltaAngle.y, startAngle.z + deltaAngle.z); + this._startQuat.set(target.quat); + }, + update: (function () { + var RAD = Math.PI / 180; + return function (dt) { + dt = this._computeEaseTime(dt); + if (this.target) { + _quat["default"].slerp(_quat_tmp, this._startQuat, this._dstQuat, dt); + this.target.setRotation(_quat_tmp); + } + }; + })(), + reverse: function reverse() { + var angle = this._angle; + _vec3_tmp.x = -angle.x; + _vec3_tmp.y = -angle.y; + _vec3_tmp.z = -angle.z; + var action = new cc.Rotate3DBy(this._duration, _vec3_tmp); + this._cloneDecoration(action); + this._reverseEaseList(action); + return action; + } + }); + cc.rotate3DBy = function (duration, deltaAngleX, deltaAngleY, deltaAngleZ) { + return new cc.Rotate3DBy(duration, deltaAngleX, deltaAngleY, deltaAngleZ); + }; + }), { + "../value-types/quat": 342, + "../value-types/vec3": 349 + }], + 30: [(function (require, module, exports) { + "use strict"; + true, true; + require("./primitive"); + require("./physics/exports/physics-builtin"); + require("./physics/exports/physics-cannon"); + require("./physics/exports/physics-framework"); + require("./CCModel"); + require("./skeleton/CCSkeleton"); + require("./skeleton/CCSkeletonAnimationClip"); + require("./actions"); + require("./physics/framework/assets/physics-material"); + true; + require("./skeleton/CCSkeletonAnimation"); + require("./skeleton/CCSkinnedMeshRenderer"); + require("./skeleton/skinned-mesh-renderer"); + require("./CCLightComponent"); + require("./particle/particle-system-3d"); + require("./particle/renderer/particle-system-3d-renderer"); + }), { + "./CCLightComponent": 27, + "./CCModel": 28, + "./actions": 29, + "./particle/particle-system-3d": 46, + "./particle/renderer/particle-system-3d-renderer": 49, + "./physics/exports/physics-builtin": void 0, + "./physics/exports/physics-cannon": void 0, + "./physics/exports/physics-framework": void 0, + "./physics/framework/assets/physics-material": void 0, + "./primitive": 56, + "./skeleton/CCSkeleton": 65, + "./skeleton/CCSkeletonAnimation": 66, + "./skeleton/CCSkeletonAnimationClip": 67, + "./skeleton/CCSkinnedMeshRenderer": 68, + "./skeleton/skinned-mesh-renderer": 69 + }], + 31: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _gradientRange = _interopRequireDefault(require("./gradient-range")); + var _dec, _dec2, _class, _class2, _descriptor, _descriptor2, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var COLOR_OVERTIME_RAND_OFFSET = 91041; + var ColorOvertimeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.ColorOvertimeModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: _gradientRange["default"] + }), _dec(_class = (_class2 = (_temp = (function () { + function ColorOvertimeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "color", _descriptor2, this); + } + var _proto = ColorOvertimeModule.prototype; + _proto.animate = function animate(particle) { + if (this.enable) { + particle.color.set(particle.startColor); + particle.color.multiply(this.color.evaluate(1 - particle.remainingLifetime / particle.startLifetime, (0, + _valueTypes.pseudoRandom)(particle.randomSeed + COLOR_OVERTIME_RAND_OFFSET))); + } + }; + return ColorOvertimeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "color", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradientRange["default"](); + } + }), _class2)) || _class); + exports["default"] = ColorOvertimeModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "./gradient-range": 34 + }], + 32: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = exports.Mode = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _CCEnum = _interopRequireDefault(require("../../../platform/CCEnum")); + var _valueTypes = require("../../../value-types"); + var _curve = require("../curve"); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _class3, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var SerializableTable = false; + var Mode = (0, _CCEnum["default"])({ + Constant: 0, + Curve: 1, + TwoCurves: 2, + TwoConstants: 3 + }); + exports.Mode = Mode; + var CurveRange = (_dec = (0, _CCClassDecorator.ccclass)("cc.CurveRange"), _dec2 = (0, + _CCClassDecorator.property)({ + type: Mode + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curve.AnimationCurve + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curve.AnimationCurve + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curve.AnimationCurve + }), _dec(_class = (_class2 = (_temp = _class3 = (function () { + function CurveRange() { + _initializerDefineProperty(this, "mode", _descriptor, this); + _initializerDefineProperty(this, "curve", _descriptor2, this); + _initializerDefineProperty(this, "curveMin", _descriptor3, this); + _initializerDefineProperty(this, "curveMax", _descriptor4, this); + _initializerDefineProperty(this, "constant", _descriptor5, this); + _initializerDefineProperty(this, "constantMin", _descriptor6, this); + _initializerDefineProperty(this, "constantMax", _descriptor7, this); + _initializerDefineProperty(this, "multiplier", _descriptor8, this); + } + var _proto = CurveRange.prototype; + _proto.evaluate = function evaluate(time, rndRatio) { + switch (this.mode) { + case Mode.Constant: + return this.constant; + + case Mode.Curve: + return this.curve.evaluate(time) * this.multiplier; + + case Mode.TwoCurves: + return (0, _valueTypes.lerp)(this.curveMin.evaluate(time), this.curveMax.evaluate(time), rndRatio) * this.multiplier; + + case Mode.TwoConstants: + return (0, _valueTypes.lerp)(this.constantMin, this.constantMax, rndRatio); + } + }; + _proto.getMax = function getMax() { + switch (this.mode) { + case Mode.Constant: + return this.constant; + + case Mode.Curve: + return this.multiplier; + + case Mode.TwoConstants: + return this.constantMax; + + case Mode.TwoCurves: + return this.multiplier; + } + return 0; + }; + return CurveRange; + })(), _class3.Mode = Mode, _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "mode", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return Mode.Constant; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "curve", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curve.AnimationCurve(); + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "curveMin", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curve.AnimationCurve(); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "curveMax", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curve.AnimationCurve(); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "constant", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "constantMin", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "constantMax", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "multiplier", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _class2)) || _class); + exports["default"] = CurveRange; + false; + cc.CurveRange = CurveRange; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../platform/CCEnum": 241, + "../../../value-types": 339, + "../curve": 42 + }], + 33: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _enum = require("../enum"); + var _particleGeneralFunction = require("../particle-general-function"); + var _curveRange = _interopRequireDefault(require("./curve-range")); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var FORCE_OVERTIME_RAND_OFFSET = 212165; + var _temp_v3 = cc.v3(); + var ForceOvertimeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.ForceOvertimeModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: _enum.Space + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1], + displayOrder: 4 + }), _dec(_class = (_class2 = (_temp = (function () { + function ForceOvertimeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "space", _descriptor2, this); + _initializerDefineProperty(this, "x", _descriptor3, this); + _initializerDefineProperty(this, "y", _descriptor4, this); + _initializerDefineProperty(this, "z", _descriptor5, this); + this.randomized = false; + this.rotation = null; + this.needTransform = false; + this.rotation = new _valueTypes.Quat(); + this.needTransform = false; + } + var _proto = ForceOvertimeModule.prototype; + _proto.update = function update(space, worldTransform) { + this.needTransform = (0, _particleGeneralFunction.calculateTransform)(space, this.space, worldTransform, this.rotation); + }; + _proto.animate = function animate(p, dt) { + var normalizedTime = 1 - p.remainingLifetime / p.startLifetime; + var force = _valueTypes.Vec3.set(_temp_v3, this.x.evaluate(normalizedTime, (0, _valueTypes.pseudoRandom)(p.randomSeed + FORCE_OVERTIME_RAND_OFFSET)), this.y.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + FORCE_OVERTIME_RAND_OFFSET)), this.z.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + FORCE_OVERTIME_RAND_OFFSET))); + this.needTransform && _valueTypes.Vec3.transformQuat(force, force, this.rotation); + _valueTypes.Vec3.scaleAndAdd(p.velocity, p.velocity, force, dt); + }; + return ForceOvertimeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "space", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.Space.Local; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "x", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "y", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "z", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _class2)) || _class); + exports["default"] = ForceOvertimeModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "../enum": 44, + "../particle-general-function": 45, + "./curve-range": 32 + }], + 34: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _CCEnum = _interopRequireDefault(require("../../../platform/CCEnum")); + var _gradient = require("./gradient"); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _class3, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var GRADIENT_MODE_FIX = 0; + var GRADIENT_MODE_BLEND = 1; + var GRADIENT_RANGE_MODE_COLOR = 0; + var GRADIENT_RANGE_MODE_TWO_COLOR = 1; + var GRADIENT_RANGE_MODE_RANDOM_COLOR = 2; + var GRADIENT_RANGE_MODE_GRADIENT = 3; + var GRADIENT_RANGE_MODE_TWO_GRADIENT = 4; + var SerializableTable = false; + var Mode = (0, _CCEnum["default"])({ + Color: 0, + Gradient: 1, + TwoColors: 2, + TwoGradients: 3, + RandomColor: 4 + }); + var GradientRange = (_dec = (0, _CCClassDecorator.ccclass)("cc.GradientRange"), + _dec2 = (0, _CCClassDecorator.property)({ + type: Mode + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _gradient.Gradient + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _gradient.Gradient + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _gradient.Gradient + }), _dec(_class = (_class2 = (_temp = _class3 = (function () { + function GradientRange() { + _initializerDefineProperty(this, "_mode", _descriptor, this); + _initializerDefineProperty(this, "_color", _descriptor2, this); + _initializerDefineProperty(this, "color", _descriptor3, this); + _initializerDefineProperty(this, "colorMin", _descriptor4, this); + _initializerDefineProperty(this, "colorMax", _descriptor5, this); + _initializerDefineProperty(this, "gradient", _descriptor6, this); + _initializerDefineProperty(this, "gradientMin", _descriptor7, this); + _initializerDefineProperty(this, "gradientMax", _descriptor8, this); + } + var _proto = GradientRange.prototype; + _proto.evaluate = function evaluate(time, rndRatio) { + switch (this._mode) { + case Mode.Color: + return this.color; + + case Mode.TwoColors: + this.colorMin.lerp(this.colorMax, rndRatio, this._color); + return this._color; + + case Mode.RandomColor: + return this.gradient.randomColor(); + + case Mode.Gradient: + return this.gradient.evaluate(time); + + case Mode.TwoGradients: + this.gradientMin.evaluate(time).lerp(this.gradientMax.evaluate(time), rndRatio, this._color); + return this._color; + + default: + return this.color; + } + }; + _createClass(GradientRange, [{ + key: "mode", + get: function get() { + return this._mode; + }, + set: function set(m) { + false; + this._mode = m; + } + }]); + return GradientRange; + })(), _class3.Mode = Mode, _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_mode", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return Mode.Color; + } + }), _applyDecoratedDescriptor(_class2.prototype, "mode", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "mode"), _class2.prototype), + _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_color", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return cc.Color.WHITE.clone(); + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "color", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return cc.Color.WHITE.clone(); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "colorMin", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return cc.Color.WHITE.clone(); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "colorMax", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return cc.Color.WHITE.clone(); + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "gradient", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradient.Gradient(); + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "gradientMin", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradient.Gradient(); + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "gradientMax", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradient.Gradient(); + } + }), _class2)) || _class); + exports["default"] = GradientRange; + false; + cc.GradientRange = GradientRange; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../platform/CCEnum": 241, + "./gradient": 35 + }], + 35: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.Gradient = exports.AlphaKey = exports.ColorKey = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _CCEnum = _interopRequireDefault(require("../../../platform/CCEnum")); + var _valueTypes = require("../../../value-types"); + var _dec, _class, _class2, _descriptor, _descriptor2, _temp, _dec2, _class4, _class5, _descriptor3, _descriptor4, _temp2, _dec3, _dec4, _dec5, _dec6, _class7, _class8, _descriptor5, _descriptor6, _descriptor7, _class9, _temp3; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var Mode = (0, _CCEnum["default"])({ + Blend: 0, + Fixed: 1 + }); + var ColorKey = (_dec = (0, _CCClassDecorator.ccclass)("cc.ColorKey"), _dec(_class = (_class2 = (_temp = function ColorKey() { + _initializerDefineProperty(this, "color", _descriptor, this); + _initializerDefineProperty(this, "time", _descriptor2, this); + }, _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "color", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return cc.Color.WHITE.clone(); + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "time", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _class2)) || _class); + exports.ColorKey = ColorKey; + var AlphaKey = (_dec2 = (0, _CCClassDecorator.ccclass)("cc.AlphaKey"), _dec2(_class4 = (_class5 = (_temp2 = function AlphaKey() { + _initializerDefineProperty(this, "alpha", _descriptor3, this); + _initializerDefineProperty(this, "time", _descriptor4, this); + }, _temp2), _descriptor3 = _applyDecoratedDescriptor(_class5.prototype, "alpha", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class5.prototype, "time", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _class5)) || _class4); + exports.AlphaKey = AlphaKey; + var Gradient = (_dec3 = (0, _CCClassDecorator.ccclass)("cc.Gradient"), _dec4 = (0, + _CCClassDecorator.property)({ + type: [ColorKey] + }), _dec5 = (0, _CCClassDecorator.property)({ + type: [AlphaKey] + }), _dec6 = (0, _CCClassDecorator.property)({ + type: Mode + }), _dec3(_class7 = (_class8 = (_temp3 = _class9 = (function () { + function Gradient() { + _initializerDefineProperty(this, "colorKeys", _descriptor5, this); + _initializerDefineProperty(this, "alphaKeys", _descriptor6, this); + _initializerDefineProperty(this, "mode", _descriptor7, this); + this._color = null; + this._color = cc.Color.WHITE.clone(); + } + var _proto = Gradient.prototype; + _proto.setKeys = function setKeys(colorKeys, alphaKeys) { + this.colorKeys = colorKeys; + this.alphaKeys = alphaKeys; + }; + _proto.sortKeys = function sortKeys() { + this.colorKeys.length > 1 && this.colorKeys.sort((function (a, b) { + return a.time - b.time; + })); + this.alphaKeys.length > 1 && this.alphaKeys.sort((function (a, b) { + return a.time - b.time; + })); + }; + _proto.evaluate = function evaluate(time) { + this.getRGB(time); + this._color._fastSetA(this.getAlpha(time)); + return this._color; + }; + _proto.randomColor = function randomColor() { + var c = this.colorKeys[Math.trunc(Math.random() * this.colorKeys.length)]; + var a = this.alphaKeys[Math.trunc(Math.random() * this.alphaKeys.length)]; + this._color.set(c.color); + this._color._fastSetA(a.alpha); + return this._color; + }; + _proto.getRGB = function getRGB(time) { + if (!(this.colorKeys.length > 1)) { + if (1 === this.colorKeys.length) { + this._color.set(this.colorKeys[0].color); + return this._color; + } + this._color.set(cc.Color.WHITE); + return this._color; + } + time = (0, _valueTypes.repeat)(time, 1); + for (var i = 1; i < this.colorKeys.length; ++i) { + var preTime = this.colorKeys[i - 1].time; + var curTime = this.colorKeys[i].time; + if (time >= preTime && time < curTime) { + if (this.mode === Mode.Fixed) return this.colorKeys[i].color; + var factor = (time - preTime) / (curTime - preTime); + this.colorKeys[i - 1].color.lerp(this.colorKeys[i].color, factor, this._color); + return this._color; + } + } + var lastIndex = this.colorKeys.length - 1; + time < this.colorKeys[0].time ? cc.Color.BLACK.lerp(this.colorKeys[0].color, time / this.colorKeys[0].time, this._color) : time > this.colorKeys[lastIndex].time && this.colorKeys[lastIndex].color.lerp(cc.Color.BLACK, (time - this.colorKeys[lastIndex].time) / (1 - this.colorKeys[lastIndex].time), this._color); + }; + _proto.getAlpha = function getAlpha(time) { + if (!(this.alphaKeys.length > 1)) return 1 === this.alphaKeys.length ? this.alphaKeys[0].alpha : 255; + time = (0, _valueTypes.repeat)(time, 1); + for (var i = 1; i < this.alphaKeys.length; ++i) { + var preTime = this.alphaKeys[i - 1].time; + var curTime = this.alphaKeys[i].time; + if (time >= preTime && time < curTime) { + if (this.mode === Mode.Fixed) return this.alphaKeys[i].alpha; + var factor = (time - preTime) / (curTime - preTime); + return (0, _valueTypes.lerp)(this.alphaKeys[i - 1].alpha, this.alphaKeys[i].alpha, factor); + } + } + var lastIndex = this.alphaKeys.length - 1; + if (time < this.alphaKeys[0].time) return (0, _valueTypes.lerp)(255, this.alphaKeys[0].alpha, time / this.alphaKeys[0].time); + if (time > this.alphaKeys[lastIndex].time) return (0, _valueTypes.lerp)(this.alphaKeys[lastIndex].alpha, 255, (time - this.alphaKeys[lastIndex].time) / (1 - this.alphaKeys[lastIndex].time)); + }; + return Gradient; + })(), _class9.Mode = Mode, _temp3), _descriptor5 = _applyDecoratedDescriptor(_class8.prototype, "colorKeys", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Array(); + } + }), _descriptor6 = _applyDecoratedDescriptor(_class8.prototype, "alphaKeys", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Array(); + } + }), _descriptor7 = _applyDecoratedDescriptor(_class8.prototype, "mode", [_dec6], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return Mode.Blend; + } + }), _class8)) || _class7); + exports.Gradient = Gradient; + cc.ColorKey = ColorKey; + cc.AlphaKey = AlphaKey; + cc.Gradient = Gradient; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../platform/CCEnum": 241, + "../../../value-types": 339 + }], + 36: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _enum = require("../enum"); + var _curveRange = _interopRequireDefault(require("./curve-range")); + var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var LIMIT_VELOCITY_RAND_OFFSET = 23541; + var _temp_v3 = cc.v3(); + var _temp_v3_1 = cc.v3(); + function dampenBeyondLimit(vel, limit, dampen) { + var sgn = Math.sign(vel); + var abs = Math.abs(vel); + abs > limit && (abs = (0, _valueTypes.lerp)(abs, limit, dampen)); + return abs * sgn; + } + var LimitVelocityOvertimeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.LimitVelocityOvertimeModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: _enum.Space + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec6 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec(_class = (_class2 = (_temp = (function () { + function LimitVelocityOvertimeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "space", _descriptor2, this); + _initializerDefineProperty(this, "separateAxes", _descriptor3, this); + _initializerDefineProperty(this, "limit", _descriptor4, this); + _initializerDefineProperty(this, "limitX", _descriptor5, this); + _initializerDefineProperty(this, "limitY", _descriptor6, this); + _initializerDefineProperty(this, "limitZ", _descriptor7, this); + _initializerDefineProperty(this, "dampen", _descriptor8, this); + this.drag = null; + this.multiplyDragByParticleSize = false; + this.multiplyDragByParticleVelocity = false; + this.rotation = null; + this.needTransform = false; + this.rotation = new _valueTypes.Quat(); + this.needTransform = false; + } + var _proto = LimitVelocityOvertimeModule.prototype; + _proto.update = function update(space, worldTransform) { + this.needTransform = calculateTransform(space, this.space, worldTransform, this.rotation); + }; + _proto.animate = function animate(p) { + var normalizedTime = 1 - p.remainingLifetime / p.startLifetime; + var dampedVel = _temp_v3; + if (this.separateAxes) { + _valueTypes.Vec3.set(_temp_v3_1, this.limitX.evaluate(normalizedTime, (0, _valueTypes.pseudoRandom)(p.randomSeed + LIMIT_VELOCITY_RAND_OFFSET)), this.limitY.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + LIMIT_VELOCITY_RAND_OFFSET)), this.limitZ.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + LIMIT_VELOCITY_RAND_OFFSET))); + this.needTransform && _valueTypes.Vec3.transformQuat(_temp_v3_1, _temp_v3_1, this.rotation); + _valueTypes.Vec3.set(dampedVel, dampenBeyondLimit(p.ultimateVelocity.x, _temp_v3_1.x, this.dampen), dampenBeyondLimit(p.ultimateVelocity.y, _temp_v3_1.y, this.dampen), dampenBeyondLimit(p.ultimateVelocity.z, _temp_v3_1.z, this.dampen)); + } else { + _valueTypes.Vec3.normalize(dampedVel, p.ultimateVelocity); + _valueTypes.Vec3.scale(dampedVel, dampedVel, dampenBeyondLimit(p.ultimateVelocity.len(), this.limit.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + LIMIT_VELOCITY_RAND_OFFSET)), this.dampen)); + } + _valueTypes.Vec3.copy(p.ultimateVelocity, dampedVel); + }; + return LimitVelocityOvertimeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "space", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.Space.Local; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "separateAxes", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "limit", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "limitX", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "limitY", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "limitZ", [_dec6], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "dampen", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 3; + } + }), _class2)) || _class); + exports["default"] = LimitVelocityOvertimeModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "../enum": 44, + "./curve-range": 32 + }], + 37: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _curveRange = _interopRequireDefault(require("./curve-range")); + var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var ROTATION_OVERTIME_RAND_OFFSET = 125292; + var RotationOvertimeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.RotationOvertimeModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1], + radian: true + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1], + radian: true + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1], + radian: true + }), _dec(_class = (_class2 = (_temp = (function () { + _createClass(RotationOvertimeModule, [{ + key: "separateAxes", + get: function get() { + return this._separateAxes; + }, + set: function set(val) { + val ? console.error("rotation overtime separateAxes is not supported!") : this._separateAxes = val; + } + }]); + function RotationOvertimeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "_separateAxes", _descriptor2, this); + _initializerDefineProperty(this, "x", _descriptor3, this); + _initializerDefineProperty(this, "y", _descriptor4, this); + _initializerDefineProperty(this, "z", _descriptor5, this); + } + var _proto = RotationOvertimeModule.prototype; + _proto.animate = function animate(p, dt) { + var normalizedTime = 1 - p.remainingLifetime / p.startLifetime; + if (this._separateAxes) { + var rotationRand = (0, _valueTypes.pseudoRandom)(p.randomSeed + ROTATION_OVERTIME_RAND_OFFSET); + p.rotation.x += this.x.evaluate(normalizedTime, rotationRand) * dt; + p.rotation.y += this.y.evaluate(normalizedTime, rotationRand) * dt; + p.rotation.z += this.z.evaluate(normalizedTime, rotationRand) * dt; + } else p.rotation.x += this.z.evaluate(normalizedTime, (0, _valueTypes.pseudoRandom)(p.randomSeed + ROTATION_OVERTIME_RAND_OFFSET)) * dt; + }; + return RotationOvertimeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_separateAxes", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _applyDecoratedDescriptor(_class2.prototype, "separateAxes", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "separateAxes"), _class2.prototype), + _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "x", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "y", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "z", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _class2)) || _class); + exports["default"] = RotationOvertimeModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "./curve-range": 32 + }], + 38: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _curveRange = _interopRequireDefault(require("./curve-range")); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var SIZE_OVERTIME_RAND_OFFSET = 39825; + var SizeOvertimeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.SizeOvertimeModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec(_class = (_class2 = (_temp = (function () { + function SizeOvertimeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "separateAxes", _descriptor2, this); + _initializerDefineProperty(this, "size", _descriptor3, this); + _initializerDefineProperty(this, "x", _descriptor4, this); + _initializerDefineProperty(this, "y", _descriptor5, this); + _initializerDefineProperty(this, "z", _descriptor6, this); + } + var _proto = SizeOvertimeModule.prototype; + _proto.animate = function animate(particle) { + if (this.separateAxes) { + var currLifetime = 1 - particle.remainingLifetime / particle.startLifetime; + var sizeRand = (0, _valueTypes.pseudoRandom)(particle.randomSeed + SIZE_OVERTIME_RAND_OFFSET); + particle.size.x = particle.startSize.x * this.x.evaluate(currLifetime, sizeRand); + particle.size.y = particle.startSize.y * this.y.evaluate(currLifetime, sizeRand); + particle.size.z = particle.startSize.z * this.z.evaluate(currLifetime, sizeRand); + } else _valueTypes.Vec3.scale(particle.size, particle.startSize, this.size.evaluate(1 - particle.remainingLifetime / particle.startLifetime, (0, + _valueTypes.pseudoRandom)(particle.randomSeed + SIZE_OVERTIME_RAND_OFFSET))); + }; + return SizeOvertimeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "separateAxes", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "size", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "x", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "y", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "z", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _class2)) || _class); + exports["default"] = SizeOvertimeModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "./curve-range": 32 + }], + 39: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _CCEnum = _interopRequireDefault(require("../../../platform/CCEnum")); + var _valueTypes = require("../../../value-types"); + var _curveRange = _interopRequireDefault(require("./curve-range")); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var TEXTURE_ANIMATION_RAND_OFFSET = 90794; + var Mode = (0, _CCEnum["default"])({ + Grid: 0 + }); + var Animation = (0, _CCEnum["default"])({ + WholeSheet: 0, + SingleRow: 1 + }); + var TextureAnimationModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.TextureAnimationModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: Mode + }), _dec3 = (0, _CCClassDecorator.property)({ + type: Animation + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec(_class = (_class2 = (_temp = (function () { + function TextureAnimationModule() { + _initializerDefineProperty(this, "_enable", _descriptor, this); + _initializerDefineProperty(this, "_mode", _descriptor2, this); + _initializerDefineProperty(this, "numTilesX", _descriptor3, this); + _initializerDefineProperty(this, "numTilesY", _descriptor4, this); + _initializerDefineProperty(this, "animation", _descriptor5, this); + _initializerDefineProperty(this, "randomRow", _descriptor6, this); + _initializerDefineProperty(this, "rowIndex", _descriptor7, this); + _initializerDefineProperty(this, "frameOverTime", _descriptor8, this); + _initializerDefineProperty(this, "startFrame", _descriptor9, this); + _initializerDefineProperty(this, "cycleCount", _descriptor10, this); + this._flipU = 0; + this._flipV = 0; + this._uvChannelMask = -1; + this.ps = null; + } + var _proto = TextureAnimationModule.prototype; + _proto.onInit = function onInit(ps) { + this.ps = ps; + }; + _proto.init = function init(p) { + p.startRow = Math.floor(Math.random() * this.numTilesY); + }; + _proto.animate = function animate(p) { + var normalizedTime = 1 - p.remainingLifetime / p.startLifetime; + var startFrame = this.startFrame.evaluate(normalizedTime, (0, _valueTypes.pseudoRandom)(p.randomSeed + TEXTURE_ANIMATION_RAND_OFFSET)) / (this.numTilesX * this.numTilesY); + if (this.animation === Animation.WholeSheet) p.frameIndex = (0, _valueTypes.repeat)(this.cycleCount * (this.frameOverTime.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + TEXTURE_ANIMATION_RAND_OFFSET)) + startFrame), 1); else if (this.animation === Animation.SingleRow) { + var rowLength = 1 / this.numTilesY; + if (this.randomRow) { + var f = (0, _valueTypes.repeat)(this.cycleCount * (this.frameOverTime.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + TEXTURE_ANIMATION_RAND_OFFSET)) + startFrame), 1); + var from = p.startRow * rowLength; + var to = from + rowLength; + p.frameIndex = (0, _valueTypes.lerp)(from, to, f); + } else { + var _from = this.rowIndex * rowLength; + var _to = _from + rowLength; + p.frameIndex = (0, _valueTypes.lerp)(_from, _to, (0, _valueTypes.repeat)(this.cycleCount * (this.frameOverTime.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + TEXTURE_ANIMATION_RAND_OFFSET)) + startFrame), 1)); + } + } + }; + _createClass(TextureAnimationModule, [{ + key: "enable", + get: function get() { + return this._enable; + }, + set: function set(val) { + this._enable = val; + this.ps._assembler._updateMaterialParams(); + } + }, { + key: "mode", + get: function get() { + return this._mode; + }, + set: function set(val) { + if (val !== Mode.Grid) { + console.error("particle texture animation's sprites is not supported!"); + return; + } + } + }, { + key: "flipU", + get: function get() { + return this._flipU; + }, + set: function set(val) { + console.error("particle texture animation's flipU is not supported!"); + } + }, { + key: "flipV", + get: function get() { + return this._flipV; + }, + set: function set(val) { + console.error("particle texture animation's flipV is not supported!"); + } + }, { + key: "uvChannelMask", + get: function get() { + return this._uvChannelMask; + }, + set: function set(val) { + console.error("particle texture animation's uvChannelMask is not supported!"); + } + }]); + return TextureAnimationModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "enable"), _class2.prototype), + _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_mode", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return Mode.Grid; + } + }), _applyDecoratedDescriptor(_class2.prototype, "mode", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "mode"), _class2.prototype), + _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "numTilesX", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "numTilesY", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "animation", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return Animation.WholeSheet; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "randomRow", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "rowIndex", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "frameOverTime", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "startFrame", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "cycleCount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _applyDecoratedDescriptor(_class2.prototype, "flipU", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "flipU"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "flipV", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "flipV"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "uvChannelMask", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "uvChannelMask"), _class2.prototype), + _class2)) || _class); + exports["default"] = TextureAnimationModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../platform/CCEnum": 241, + "../../../value-types": 339, + "./curve-range": 32 + }], + 40: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _enum = require("../enum"); + var _particleGeneralFunction = require("../particle-general-function"); + var _curveRange = _interopRequireDefault(require("./curve-range")); + var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var VELOCITY_OVERTIME_RAND_OFFSET = 197866; + var _temp_v3 = cc.v3(); + var VelocityOvertimeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.VelocityOvertimeModule"), + _dec2 = (0, _CCClassDecorator.property)({ + type: _enum.Space + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec6 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec(_class = (_class2 = (_temp = (function () { + function VelocityOvertimeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "space", _descriptor2, this); + _initializerDefineProperty(this, "x", _descriptor3, this); + _initializerDefineProperty(this, "y", _descriptor4, this); + _initializerDefineProperty(this, "z", _descriptor5, this); + _initializerDefineProperty(this, "speedModifier", _descriptor6, this); + this.rotation = null; + this.needTransform = false; + this.rotation = new _valueTypes.Quat(); + this.speedModifier.constant = 1; + this.needTransform = false; + } + var _proto = VelocityOvertimeModule.prototype; + _proto.update = function update(space, worldTransform) { + this.needTransform = (0, _particleGeneralFunction.calculateTransform)(space, this.space, worldTransform, this.rotation); + }; + _proto.animate = function animate(p) { + var normalizedTime = 1 - p.remainingLifetime / p.startLifetime; + var vel = _valueTypes.Vec3.set(_temp_v3, this.x.evaluate(normalizedTime, (0, _valueTypes.pseudoRandom)(p.randomSeed + VELOCITY_OVERTIME_RAND_OFFSET)), this.y.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + VELOCITY_OVERTIME_RAND_OFFSET)), this.z.evaluate(normalizedTime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + VELOCITY_OVERTIME_RAND_OFFSET))); + this.needTransform && _valueTypes.Vec3.transformQuat(vel, vel, this.rotation); + _valueTypes.Vec3.add(p.animatedVelocity, p.animatedVelocity, vel); + _valueTypes.Vec3.add(p.ultimateVelocity, p.velocity, p.animatedVelocity); + _valueTypes.Vec3.scale(p.ultimateVelocity, p.ultimateVelocity, this.speedModifier.evaluate(1 - p.remainingLifetime / p.startLifetime, (0, + _valueTypes.pseudoRandom)(p.randomSeed + VELOCITY_OVERTIME_RAND_OFFSET))); + }; + return VelocityOvertimeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "space", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.Space.Local; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "x", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "y", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "z", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "speedModifier", [_dec6], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _class2)) || _class); + exports["default"] = VelocityOvertimeModule; + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "../enum": 44, + "../particle-general-function": 45, + "./curve-range": 32 + }], + 41: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../platform/CCClassDecorator"); + var _valueTypes = require("../../value-types"); + var _curveRange = _interopRequireDefault(require("./animator/curve-range")); + var _dec, _dec2, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var Burst = (_dec = (0, _CCClassDecorator.ccclass)("cc.Burst"), _dec2 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec(_class = (_class2 = (_temp = (function () { + _createClass(Burst, [{ + key: "time", + get: function get() { + return this._time; + }, + set: function set(val) { + this._time = val; + this._curTime = val; + } + }, { + key: "repeatCount", + get: function get() { + return this._repeatCount; + }, + set: function set(val) { + this._repeatCount = val; + this._remainingCount = val; + } + }]); + function Burst() { + _initializerDefineProperty(this, "_time", _descriptor, this); + _initializerDefineProperty(this, "minCount", _descriptor2, this); + _initializerDefineProperty(this, "maxCount", _descriptor3, this); + _initializerDefineProperty(this, "_repeatCount", _descriptor4, this); + _initializerDefineProperty(this, "repeatInterval", _descriptor5, this); + _initializerDefineProperty(this, "count", _descriptor6, this); + this._remainingCount = 0; + this._curTime = 0; + this._remainingCount = 0; + this._curTime = 0; + } + var _proto = Burst.prototype; + _proto.update = function update(psys, dt) { + if (0 === this._remainingCount) { + this._remainingCount = this._repeatCount; + this._curTime = this._time; + } + if (this._remainingCount > 0) { + var preFrameTime = (0, _valueTypes.repeat)(psys._time - psys.startDelay.evaluate(0, 1), psys.duration) - dt; + preFrameTime = preFrameTime > 0 ? preFrameTime : 0; + var curFrameTime = (0, _valueTypes.repeat)(psys.time - psys.startDelay.evaluate(0, 1), psys.duration); + if (this._curTime >= preFrameTime && this._curTime < curFrameTime) { + psys.emit(this.count.evaluate(this._curTime / psys.duration, 1), dt - (curFrameTime - this._curTime)); + this._curTime += this.repeatInterval; + --this._remainingCount; + } + } + }; + _proto.getMaxCount = function getMaxCount(psys) { + return this.count.getMax() * Math.min(Math.ceil(psys.duration / this.repeatInterval), this.repeatCount); + }; + return Burst; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_time", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _applyDecoratedDescriptor(_class2.prototype, "time", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "time"), _class2.prototype), + _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "minCount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 30; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "maxCount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 30; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "_repeatCount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _applyDecoratedDescriptor(_class2.prototype, "repeatCount", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "repeatCount"), _class2.prototype), + _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "repeatInterval", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "count", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _class2)) || _class); + exports["default"] = Burst; + module.exports = exports["default"]; + }), { + "../../platform/CCClassDecorator": 240, + "../../value-types": 339, + "./animator/curve-range": 32 + }], + 42: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.evalOptCurve = evalOptCurve; + exports.AnimationCurve = exports.OptimizedKey = exports.Keyframe = void 0; + var _CCEnum = _interopRequireDefault(require("../../platform/CCEnum")); + var _valueTypes = require("../../value-types"); + var _CCClassDecorator = require("../../platform/CCClassDecorator"); + var _dec, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _temp, _dec2, _dec3, _dec4, _dec5, _class4, _class5, _descriptor5, _descriptor6, _descriptor7, _temp2; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var LOOK_FORWARD = 3; + var WrapMode = (0, _CCEnum["default"])({ + Default: 0, + Once: 1, + Loop: 2, + PingPong: 3, + ClampForever: 4 + }); + var Keyframe = (_dec = (0, _CCClassDecorator.ccclass)("cc.Keyframe"), _dec(_class = (_class2 = (_temp = function Keyframe(time, value, inTangent, outTangent) { + _initializerDefineProperty(this, "time", _descriptor, this); + _initializerDefineProperty(this, "value", _descriptor2, this); + _initializerDefineProperty(this, "inTangent", _descriptor3, this); + _initializerDefineProperty(this, "outTangent", _descriptor4, this); + this.time = time || 0; + this.value = value || 0; + this.inTangent = inTangent || 0; + this.outTangent = outTangent || 0; + }, _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "time", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "value", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "inTangent", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "outTangent", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _class2)) || _class); + exports.Keyframe = Keyframe; + var OptimizedKey = (function () { + function OptimizedKey() { + this.index = 0; + this.time = 0; + this.endTime = 0; + this.coefficient = null; + this.index = -1; + this.time = 0; + this.endTime = 0; + this.coefficient = new Float32Array(4); + } + var _proto = OptimizedKey.prototype; + _proto.evaluate = function evaluate(T) { + var t = T - this.time; + return evalOptCurve(t, this.coefficient); + }; + return OptimizedKey; + })(); + exports.OptimizedKey = OptimizedKey; + function evalOptCurve(t, coefs) { + return t * (t * (t * coefs[0] + coefs[1]) + coefs[2]) + coefs[3]; + } + var defaultKFStart = new Keyframe(0, 1, 0, 0); + var defaultKFEnd = new Keyframe(1, 1, 0, 0); + var AnimationCurve = (_dec2 = (0, _CCClassDecorator.ccclass)("cc.AnimationCurve"), + _dec3 = (0, _CCClassDecorator.property)({ + type: [Keyframe] + }), _dec4 = (0, _CCClassDecorator.property)({ + type: cc.Enum(WrapMode), + visible: false + }), _dec5 = (0, _CCClassDecorator.property)({ + type: cc.Enum(WrapMode), + visible: false + }), _dec2(_class4 = (_class5 = (_temp2 = (function () { + function AnimationCurve(keyFrames) { + void 0 === keyFrames && (keyFrames = null); + _initializerDefineProperty(this, "keyFrames", _descriptor5, this); + _initializerDefineProperty(this, "preWrapMode", _descriptor6, this); + _initializerDefineProperty(this, "postWrapMode", _descriptor7, this); + this.cachedKey = null; + if (keyFrames) this.keyFrames = keyFrames; else { + this.keyFrames.push(defaultKFStart); + this.keyFrames.push(defaultKFEnd); + } + this.cachedKey = new OptimizedKey(); + } + var _proto2 = AnimationCurve.prototype; + _proto2.addKey = function addKey(keyFrame) { + null == this.keyFrames && (this.keyFrames = []); + this.keyFrames.push(keyFrame); + }; + _proto2.evaluate_slow = function evaluate_slow(time) { + var wrappedTime = time; + var wrapMode = time < 0 ? this.preWrapMode : this.postWrapMode; + var startTime = this.keyFrames[0].time; + var endTime = this.keyFrames[this.keyFrames.length - 1].time; + switch (wrapMode) { + case WrapMode.Loop: + wrappedTime = (0, _valueTypes.repeat)(time - startTime, endTime - startTime) + startTime; + break; + + case WrapMode.PingPong: + wrappedTime = (0, _valueTypes.pingPong)(time - startTime, endTime - startTime) + startTime; + break; + + case WrapMode.ClampForever: + wrappedTime = (0, _valueTypes.clamp)(time, startTime, endTime); + } + var preKFIndex = 0; + if (wrappedTime > this.keyFrames[0].time) if (wrappedTime >= this.keyFrames[this.keyFrames.length - 1].time) preKFIndex = this.keyFrames.length - 2; else for (var i = 0; i < this.keyFrames.length - 1; i++) if (wrappedTime >= this.keyFrames[0].time && wrappedTime <= this.keyFrames[i + 1].time) { + preKFIndex = i; + break; + } + var keyframe0 = this.keyFrames[preKFIndex]; + var keyframe1 = this.keyFrames[preKFIndex + 1]; + var t = (0, _valueTypes.inverseLerp)(keyframe0.time, keyframe1.time, wrappedTime); + var dt = keyframe1.time - keyframe0.time; + var m0 = keyframe0.outTangent * dt; + var m1 = keyframe1.inTangent * dt; + var t2 = t * t; + var t3 = t2 * t; + var a = 2 * t3 - 3 * t2 + 1; + var b = t3 - 2 * t2 + t; + var c = t3 - t2; + var d = -2 * t3 + 3 * t2; + return a * keyframe0.value + b * m0 + c * m1 + d * keyframe1.value; + }; + _proto2.evaluate = function evaluate(time) { + var wrappedTime = time; + var wrapMode = time < 0 ? this.preWrapMode : this.postWrapMode; + var startTime = this.keyFrames[0].time; + var endTime = this.keyFrames[this.keyFrames.length - 1].time; + switch (wrapMode) { + case WrapMode.Loop: + wrappedTime = (0, _valueTypes.repeat)(time - startTime, endTime - startTime) + startTime; + break; + + case WrapMode.PingPong: + wrappedTime = (0, _valueTypes.pingPong)(time - startTime, endTime - startTime) + startTime; + break; + + case WrapMode.ClampForever: + wrappedTime = (0, _valueTypes.clamp)(time, startTime, endTime); + } + if (wrappedTime >= this.cachedKey.time && wrappedTime < this.cachedKey.endTime) return this.cachedKey.evaluate(wrappedTime); + var leftIndex = this.findIndex(this.cachedKey, wrappedTime); + var rightIndex = leftIndex + 1; + rightIndex === this.keyFrames.length && (rightIndex -= 1); + this.calcOptimizedKey(this.cachedKey, leftIndex, rightIndex); + return this.cachedKey.evaluate(wrappedTime); + }; + _proto2.calcOptimizedKey = function calcOptimizedKey(optKey, leftIndex, rightIndex) { + var lhs = this.keyFrames[leftIndex]; + var rhs = this.keyFrames[rightIndex]; + optKey.index = leftIndex; + optKey.time = lhs.time; + optKey.endTime = rhs.time; + var dx = rhs.time - lhs.time; + var dy = rhs.value - lhs.value; + var length = 1 / (dx * dx); + var d1 = lhs.outTangent * dx; + var d2 = rhs.inTangent * dx; + optKey.coefficient[0] = (d1 + d2 - dy - dy) * length / dx; + optKey.coefficient[1] = (dy + dy + dy - d1 - d1 - d2) * length; + optKey.coefficient[2] = lhs.outTangent; + optKey.coefficient[3] = lhs.value; + }; + _proto2.findIndex = function findIndex(optKey, t) { + var cachedIndex = optKey.index; + if (-1 !== cachedIndex) { + var cachedTime = this.keyFrames[cachedIndex].time; + if (t > cachedTime) for (var i = 0; i < LOOK_FORWARD; i++) { + var currIndex = cachedIndex + i; + if (currIndex + 1 < this.keyFrames.length && this.keyFrames[currIndex + 1].time > t) return currIndex; + } else for (var _i = 0; _i < LOOK_FORWARD; _i++) { + var _currIndex = cachedIndex - _i; + if (_currIndex >= 0 && this.keyFrames[_currIndex - 1].time <= t) return _currIndex - 1; + } + } + var left = 0; + var right = this.keyFrames.length; + var mid = Math.floor((left + right) / 2); + while (right - left > 1) { + this.keyFrames[mid].time >= t ? right = mid : left = mid + 1; + mid = Math.floor((left + right) / 2); + } + return left; + }; + return AnimationCurve; + })(), _temp2), _descriptor5 = _applyDecoratedDescriptor(_class5.prototype, "keyFrames", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Array(); + } + }), _descriptor6 = _applyDecoratedDescriptor(_class5.prototype, "preWrapMode", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return WrapMode.Loop; + } + }), _descriptor7 = _applyDecoratedDescriptor(_class5.prototype, "postWrapMode", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return WrapMode.Loop; + } + }), _class5)) || _class4); + exports.AnimationCurve = AnimationCurve; + cc.Keyframe = Keyframe; + cc.AnimationCurve = AnimationCurve; + }), { + "../../platform/CCClassDecorator": 240, + "../../platform/CCEnum": 241, + "../../value-types": 339 + }], + 43: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _curveRange = _interopRequireDefault(require("../animator/curve-range")); + var _particleGeneralFunction = require("../particle-general-function"); + var _enum = require("../enum"); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var _intermediVec = new _valueTypes.Vec3(0, 0, 0); + var _intermediArr = new Array(); + var _unitBoxExtent = new _valueTypes.Vec3(.5, .5, .5); + var ShapeModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.ShapeModule"), _dec2 = (0, + _CCClassDecorator.property)({ + type: _enum.ShapeType + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _enum.EmitLocation + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _enum.ArcMode + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec(_class = (_class2 = (_temp = (function () { + _createClass(ShapeModule, [{ + key: "shapeType", + get: function get() { + return this._shapeType; + }, + set: function set(val) { + this._shapeType = val; + switch (this._shapeType) { + case _enum.ShapeType.Box: + this.emitFrom === _enum.EmitLocation.Base && (this.emitFrom = _enum.EmitLocation.Volume); + break; + + case _enum.ShapeType.Cone: + this.emitFrom === _enum.EmitLocation.Edge && (this.emitFrom = _enum.EmitLocation.Base); + break; + + case _enum.ShapeType.Sphere: + case _enum.ShapeType.Hemisphere: + this.emitFrom !== _enum.EmitLocation.Base && this.emitFrom !== _enum.EmitLocation.Edge || (this.emitFrom = _enum.EmitLocation.Volume); + } + } + }, { + key: "angle", + get: function get() { + return Math.round(100 * (0, _valueTypes.toDegree)(this._angle)) / 100; + }, + set: function set(val) { + this._angle = (0, _valueTypes.toRadian)(val); + } + }, { + key: "arc", + get: function get() { + return (0, _valueTypes.toDegree)(this._arc); + }, + set: function set(val) { + this._arc = (0, _valueTypes.toRadian)(val); + } + }, { + key: "position", + get: function get() { + return this._position; + }, + set: function set(val) { + this._position = val; + this.constructMat(); + } + }, { + key: "rotation", + get: function get() { + return this._rotation; + }, + set: function set(val) { + this._rotation = val; + this.constructMat(); + } + }, { + key: "scale", + get: function get() { + return this._scale; + }, + set: function set(val) { + this._scale = val; + this.constructMat(); + } + }]); + function ShapeModule() { + _initializerDefineProperty(this, "enable", _descriptor, this); + _initializerDefineProperty(this, "_shapeType", _descriptor2, this); + _initializerDefineProperty(this, "emitFrom", _descriptor3, this); + _initializerDefineProperty(this, "radius", _descriptor4, this); + _initializerDefineProperty(this, "radiusThickness", _descriptor5, this); + _initializerDefineProperty(this, "_angle", _descriptor6, this); + _initializerDefineProperty(this, "_arc", _descriptor7, this); + _initializerDefineProperty(this, "arcMode", _descriptor8, this); + _initializerDefineProperty(this, "arcSpread", _descriptor9, this); + _initializerDefineProperty(this, "arcSpeed", _descriptor10, this); + _initializerDefineProperty(this, "length", _descriptor11, this); + _initializerDefineProperty(this, "boxThickness", _descriptor12, this); + _initializerDefineProperty(this, "_position", _descriptor13, this); + _initializerDefineProperty(this, "_rotation", _descriptor14, this); + _initializerDefineProperty(this, "_scale", _descriptor15, this); + _initializerDefineProperty(this, "alignToDirection", _descriptor16, this); + _initializerDefineProperty(this, "randomDirectionAmount", _descriptor17, this); + _initializerDefineProperty(this, "sphericalDirectionAmount", _descriptor18, this); + _initializerDefineProperty(this, "randomPositionAmount", _descriptor19, this); + this.mat = null; + this.Quat = null; + this.particleSystem = null; + this.lastTime = null; + this.totalAngle = null; + this.mat = new _valueTypes.Mat4(); + this.quat = new _valueTypes.Quat(); + this.particleSystem = null; + this.lastTime = 0; + this.totalAngle = 0; + } + var _proto = ShapeModule.prototype; + _proto.onInit = function onInit(ps) { + this.particleSystem = ps; + this.constructMat(); + this.lastTime = this.particleSystem._time; + }; + _proto.constructMat = function constructMat() { + _valueTypes.Quat.fromEuler(this.quat, this._rotation.x, this._rotation.y, this._rotation.z); + _valueTypes.Mat4.fromRTS(this.mat, this.quat, this._position, this._scale); + }; + _proto.emit = function emit(p) { + switch (this.shapeType) { + case _enum.ShapeType.Box: + boxEmit(this.emitFrom, this.boxThickness, p.position, p.velocity); + break; + + case _enum.ShapeType.Circle: + circleEmit(this.radius, this.radiusThickness, this.generateArcAngle(), p.position, p.velocity); + break; + + case _enum.ShapeType.Cone: + coneEmit(this.emitFrom, this.radius, this.radiusThickness, this.generateArcAngle(), this._angle, this.length, p.position, p.velocity); + break; + + case _enum.ShapeType.Sphere: + sphereEmit(this.emitFrom, this.radius, this.radiusThickness, p.position, p.velocity); + break; + + case _enum.ShapeType.Hemisphere: + hemisphereEmit(this.emitFrom, this.radius, this.radiusThickness, p.position, p.velocity); + break; + + default: + console.warn(this.shapeType + " shapeType is not supported by ShapeModule."); + } + if (this.randomPositionAmount > 0) { + p.position.x += (0, _valueTypes.randomRange)(-this.randomPositionAmount, this.randomPositionAmount); + p.position.y += (0, _valueTypes.randomRange)(-this.randomPositionAmount, this.randomPositionAmount); + p.position.z += (0, _valueTypes.randomRange)(-this.randomPositionAmount, this.randomPositionAmount); + } + _valueTypes.Vec3.transformQuat(p.velocity, p.velocity, this.quat); + _valueTypes.Vec3.transformMat4(p.position, p.position, this.mat); + if (this.sphericalDirectionAmount > 0) { + var sphericalVel = _valueTypes.Vec3.normalize(_intermediVec, p.position); + _valueTypes.Vec3.lerp(p.velocity, p.velocity, sphericalVel, this.sphericalDirectionAmount); + } + this.lastTime = this.particleSystem._time; + }; + _proto.generateArcAngle = function generateArcAngle() { + if (this.arcMode === _enum.ArcMode.Random) return (0, _valueTypes.randomRange)(0, this._arc); + var angle = this.totalAngle + 2 * Math.PI * this.arcSpeed.evaluate(this.particleSystem._time, 1) * (this.particleSystem._time - this.lastTime); + this.totalAngle = angle; + 0 !== this.arcSpread && (angle = Math.floor(angle / (this._arc * this.arcSpread)) * this._arc * this.arcSpread); + switch (this.arcMode) { + case _enum.ArcMode.Loop: + return (0, _valueTypes.repeat)(angle, this._arc); + + case _enum.ArcMode.PingPong: + return (0, _valueTypes.pingPong)(angle, this._arc); + } + }; + return ShapeModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_shapeType", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.ShapeType.Cone; + } + }), _applyDecoratedDescriptor(_class2.prototype, "shapeType", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "shapeType"), _class2.prototype), + _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "emitFrom", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.EmitLocation.Volume; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "radius", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "radiusThickness", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "_angle", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return (0, _valueTypes.toRadian)(25); + } + }), _applyDecoratedDescriptor(_class2.prototype, "angle", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "angle"), _class2.prototype), + _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "_arc", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return (0, _valueTypes.toRadian)(360); + } + }), _applyDecoratedDescriptor(_class2.prototype, "arc", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "arc"), _class2.prototype), + _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "arcMode", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.ArcMode.Random; + } + }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "arcSpread", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "arcSpeed", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "length", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 5; + } + }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "boxThickness", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _valueTypes.Vec3(0, 0, 0); + } + }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "_position", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _valueTypes.Vec3(0, 0, 0); + } + }), _applyDecoratedDescriptor(_class2.prototype, "position", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "position"), _class2.prototype), + _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "_rotation", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _valueTypes.Vec3(0, 0, 0); + } + }), _applyDecoratedDescriptor(_class2.prototype, "rotation", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "rotation"), _class2.prototype), + _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "_scale", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _valueTypes.Vec3(1, 1, 1); + } + }), _applyDecoratedDescriptor(_class2.prototype, "scale", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "scale"), _class2.prototype), + _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "alignToDirection", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "randomDirectionAmount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "sphericalDirectionAmount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "randomPositionAmount", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 0; + } + }), _class2)) || _class); + exports["default"] = ShapeModule; + function sphereEmit(emitFrom, radius, radiusThickness, pos, dir) { + switch (emitFrom) { + case _enum.EmitLocation.Volume: + (0, _particleGeneralFunction.randomPointBetweenSphere)(pos, radius * (1 - radiusThickness), radius); + _valueTypes.Vec3.copy(dir, pos); + _valueTypes.Vec3.normalize(dir, dir); + break; + + case _enum.EmitLocation.Shell: + (0, _particleGeneralFunction.randomUnitVector)(pos); + _valueTypes.Vec3.scale(pos, pos, radius); + _valueTypes.Vec3.copy(dir, pos); + break; + + default: + console.warn(emitFrom + " is not supported for sphere emitter."); + } + } + function hemisphereEmit(emitFrom, radius, radiusThickness, pos, dir) { + switch (emitFrom) { + case _enum.EmitLocation.Volume: + (0, _particleGeneralFunction.randomPointBetweenSphere)(pos, radius * (1 - radiusThickness), radius); + pos.z > 0 && (pos.z *= -1); + _valueTypes.Vec3.copy(dir, pos); + _valueTypes.Vec3.normalize(dir, dir); + break; + + case _enum.EmitLocation.Shell: + (0, _particleGeneralFunction.randomUnitVector)(pos); + _valueTypes.Vec3.scale(pos, pos, radius); + pos.z < 0 && (pos.z *= -1); + _valueTypes.Vec3.copy(dir, pos); + break; + + default: + console.warn(emitFrom + " is not supported for hemisphere emitter."); + } + } + function coneEmit(emitFrom, radius, radiusThickness, theta, angle, length, pos, dir) { + switch (emitFrom) { + case _enum.EmitLocation.Base: + (0, _particleGeneralFunction.randomPointBetweenCircleAtFixedAngle)(pos, radius * (1 - radiusThickness), radius, theta); + _valueTypes.Vec2.scale(dir, pos, Math.sin(angle)); + dir.z = -Math.cos(angle) * radius; + _valueTypes.Vec3.normalize(dir, dir); + pos.z = 0; + break; + + case _enum.EmitLocation.Shell: + (0, _particleGeneralFunction.fixedAngleUnitVector2)(pos, theta); + _valueTypes.Vec2.scale(dir, pos, Math.sin(angle)); + dir.z = -Math.cos(angle); + _valueTypes.Vec3.normalize(dir, dir); + _valueTypes.Vec2.scale(pos, pos, radius); + pos.z = 0; + break; + + case _enum.EmitLocation.Volume: + (0, _particleGeneralFunction.randomPointBetweenCircleAtFixedAngle)(pos, radius * (1 - radiusThickness), radius, theta); + _valueTypes.Vec2.scale(dir, pos, Math.sin(angle)); + dir.z = -Math.cos(angle) * radius; + _valueTypes.Vec3.normalize(dir, dir); + pos.z = 0; + _valueTypes.Vec3.add(pos, pos, _valueTypes.Vec3.scale(_intermediVec, dir, length * (0, + _valueTypes.random)() / -dir.z)); + break; + + default: + console.warn(emitFrom + " is not supported for cone emitter."); + } + } + function boxEmit(emitFrom, boxThickness, pos, dir) { + switch (emitFrom) { + case _enum.EmitLocation.Volume: + (0, _particleGeneralFunction.randomPointInCube)(pos, _unitBoxExtent); + break; + + case _enum.EmitLocation.Shell: + _intermediArr.splice(0, _intermediArr.length); + _intermediArr.push((0, _valueTypes.randomRange)(-.5, .5)); + _intermediArr.push((0, _valueTypes.randomRange)(-.5, .5)); + _intermediArr.push(.5 * (0, _particleGeneralFunction.randomSign)()); + (0, _particleGeneralFunction.randomSortArray)(_intermediArr); + applyBoxThickness(_intermediArr, boxThickness); + _valueTypes.Vec3.set(pos, _intermediArr[0], _intermediArr[1], _intermediArr[2]); + break; + + case _enum.EmitLocation.Edge: + _intermediArr.splice(0, _intermediArr.length); + _intermediArr.push((0, _valueTypes.randomRange)(-.5, .5)); + _intermediArr.push(.5 * (0, _particleGeneralFunction.randomSign)()); + _intermediArr.push(.5 * (0, _particleGeneralFunction.randomSign)()); + (0, _particleGeneralFunction.randomSortArray)(_intermediArr); + applyBoxThickness(_intermediArr, boxThickness); + _valueTypes.Vec3.set(pos, _intermediArr[0], _intermediArr[1], _intermediArr[2]); + break; + + default: + console.warn(emitFrom + " is not supported for box emitter."); + } + _valueTypes.Vec3.copy(dir, _particleGeneralFunction.particleEmitZAxis); + } + function circleEmit(radius, radiusThickness, theta, pos, dir) { + (0, _particleGeneralFunction.randomPointBetweenCircleAtFixedAngle)(pos, radius * (1 - radiusThickness), radius, theta); + _valueTypes.Vec3.normalize(dir, pos); + } + function applyBoxThickness(pos, thickness) { + if (thickness.x > 0) { + pos[0] += .5 * (0, _valueTypes.randomRange)(-thickness.x, thickness.x); + pos[0] = (0, _valueTypes.clamp)(pos[0], -.5, .5); + } + if (thickness.y > 0) { + pos[1] += .5 * (0, _valueTypes.randomRange)(-thickness.y, thickness.y); + pos[1] = (0, _valueTypes.clamp)(pos[1], -.5, .5); + } + if (thickness.z > 0) { + pos[2] += .5 * (0, _valueTypes.randomRange)(-thickness.z, thickness.z); + pos[2] = (0, _valueTypes.clamp)(pos[2], -.5, .5); + } + } + module.exports = exports["default"]; + }), { + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "../animator/curve-range": 32, + "../enum": 44, + "../particle-general-function": 45 + }], + 44: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.TextureMode = exports.TrailMode = exports.ArcMode = exports.EmitLocation = exports.ShapeType = exports.RenderMode = exports.Space = void 0; + var _CCEnum = _interopRequireDefault(require("../../platform/CCEnum")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Space = (0, _CCEnum["default"])({ + World: 0, + Local: 1, + Custom: 2 + }); + exports.Space = Space; + var RenderMode = (0, _CCEnum["default"])({ + Billboard: 0, + StrecthedBillboard: 1, + HorizontalBillboard: 2, + VerticalBillboard: 3, + Mesh: 4 + }); + exports.RenderMode = RenderMode; + var ShapeType = (0, _CCEnum["default"])({ + Box: 0, + Circle: 1, + Cone: 2, + Sphere: 3, + Hemisphere: 4 + }); + exports.ShapeType = ShapeType; + var EmitLocation = (0, _CCEnum["default"])({ + Base: 0, + Edge: 1, + Shell: 2, + Volume: 3 + }); + exports.EmitLocation = EmitLocation; + var ArcMode = (0, _CCEnum["default"])({ + Random: 0, + Loop: 1, + PingPong: 2 + }); + exports.ArcMode = ArcMode; + var TrailMode = (0, _CCEnum["default"])({ + Particles: 0, + Ribbon: 1 + }); + exports.TrailMode = TrailMode; + var TextureMode = (0, _CCEnum["default"])({ + Stretch: 0, + Repeat: 1 + }); + exports.TextureMode = TextureMode; + }), { + "../../platform/CCEnum": 241 + }], + 45: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.calculateTransform = calculateTransform; + exports.fixedAngleUnitVector2 = fixedAngleUnitVector2; + exports.randomUnitVector2 = randomUnitVector2; + exports.randomUnitVector = randomUnitVector; + exports.randomPointInUnitSphere = randomPointInUnitSphere; + exports.randomPointBetweenSphere = randomPointBetweenSphere; + exports.randomPointInUnitCircle = randomPointInUnitCircle; + exports.randomPointBetweenCircle = randomPointBetweenCircle; + exports.randomPointBetweenCircleAtFixedAngle = randomPointBetweenCircleAtFixedAngle; + exports.randomPointInCube = randomPointInCube; + exports.randomPointBetweenCube = randomPointBetweenCube; + exports.randomSortArray = randomSortArray; + exports.randomSign = randomSign; + exports.particleEmitZAxis = void 0; + var _valueTypes = require("../../value-types"); + var _utils = require("../../value-types/utils"); + var _enum = require("./enum"); + var particleEmitZAxis = new _valueTypes.Vec3(0, 0, -1); + exports.particleEmitZAxis = particleEmitZAxis; + function calculateTransform(systemSpace, moduleSpace, worldTransform, outQuat) { + if (moduleSpace !== systemSpace) { + if (systemSpace === _enum.Space.World) _valueTypes.Mat4.getRotation(outQuat, worldTransform); else { + _valueTypes.Mat4.invert(worldTransform, worldTransform); + _valueTypes.Mat4.getRotation(outQuat, worldTransform); + } + return true; + } + _valueTypes.Quat.set(outQuat, 0, 0, 0, 1); + return false; + } + function fixedAngleUnitVector2(out, theta) { + _valueTypes.Vec2.set(out, Math.cos(theta), Math.sin(theta)); + } + function randomUnitVector2(out) { + var a = (0, _valueTypes.randomRange)(0, 2 * Math.PI); + var x = Math.cos(a); + var y = Math.sin(a); + _valueTypes.Vec2.set(out, x, y); + } + function randomUnitVector(out) { + var z = (0, _valueTypes.randomRange)(-1, 1); + var a = (0, _valueTypes.randomRange)(0, 2 * Math.PI); + var r = Math.sqrt(1 - z * z); + var x = r * Math.cos(a); + var y = r * Math.sin(a); + _valueTypes.Vec3.set(out, x, y, z); + } + function randomPointInUnitSphere(out) { + randomUnitVector(out); + _valueTypes.Vec3.scale(out, out, (0, _valueTypes.random)()); + } + function randomPointBetweenSphere(out, minRadius, maxRadius) { + randomUnitVector(out); + _valueTypes.Vec3.scale(out, out, minRadius + (maxRadius - minRadius) * (0, _valueTypes.random)()); + } + function randomPointInUnitCircle(out) { + randomUnitVector2(out); + out.z = 0; + _valueTypes.Vec3.scale(out, out, (0, _valueTypes.random)()); + } + function randomPointBetweenCircle(out, minRadius, maxRadius) { + randomUnitVector2(out); + out.z = 0; + _valueTypes.Vec3.scale(out, out, minRadius + (maxRadius - minRadius) * (0, _valueTypes.random)()); + } + function randomPointBetweenCircleAtFixedAngle(out, minRadius, maxRadius, theta) { + fixedAngleUnitVector2(out, theta); + out.z = 0; + _valueTypes.Vec3.scale(out, out, minRadius + (maxRadius - minRadius) * (0, _valueTypes.random)()); + } + function randomPointInCube(out, extents) { + _valueTypes.Vec3.set(out, (0, _valueTypes.randomRange)(-extents.x, extents.x), (0, + _valueTypes.randomRange)(-extents.y, extents.y), (0, _valueTypes.randomRange)(-extents.z, extents.z)); + } + function randomPointBetweenCube(out, minBox, maxBox) { + var subscript = ["x", "y", "z"]; + var edge = (0, _valueTypes.randomRangeInt)(0, 3); + for (var i = 0; i < 3; i++) { + if (i === edge) { + out[subscript[i]] = (0, _valueTypes.randomRange)(-maxBox[subscript[i]], maxBox[subscript[i]]); + continue; + } + var x = 2 * (0, _valueTypes.random)() - 1; + out[subscript[i]] = x < 0 ? -minBox[subscript[i]] + x * (maxBox[subscript[i]] - minBox[subscript[i]]) : minBox[subscript[i]] + x * (maxBox[subscript[i]] - minBox[subscript[i]]); + } + } + function randomSortArray(arr) { + for (var i = 0; i < arr.length; i++) { + var transpose = i + (0, _valueTypes.randomRangeInt)(0, arr.length - i); + var val = arr[transpose]; + arr[transpose] = arr[i]; + arr[i] = val; + } + } + function randomSign() { + var sgn = (0, _valueTypes.randomRange)(-1, 1); + 0 === sgn ? sgn++ : sgn; + return (0, _utils.sign)(sgn); + } + }), { + "../../value-types": 339, + "../../value-types/utils": 346, + "./enum": 44 + }], + 46: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../value-types"); + var _utils = require("../../value-types/utils"); + var _CCMaterial = _interopRequireDefault(require("../../assets/material/CCMaterial")); + var _colorOvertime = _interopRequireDefault(require("./animator/color-overtime")); + var _curveRange = _interopRequireWildcard(require("./animator/curve-range")); + var _forceOvertime = _interopRequireDefault(require("./animator/force-overtime")); + var _gradientRange = _interopRequireDefault(require("./animator/gradient-range")); + var _limitVelocityOvertime = _interopRequireDefault(require("./animator/limit-velocity-overtime")); + var _rotationOvertime = _interopRequireDefault(require("./animator/rotation-overtime")); + var _sizeOvertime = _interopRequireDefault(require("./animator/size-overtime")); + var _textureAnimation = _interopRequireDefault(require("./animator/texture-animation")); + var _velocityOvertime = _interopRequireDefault(require("./animator/velocity-overtime")); + var _burst = _interopRequireDefault(require("./burst")); + var _shapeModule = _interopRequireDefault(require("./emitter/shape-module")); + var _enum = require("./enum"); + var _particleGeneralFunction = require("./particle-general-function"); + var _trail = _interopRequireDefault(require("./renderer/trail")); + var _CCMesh = _interopRequireDefault(require("../../mesh/CCMesh")); + var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30, _descriptor31, _temp; + function _getRequireWildcardCache() { + if ("function" !== typeof WeakMap) return null; + var cache = new WeakMap(); + _getRequireWildcardCache = function _getRequireWildcardCache() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) return obj; + if (null === obj || "object" !== typeof obj && "function" !== typeof obj) return { + default: obj + }; + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) return cache.get(obj); + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) if (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; + } + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it; + if ("undefined" === typeof Symbol || null == o[Symbol.iterator]) { + 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."); + } + it = o[Symbol.iterator](); + return it.next.bind(it); + } + 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 _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var _require = require("../../platform/CCClassDecorator"), ccclass = _require.ccclass, menu = _require.menu, property = _require.property, executeInEditMode = _require.executeInEditMode, executionOrder = _require.executionOrder; + var RenderComponent = require("../../components/CCRenderComponent"); + var _world_mat = new _valueTypes.Mat4(); + var _module_props = false; + var ParticleSystem3D = (_dec = ccclass("cc.ParticleSystem3D"), _dec2 = menu("i18n:MAIN_MENU.component.renderers/ParticleSystem3D"), + _dec3 = executionOrder(99), _dec4 = property({ + animatable: false + }), _dec5 = property({ + animatable: false + }), _dec6 = property({ + type: _enum.Space, + animatable: false + }), _dec7 = property({ + type: _curveRange["default"] + }), _dec8 = property({ + type: _curveRange["default"] + }), _dec9 = property({ + type: _gradientRange["default"] + }), _dec10 = property({ + type: _enum.Space + }), _dec11 = property({ + type: _curveRange["default"] + }), _dec12 = property({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec13 = property({ + type: _curveRange["default"], + range: [-1, 1], + radian: true + }), _dec14 = property({ + type: _curveRange["default"], + range: [-1, 1] + }), _dec15 = property({ + type: _curveRange["default"] + }), _dec16 = property({ + type: _curveRange["default"] + }), _dec17 = property({ + type: [_burst["default"]], + animatable: false + }), _dec18 = property({ + type: [_CCMaterial["default"]], + displayName: "Materials", + visible: false, + override: true + }), _dec19 = property({ + type: _shapeModule["default"], + animatable: false + }), _dec20 = property({ + type: _colorOvertime["default"], + animatable: false + }), _dec21 = property({ + type: _sizeOvertime["default"], + animatable: false + }), _dec22 = property({ + type: _velocityOvertime["default"], + animatable: false + }), _dec23 = property({ + type: _forceOvertime["default"], + animatable: false + }), _dec24 = property({ + type: _limitVelocityOvertime["default"], + animatable: false + }), _dec25 = property({ + type: _rotationOvertime["default"], + animatable: false + }), _dec26 = property({ + type: _textureAnimation["default"], + animatable: false + }), _dec27 = property({ + type: _trail["default"], + animatable: false + }), _dec28 = property({ + type: _enum.RenderMode, + animatable: false + }), _dec29 = property({ + animatable: false + }), _dec30 = property({ + animatable: false + }), _dec31 = property({ + type: _CCMesh["default"], + animatable: false + }), _dec32 = property({ + type: _CCMaterial["default"], + animatable: false + }), _dec33 = property({ + type: _CCMaterial["default"], + animatable: false + }), _dec(_class = _dec2(_class = _dec3(_class = executeInEditMode(_class = (_class2 = (_temp = (function (_RenderComponent) { + _inheritsLoose(ParticleSystem3D, _RenderComponent); + _createClass(ParticleSystem3D, [{ + key: "capacity", + get: function get() { + return this._capacity; + }, + set: function set(val) { + this._capacity = val; + this._assembler && this._assembler.setCapacity(this._capacity); + } + }, { + key: "prewarm", + get: function get() { + return this._prewarm; + }, + set: function set(val) { + true === val && false === this.loop; + this._prewarm = val; + } + }, { + key: "simulationSpace", + get: function get() { + return this._simulationSpace; + }, + set: function set(val) { + if (val !== this._simulationSpace) { + this._simulationSpace = val; + this._assembler._updateMaterialParams(); + this._assembler._updateTrailMaterial(); + } + } + }, { + key: "materials", + get: function get() { + return this._materials; + }, + set: function set(val) { + this._materials = val; + this._activateMaterial(); + } + }, { + key: "shapeModule", + get: function get() { + return this._shapeModule; + }, + set: function set(val) { + this._shapeModule = val; + this._shapeModule.onInit(this); + } + }, { + key: "colorOverLifetimeModule", + get: function get() { + return this._colorOverLifetimeModule; + }, + set: function set(val) { + this._colorOverLifetimeModule = val; + } + }, { + key: "sizeOvertimeModule", + get: function get() { + return this._sizeOvertimeModule; + }, + set: function set(val) { + this._sizeOvertimeModule = val; + } + }, { + key: "velocityOvertimeModule", + get: function get() { + return this._velocityOvertimeModule; + }, + set: function set(val) { + this._velocityOvertimeModule = val; + } + }, { + key: "forceOvertimeModule", + get: function get() { + return this._forceOvertimeModule; + }, + set: function set(val) { + this._forceOvertimeModule = val; + } + }, { + key: "limitVelocityOvertimeModule", + get: function get() { + return this._limitVelocityOvertimeModule; + }, + set: function set(val) { + this._limitVelocityOvertimeModule = val; + } + }, { + key: "rotationOvertimeModule", + get: function get() { + return this._rotationOvertimeModule; + }, + set: function set(val) { + this._rotationOvertimeModule = val; + } + }, { + key: "textureAnimationModule", + get: function get() { + return this._textureAnimationModule; + }, + set: function set(val) { + this._textureAnimationModule = val; + this._textureAnimationModule.onInit(this); + } + }, { + key: "trailModule", + get: function get() { + return this._trailModule; + }, + set: function set(val) { + this._trailModule = val; + this._trailModule.onInit(this); + } + }, { + key: "renderMode", + get: function get() { + return this._renderMode; + }, + set: function set(val) { + if (this._renderMode === val) return; + this._renderMode = val; + this._assembler._setVertexAttrib(); + this._assembler._updateModel(); + this._assembler._updateMaterialParams(); + } + }, { + key: "velocityScale", + get: function get() { + return this._velocityScale; + }, + set: function set(val) { + this._velocityScale = val; + this._assembler._updateMaterialParams(); + } + }, { + key: "lengthScale", + get: function get() { + return this._lengthScale; + }, + set: function set(val) { + this._lengthScale = val; + this._assembler._updateMaterialParams(); + } + }, { + key: "mesh", + get: function get() { + return this._mesh; + }, + set: function set(val) { + this._mesh = val; + this._assembler._updateModel(); + } + }, { + key: "particleMaterial", + get: function get() { + return this.getMaterial(0); + }, + set: function set(val) { + this.setMaterial(0, val); + this._onMaterialModified(0, val); + } + }, { + key: "trailMaterial", + get: function get() { + return this.getMaterial(1); + }, + set: function set(val) { + this.setMaterial(1, val); + this._onMaterialModified(1, val); + } + }]); + function ParticleSystem3D() { + var _this2; + _this2 = _RenderComponent.call(this) || this; + _initializerDefineProperty(_this2, "duration", _descriptor, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_capacity", _descriptor2, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "loop", _descriptor3, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "playOnAwake", _descriptor4, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_prewarm", _descriptor5, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_simulationSpace", _descriptor6, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "simulationSpeed", _descriptor7, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "startDelay", _descriptor8, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "startLifetime", _descriptor9, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "startColor", _descriptor10, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "scaleSpace", _descriptor11, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "startSize", _descriptor12, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "startSpeed", _descriptor13, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "startRotation", _descriptor14, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "gravityModifier", _descriptor15, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "rateOverTime", _descriptor16, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "rateOverDistance", _descriptor17, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "bursts", _descriptor18, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_shapeModule", _descriptor19, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_colorOverLifetimeModule", _descriptor20, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_sizeOvertimeModule", _descriptor21, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_velocityOvertimeModule", _descriptor22, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_forceOvertimeModule", _descriptor23, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_limitVelocityOvertimeModule", _descriptor24, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_rotationOvertimeModule", _descriptor25, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_textureAnimationModule", _descriptor26, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_trailModule", _descriptor27, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_renderMode", _descriptor28, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_velocityScale", _descriptor29, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_lengthScale", _descriptor30, _assertThisInitialized(_this2)); + _initializerDefineProperty(_this2, "_mesh", _descriptor31, _assertThisInitialized(_this2)); + _this2._isPlaying = void 0; + _this2._isPaused = void 0; + _this2._isStopped = void 0; + _this2._isEmitting = void 0; + _this2._time = void 0; + _this2._emitRateTimeCounter = void 0; + _this2._emitRateDistanceCounter = void 0; + _this2._oldWPos = void 0; + _this2._curWPos = void 0; + _this2._customData1 = void 0; + _this2._customData2 = void 0; + _this2._subEmitters = void 0; + _this2.rateOverTime.constant = 10; + _this2.startLifetime.constant = 5; + _this2.startSize.constant = 1; + _this2.startSpeed.constant = 5; + _this2._isPlaying = false; + _this2._isPaused = false; + _this2._isStopped = true; + _this2._isEmitting = false; + _this2._time = 0; + _this2._emitRateTimeCounter = 0; + _this2._emitRateDistanceCounter = 0; + _this2._oldWPos = new _valueTypes.Vec3(0, 0, 0); + _this2._curWPos = new _valueTypes.Vec3(0, 0, 0); + _this2._customData1 = new _valueTypes.Vec2(0, 0); + _this2._customData2 = new _valueTypes.Vec2(0, 0); + _this2._subEmitters = []; + return _this2; + } + var _proto = ParticleSystem3D.prototype; + _proto.onLoad = function onLoad() { + this._assembler.onInit(this); + this.shapeModule.onInit(this); + this.trailModule.onInit(this); + this.textureAnimationModule.onInit(this); + this._resetPosition(); + }; + _proto._onMaterialModified = function _onMaterialModified(index, material) { + this._assembler._onMaterialModified(index, material); + }; + _proto._onRebuildPSO = function _onRebuildPSO(index, material) { + this._assembler._onRebuildPSO(index, material); + }; + _proto.play = function play() { + this._isPaused && (this._isPaused = false); + this._isStopped && (this._isStopped = false); + this._isPlaying = true; + this._isEmitting = true; + this._resetPosition(); + this._prewarm && this._prewarmSystem(); + }; + _proto.pause = function pause() { + if (this._isStopped) { + console.warn("pause(): particle system is already stopped."); + return; + } + this._isPlaying && (this._isPlaying = false); + this._isPaused = true; + }; + _proto.stop = function stop() { + (this._isPlaying || this._isPaused) && this.clear(); + this._isPlaying && (this._isPlaying = false); + this._isPaused && (this._isPaused = false); + this._time = 0; + this._emitRateTimeCounter = 0; + this._emitRateDistanceCounter = 0; + this._isStopped = true; + }; + _proto.clear = function clear() { + if (this.enabledInHierarchy) { + this._assembler.clear(); + this.trailModule.clear(); + } + }; + _proto.getParticleCount = function getParticleCount() { + return this._assembler.getParticleCount(); + }; + _proto.setCustomData1 = function setCustomData1(x, y) { + _valueTypes.Vec2.set(this._customData1, x, y); + }; + _proto.setCustomData2 = function setCustomData2(x, y) { + _valueTypes.Vec2.set(this._customData2, x, y); + }; + _proto.onDestroy = function onDestroy() { + this._assembler.onDestroy(); + this.trailModule.destroy(); + }; + _proto.onEnable = function onEnable() { + _RenderComponent.prototype.onEnable.call(this); + this.playOnAwake && this.play(); + this._assembler.onEnable(); + this.trailModule.onEnable(); + }; + _proto.onDisable = function onDisable() { + _RenderComponent.prototype.onDisable.call(this); + this._assembler.onDisable(); + this.trailModule.onDisable(); + }; + _proto.update = function update(dt) { + var scaledDeltaTime = dt * this.simulationSpeed; + if (this._isPlaying) { + this._time += scaledDeltaTime; + this._emit(scaledDeltaTime); + 0 !== this._assembler._updateParticles(scaledDeltaTime) || this._isEmitting || this.stop(); + this._assembler.updateParticleBuffer(); + this.trailModule.enable && this.trailModule.updateTrailBuffer(); + } + }; + _proto.emit = function emit(count, dt) { + this._simulationSpace === _enum.Space.World && this.node.getWorldMatrix(_world_mat); + for (var i = 0; i < count; ++i) { + var particle = this._assembler._getFreeParticle(); + if (null === particle) return; + var rand = (0, _valueTypes.pseudoRandom)((0, _valueTypes.randomRangeInt)(0, _utils.INT_MAX)); + if (this.shapeModule.enable) this.shapeModule.emit(particle); else { + _valueTypes.Vec3.set(particle.position, 0, 0, 0); + _valueTypes.Vec3.copy(particle.velocity, _particleGeneralFunction.particleEmitZAxis); + } + this.textureAnimationModule.enable && this.textureAnimationModule.init(particle); + _valueTypes.Vec3.scale(particle.velocity, particle.velocity, this.startSpeed.evaluate(this._time / this.duration, rand)); + switch (this._simulationSpace) { + case _enum.Space.Local: + break; + + case _enum.Space.World: + _valueTypes.Vec3.transformMat4(particle.position, particle.position, _world_mat); + var worldRot = new _valueTypes.Quat(); + this.node.getWorldRotation(worldRot); + _valueTypes.Vec3.transformQuat(particle.velocity, particle.velocity, worldRot); + break; + + case _enum.Space.Custom: + } + _valueTypes.Vec3.copy(particle.ultimateVelocity, particle.velocity); + _valueTypes.Vec3.set(particle.rotation, 0, 0, this.startRotation.evaluate(this._time / this.duration, rand)); + _valueTypes.Vec3.set(particle.startSize, this.startSize.evaluate(this._time / this.duration, rand), 1, 1); + particle.startSize.y = particle.startSize.x; + _valueTypes.Vec3.copy(particle.size, particle.startSize); + particle.startColor.set(this.startColor.evaluate(this._time / this.duration, rand)); + particle.color.set(particle.startColor); + particle.startLifetime = this.startLifetime.evaluate(this._time / this.duration, rand) + dt; + particle.remainingLifetime = particle.startLifetime; + particle.randomSeed = (0, _valueTypes.randomRangeInt)(0, 233280); + this._assembler._setNewParticle(particle); + } + }; + _proto._prewarmSystem = function _prewarmSystem() { + this.startDelay.mode = _curveRange.Mode.Constant; + this.startDelay.constant = 0; + var dt = 1; + var cnt = this.duration / dt; + for (var i = 0; i < cnt; ++i) { + this._time += dt; + this._emit(dt); + this._assembler._updateParticles(dt); + } + }; + _proto._emit = function _emit(dt) { + var startDelay = this.startDelay.evaluate(0, 1); + if (this._time > startDelay) { + if (this._time > this.duration + startDelay && !this.loop) { + this._isEmitting = false; + return; + } + this._emitRateTimeCounter += this.rateOverTime.evaluate(this._time / this.duration, 1) * dt; + if (this._emitRateTimeCounter > 1 && this._isEmitting) { + var emitNum = Math.floor(this._emitRateTimeCounter); + this._emitRateTimeCounter -= emitNum; + this.emit(emitNum, dt); + } + this.node.getWorldPosition(this._curWPos); + var distance = _valueTypes.Vec3.distance(this._curWPos, this._oldWPos); + _valueTypes.Vec3.copy(this._oldWPos, this._curWPos); + this._emitRateDistanceCounter += distance * this.rateOverDistance.evaluate(this._time / this.duration, 1); + if (this._emitRateDistanceCounter > 1 && this._isEmitting) { + var _emitNum = Math.floor(this._emitRateDistanceCounter); + this._emitRateDistanceCounter -= _emitNum; + this.emit(_emitNum, dt); + } + for (var _iterator = _createForOfIteratorHelperLoose(this.bursts), _step; !(_step = _iterator()).done;) { + var burst = _step.value; + burst.update(this, dt); + } + } + }; + _proto._activateMaterial = function _activateMaterial() { }; + _proto._resetPosition = function _resetPosition() { + this.node.getWorldPosition(this._oldWPos); + _valueTypes.Vec3.copy(this._curWPos, this._oldWPos); + }; + _proto.addSubEmitter = function addSubEmitter(subEmitter) { + this._subEmitters.push(subEmitter); + }; + _proto.removeSubEmitter = function removeSubEmitter(idx) { + this._subEmitters.splice(this._subEmitters.indexOf(idx), 1); + }; + _proto.addBurst = function addBurst(burst) { + this.bursts.push(burst); + }; + _proto.removeBurst = function removeBurst(idx) { + this.bursts.splice(this.bursts.indexOf(idx), 1); + }; + _proto._checkBacth = function _checkBacth() { }; + _createClass(ParticleSystem3D, [{ + key: "isPlaying", + get: function get() { + return this._isPlaying; + } + }, { + key: "isPaused", + get: function get() { + return this._isPaused; + } + }, { + key: "isStopped", + get: function get() { + return this._isStopped; + } + }, { + key: "isEmitting", + get: function get() { + return this._isEmitting; + } + }, { + key: "time", + get: function get() { + return this._time; + } + }]); + return ParticleSystem3D; + })(RenderComponent), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "duration", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 5; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_capacity", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 100; + } + }), _applyDecoratedDescriptor(_class2.prototype, "capacity", [property], Object.getOwnPropertyDescriptor(_class2.prototype, "capacity"), _class2.prototype), + _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "loop", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "playOnAwake", [_dec4], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "_prewarm", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _applyDecoratedDescriptor(_class2.prototype, "prewarm", [_dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "prewarm"), _class2.prototype), + _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "_simulationSpace", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.Space.Local; + } + }), _applyDecoratedDescriptor(_class2.prototype, "simulationSpace", [_dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "simulationSpace"), _class2.prototype), + _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "simulationSpeed", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "startDelay", [_dec7], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "startLifetime", [_dec8], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "startColor", [_dec9], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradientRange["default"](); + } + }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "scaleSpace", [_dec10], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.Space.Local; + } + }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "startSize", [_dec11], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "startSpeed", [_dec12], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "startRotation", [_dec13], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "gravityModifier", [_dec14], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "rateOverTime", [_dec15], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "rateOverDistance", [_dec16], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "bursts", [_dec17], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Array(); + } + }), _applyDecoratedDescriptor(_class2.prototype, "materials", [_dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "materials"), _class2.prototype), + _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "_shapeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _shapeModule["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "shapeModule", [_dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "shapeModule"), _class2.prototype), + _descriptor20 = _applyDecoratedDescriptor(_class2.prototype, "_colorOverLifetimeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _colorOvertime["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "colorOverLifetimeModule", [_dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "colorOverLifetimeModule"), _class2.prototype), + _descriptor21 = _applyDecoratedDescriptor(_class2.prototype, "_sizeOvertimeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _sizeOvertime["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "sizeOvertimeModule", [_dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "sizeOvertimeModule"), _class2.prototype), + _descriptor22 = _applyDecoratedDescriptor(_class2.prototype, "_velocityOvertimeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _velocityOvertime["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "velocityOvertimeModule", [_dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "velocityOvertimeModule"), _class2.prototype), + _descriptor23 = _applyDecoratedDescriptor(_class2.prototype, "_forceOvertimeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _forceOvertime["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "forceOvertimeModule", [_dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "forceOvertimeModule"), _class2.prototype), + _descriptor24 = _applyDecoratedDescriptor(_class2.prototype, "_limitVelocityOvertimeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _limitVelocityOvertime["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "limitVelocityOvertimeModule", [_dec24], Object.getOwnPropertyDescriptor(_class2.prototype, "limitVelocityOvertimeModule"), _class2.prototype), + _descriptor25 = _applyDecoratedDescriptor(_class2.prototype, "_rotationOvertimeModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _rotationOvertime["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "rotationOvertimeModule", [_dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "rotationOvertimeModule"), _class2.prototype), + _descriptor26 = _applyDecoratedDescriptor(_class2.prototype, "_textureAnimationModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _textureAnimation["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "textureAnimationModule", [_dec26], Object.getOwnPropertyDescriptor(_class2.prototype, "textureAnimationModule"), _class2.prototype), + _descriptor27 = _applyDecoratedDescriptor(_class2.prototype, "_trailModule", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _trail["default"](); + } + }), _applyDecoratedDescriptor(_class2.prototype, "trailModule", [_dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "trailModule"), _class2.prototype), + _descriptor28 = _applyDecoratedDescriptor(_class2.prototype, "_renderMode", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.RenderMode.Billboard; + } + }), _applyDecoratedDescriptor(_class2.prototype, "renderMode", [_dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "renderMode"), _class2.prototype), + _descriptor29 = _applyDecoratedDescriptor(_class2.prototype, "_velocityScale", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _applyDecoratedDescriptor(_class2.prototype, "velocityScale", [_dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "velocityScale"), _class2.prototype), + _descriptor30 = _applyDecoratedDescriptor(_class2.prototype, "_lengthScale", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _applyDecoratedDescriptor(_class2.prototype, "lengthScale", [_dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "lengthScale"), _class2.prototype), + _descriptor31 = _applyDecoratedDescriptor(_class2.prototype, "_mesh", [property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return null; + } + }), _applyDecoratedDescriptor(_class2.prototype, "mesh", [_dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "mesh"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "particleMaterial", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "particleMaterial"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "trailMaterial", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "trailMaterial"), _class2.prototype), + _class2)) || _class) || _class) || _class) || _class); + exports["default"] = ParticleSystem3D; + false; + cc.ParticleSystem3D = ParticleSystem3D; + module.exports = exports["default"]; + }), { + "../../assets/material/CCMaterial": 124, + "../../components/CCRenderComponent": 160, + "../../mesh/CCMesh": 207, + "../../platform/CCClassDecorator": 240, + "../../value-types": 339, + "../../value-types/utils": 346, + "./animator/color-overtime": 31, + "./animator/curve-range": 32, + "./animator/force-overtime": 33, + "./animator/gradient-range": 34, + "./animator/limit-velocity-overtime": 36, + "./animator/rotation-overtime": 37, + "./animator/size-overtime": 38, + "./animator/texture-animation": 39, + "./animator/velocity-overtime": 40, + "./burst": 41, + "./emitter/shape-module": 43, + "./enum": 44, + "./particle-general-function": 45, + "./renderer/trail": 50 + }], + 47: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../value-types"); + var Particle = function Particle(particleSystem) { + this.particleSystem = null; + this.position = null; + this.velocity = null; + this.animatedVelocity = null; + this.ultimateVelocity = null; + this.angularVelocity = null; + this.axisOfRotation = null; + this.rotation = null; + this.startSize = null; + this.size = null; + this.startColor = null; + this.color = cc.Color.WHITE; + this.randomSeed = null; + this.remainingLifetime = null; + this.startLifetime = null; + this.emitAccumulator0 = null; + this.emitAccumulator1 = null; + this.frameIndex = null; + this.particleSystem = particleSystem; + this.position = new _valueTypes.Vec3(0, 0, 0); + this.velocity = new _valueTypes.Vec3(0, 0, 0); + this.animatedVelocity = new _valueTypes.Vec3(0, 0, 0); + this.ultimateVelocity = new _valueTypes.Vec3(0, 0, 0); + this.angularVelocity = new _valueTypes.Vec3(0, 0, 0); + this.axisOfRotation = new _valueTypes.Vec3(0, 0, 0); + this.rotation = new _valueTypes.Vec3(0, 0, 0); + this.startSize = new _valueTypes.Vec3(0, 0, 0); + this.size = new _valueTypes.Vec3(0, 0, 0); + this.startColor = cc.Color.WHITE.clone(); + this.color = cc.Color.WHITE.clone(); + this.randomSeed = 0; + this.remainingLifetime = 0; + this.startLifetime = 0; + this.emitAccumulator0 = 0; + this.emitAccumulator1 = 0; + this.frameIndex = 0; + }; + exports["default"] = Particle; + module.exports = exports["default"]; + }), { + "../../value-types": 339 + }], + 48: [(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 _meshData = require("../../../mesh/mesh-data"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var renderer = require("../../../renderer"); + var ParticleBatchModel = (function () { + function ParticleBatchModel() { + this._capacity = 0; + this._vertFormat = null; + this._vertAttrsFloatCount = 0; + this._mesh = null; + this._vertCount = 0; + this._indexCount = 0; + this._material = null; + this._capacity = 0; + this._vertFormat = null; + this._vertAttrsFloatCount = 0; + this._mesh = null; + this._subDatas = []; + this._subMeshes = []; + } + var _proto = ParticleBatchModel.prototype; + _proto.setCapacity = function setCapacity(capacity) { + var capChanged = this._capacity !== capacity; + this._capacity = capacity; + this._inited && capChanged && this._recreateBuffer(); + }; + _proto.setVertexAttributes = function setVertexAttributes(mesh, vfmt) { + if (this._mesh === mesh && this._vertFormat === vfmt) return; + this._mesh = mesh; + this._vertFormat = vfmt; + this._vertAttrsFloatCount = this._vertFormat._bytes / 4; + this._createParticleData(); + this._inited = true; + }; + _proto._recreateBuffer = function _recreateBuffer() { + this._createParticleData(); + }; + _proto._createParticleData = function _createParticleData() { + this.destroyIAData(); + this._vertCount = 4; + this._indexCount = 6; + var vbData = null; + var ibData = null; + var vertSize = this._vertFormat._bytes; + if (this._mesh) { + var subData = this._mesh._subDatas[0]; + this._vertCount = subData.vData.byteLength / subData.vfm._bytes; + this._indexCount = subData.iData.byteLength / 2; + vbData = new Float32Array(vertSize * this._capacity * this._vertCount / 4); + ibData = new Uint16Array(this._capacity * this._indexCount); + var posEle = this._vertFormat.element(_gfx["default"].ATTR_TEX_COORD3); + var normalEle = this._vertFormat.element(_gfx["default"].ATTR_NORMAL); + var uvEle = this._vertFormat.element(_gfx["default"].ATTR_TEX_COORD); + var colorEle = this._vertFormat.element(_gfx["default"].ATTR_COLOR1); + this._mesh.copyAttribute(0, _gfx["default"].ATTR_POSITION, vbData.buffer, vertSize, posEle.offset); + this._mesh.copyAttribute(0, _gfx["default"].ATTR_NORMAL, vbData.buffer, vertSize, normalEle.offset); + this._mesh.copyAttribute(0, _gfx["default"].ATTR_UV0, vbData.buffer, vertSize, uvEle.offset); + if (!this._mesh.copyAttribute(0, _gfx["default"].ATTR_COLOR, vbData.buffer, vertSize, colorEle.offset)) { + var vb = new Uint32Array(vbData.buffer); + for (var i = 0; i < this._vertCount; ++i) vb[i * this._vertAttrsFloatCount + colorEle.offset / 4] = cc.Color.WHITE._val; + } + var vbFloatArray = new Float32Array(vbData.buffer); + for (var i = 1; i < this._capacity; i++) vbFloatArray.copyWithin(i * vertSize * this._vertCount / 4, 0, vertSize * this._vertCount / 4); + this._mesh.copyIndices(0, ibData); + for (var i = 1; i < this._capacity; i++) for (var j = 0; j < this._indexCount; j++) ibData[i * this._indexCount + j] = ibData[j] + i * this._vertCount; + } else { + vbData = new Float32Array(vertSize * this._capacity * this._vertCount / 4); + ibData = new Uint16Array(this._capacity * this._indexCount); + var dst = 0; + for (var i = 0; i < this._capacity; ++i) { + var baseIdx = 4 * i; + ibData[dst++] = baseIdx; + ibData[dst++] = baseIdx + 1; + ibData[dst++] = baseIdx + 2; + ibData[dst++] = baseIdx + 3; + ibData[dst++] = baseIdx + 2; + ibData[dst++] = baseIdx + 1; + } + } + var meshData = new _meshData.MeshData(); + meshData.vData = vbData; + meshData.iData = ibData; + meshData.vfm = this._vertFormat; + meshData.vDirty = true; + meshData.iDirty = true; + meshData.enable = true; + this._subDatas[0] = meshData; + false; + var _vb = new _gfx["default"].VertexBuffer(renderer.device, this._vertFormat, _gfx["default"].USAGE_DYNAMIC, vbData); + var ib = new _gfx["default"].IndexBuffer(renderer.device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, ibData, ibData.length); + this._subMeshes[0] = new _inputAssembler["default"](_vb, ib); + }; + _proto.createTrailData = function createTrailData(vfmt, num) { + if (this._subDatas[1]) return; + var vertSize = vfmt._bytes; + var vBuffer = new ArrayBuffer(vertSize * (num + 1) * 2); + var ibData = new Uint16Array(6 * num); + var meshData = new _meshData.MeshData(); + meshData.vData = new Float32Array(vBuffer); + meshData.iData = ibData; + meshData.vfm = vfmt; + meshData.vDirty = true; + meshData.iDirty = true; + meshData.enable = true; + this._subDatas[1] = meshData; + false; + var vb = new _gfx["default"].VertexBuffer(renderer.device, vfmt, _gfx["default"].USAGE_DYNAMIC, vBuffer); + var ib = new _gfx["default"].IndexBuffer(renderer.device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_DYNAMIC, ibData, 6 * num); + this._subMeshes[1] = new _inputAssembler["default"](vb, ib); + }; + _proto.setModelMaterial = function setModelMaterial(mat) { + this._material = mat; + }; + _proto.addParticleVertexData = function addParticleVertexData(index, pvdata) { + var subData = this._subDatas[0]; + var vData = subData.getVData(); + var uintVData = subData.getVData(Uint32Array); + if (this._mesh) for (var i = 0; i < this._vertCount; i++) { + var _offset = (index * this._vertCount + i) * this._vertAttrsFloatCount; + vData[_offset++] = pvdata[0].x; + vData[_offset++] = pvdata[0].y; + vData[_offset++] = pvdata[0].z; + _offset += 2; + vData[_offset++] = pvdata[1].z; + vData[_offset++] = pvdata[2].x; + vData[_offset++] = pvdata[2].y; + vData[_offset++] = pvdata[2].z; + vData[_offset++] = pvdata[3].x; + vData[_offset++] = pvdata[3].y; + vData[_offset++] = pvdata[3].z; + uintVData[_offset++] = pvdata[4]; + } else { + var offset = index * this._vertAttrsFloatCount; + vData[offset++] = pvdata[0].x; + vData[offset++] = pvdata[0].y; + vData[offset++] = pvdata[0].z; + vData[offset++] = pvdata[1].x; + vData[offset++] = pvdata[1].y; + vData[offset++] = pvdata[1].z; + vData[offset++] = pvdata[2].x; + vData[offset++] = pvdata[2].y; + vData[offset++] = pvdata[2].z; + vData[offset++] = pvdata[3].x; + vData[offset++] = pvdata[3].y; + vData[offset++] = pvdata[3].z; + uintVData[offset++] = pvdata[4]; + if (pvdata[5]) { + vData[offset++] = pvdata[5].x; + vData[offset++] = pvdata[5].y; + vData[offset++] = pvdata[5].z; + } + } + }; + _proto._uploadData = function _uploadData() { + var subDatas = this._subDatas; + var subMeshes = this._subMeshes; + for (var i = 0, len = subDatas.length; i < len; i++) { + var subData = subDatas[i]; + var subMesh = subMeshes[i]; + if (subData.vDirty) { + var vBuffer = subMesh._vertexBuffer, vData = subData.vData; + vBuffer.update(0, vData); + subData.vDirty = false; + } + if (subData.iDirty) { + var iBuffer = subMesh._indexBuffer, iData = subData.iData; + iBuffer.update(0, iData); + subData.iDirty = false; + } + } + }; + _proto.updateIA = function updateIA(index, count, vDirty, iDirty) { + false; + this._subMeshes[index]._count = count; + var subData = this._subDatas[index]; + subData.vDirty = vDirty; + subData.iDirty = iDirty; + }; + _proto.clear = function clear() { + var subMesh = this._subMeshes[0]; + subMesh && (subMesh.indexCount = 0); + }; + _proto.destroy = function destroy() { + this._subDatas.length = 0; + var subMeshes = this._subMeshes; + for (var i = 0, len = subMeshes.length; i < len; i++) { + var vb = subMeshes[i]._vertexBuffer; + vb && vb.destroy(); + var ib = subMeshes[i]._indexBuffer; + ib && ib.destroy(); + } + subMeshes.length = 0; + }; + _proto.destroyIAData = function destroyIAData() { + if (this._subMeshes[0]) { + this._subMeshes[0]._vertexBuffer.destroy(); + this._subMeshes[0]._indexBuffer.destroy(); + this._subMeshes[0] = null; + } + this._subDatas[0] = null; + }; + return ParticleBatchModel; + })(); + exports["default"] = ParticleBatchModel; + module.exports = exports["default"]; + }), { + "../../../../renderer/core/input-assembler": 362, + "../../../../renderer/gfx": 372, + "../../../mesh/mesh-data": 210, + "../../../renderer": 271 + }], + 49: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../../value-types"); + var _gfx = _interopRequireDefault(require("../../../../renderer/gfx")); + var _particleBatchModel = _interopRequireDefault(require("./particle-batch-model")); + var _materialVariant = _interopRequireDefault(require("../../../assets/material/material-variant")); + var _recyclePool = _interopRequireDefault(require("../../../../renderer/memop/recycle-pool")); + var _enum = require("../enum"); + var _particle = _interopRequireDefault(require("../particle")); + var _assembler = _interopRequireDefault(require("../../../renderer/assembler")); + var _particleSystem3d = _interopRequireDefault(require("../particle-system-3d")); + var _dec, _class, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var _require = require("../../../platform/CCClassDecorator"), ccclass = _require.ccclass, property = _require.property; + var _tempAttribUV = new _valueTypes.Vec3(); + var _tempAttribUV0 = new _valueTypes.Vec2(); + var _tempAttribColor = new _valueTypes.Vec4(); + var _tempWorldTrans = new _valueTypes.Mat4(); + var _uvs = [0, 0, 1, 0, 0, 1, 1, 1]; + var CC_USE_WORLD_SPACE = "CC_USE_WORLD_SPACE"; + var CC_USE_BILLBOARD = "CC_USE_BILLBOARD"; + var CC_USE_STRETCHED_BILLBOARD = "CC_USE_STRETCHED_BILLBOARD"; + var CC_USE_HORIZONTAL_BILLBOARD = "CC_USE_HORIZONTAL_BILLBOARD"; + var CC_USE_VERTICAL_BILLBOARD = "CC_USE_VERTICAL_BILLBOARD"; + var CC_USE_MESH = "CC_USE_MESH"; + var vfmtNormal = new _gfx["default"].VertexFormat([{ + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD1, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD2, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }]); + vfmtNormal.name = "vfmtNormal"; + var vfmtStretch = new _gfx["default"].VertexFormat([{ + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD1, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD2, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: _gfx["default"].ATTR_COLOR1, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }]); + vfmtStretch.name = "vfmtStretch"; + var vfmtMesh = new _gfx["default"].VertexFormat([{ + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD1, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD2, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: _gfx["default"].ATTR_TEX_COORD3, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_NORMAL, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_COLOR1, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }]); + vfmtMesh.name = "vfmtMesh"; + var ParticleSystem3DAssembler = (_dec = ccclass("cc.ParticleSystem3DAssembler"), + _dec(_class = (_temp = (function (_Assembler) { + _inheritsLoose(ParticleSystem3DAssembler, _Assembler); + function ParticleSystem3DAssembler() { + var _this; + _this = _Assembler.call(this) || this; + _this._defines = null; + _this._trailDefines = null; + _this._model = null; + _this.frameTile_velLenScale = null; + _this.attrs = []; + _this._vertFormat = []; + _this._particleSystem = null; + _this._particles = null; + _this._defaultMat = null; + _this._isAssetReady = false; + _this._defaultTrailMat = null; + _this._customProperties = null; + _this._node_scale = null; + _this._model = null; + _this.frameTile_velLenScale = cc.v4(1, 1, 0, 0); + _this._node_scale = cc.v4(); + _this.attrs = new Array(5); + _this._trailDefines = { + CC_USE_WORLD_SPACE: true + }; + return _this; + } + var _proto = ParticleSystem3DAssembler.prototype; + _proto.onInit = function onInit(ps) { + var _this2 = this; + this._particleSystem = ps; + this._particles = new _recyclePool["default"](function () { + return new _particle["default"](_this2); + }, 16); + this._setVertexAttrib(); + this.onEnable(); + this._updateModel(); + this._updateMaterialParams(); + this._updateTrailMaterial(); + }; + _proto.onEnable = function onEnable() { + if (!this._particleSystem) return; + null == this._model && (this._model = new _particleBatchModel["default"]()); + this._model.inited || this._model.setCapacity(this._particleSystem.capacity); + this._model.enabled = this._particleSystem.enabledInHierarchy; + }; + _proto.onDisable = function onDisable() { + this._model && (this._model.enabled = this._particleSystem.enabledInHierarchy); + }; + _proto.onDestroy = function onDestroy() { + this._model = null; + }; + _proto.clear = function clear() { + this._particles.reset(); + this.updateParticleBuffer(); + }; + _proto._getFreeParticle = function _getFreeParticle() { + if (this._particles.length >= this._particleSystem.capacity) return null; + return this._particles.add(); + }; + _proto._setNewParticle = function _setNewParticle(p) { }; + _proto._updateParticles = function _updateParticles(dt) { + this._particleSystem.node.getWorldMatrix(_tempWorldTrans); + switch (this._particleSystem.scaleSpace) { + case _enum.Space.Local: + this._particleSystem.node.getScale(this._node_scale); + break; + + case _enum.Space.World: + this._particleSystem.node.getWorldScale(this._node_scale); + } + var material = this._particleSystem.materials[0]; + var mat = material ? this._particleSystem.particleMaterial : this._defaultMat; + mat.setProperty("scale", this._node_scale); + this._particleSystem.velocityOvertimeModule.enable && this._particleSystem.velocityOvertimeModule.update(this._particleSystem._simulationSpace, _tempWorldTrans); + this._particleSystem.forceOvertimeModule.enable && this._particleSystem.forceOvertimeModule.update(this._particleSystem._simulationSpace, _tempWorldTrans); + this._particleSystem.trailModule.enable && this._particleSystem.trailModule.update(); + for (var i = 0; i < this._particles.length; ++i) { + var p = this._particles.data[i]; + p.remainingLifetime -= dt; + _valueTypes.Vec3.set(p.animatedVelocity, 0, 0, 0); + if (p.remainingLifetime < 0) { + this._particleSystem.trailModule.enable && this._particleSystem.trailModule.removeParticle(p); + this._particles.remove(i); + --i; + continue; + } + p.velocity.y -= 9.8 * this._particleSystem.gravityModifier.evaluate(1 - p.remainingLifetime / p.startLifetime, p.randomSeed) * dt; + this._particleSystem.sizeOvertimeModule.enable && this._particleSystem.sizeOvertimeModule.animate(p); + this._particleSystem.colorOverLifetimeModule.enable && this._particleSystem.colorOverLifetimeModule.animate(p); + this._particleSystem.forceOvertimeModule.enable && this._particleSystem.forceOvertimeModule.animate(p, dt); + this._particleSystem.velocityOvertimeModule.enable ? this._particleSystem.velocityOvertimeModule.animate(p) : _valueTypes.Vec3.copy(p.ultimateVelocity, p.velocity); + this._particleSystem.limitVelocityOvertimeModule.enable && this._particleSystem.limitVelocityOvertimeModule.animate(p); + this._particleSystem.rotationOvertimeModule.enable && this._particleSystem.rotationOvertimeModule.animate(p, dt); + this._particleSystem.textureAnimationModule.enable && this._particleSystem.textureAnimationModule.animate(p); + _valueTypes.Vec3.scaleAndAdd(p.position, p.position, p.ultimateVelocity, dt); + this._particleSystem.trailModule.enable && this._particleSystem.trailModule.animate(p, dt); + } + return this._particles.length; + }; + _proto.updateParticleBuffer = function updateParticleBuffer() { + var idx = 0; + var uploadVel = this._particleSystem.renderMode === _enum.RenderMode.StrecthedBillboard; + for (var i = 0; i < this._particles.length; ++i) { + var p = this._particles.data[i]; + var fi = 0; + this._particleSystem.textureAnimationModule.enable && (fi = p.frameIndex); + idx = 4 * i; + var attrNum = 0; + if (this._particleSystem.renderMode !== _enum.RenderMode.Mesh) for (var j = 0; j < 4; ++j) { + attrNum = 0; + this.attrs[attrNum++] = p.position; + _tempAttribUV.x = _uvs[2 * j]; + _tempAttribUV.y = _uvs[2 * j + 1]; + _tempAttribUV.z = fi; + this.attrs[attrNum++] = _tempAttribUV; + this.attrs[attrNum++] = p.size; + this.attrs[attrNum++] = p.rotation; + this.attrs[attrNum++] = p.color._val; + this.attrs[attrNum++] = uploadVel ? p.ultimateVelocity : null; + this._model.addParticleVertexData(idx++, this.attrs); + } else { + attrNum = 0; + this.attrs[attrNum++] = p.position; + _tempAttribUV.z = fi; + this.attrs[attrNum++] = _tempAttribUV; + this.attrs[attrNum++] = p.size; + this.attrs[attrNum++] = p.rotation; + this.attrs[attrNum++] = p.color._val; + this._model.addParticleVertexData(i, this.attrs); + } + } + this.updateIA(0, this._particles.length * this._model._indexCount, true); + }; + _proto.updateShaderUniform = function updateShaderUniform() { }; + _proto.updateIA = function updateIA(index, count, vDirty, iDirty) { + if (!this._model) return; + this._model.updateIA(index, count, vDirty, iDirty); + }; + _proto.getParticleCount = function getParticleCount() { + return this._particles.data.length; + }; + _proto._onMaterialModified = function _onMaterialModified(index, material) { + if (0 === index) { + this._updateModel(); + this._updateMaterialParams(); + } else this._updateTrailMaterial(); + }; + _proto._onRebuildPSO = function _onRebuildPSO(index, material) { + this._model && 0 === index && this._model.setModelMaterial(material); + this._particleSystem.trailModule._trailModel && 1 === index && this._particleSystem.trailModule._trailModel.setModelMaterial(material); + }; + _proto._ensureLoadMesh = function _ensureLoadMesh() { + this._particleSystem.mesh && !this._particleSystem.mesh.loaded && cc.assetManager.postLoadNative(this._particleSystem.mesh); + }; + _proto.setCapacity = function setCapacity(capacity) { + if (!this._model) return; + this._model.setCapacity(capacity); + }; + _proto._setVertexAttrib = function _setVertexAttrib() { + switch (this._particleSystem.renderMode) { + case _enum.RenderMode.StrecthedBillboard: + this._vertFormat = vfmtStretch; + break; + + case _enum.RenderMode.Mesh: + this._vertFormat = vfmtMesh; + break; + + default: + this._vertFormat = vfmtNormal; + } + }; + _proto._updateMaterialParams = function _updateMaterialParams() { + if (!this._particleSystem) return; + var mat = this._particleSystem.materials[0]; + mat = null == mat && null == this._defaultMat ? this._defaultMat = _materialVariant["default"].createWithBuiltin("3d-particle", this) : _materialVariant["default"].create(mat, this._particleSystem); + mat = mat || this._defaultMat; + this._particleSystem._simulationSpace === _enum.Space.World ? mat.define(CC_USE_WORLD_SPACE, true) : mat.define(CC_USE_WORLD_SPACE, false); + if (this._particleSystem.renderMode === _enum.RenderMode.Billboard) { + mat.define(CC_USE_BILLBOARD, true); + mat.define(CC_USE_STRETCHED_BILLBOARD, false); + mat.define(CC_USE_HORIZONTAL_BILLBOARD, false); + mat.define(CC_USE_VERTICAL_BILLBOARD, false); + mat.define(CC_USE_MESH, false); + } else if (this._particleSystem.renderMode === _enum.RenderMode.StrecthedBillboard) { + mat.define(CC_USE_BILLBOARD, false); + mat.define(CC_USE_STRETCHED_BILLBOARD, true); + mat.define(CC_USE_HORIZONTAL_BILLBOARD, false); + mat.define(CC_USE_VERTICAL_BILLBOARD, false); + mat.define(CC_USE_MESH, false); + this.frameTile_velLenScale.z = this._particleSystem.velocityScale; + this.frameTile_velLenScale.w = this._particleSystem.lengthScale; + } else if (this._particleSystem.renderMode === _enum.RenderMode.HorizontalBillboard) { + mat.define(CC_USE_BILLBOARD, false); + mat.define(CC_USE_STRETCHED_BILLBOARD, false); + mat.define(CC_USE_HORIZONTAL_BILLBOARD, true); + mat.define(CC_USE_VERTICAL_BILLBOARD, false); + mat.define(CC_USE_MESH, false); + } else if (this._particleSystem.renderMode === _enum.RenderMode.VerticalBillboard) { + mat.define(CC_USE_BILLBOARD, false); + mat.define(CC_USE_STRETCHED_BILLBOARD, false); + mat.define(CC_USE_HORIZONTAL_BILLBOARD, false); + mat.define(CC_USE_VERTICAL_BILLBOARD, true); + mat.define(CC_USE_MESH, false); + } else if (this._particleSystem.renderMode === _enum.RenderMode.Mesh) { + mat.define(CC_USE_BILLBOARD, false); + mat.define(CC_USE_STRETCHED_BILLBOARD, false); + mat.define(CC_USE_HORIZONTAL_BILLBOARD, false); + mat.define(CC_USE_VERTICAL_BILLBOARD, false); + mat.define(CC_USE_MESH, true); + } else console.warn("particle system renderMode " + this._particleSystem.renderMode + " not support."); + this._particleSystem.textureAnimationModule.enable && _valueTypes.Vec2.set(this.frameTile_velLenScale, this._particleSystem.textureAnimationModule.numTilesX, this._particleSystem.textureAnimationModule.numTilesY); + mat.setProperty("frameTile_velLenScale", this.frameTile_velLenScale); + this._particleSystem.setMaterial(0, mat); + }; + _proto._updateTrailMaterial = function _updateTrailMaterial() { + var mat = this._particleSystem.trailMaterial; + if (this._particleSystem.trailModule.enable) { + null === mat && null === this._defaultTrailMat && (this._defaultTrailMat = _materialVariant["default"].createWithBuiltin("3d-trail", this)); + if (null === mat) { + mat = this._defaultTrailMat; + this._particleSystem.trailMaterial = mat; + } + this._particleSystem._simulationSpace === _enum.Space.World || this._particleSystem.trailModule.space === _enum.Space.World ? mat.define(CC_USE_WORLD_SPACE, true) : mat.define(CC_USE_WORLD_SPACE, false); + this._particleSystem.trailModule._updateMaterial(); + } + }; + _proto._updateTrailEnable = function _updateTrailEnable(enable) { + if (!this._model) return; + var subData = this._model._subDatas[1]; + subData && (subData.enable = enable); + }; + _proto._updateModel = function _updateModel() { + if (!this._model) return; + this._model.setVertexAttributes(this._particleSystem.renderMode === _enum.RenderMode.Mesh ? this._particleSystem.mesh : null, this._vertFormat); + }; + _proto.setVertexAttributes = function setVertexAttributes(mesh, vfmt) { + if (!this._model) return; + this._model.setVertexAttributes(mesh, vfmt); + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + if (!this._model) return; + this._model._uploadData(); + var submeshes = this._model._subMeshes; + var subDatas = this._model._subDatas; + var materials = comp.materials; + renderer._flush(); + for (var i = 0, len = submeshes.length; i < len; i++) { + var ia = submeshes[i]; + var meshData = subDatas[i]; + var material = materials[i]; + if (meshData.enable) { + renderer.material = material; + renderer.cullingMask = comp.node._cullingMask; + renderer.node = comp.node; + renderer._flushIA(ia); + } + } + }; + return ParticleSystem3DAssembler; + })(_assembler["default"]), _temp)) || _class); + exports["default"] = ParticleSystem3DAssembler; + Object.assign(ParticleSystem3DAssembler, { + uv: _uvs + }); + _assembler["default"].register(_particleSystem3d["default"], ParticleSystem3DAssembler); + module.exports = exports["default"]; + }), { + "../../../../renderer/gfx": 372, + "../../../../renderer/memop/recycle-pool": 387, + "../../../assets/material/material-variant": 131, + "../../../platform/CCClassDecorator": 240, + "../../../renderer/assembler": 268, + "../../../value-types": 339, + "../enum": 44, + "../particle": 47, + "../particle-system-3d": 46, + "./particle-batch-model": 48 + }], + 50: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _CCClassDecorator = require("../../../platform/CCClassDecorator"); + var _valueTypes = require("../../../value-types"); + var _gfx = _interopRequireDefault(require("../../../../renderer/gfx")); + var _pool = _interopRequireDefault(require("../../../../renderer/memop/pool")); + var _curveRange = _interopRequireDefault(require("../animator/curve-range")); + var _gradientRange = _interopRequireDefault(require("../animator/gradient-range")); + var _enum = require("../enum"); + var _utils = _interopRequireDefault(require("../utils")); + var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _temp; + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it; + if ("undefined" === typeof Symbol || null == o[Symbol.iterator]) { + 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."); + } + it = o[Symbol.iterator](); + return it.next.bind(it); + } + 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 _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach((function (key) { + desc[key] = descriptor[key]; + })); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce((function (desc, decorator) { + return decorator(target, property, desc) || desc; + }), desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var PRE_TRIANGLE_INDEX = 1; + var NEXT_TRIANGLE_INDEX = 4; + var DIRECTION_THRESHOLD = Math.cos((0, _valueTypes.toRadian)(100)); + var _temp_trailEle = { + position: cc.v3(), + velocity: cc.v3() + }; + var _temp_quat = cc.quat(); + var _temp_xform = cc.mat4(); + var _temp_Vec3 = cc.v3(); + var _temp_Vec3_1 = cc.v3(); + var _temp_color = cc.color(); + var ITrailElement = function ITrailElement() { + this.position = void 0; + this.lifetime = void 0; + this.width = void 0; + this.velocity = void 0; + this.color = void 0; + }; + var TrailSegment = (function () { + function TrailSegment(maxTrailElementNum) { + this.start = void 0; + this.end = void 0; + this.trailElements = []; + this.start = -1; + this.end = -1; + this.trailElements = []; + while (maxTrailElementNum--) this.trailElements.push({ + position: cc.v3(), + lifetime: 0, + width: 0, + velocity: cc.v3(), + direction: 0, + color: cc.color() + }); + } + var _proto = TrailSegment.prototype; + _proto.getElement = function getElement(idx) { + if (-1 === this.start) return null; + idx < 0 && (idx = (idx + this.trailElements.length) % this.trailElements.length); + idx >= this.trailElements.length && (idx %= this.trailElements.length); + return this.trailElements[idx]; + }; + _proto.addElement = function addElement() { + if (0 === this.trailElements.length) return null; + if (-1 === this.start) { + this.start = 0; + this.end = 1; + return this.trailElements[0]; + } + if (this.start === this.end) { + this.trailElements.splice(this.end, 0, { + position: cc.v3(), + lifetime: 0, + width: 0, + velocity: cc.v3(), + direction: 0, + color: cc.color() + }); + this.start++; + this.start %= this.trailElements.length; + } + var newEleLoc = this.end++; + this.end %= this.trailElements.length; + return this.trailElements[newEleLoc]; + }; + _proto.iterateElement = function iterateElement(target, f, p, dt) { + var end = this.start >= this.end ? this.end + this.trailElements.length : this.end; + for (var i = this.start; i < end; i++) if (f(target, this.trailElements[i % this.trailElements.length], p, dt)) { + this.start++; + this.start %= this.trailElements.length; + } + if (this.start === end) { + this.start = -1; + this.end = -1; + } + }; + _proto.count = function count() { + return this.start < this.end ? this.end - this.start : this.trailElements.length + this.end - this.start; + }; + _proto.clear = function clear() { + this.start = -1; + this.end = -1; + }; + return TrailSegment; + })(); + var TrailModule = (_dec = (0, _CCClassDecorator.ccclass)("cc.TrailModule"), _dec2 = (0, + _CCClassDecorator.property)({ + type: _enum.TrailMode + }), _dec3 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec4 = (0, _CCClassDecorator.property)({ + type: _enum.Space + }), _dec5 = (0, _CCClassDecorator.property)({ + type: _enum.TextureMode + }), _dec6 = (0, _CCClassDecorator.property)({ + type: _curveRange["default"] + }), _dec7 = (0, _CCClassDecorator.property)({ + type: _gradientRange["default"] + }), _dec8 = (0, _CCClassDecorator.property)({ + type: _gradientRange["default"] + }), _dec(_class = (_class2 = (_temp = (function () { + _createClass(TrailModule, [{ + key: "enable", + get: function get() { + return this._enable; + }, + set: function set(val) { + val && this._createTrailData(); + if (val && !this._enable) { + this._enable = val; + this._particleSystem._assembler._updateTrailMaterial(); + } + this._enable = val; + this._particleSystem._assembler._updateTrailEnable(this._enable); + } + }, { + key: "minParticleDistance", + get: function get() { + return this._minParticleDistance; + }, + set: function set(val) { + this._minParticleDistance = val; + this._minSquaredDistance = val * val; + } + }, { + key: "space", + get: function get() { + return this._space; + }, + set: function set(val) { + this._space = val; + this._particleSystem && this._particleSystem._assembler._updateTrailMaterial(); + } + }]); + function TrailModule() { + _initializerDefineProperty(this, "_enable", _descriptor, this); + _initializerDefineProperty(this, "mode", _descriptor2, this); + _initializerDefineProperty(this, "lifeTime", _descriptor3, this); + _initializerDefineProperty(this, "_minParticleDistance", _descriptor4, this); + _initializerDefineProperty(this, "_space", _descriptor5, this); + _initializerDefineProperty(this, "existWithParticles", _descriptor6, this); + _initializerDefineProperty(this, "textureMode", _descriptor7, this); + _initializerDefineProperty(this, "widthFromParticle", _descriptor8, this); + _initializerDefineProperty(this, "widthRatio", _descriptor9, this); + _initializerDefineProperty(this, "colorFromParticle", _descriptor10, this); + _initializerDefineProperty(this, "colorOverTrail", _descriptor11, this); + _initializerDefineProperty(this, "colorOvertime", _descriptor12, this); + this._particleSystem = null; + this._minSquaredDistance = 0; + this._vertSize = 0; + this._trailNum = 0; + this._trailLifetime = 0; + this.vbOffset = 0; + this.ibOffset = 0; + this._trailSegments = null; + this._particleTrail = null; + this._ia = null; + this._gfxVFmt = null; + this._vbF32 = null; + this._vbUint32 = null; + this._iBuffer = null; + this._needTransform = null; + this._defaultMat = null; + this._material = null; + this._gfxVFmt = new _gfx["default"].VertexFormat([{ + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_TEX_COORD, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 4 + }, { + name: _gfx["default"].ATTR_TEX_COORD1, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }, { + name: _gfx["default"].ATTR_COLOR, + type: _gfx["default"].ATTR_TYPE_UINT8, + num: 4, + normalize: true + }]); + this._vertSize = this._gfxVFmt._bytes; + this._particleTrail = new _utils["default"](); + } + var _proto2 = TrailModule.prototype; + _proto2.onInit = function onInit(ps) { + this._particleSystem = ps; + this.minParticleDistance = this._minParticleDistance; + var burstCount = 0; + for (var _iterator = _createForOfIteratorHelperLoose(ps.bursts), _step; !(_step = _iterator()).done;) { + var b = _step.value; + burstCount += b.getMaxCount(ps); + } + this.lifeTime.constant = 1; + this._trailNum = Math.ceil(ps.startLifetime.getMax() * this.lifeTime.getMax() * 60 * (ps.rateOverTime.getMax() * ps.duration + burstCount)); + this._trailSegments = new _pool["default"](function () { + return new TrailSegment(10); + }, Math.ceil(ps.rateOverTime.getMax() * ps.duration)); + if (this._enable) { + this.enable = this._enable; + this._updateMaterial(); + } + }; + _proto2.onEnable = function onEnable() { }; + _proto2.onDisable = function onDisable() { }; + _proto2.destroy = function destroy() { + if (this._trailSegments) { + this._trailSegments.clear((function (obj) { + obj.trailElements.length = 0; + })); + this._trailSegments = null; + } + }; + _proto2.clear = function clear() { + if (this.enable) { + var trailIter = this._particleTrail.values(); + var trail = trailIter.next(); + while (!trail.done) { + trail.value.clear(); + trail = trailIter.next(); + } + this._particleTrail.clear(); + this.updateTrailBuffer(); + } + }; + _proto2._createTrailData = function _createTrailData() { + var model = this._particleSystem._assembler._model; + if (model) { + model.createTrailData(this._gfxVFmt, this._trailNum); + var subData = model._subDatas[1]; + this._vbF32 = subData.getVData(); + this._vbUint32 = subData.getVData(Uint32Array); + this._iBuffer = subData.iData; + } + }; + _proto2._updateMaterial = function _updateMaterial() { + if (this._particleSystem) { + var mat = this._particleSystem.trailMaterial; + this._material = mat || this._particleSystem._assembler._defaultTrailMat; + } + }; + _proto2.update = function update() { + this._trailLifetime = this.lifeTime.evaluate(this._particleSystem._time, 1); + if (this.space === _enum.Space.World && this._particleSystem._simulationSpace === _enum.Space.Local) { + this._needTransform = true; + this._particleSystem.node.getWorldMatrix(_temp_xform); + this._particleSystem.node.getWorldRotation(_temp_quat); + } else this._needTransform = false; + }; + _proto2.animate = function animate(p, scaledDt) { + if (!this._trailSegments) return; + var trail = this._particleTrail.get(p); + if (!trail) { + trail = this._trailSegments.alloc(); + this._particleTrail.set(p, trail); + return; + } + var lastSeg = trail.getElement(trail.end - 1); + this._needTransform ? _valueTypes.Vec3.transformMat4(_temp_Vec3, p.position, _temp_xform) : _valueTypes.Vec3.copy(_temp_Vec3, p.position); + if (lastSeg) { + trail.iterateElement(this, this._updateTrailElement, p, scaledDt); + if (_valueTypes.Vec3.squaredDistance(lastSeg.position, _temp_Vec3) < this._minSquaredDistance) return; + } + lastSeg = trail.addElement(); + if (!lastSeg) return; + _valueTypes.Vec3.copy(lastSeg.position, _temp_Vec3); + lastSeg.lifetime = 0; + this.widthFromParticle ? lastSeg.width = p.size.x * this.widthRatio.evaluate(0, 1) : lastSeg.width = this.widthRatio.evaluate(0, 1); + var trailNum = trail.count(); + if (2 === trailNum) { + var lastSecondTrail = trail.getElement(trail.end - 2); + _valueTypes.Vec3.subtract(lastSecondTrail.velocity, lastSeg.position, lastSecondTrail.position); + } else if (trailNum > 2) { + var _lastSecondTrail = trail.getElement(trail.end - 2); + var lastThirdTrail = trail.getElement(trail.end - 3); + _valueTypes.Vec3.subtract(_temp_Vec3, lastThirdTrail.position, _lastSecondTrail.position); + _valueTypes.Vec3.subtract(_temp_Vec3_1, lastSeg.position, _lastSecondTrail.position); + _valueTypes.Vec3.subtract(_lastSecondTrail.velocity, _temp_Vec3_1, _temp_Vec3); + _valueTypes.Vec3.equals(cc.Vec3.ZERO, _lastSecondTrail.velocity) && _valueTypes.Vec3.copy(_lastSecondTrail.velocity, _temp_Vec3); + } + this.colorFromParticle ? lastSeg.color.set(p.color) : lastSeg.color.set(this.colorOvertime.evaluate(0, 1)); + }; + _proto2._updateTrailElement = function _updateTrailElement(trail, trailEle, p, dt) { + trailEle.lifetime += dt; + if (trail.colorFromParticle) { + trailEle.color.set(p.color); + trailEle.color.multiply(trail.colorOvertime.evaluate(1 - p.remainingLifetime / p.startLifetime, 1)); + } else trailEle.color.set(trail.colorOvertime.evaluate(1 - p.remainingLifetime / p.startLifetime, 1)); + trail.widthFromParticle ? trailEle.width = p.size.x * trail.widthRatio.evaluate(trailEle.lifetime / trail._trailLifetime, 1) : trailEle.width = trail.widthRatio.evaluate(trailEle.lifetime / trail._trailLifetime, 1); + return trailEle.lifetime > trail._trailLifetime; + }; + _proto2.removeParticle = function removeParticle(p) { + var trail = this._particleTrail.get(p); + if (trail && this._trailSegments) { + trail.clear(); + this._trailSegments.free(trail); + this._particleTrail["delete"](p); + } + }; + _proto2.updateTrailBuffer = function updateTrailBuffer() { + this.vbOffset = 0; + this.ibOffset = 0; + for (var _iterator2 = _createForOfIteratorHelperLoose(this._particleTrail.keys()), _step2; !(_step2 = _iterator2()).done;) { + var p = _step2.value; + var trailSeg = this._particleTrail.get(p); + if (-1 === trailSeg.start) continue; + var indexOffset = 4 * this.vbOffset / this._vertSize; + var end = trailSeg.start >= trailSeg.end ? trailSeg.end + trailSeg.trailElements.length : trailSeg.end; + var trailNum = end - trailSeg.start; + var textCoordSeg = 1 / trailNum; + var startSegEle = trailSeg.trailElements[trailSeg.start]; + this._fillVertexBuffer(startSegEle, this.colorOverTrail.evaluate(1, 1), indexOffset, 1, 0, NEXT_TRIANGLE_INDEX); + for (var i = trailSeg.start + 1; i < end; i++) { + var segEle = trailSeg.trailElements[i % trailSeg.trailElements.length]; + var j = i - trailSeg.start; + this._fillVertexBuffer(segEle, this.colorOverTrail.evaluate(1 - j / trailNum, 1), indexOffset, 1 - j * textCoordSeg, j, PRE_TRIANGLE_INDEX | NEXT_TRIANGLE_INDEX); + } + this._needTransform ? _valueTypes.Vec3.transformMat4(_temp_trailEle.position, p.position, _temp_xform) : _valueTypes.Vec3.copy(_temp_trailEle.position, p.position); + if (1 === trailNum || 2 === trailNum) { + var lastSecondTrail = trailSeg.getElement(trailSeg.end - 1); + _valueTypes.Vec3.subtract(lastSecondTrail.velocity, _temp_trailEle.position, lastSecondTrail.position); + this._vbF32[this.vbOffset - this._vertSize / 4 - 4] = lastSecondTrail.velocity.x; + this._vbF32[this.vbOffset - this._vertSize / 4 - 3] = lastSecondTrail.velocity.y; + this._vbF32[this.vbOffset - this._vertSize / 4 - 2] = lastSecondTrail.velocity.z; + this._vbF32[this.vbOffset - 4] = lastSecondTrail.velocity.x; + this._vbF32[this.vbOffset - 3] = lastSecondTrail.velocity.y; + this._vbF32[this.vbOffset - 2] = lastSecondTrail.velocity.z; + _valueTypes.Vec3.subtract(_temp_trailEle.velocity, _temp_trailEle.position, lastSecondTrail.position); + this._checkDirectionReverse(_temp_trailEle, lastSecondTrail); + } else if (trailNum > 2) { + var _lastSecondTrail2 = trailSeg.getElement(trailSeg.end - 1); + var lastThirdTrail = trailSeg.getElement(trailSeg.end - 2); + _valueTypes.Vec3.subtract(_temp_Vec3, lastThirdTrail.position, _lastSecondTrail2.position); + _valueTypes.Vec3.subtract(_temp_Vec3_1, _temp_trailEle.position, _lastSecondTrail2.position); + _valueTypes.Vec3.normalize(_temp_Vec3, _temp_Vec3); + _valueTypes.Vec3.normalize(_temp_Vec3_1, _temp_Vec3_1); + _valueTypes.Vec3.subtract(_lastSecondTrail2.velocity, _temp_Vec3_1, _temp_Vec3); + _valueTypes.Vec3.normalize(_lastSecondTrail2.velocity, _lastSecondTrail2.velocity); + this._checkDirectionReverse(_lastSecondTrail2, lastThirdTrail); + this.vbOffset -= this._vertSize / 4 * 2; + this.ibOffset -= 6; + this._fillVertexBuffer(_lastSecondTrail2, this.colorOverTrail.evaluate(textCoordSeg, 1), indexOffset, textCoordSeg, trailNum - 1, PRE_TRIANGLE_INDEX | NEXT_TRIANGLE_INDEX); + _valueTypes.Vec3.subtract(_temp_trailEle.velocity, _temp_trailEle.position, _lastSecondTrail2.position); + _valueTypes.Vec3.normalize(_temp_trailEle.velocity, _temp_trailEle.velocity); + this._checkDirectionReverse(_temp_trailEle, _lastSecondTrail2); + } + this.widthFromParticle ? _temp_trailEle.width = p.size.x * this.widthRatio.evaluate(0, 1) : _temp_trailEle.width = this.widthRatio.evaluate(0, 1); + _temp_trailEle.color = p.color; + _valueTypes.Vec3.equals(_temp_trailEle.velocity, cc.Vec3.ZERO) ? this.ibOffset -= 3 : this._fillVertexBuffer(_temp_trailEle, this.colorOverTrail.evaluate(0, 1), indexOffset, 0, trailNum, PRE_TRIANGLE_INDEX); + } + this._updateIA(this.ibOffset); + }; + _proto2._fillVertexBuffer = function _fillVertexBuffer(trailSeg, colorModifer, indexOffset, xTexCoord, trailEleIdx, indexSet) { + this._vbF32[this.vbOffset++] = trailSeg.position.x; + this._vbF32[this.vbOffset++] = trailSeg.position.y; + this._vbF32[this.vbOffset++] = trailSeg.position.z; + this._vbF32[this.vbOffset++] = 0; + this._vbF32[this.vbOffset++] = trailSeg.width; + this._vbF32[this.vbOffset++] = xTexCoord; + this._vbF32[this.vbOffset++] = 0; + this._vbF32[this.vbOffset++] = trailSeg.velocity.x; + this._vbF32[this.vbOffset++] = trailSeg.velocity.y; + this._vbF32[this.vbOffset++] = trailSeg.velocity.z; + _temp_color.set(trailSeg.color); + _temp_color.multiply(colorModifer); + this._vbUint32[this.vbOffset++] = _temp_color._val; + this._vbF32[this.vbOffset++] = trailSeg.position.x; + this._vbF32[this.vbOffset++] = trailSeg.position.y; + this._vbF32[this.vbOffset++] = trailSeg.position.z; + this._vbF32[this.vbOffset++] = 1; + this._vbF32[this.vbOffset++] = trailSeg.width; + this._vbF32[this.vbOffset++] = xTexCoord; + this._vbF32[this.vbOffset++] = 1; + this._vbF32[this.vbOffset++] = trailSeg.velocity.x; + this._vbF32[this.vbOffset++] = trailSeg.velocity.y; + this._vbF32[this.vbOffset++] = trailSeg.velocity.z; + this._vbUint32[this.vbOffset++] = _temp_color._val; + if (indexSet & PRE_TRIANGLE_INDEX) { + this._iBuffer[this.ibOffset++] = indexOffset + 2 * trailEleIdx; + this._iBuffer[this.ibOffset++] = indexOffset + 2 * trailEleIdx - 1; + this._iBuffer[this.ibOffset++] = indexOffset + 2 * trailEleIdx + 1; + } + if (indexSet & NEXT_TRIANGLE_INDEX) { + this._iBuffer[this.ibOffset++] = indexOffset + 2 * trailEleIdx; + this._iBuffer[this.ibOffset++] = indexOffset + 2 * trailEleIdx + 1; + this._iBuffer[this.ibOffset++] = indexOffset + 2 * trailEleIdx + 2; + } + }; + _proto2._updateIA = function _updateIA(count) { + this._particleSystem && this._particleSystem._assembler && this._particleSystem._assembler.updateIA(1, count, true, true); + }; + _proto2._checkDirectionReverse = function _checkDirectionReverse(currElement, prevElement) { + _valueTypes.Vec3.dot(currElement.velocity, prevElement.velocity) < DIRECTION_THRESHOLD ? currElement.direction = 1 - prevElement.direction : currElement.direction = prevElement.direction; + }; + return TrailModule; + })(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_enable", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _applyDecoratedDescriptor(_class2.prototype, "enable", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "enable"), _class2.prototype), + _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "mode", [_dec2], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.TrailMode.Particles; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "lifeTime", [_dec3], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "_minParticleDistance", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .1; + } + }), _applyDecoratedDescriptor(_class2.prototype, "minParticleDistance", [_CCClassDecorator.property], Object.getOwnPropertyDescriptor(_class2.prototype, "minParticleDistance"), _class2.prototype), + _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "_space", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.Space.World; + } + }), _applyDecoratedDescriptor(_class2.prototype, "space", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "space"), _class2.prototype), + _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "existWithParticles", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "textureMode", [_dec5], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return _enum.TextureMode.Stretch; + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "widthFromParticle", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "widthRatio", [_dec6], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _curveRange["default"](); + } + }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "colorFromParticle", [_CCClassDecorator.property], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "colorOverTrail", [_dec7], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradientRange["default"](); + } + }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "colorOvertime", [_dec8], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new _gradientRange["default"](); + } + }), _class2)) || _class); + exports["default"] = TrailModule; + module.exports = exports["default"]; + }), { + "../../../../renderer/gfx": 372, + "../../../../renderer/memop/pool": 386, + "../../../platform/CCClassDecorator": 240, + "../../../value-types": 339, + "../animator/curve-range": 32, + "../animator/gradient-range": 34, + "../enum": 44, + "../utils": 51 + }], + 51: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + Object.is || (Object.is = function (x, y) { + return x === y ? 0 !== x || 1 / x === 1 / y : x !== x && y !== y; + }); + var MapUtils = (function () { + function MapUtils(data) { + this.datas = []; + !data && (data = []); + this.datas = []; + var that = this; + data.forEach((function (item) { + that.has(item[0]) || that.datas.push({ + key: item[0], + value: item[1] + }); + })); + } + var _proto = MapUtils.prototype; + _proto.size = function size() { + return this.datas.length; + }; + _proto.set = function set(key, value) { + this["delete"](key); + this.datas.push({ + key: key, + value: value + }); + }; + _proto.get = function get(key) { + var value = void 0; + var datas = this.datas; + for (var i = 0, len = datas.length; i < len; i++) if (Object.is(key, datas[i].key)) { + value = datas[i].value; + break; + } + return value; + }; + _proto.has = function has(key) { + var res = false; + var datas = this.datas; + for (var i = 0, len = datas.length; i < len; i++) if (Object.is(key, datas[i].key)) { + res = true; + break; + } + return res; + }; + _proto.clear = function clear() { + this.datas.length = 0; + }; + _proto["delete"] = function _delete(key) { + var res = false; + var datas = this.datas; + for (var i = 0, len = datas.length; i < len; i++) if (Object.is(key, datas[i].key)) { + datas.splice(i, 1); + res = true; + break; + } + return res; + }; + _proto.keys = function keys() { + var datas = this.datas; + var keys = []; + for (var i = 0, len = datas.length; i < len; i++) keys.push(datas[i].key); + return keys; + }; + _proto.values = function values() { + var index = 0; + var datas = this.datas; + return { + next: function next() { + if (0 === datas.length || void 0 === datas[index]) return { + value: void 0, + done: true + }; + return { + value: datas[index++].value, + done: false + }; + } + }; + }; + return MapUtils; + })(); + exports["default"] = MapUtils; + module.exports = exports["default"]; + }), {}], + 52: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vec = _interopRequireDefault(require("../../value-types/vec3")); + var _vertexData = _interopRequireDefault(require("./vertex-data")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var temp1 = new _vec["default"](); + var temp2 = new _vec["default"](); + var temp3 = new _vec["default"](); + var r = new _vec["default"](); + var c0 = new _vec["default"](); + var c1 = new _vec["default"](); + var c2 = new _vec["default"](); + var c3 = new _vec["default"](); + var c4 = new _vec["default"](); + var c5 = new _vec["default"](); + var c6 = new _vec["default"](); + var c7 = new _vec["default"](); + function _default(width, height, length, opts) { + void 0 === width && (width = 1); + void 0 === height && (height = 1); + void 0 === length && (length = 1); + void 0 === opts && (opts = { + widthSegments: 1, + heightSegments: 1, + lengthSegments: 1, + invWinding: false + }); + var ws = opts.widthSegments; + var hs = opts.heightSegments; + var ls = opts.lengthSegments; + var inv = opts.invWinding; + var hw = .5 * width; + var hh = .5 * height; + var hl = .5 * length; + var corners = [_vec["default"].set(c0, -hw, -hh, hl), _vec["default"].set(c1, hw, -hh, hl), _vec["default"].set(c2, hw, hh, hl), _vec["default"].set(c3, -hw, hh, hl), _vec["default"].set(c4, hw, -hh, -hl), _vec["default"].set(c5, -hw, -hh, -hl), _vec["default"].set(c6, -hw, hh, -hl), _vec["default"].set(c7, hw, hh, -hl)]; + var faceAxes = [[2, 3, 1], [4, 5, 7], [7, 6, 2], [1, 0, 4], [1, 4, 2], [5, 0, 6]]; + var faceNormals = [[0, 0, 1], [0, 0, -1], [0, 1, 0], [0, -1, 0], [1, 0, 0], [-1, 0, 0]]; + var positions = []; + var normals = []; + var uvs = []; + var indices = []; + var minPos = new _vec["default"](-hw, -hh, -hl); + var maxPos = new _vec["default"](hw, hh, hl); + var boundingRadius = Math.sqrt(hw * hw + hh * hh + hl * hl); + function _buildPlane(side, uSegments, vSegments) { + var u, v; + var ix, iy; + var offset = positions.length / 3; + var faceAxe = faceAxes[side]; + var faceNormal = faceNormals[side]; + for (iy = 0; iy <= vSegments; iy++) for (ix = 0; ix <= uSegments; ix++) { + u = ix / uSegments; + v = iy / vSegments; + _vec["default"].lerp(temp1, corners[faceAxe[0]], corners[faceAxe[1]], u); + _vec["default"].lerp(temp2, corners[faceAxe[0]], corners[faceAxe[2]], v); + _vec["default"].subtract(temp3, temp2, corners[faceAxe[0]]); + _vec["default"].add(r, temp1, temp3); + positions.push(r.x, r.y, r.z); + normals.push(faceNormal[0], faceNormal[1], faceNormal[2]); + uvs.push(u, v); + if (ix < uSegments && iy < vSegments) { + var useg1 = uSegments + 1; + var a = ix + iy * useg1; + var b = ix + (iy + 1) * useg1; + var c = ix + 1 + (iy + 1) * useg1; + var d = ix + 1 + iy * useg1; + if (inv) { + indices.push(offset + a, offset + b, offset + d); + indices.push(offset + d, offset + b, offset + c); + } else { + indices.push(offset + a, offset + d, offset + b); + indices.push(offset + b, offset + d, offset + c); + } + } + } + } + _buildPlane(0, ws, hs); + _buildPlane(4, ls, hs); + _buildPlane(1, ws, hs); + _buildPlane(5, ls, hs); + _buildPlane(3, ws, ls); + _buildPlane(2, ws, ls); + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + } + module.exports = exports["default"]; + }), { + "../../value-types/vec3": 349, + "./vertex-data": 63 + }], + 53: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vec = _interopRequireDefault(require("../../value-types/vec3")); + var _vertexData = _interopRequireDefault(require("./vertex-data")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var temp1 = cc.v3(0, 0, 0); + var temp2 = cc.v3(0, 0, 0); + function _default(radiusTop, radiusBottom, height, opts) { + void 0 === radiusTop && (radiusTop = .5); + void 0 === radiusBottom && (radiusBottom = .5); + void 0 === height && (height = 2); + void 0 === opts && (opts = { + sides: 32, + heightSegments: 32, + arc: 2 * Math.PI + }); + var torsoHeight = height - radiusTop - radiusBottom; + var sides = opts.sides; + var heightSegments = opts.heightSegments; + var bottomProp = radiusBottom / height; + var torProp = torsoHeight / height; + var topProp = radiusTop / height; + var bottomSegments = Math.floor(heightSegments * bottomProp); + var topSegments = Math.floor(heightSegments * topProp); + var torSegments = Math.floor(heightSegments * torProp); + var topOffset = torsoHeight + radiusBottom - height / 2; + var torOffset = radiusBottom - height / 2; + var bottomOffset = radiusBottom - height / 2; + var arc = opts.arc; + var positions = []; + var normals = []; + var uvs = []; + var indices = []; + var maxRadius = Math.max(radiusTop, radiusBottom); + var minPos = cc.v3(-maxRadius, -height / 2, -maxRadius); + var maxPos = cc.v3(maxRadius, height / 2, maxRadius); + var boundingRadius = height / 2; + var index = 0; + var indexArray = []; + generateBottom(); + generateTorso(); + generateTop(); + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + function generateTorso() { + var slope = (radiusTop - radiusBottom) / torsoHeight; + for (var y = 0; y <= torSegments; y++) { + var indexRow = []; + var lat = y / torSegments; + var radius = lat * (radiusTop - radiusBottom) + radiusBottom; + for (var x = 0; x <= sides; ++x) { + var u = x / sides; + var v = lat * torProp + bottomProp; + var theta = u * arc - arc / 4; + var sinTheta = Math.sin(theta); + var cosTheta = Math.cos(theta); + positions.push(radius * sinTheta); + positions.push(lat * torsoHeight + torOffset); + positions.push(radius * cosTheta); + _vec["default"].normalize(temp1, _vec["default"].set(temp2, sinTheta, -slope, cosTheta)); + normals.push(temp1.x); + normals.push(temp1.y); + normals.push(temp1.z); + uvs.push(u, v); + indexRow.push(index); + ++index; + } + indexArray.push(indexRow); + } + for (var _y = 0; _y < torSegments; ++_y) for (var _x = 0; _x < sides; ++_x) { + var i1 = indexArray[_y][_x]; + var i2 = indexArray[_y + 1][_x]; + var i3 = indexArray[_y + 1][_x + 1]; + var i4 = indexArray[_y][_x + 1]; + indices.push(i1); + indices.push(i4); + indices.push(i2); + indices.push(i4); + indices.push(i3); + indices.push(i2); + } + } + function generateBottom() { + for (var lat = 0; lat <= bottomSegments; ++lat) { + var theta = lat * Math.PI / bottomSegments / 2; + var sinTheta = Math.sin(theta); + var cosTheta = -Math.cos(theta); + for (var lon = 0; lon <= sides; ++lon) { + var phi = 2 * lon * Math.PI / sides - Math.PI / 2; + var sinPhi = Math.sin(phi); + var cosPhi = Math.cos(phi); + var x = sinPhi * sinTheta; + var y = cosTheta; + var z = cosPhi * sinTheta; + var u = lon / sides; + var v = lat / heightSegments; + positions.push(x * radiusBottom, y * radiusBottom + bottomOffset, z * radiusBottom); + normals.push(x, y, z); + uvs.push(u, v); + if (lat < bottomSegments && lon < sides) { + var seg1 = sides + 1; + var a = seg1 * lat + lon; + var b = seg1 * (lat + 1) + lon; + var c = seg1 * (lat + 1) + lon + 1; + var d = seg1 * lat + lon + 1; + indices.push(a, d, b); + indices.push(d, c, b); + } + ++index; + } + } + } + function generateTop() { + for (var lat = 0; lat <= topSegments; ++lat) { + var theta = lat * Math.PI / topSegments / 2 + Math.PI / 2; + var sinTheta = Math.sin(theta); + var cosTheta = -Math.cos(theta); + for (var lon = 0; lon <= sides; ++lon) { + var phi = 2 * lon * Math.PI / sides - Math.PI / 2; + var sinPhi = Math.sin(phi); + var cosPhi = Math.cos(phi); + var x = sinPhi * sinTheta; + var y = cosTheta; + var z = cosPhi * sinTheta; + var u = lon / sides; + var v = lat / heightSegments + (1 - topProp); + positions.push(x * radiusTop, y * radiusTop + topOffset, z * radiusTop); + normals.push(x, y, z); + uvs.push(u, v); + if (lat < topSegments && lon < sides) { + var seg1 = sides + 1; + var a = seg1 * lat + lon + indexArray[torSegments][sides] + 1; + var b = seg1 * (lat + 1) + lon + indexArray[torSegments][sides] + 1; + var c = seg1 * (lat + 1) + lon + 1 + indexArray[torSegments][sides] + 1; + var d = seg1 * lat + lon + 1 + indexArray[torSegments][sides] + 1; + indices.push(a, d, b); + indices.push(d, c, b); + } + } + } + } + } + module.exports = exports["default"]; + }), { + "../../value-types/vec3": 349, + "./vertex-data": 63 + }], + 54: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _cylinder = _interopRequireDefault(require("./cylinder")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _default(radius, height, opts) { + void 0 === radius && (radius = .5); + void 0 === height && (height = 1); + void 0 === opts && (opts = { + radialSegments: 32, + heightSegments: 1, + capped: true, + arc: 2 * Math.PI + }); + return (0, _cylinder["default"])(0, radius, height, opts); + } + module.exports = exports["default"]; + }), { + "./cylinder": 55 + }], + 55: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vec = _interopRequireDefault(require("../../value-types/vec3")); + var _vertexData = _interopRequireDefault(require("./vertex-data")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var temp1 = new _vec["default"](); + var temp2 = new _vec["default"](); + function _default(radiusTop, radiusBottom, height, opts) { + void 0 === radiusTop && (radiusTop = .5); + void 0 === radiusBottom && (radiusBottom = .5); + void 0 === height && (height = 2); + void 0 === opts && (opts = { + radialSegments: 32, + heightSegments: 1, + capped: true, + arc: 2 * Math.PI + }); + var halfHeight = .5 * height; + var radialSegments = opts.radialSegments; + var heightSegments = opts.heightSegments; + var capped = opts.capped; + var arc = opts.arc; + var cntCap = 0; + if (!capped) { + radiusTop > 0 && cntCap++; + radiusBottom > 0 && cntCap++; + } + var vertCount = (radialSegments + 1) * (heightSegments + 1); + capped && (vertCount += (radialSegments + 1) * cntCap + radialSegments * cntCap); + var indexCount = radialSegments * heightSegments * 2 * 3; + capped && (indexCount += radialSegments * cntCap * 3); + var indices = new Array(indexCount); + var positions = new Array(3 * vertCount); + var normals = new Array(3 * vertCount); + var uvs = new Array(2 * vertCount); + var maxRadius = Math.max(radiusTop, radiusBottom); + var minPos = new _vec["default"](-maxRadius, -halfHeight, -maxRadius); + var maxPos = new _vec["default"](maxRadius, halfHeight, maxRadius); + var boundingRadius = Math.sqrt(maxRadius * maxRadius + halfHeight * halfHeight); + var index = 0; + var indexOffset = 0; + generateTorso(); + if (capped) { + radiusBottom > 0 && generateCap(false); + radiusTop > 0 && generateCap(true); + } + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + function generateTorso() { + var indexArray = []; + var r = radiusTop - radiusBottom; + var slope = r * r / height * Math.sign(r); + for (var y = 0; y <= heightSegments; y++) { + var indexRow = []; + var v = y / heightSegments; + var radius = v * r + radiusBottom; + for (var x = 0; x <= radialSegments; ++x) { + var u = x / radialSegments; + var theta = u * arc; + var sinTheta = Math.sin(theta); + var cosTheta = Math.cos(theta); + positions[3 * index] = radius * sinTheta; + positions[3 * index + 1] = v * height - halfHeight; + positions[3 * index + 2] = radius * cosTheta; + _vec["default"].normalize(temp1, _vec["default"].set(temp2, sinTheta, -slope, cosTheta)); + normals[3 * index] = temp1.x; + normals[3 * index + 1] = temp1.y; + normals[3 * index + 2] = temp1.z; + uvs[2 * index] = 2 * (1 - u) % 1; + uvs[2 * index + 1] = v; + indexRow.push(index); + ++index; + } + indexArray.push(indexRow); + } + for (var _y = 0; _y < heightSegments; ++_y) for (var _x = 0; _x < radialSegments; ++_x) { + var i1 = indexArray[_y][_x]; + var i2 = indexArray[_y + 1][_x]; + var i3 = indexArray[_y + 1][_x + 1]; + var i4 = indexArray[_y][_x + 1]; + indices[indexOffset] = i1; + ++indexOffset; + indices[indexOffset] = i4; + ++indexOffset; + indices[indexOffset] = i2; + ++indexOffset; + indices[indexOffset] = i4; + ++indexOffset; + indices[indexOffset] = i3; + ++indexOffset; + indices[indexOffset] = i2; + ++indexOffset; + } + } + function generateCap(top) { + var centerIndexStart, centerIndexEnd; + var radius = top ? radiusTop : radiusBottom; + var sign = top ? 1 : -1; + centerIndexStart = index; + for (var x = 1; x <= radialSegments; ++x) { + positions[3 * index] = 0; + positions[3 * index + 1] = halfHeight * sign; + positions[3 * index + 2] = 0; + normals[3 * index] = 0; + normals[3 * index + 1] = sign; + normals[3 * index + 2] = 0; + uvs[2 * index] = .5; + uvs[2 * index + 1] = .5; + ++index; + } + centerIndexEnd = index; + for (var _x2 = 0; _x2 <= radialSegments; ++_x2) { + var u = _x2 / radialSegments; + var theta = u * arc; + var cosTheta = Math.cos(theta); + var sinTheta = Math.sin(theta); + positions[3 * index] = radius * sinTheta; + positions[3 * index + 1] = halfHeight * sign; + positions[3 * index + 2] = radius * cosTheta; + normals[3 * index] = 0; + normals[3 * index + 1] = sign; + normals[3 * index + 2] = 0; + uvs[2 * index] = .5 - .5 * sinTheta * sign; + uvs[2 * index + 1] = .5 + .5 * cosTheta; + ++index; + } + for (var _x3 = 0; _x3 < radialSegments; ++_x3) { + var c = centerIndexStart + _x3; + var i = centerIndexEnd + _x3; + if (top) { + indices[indexOffset] = i + 1; + ++indexOffset; + indices[indexOffset] = c; + ++indexOffset; + indices[indexOffset] = i; + ++indexOffset; + } else { + indices[indexOffset] = c; + ++indexOffset; + indices[indexOffset] = i + 1; + ++indexOffset; + indices[indexOffset] = i; + ++indexOffset; + } + } + } + } + module.exports = exports["default"]; + }), { + "../../value-types/vec3": 349, + "./vertex-data": 63 + }], + 56: [(function (require, module, exports) { + "use strict"; + var utils = _interopRequireWildcard(require("./utils")); + var _box = _interopRequireDefault(require("./box")); + var _cone = _interopRequireDefault(require("./cone")); + var _cylinder = _interopRequireDefault(require("./cylinder")); + var _plane = _interopRequireDefault(require("./plane")); + var _quad = _interopRequireDefault(require("./quad")); + var _sphere = _interopRequireDefault(require("./sphere")); + var _torus = _interopRequireDefault(require("./torus")); + var _capsule = _interopRequireDefault(require("./capsule")); + var _polyhedron = require("./polyhedron"); + var _vertexData = _interopRequireDefault(require("./vertex-data")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _getRequireWildcardCache() { + if ("function" !== typeof WeakMap) return null; + var cache = new WeakMap(); + _getRequireWildcardCache = function _getRequireWildcardCache() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) return obj; + if (null === obj || "object" !== typeof obj && "function" !== typeof obj) return { + default: obj + }; + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) return cache.get(obj); + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) if (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; + } + cc.primitive = Object.assign({ + box: _box["default"], + cone: _cone["default"], + cylinder: _cylinder["default"], + plane: _plane["default"], + quad: _quad["default"], + sphere: _sphere["default"], + torus: _torus["default"], + capsule: _capsule["default"], + polyhedron: _polyhedron.polyhedron, + PolyhedronType: _polyhedron.PolyhedronType, + VertexData: _vertexData["default"] + }, utils); + }), { + "./box": 52, + "./capsule": 53, + "./cone": 54, + "./cylinder": 55, + "./plane": 57, + "./polyhedron": 58, + "./quad": 59, + "./sphere": 60, + "./torus": 61, + "./utils": 62, + "./vertex-data": 63 + }], + 57: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vec = _interopRequireDefault(require("../../value-types/vec3")); + var _vertexData = _interopRequireDefault(require("./vertex-data")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var temp1 = new _vec["default"](); + var temp2 = new _vec["default"](); + var temp3 = new _vec["default"](); + var r = new _vec["default"](); + var c00 = new _vec["default"](); + var c10 = new _vec["default"](); + var c01 = new _vec["default"](); + function _default(width, length, opts) { + void 0 === width && (width = 10); + void 0 === length && (length = 10); + void 0 === opts && (opts = { + widthSegments: 10, + lengthSegments: 10 + }); + var uSegments = opts.widthSegments; + var vSegments = opts.lengthSegments; + var hw = .5 * width; + var hl = .5 * length; + var positions = []; + var normals = []; + var uvs = []; + var indices = []; + var minPos = new _vec["default"](-hw, 0, -hl); + var maxPos = new _vec["default"](hw, 0, hl); + var boundingRadius = Math.sqrt(width * width + length * length); + _vec["default"].set(c00, -hw, 0, hl); + _vec["default"].set(c10, hw, 0, hl); + _vec["default"].set(c01, -hw, 0, -hl); + for (var y = 0; y <= vSegments; y++) for (var x = 0; x <= uSegments; x++) { + var u = x / uSegments; + var v = y / vSegments; + _vec["default"].lerp(temp1, c00, c10, u); + _vec["default"].lerp(temp2, c00, c01, v); + _vec["default"].sub(temp3, temp2, c00); + _vec["default"].add(r, temp1, temp3); + positions.push(r.x, r.y, r.z); + normals.push(0, 1, 0); + uvs.push(u, v); + if (x < uSegments && y < vSegments) { + var useg1 = uSegments + 1; + var a = x + y * useg1; + var b = x + (y + 1) * useg1; + var c = x + 1 + (y + 1) * useg1; + var d = x + 1 + y * useg1; + indices.push(a, d, b); + indices.push(d, c, b); + } + } + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + } + module.exports = exports["default"]; + }), { + "../../value-types/vec3": 349, + "./vertex-data": 63 + }], + 58: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.polyhedron = exports.PolyhedronType = void 0; + var _utils = require("./utils"); + var _vertexData = _interopRequireDefault(require("./vertex-data")); + var _valueTypes = require("../../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var PolyhedronType = cc.Enum({ + Tetrahedron: 0, + Octahedron: 1, + Dodecahedron: 2, + Icosahedron: 3, + Rhombicuboctahedron: 4, + TriangularPrism: 5, + PentagonalPrism: 6, + HexagonalPrism: 7, + SquarePyramid: 8, + PentagonalPyramid: 9, + TriangularDipyramid: 10, + PentagonalDipyramid: 11, + ElongatedSquareDipyramid: 12, + ElongatedPentagonalDipyramid: 13, + ElongatedPentagonalCupola: 14 + }); + exports.PolyhedronType = PolyhedronType; + var polyhedra = []; + polyhedra[0] = { + vertex: [[0, 0, 1.732051], [1.632993, 0, -.5773503], [-.8164966, 1.414214, -.5773503], [-.8164966, -1.414214, -.5773503]], + face: [[0, 1, 2], [0, 2, 3], [0, 3, 1], [1, 3, 2]] + }; + polyhedra[1] = { + vertex: [[0, 0, 1.414214], [1.414214, 0, 0], [0, 1.414214, 0], [-1.414214, 0, 0], [0, -1.414214, 0], [0, 0, -1.414214]], + face: [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [3, 5, 4]] + }; + polyhedra[2] = { + vertex: [[0, 0, 1.070466], [.7136442, 0, .7978784], [-.3568221, .618034, .7978784], [-.3568221, -.618034, .7978784], [.7978784, .618034, .3568221], [.7978784, -.618034, .3568221], [-.9341724, .381966, .3568221], [.1362939, 1, .3568221], [.1362939, -1, .3568221], [-.9341724, -.381966, .3568221], [.9341724, .381966, -.3568221], [.9341724, -.381966, -.3568221], [-.7978784, .618034, -.3568221], [-.1362939, 1, -.3568221], [-.1362939, -1, -.3568221], [-.7978784, -.618034, -.3568221], [.3568221, .618034, -.7978784], [.3568221, -.618034, -.7978784], [-.7136442, 0, -.7978784], [0, 0, -1.070466]], + face: [[0, 1, 4, 7, 2], [0, 2, 6, 9, 3], [0, 3, 8, 5, 1], [1, 5, 11, 10, 4], [2, 7, 13, 12, 6], [3, 9, 15, 14, 8], [4, 10, 16, 13, 7], [5, 8, 14, 17, 11], [6, 12, 18, 15, 9], [10, 11, 17, 19, 16], [12, 13, 16, 19, 18], [14, 15, 18, 19, 17]] + }; + polyhedra[3] = { + vertex: [[0, 0, 1.175571], [1.051462, 0, .5257311], [.3249197, 1, .5257311], [-.8506508, .618034, .5257311], [-.8506508, -.618034, .5257311], [.3249197, -1, .5257311], [.8506508, .618034, -.5257311], [.8506508, -.618034, -.5257311], [-.3249197, 1, -.5257311], [-1.051462, 0, -.5257311], [-.3249197, -1, -.5257311], [0, 0, -1.175571]], + face: [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1], [1, 5, 7], [1, 7, 6], [1, 6, 2], [2, 6, 8], [2, 8, 3], [3, 8, 9], [3, 9, 4], [4, 9, 10], [4, 10, 5], [5, 10, 7], [6, 7, 11], [6, 11, 8], [7, 10, 11], [8, 11, 9], [9, 11, 10]] + }; + polyhedra[4] = { + vertex: [[0, 0, 1.070722], [.7148135, 0, .7971752], [-.104682, .7071068, .7971752], [-.6841528, .2071068, .7971752], [-.104682, -.7071068, .7971752], [.6101315, .7071068, .5236279], [1.04156, .2071068, .1367736], [.6101315, -.7071068, .5236279], [-.3574067, 1, .1367736], [-.7888348, -.5, .5236279], [-.9368776, .5, .1367736], [-.3574067, -1, .1367736], [.3574067, 1, -.1367736], [.9368776, -.5, -.1367736], [.7888348, .5, -.5236279], [.3574067, -1, -.1367736], [-.6101315, .7071068, -.5236279], [-1.04156, -.2071068, -.1367736], [-.6101315, -.7071068, -.5236279], [.104682, .7071068, -.7971752], [.6841528, -.2071068, -.7971752], [.104682, -.7071068, -.7971752], [-.7148135, 0, -.7971752], [0, 0, -1.070722]], + face: [[0, 2, 3], [1, 6, 5], [4, 9, 11], [7, 15, 13], [8, 16, 10], [12, 14, 19], [17, 22, 18], [20, 21, 23], [0, 1, 5, 2], [0, 3, 9, 4], [0, 4, 7, 1], [1, 7, 13, 6], [2, 5, 12, 8], [2, 8, 10, 3], [3, 10, 17, 9], [4, 11, 15, 7], [5, 6, 14, 12], [6, 13, 20, 14], [8, 12, 19, 16], [9, 17, 18, 11], [10, 16, 22, 17], [11, 18, 21, 15], [13, 15, 21, 20], [14, 20, 23, 19], [16, 19, 23, 22], [18, 22, 23, 21]] + }; + polyhedra[5] = { + vertex: [[0, 0, 1.322876], [1.309307, 0, .1889822], [-.9819805, .8660254, .1889822], [.1636634, -1.299038, .1889822], [.3273268, .8660254, -.9449112], [-.8183171, -.4330127, -.9449112]], + face: [[0, 3, 1], [2, 4, 5], [0, 1, 4, 2], [0, 2, 5, 3], [1, 3, 5, 4]] + }; + polyhedra[6] = { + vertex: [[0, 0, 1.159953], [1.013464, 0, .5642542], [-.3501431, .9510565, .5642542], [-.7715208, -.6571639, .5642542], [.6633206, .9510565, -.03144481], [.8682979, -.6571639, -.3996071], [-1.121664, .2938926, -.03144481], [-.2348831, -1.063314, -.3996071], [.5181548, .2938926, -.9953061], [-.5850262, -.112257, -.9953061]], + face: [[0, 1, 4, 2], [0, 2, 6, 3], [1, 5, 8, 4], [3, 6, 9, 7], [5, 7, 9, 8], [0, 3, 7, 5, 1], [2, 4, 8, 9, 6]] + }; + polyhedra[7] = { + vertex: [[0, 0, 1.118034], [.8944272, 0, .6708204], [-.2236068, .8660254, .6708204], [-.7826238, -.4330127, .6708204], [.6708204, .8660254, .2236068], [1.006231, -.4330127, -.2236068], [-1.006231, .4330127, .2236068], [-.6708204, -.8660254, -.2236068], [.7826238, .4330127, -.6708204], [.2236068, -.8660254, -.6708204], [-.8944272, 0, -.6708204], [0, 0, -1.118034]], + face: [[0, 1, 4, 2], [0, 2, 6, 3], [1, 5, 8, 4], [3, 6, 10, 7], [5, 9, 11, 8], [7, 10, 11, 9], [0, 3, 7, 9, 5, 1], [2, 4, 8, 11, 10, 6]] + }; + polyhedra[8] = { + vertex: [[-.729665, .670121, .319155], [-.655235, -.29213, -.754096], [-.093922, -.607123, .537818], [.702196, .595691, .485187], [.776626, -.36656, -.588064]], + face: [[1, 4, 2], [0, 1, 2], [3, 0, 2], [4, 3, 2], [4, 1, 0, 3]] + }; + polyhedra[9] = { + vertex: [[-.868849, -.100041, .61257], [-.329458, .976099, .28078], [-.26629, -.013796, -.477654], [-.13392, -1.034115, .229829], [.738834, .707117, -.307018], [.859683, -.535264, -.338508]], + face: [[3, 0, 2], [5, 3, 2], [4, 5, 2], [1, 4, 2], [0, 1, 2], [0, 3, 5, 4, 1]] + }; + polyhedra[10] = { + vertex: [[-.610389, .243975, .531213], [-.187812, -.48795, -.664016], [-.187812, .9759, -.664016], [.187812, -.9759, .664016], [.798201, .243975, .132803]], + face: [[1, 3, 0], [3, 4, 0], [3, 1, 4], [0, 2, 1], [0, 4, 2], [2, 4, 1]] + }; + polyhedra[11] = { + vertex: [[-1.028778, .392027, -.048786], [-.640503, -.646161, .621837], [-.125162, -.395663, -.540059], [.004683, .888447, -.651988], [.125161, .395663, .540059], [.632925, -.791376, .433102], [1.031672, .157063, -.354165]], + face: [[3, 2, 0], [2, 1, 0], [2, 5, 1], [0, 4, 3], [0, 1, 4], [4, 1, 5], [2, 3, 6], [3, 4, 6], [5, 2, 6], [4, 5, 6]] + }; + polyhedra[12] = { + vertex: [[-.669867, .334933, -.529576], [-.669867, .334933, .529577], [-.4043, 1.212901, 0], [-.334933, -.669867, -.529576], [-.334933, -.669867, .529577], [.334933, .669867, -.529576], [.334933, .669867, .529577], [.4043, -1.212901, 0], [.669867, -.334933, -.529576], [.669867, -.334933, .529577]], + face: [[8, 9, 7], [6, 5, 2], [3, 8, 7], [5, 0, 2], [4, 3, 7], [0, 1, 2], [9, 4, 7], [1, 6, 2], [9, 8, 5, 6], [8, 3, 0, 5], [3, 4, 1, 0], [4, 9, 6, 1]] + }; + polyhedra[13] = { + vertex: [[-.931836, .219976, -.264632], [-.636706, .318353, .692816], [-.613483, -.735083, -.264632], [-.326545, .979634, 0], [-.318353, -.636706, .692816], [-.159176, .477529, -.856368], [.159176, -.477529, -.856368], [.318353, .636706, .692816], [.326545, -.979634, 0], [.613482, .735082, -.264632], [.636706, -.318353, .692816], [.931835, -.219977, -.264632]], + face: [[11, 10, 8], [7, 9, 3], [6, 11, 8], [9, 5, 3], [2, 6, 8], [5, 0, 3], [4, 2, 8], [0, 1, 3], [10, 4, 8], [1, 7, 3], [10, 11, 9, 7], [11, 6, 5, 9], [6, 2, 0, 5], [2, 4, 1, 0], [4, 10, 7, 1]] + }; + polyhedra[14] = { + vertex: [[-.93465, .300459, -.271185], [-.838689, -.260219, -.516017], [-.711319, .717591, .128359], [-.710334, -.156922, .080946], [-.599799, .556003, -.725148], [-.503838, -.004675, -.969981], [-.487004, .26021, .48049], [-.460089, -.750282, -.512622], [-.376468, .973135, -.325605], [-.331735, -.646985, .084342], [-.254001, .831847, .530001], [-.125239, -.494738, -.966586], [.029622, .027949, .730817], [.056536, -.982543, -.262295], [.08085, 1.087391, .076037], [.125583, -.532729, .485984], [.262625, .599586, .780328], [.391387, -.726999, -.716259], [.513854, -.868287, .139347], [.597475, .85513, .326364], [.641224, .109523, .783723], [.737185, -.451155, .538891], [.848705, -.612742, -.314616], [.976075, .365067, .32976], [1.072036, -.19561, .084927]], + face: [[15, 18, 21], [12, 20, 16], [6, 10, 2], [3, 0, 1], [9, 7, 13], [2, 8, 4, 0], [0, 4, 5, 1], [1, 5, 11, 7], [7, 11, 17, 13], [13, 17, 22, 18], [18, 22, 24, 21], [21, 24, 23, 20], [20, 23, 19, 16], [16, 19, 14, 10], [10, 14, 8, 2], [15, 9, 13, 18], [12, 15, 21, 20], [6, 12, 16, 10], [3, 6, 2, 0], [9, 3, 1, 7], [9, 15, 12, 6, 3], [22, 17, 11, 5, 4, 8, 14, 19, 23, 24]] + }; + var polyhedron = function polyhedron(type, size, opts) { + void 0 === size && (size = 1); + void 0 === opts && (opts = { + sizeX: 0, + sizeY: 0, + sizeZ: 0 + }); + type = type && (type < 0 || type >= polyhedra.length) ? 0 : type || 0; + var sizeX = opts.sizeX || size; + var sizeY = opts.sizeY || size; + var sizeZ = opts.sizeZ || size; + var data = polyhedra[type]; + var nbfaces = data.face.length; + var positions = []; + var indices = []; + var normals = []; + var uvs = []; + var minPos = new _valueTypes.Vec3(Infinity, Infinity, Infinity); + var maxPos = new _valueTypes.Vec3(-Infinity, -Infinity, -Infinity); + for (var i = 0; i < data.vertex.length; i++) { + var x = data.vertex[i][0] * sizeX; + var y = data.vertex[i][1] * sizeY; + var z = data.vertex[i][2] * sizeZ; + minPos.x = Math.min(minPos.x, x); + minPos.y = Math.min(minPos.y, y); + minPos.z = Math.min(minPos.z, z); + maxPos.x = Math.max(maxPos.x, x); + maxPos.y = Math.max(maxPos.y, y); + maxPos.z = Math.max(maxPos.z, z); + positions.push(x, y, z); + uvs.push(0, 0); + } + for (var f = 0; f < nbfaces; f++) for (var _i = 0; _i < data.face[f].length - 2; _i++) indices.push(data.face[f][0], data.face[f][_i + 2], data.face[f][_i + 1]); + (0, _utils.calcNormals)(positions, indices, normals); + var boundingRadius = Math.sqrt(Math.pow(maxPos.x - minPos.x, 2), Math.pow(maxPos.y - minPos.y, 2), Math.pow(maxPos.z - minPos.z, 2)); + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + }; + exports.polyhedron = polyhedron; + }), { + "../../value-types": 339, + "./utils": 62, + "./vertex-data": 63 + }], + 59: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vertexData = _interopRequireDefault(require("./vertex-data")); + var _valueTypes = require("../../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var positions = [-.5, -.5, 0, -.5, .5, 0, .5, .5, 0, .5, -.5, 0]; + var normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]; + var uvs = [0, 0, 0, 1, 1, 1, 1, 0]; + var indices = [0, 3, 1, 3, 2, 1]; + var minPos = new _valueTypes.Vec3(-.5, -.5, 0); + var maxPos = new _valueTypes.Vec3(.5, .5, 0); + var boundingRadius = Math.sqrt(.5); + function _default() { + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + } + module.exports = exports["default"]; + }), { + "../../value-types": 339, + "./vertex-data": 63 + }], + 60: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vertexData = _interopRequireDefault(require("./vertex-data")); + var _valueTypes = require("../../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _default(radius, opts) { + void 0 === radius && (radius = .5); + void 0 === opts && (opts = { + segments: 32 + }); + var segments = opts.segments; + var positions = []; + var normals = []; + var uvs = []; + var indices = []; + var minPos = new _valueTypes.Vec3(-radius, -radius, -radius); + var maxPos = new _valueTypes.Vec3(radius, radius, radius); + var boundingRadius = radius; + for (var lat = 0; lat <= segments; ++lat) { + var theta = lat * Math.PI / segments; + var sinTheta = Math.sin(theta); + var cosTheta = -Math.cos(theta); + for (var lon = 0; lon <= segments; ++lon) { + var phi = 2 * lon * Math.PI / segments - Math.PI / 2; + var sinPhi = Math.sin(phi); + var cosPhi = Math.cos(phi); + var x = sinPhi * sinTheta; + var y = cosTheta; + var z = cosPhi * sinTheta; + var u = lon / segments; + var v = lat / segments; + positions.push(x * radius, y * radius, z * radius); + normals.push(x, y, z); + uvs.push(u, v); + if (lat < segments && lon < segments) { + var seg1 = segments + 1; + var a = seg1 * lat + lon; + var b = seg1 * (lat + 1) + lon; + var c = seg1 * (lat + 1) + lon + 1; + var d = seg1 * lat + lon + 1; + indices.push(a, d, b); + indices.push(d, c, b); + } + } + } + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + } + module.exports = exports["default"]; + }), { + "../../value-types": 339, + "./vertex-data": 63 + }], + 61: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = _default; + var _vertexData = _interopRequireDefault(require("./vertex-data")); + var _valueTypes = require("../../value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _default(radius, tube, opts) { + void 0 === radius && (radius = .4); + void 0 === tube && (tube = .1); + void 0 === opts && (opts = { + radialSegments: 32, + tubularSegments: 32, + arc: 2 * Math.PI + }); + var radialSegments = opts.radialSegments; + var tubularSegments = opts.tubularSegments; + var arc = opts.arc; + var positions = []; + var normals = []; + var uvs = []; + var indices = []; + var minPos = new _valueTypes.Vec3(-radius - tube, -tube, -radius - tube); + var maxPos = new _valueTypes.Vec3(radius + tube, tube, radius + tube); + var boundingRadius = radius + tube; + for (var j = 0; j <= radialSegments; j++) for (var i = 0; i <= tubularSegments; i++) { + var u = i / tubularSegments; + var v = j / radialSegments; + var u1 = u * arc; + var v1 = v * Math.PI * 2; + var x = (radius + tube * Math.cos(v1)) * Math.sin(u1); + var y = tube * Math.sin(v1); + var z = (radius + tube * Math.cos(v1)) * Math.cos(u1); + var nx = Math.sin(u1) * Math.cos(v1); + var ny = Math.sin(v1); + var nz = Math.cos(u1) * Math.cos(v1); + positions.push(x, y, z); + normals.push(nx, ny, nz); + uvs.push(u, v); + if (i < tubularSegments && j < radialSegments) { + var seg1 = tubularSegments + 1; + var a = seg1 * j + i; + var b = seg1 * (j + 1) + i; + var c = seg1 * (j + 1) + i + 1; + var d = seg1 * j + i + 1; + indices.push(a, d, b); + indices.push(d, c, b); + } + } + return new _vertexData["default"](positions, normals, uvs, indices, minPos, maxPos, boundingRadius); + } + module.exports = exports["default"]; + }), { + "../../value-types": 339, + "./vertex-data": 63 + }], + 62: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.wireframe = wireframe; + exports.invWinding = invWinding; + exports.toWavefrontOBJ = toWavefrontOBJ; + exports.normals = normals; + exports.calcNormals = calcNormals; + var _vec = _interopRequireDefault(require("../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function wireframe(indices) { + var offsets = [[0, 1], [1, 2], [2, 0]]; + var lines = []; + var lineIDs = {}; + for (var i = 0; i < indices.length; i += 3) for (var k = 0; k < 3; ++k) { + var i1 = indices[i + offsets[k][0]]; + var i2 = indices[i + offsets[k][1]]; + var id = i1 > i2 ? i2 << 16 | i1 : i1 << 16 | i2; + if (void 0 === lineIDs[id]) { + lineIDs[id] = 0; + lines.push(i1, i2); + } + } + return lines; + } + function invWinding(indices) { + var newIB = []; + for (var i = 0; i < indices.length; i += 3) newIB.push(indices[i], indices[i + 2], indices[i + 1]); + return newIB; + } + function toWavefrontOBJ(primitive, scale) { + void 0 === scale && (scale = 1); + var v = primitive.positions, t = primitive.uvs, n = primitive.normals, IB = primitive.indices; + var V = function V(i) { + return IB[i] + 1 + "/" + (IB[i] + 1) + "/" + (IB[i] + 1); + }; + var content = ""; + for (var i = 0; i < v.length; i += 3) content += "v " + v[i] * scale + " " + v[i + 1] * scale + " " + v[i + 2] * scale + "\n"; + for (var _i = 0; _i < t.length; _i += 2) content += "vt " + t[_i] + " " + t[_i + 1] + "\n"; + for (var _i2 = 0; _i2 < n.length; _i2 += 3) content += "vn " + n[_i2] + " " + n[_i2 + 1] + " " + n[_i2 + 2] + "\n"; + for (var _i3 = 0; _i3 < IB.length; _i3 += 3) content += "f " + V(_i3) + " " + V(_i3 + 1) + " " + V(_i3 + 2) + "\n"; + return content; + } + function normals(positions, normals, length) { + void 0 === length && (length = 1); + var verts = new Array(2 * positions.length); + for (var i = 0; i < positions.length / 3; ++i) { + var i3 = 3 * i; + var i6 = 6 * i; + verts[i6 + 0] = positions[i3 + 0]; + verts[i6 + 1] = positions[i3 + 1]; + verts[i6 + 2] = positions[i3 + 2]; + verts[i6 + 3] = positions[i3 + 0] + normals[i3 + 0] * length; + verts[i6 + 4] = positions[i3 + 1] + normals[i3 + 1] * length; + verts[i6 + 5] = positions[i3 + 2] + normals[i3 + 2] * length; + } + return verts; + } + function fromArray(out, a, offset) { + out.x = a[offset]; + out.y = a[offset + 1]; + out.z = a[offset + 2]; + } + function calcNormals(positions, indices, normals) { + normals = normals || new Array(positions.length); + for (var i = 0, l = normals.length; i < l; i++) normals[i] = 0; + var vA, vB, vC; + var pA = cc.v3(), pB = cc.v3(), pC = cc.v3(); + var cb = cc.v3(), ab = cc.v3(); + for (var _i4 = 0, il = indices.length; _i4 < il; _i4 += 3) { + vA = 3 * indices[_i4 + 0]; + vB = 3 * indices[_i4 + 1]; + vC = 3 * indices[_i4 + 2]; + fromArray(pA, positions, vA); + fromArray(pB, positions, vB); + fromArray(pC, positions, vC); + _vec["default"].subtract(cb, pC, pB); + _vec["default"].subtract(ab, pA, pB); + _vec["default"].cross(cb, cb, ab); + normals[vA] += cb.x; + normals[vA + 1] += cb.y; + normals[vA + 2] += cb.z; + normals[vB] += cb.x; + normals[vB + 1] += cb.y; + normals[vB + 2] += cb.z; + normals[vC] += cb.x; + normals[vC + 1] += cb.y; + normals[vC + 2] += cb.z; + } + var tempNormal = cc.v3(); + for (var _i5 = 0, _l = normals.length; _i5 < _l; _i5 += 3) { + tempNormal.x = normals[_i5]; + tempNormal.y = normals[_i5 + 1]; + tempNormal.z = normals[_i5 + 2]; + tempNormal.normalizeSelf(); + normals[_i5] = tempNormal.x; + normals[_i5 + 1] = tempNormal.y; + normals[_i5 + 2] = tempNormal.z; + } + return normals; + } + }), { + "../../value-types/vec3": 349 + }], + 63: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var VertexData = function VertexData(positions, normals, uvs, indices, minPos, maxPos, boundingRadius) { + this.positions = void 0; + this.normals = void 0; + this.uvs = void 0; + this.indices = void 0; + this.minPos = void 0; + this.maxPos = void 0; + this.boundingRadius = void 0; + this.positions = positions; + this.normals = normals; + this.uvs = uvs; + this.indices = indices; + this.minPos = minPos; + this.maxPos = maxPos; + this.boundingRadius = boundingRadius; + }; + exports["default"] = VertexData; + module.exports = exports["default"]; + }), {}], + 64: [(function (require, module, exports) { + "use strict"; + var _require = require("../../../animation/animation-curves"), DynamicAnimCurve = _require.DynamicAnimCurve, quickFindIndex = _require.quickFindIndex; + var JointMatrixCurve = cc.Class({ + name: "cc.JointMatrixCurve", + extends: DynamicAnimCurve, + _findFrameIndex: quickFindIndex, + sample: function sample(time, ratio) { + var ratios = this.ratios; + var index = this._findFrameIndex(ratios, ratio); + index < -1 && (index = ~index - 1); + var pairs = this.pairs; + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i]; + pair.target._jointMatrix = pair.values[index]; + } + } + }); + module.exports = JointMatrixCurve; + }), { + "../../../animation/animation-curves": 12 + }], + 65: [(function (require, module, exports) { + "use strict"; + var Skeleton = cc.Class({ + name: "cc.Skeleton", + extends: cc.Asset, + ctor: function ctor() { + this.loaded = false; + this._bindposes = []; + this._uniqueBindPoses = []; + this._jointPaths = []; + }, + properties: { + _model: cc.Model, + _jointIndices: [], + _skinIndex: -1, + jointPaths: { + get: function get() { + return this._jointPaths; + } + }, + bindposes: { + get: function get() { + return this._bindposes; + } + }, + uniqueBindPoses: { + get: function get() { + return this._uniqueBindPoses; + } + }, + model: { + get: function get() { + return this._model; + } + } + }, + onLoad: function onLoad() { + var nodes = this._model.nodes; + var jointIndices = this._jointIndices; + var jointPaths = this._jointPaths; + var bindposes = this._bindposes; + var uniqueBindPoses = this._uniqueBindPoses; + for (var i = 0; i < jointIndices.length; i++) { + var node = nodes[jointIndices[i]]; + jointPaths[i] = node.path; + node.uniqueBindPose ? bindposes[i] = uniqueBindPoses[i] = node.uniqueBindPose : bindposes[i] = node.bindpose[this._skinIndex]; + } + } + }); + cc.Skeleton = module.exports = Skeleton; + }), {}], + 66: [(function (require, module, exports) { + "use strict"; + var Animation = require("../../components/CCAnimation"); + var Model = require("../CCModel"); + var SkeletonAnimationClip = require("./CCSkeletonAnimationClip"); + var SkeletonAnimation = cc.Class({ + name: "cc.SkeletonAnimation", + extends: Animation, + editor: false, + properties: { + _model: { + default: null, + type: Model + }, + _defaultClip: { + override: true, + default: null, + type: SkeletonAnimationClip + }, + _clips: { + override: true, + default: [], + type: [SkeletonAnimationClip], + visible: true + }, + defaultClip: { + override: true, + get: function get() { + return this._defaultClip; + }, + set: function set(v) { + this._defaultClip = v; + }, + type: SkeletonAnimationClip + }, + model: { + get: function get() { + return this._model; + }, + set: function set(val) { + this._model = val; + this._updateClipModel(); + }, + type: Model + } + }, + __preload: function __preload() { + this._updateClipModel(); + }, + _updateClipModel: function _updateClipModel() { + this._defaultClip && (this._defaultClip._model = this._model); + var clips = this._clips; + for (var i = 0; i < clips.length; i++) clips[i]._model = this._model; + }, + addClip: function addClip(clip, newName) { + clip._model = this._model; + return Animation.prototype.addClip.call(this, clip, newName); + }, + searchClips: false + }); + cc.SkeletonAnimation = module.exports = SkeletonAnimation; + }), { + "../../components/CCAnimation": 144, + "../CCModel": 28, + "./CCSkeletonAnimationClip": 67, + "fire-path": void 0 + }], + 67: [(function (require, module, exports) { + "use strict"; + var _mat = _interopRequireDefault(require("../../value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var AnimationClip = require("../../../animation/animation-clip"); + var JointMatrixCurve = require("./CCJointMatrixCurve"); + function maxtrixToArray(matrix) { + var data = new Float32Array(16); + data.set(matrix.m); + return data; + } + var SkeletonAnimationClip = cc.Class({ + name: "cc.SkeletonAnimationClip", + extends: AnimationClip, + properties: { + _nativeAsset: { + override: true, + get: function get() { + return this._buffer; + }, + set: function set(bin) { + var buffer = ArrayBuffer.isView(bin) ? bin.buffer : bin; + this._buffer = new Float32Array(buffer || bin, 0, buffer.byteLength / 4); + } + }, + description: { + default: null, + type: Object + }, + curveData: { + visible: false, + override: true, + get: function get() { + return this._curveData || {}; + }, + set: function set() { } + } + }, + statics: { + preventDeferredLoadDependents: true + }, + _init: function _init() { + if (this._curveData) return this._curveData; + this._curveData = {}; + this._generateCommonCurve(); + this._model.precomputeJointMatrix && this._generateJointMatrixCurve(); + return this._curveData; + }, + _generateCommonCurve: function _generateCommonCurve() { + var buffer = this._buffer; + var description = this.description; + var offset = 0; + function getValue() { + return buffer[offset++]; + } + this._curveData.paths || (this._curveData.paths = {}); + var paths = this._curveData.paths; + for (var path in description) { + var des = description[path]; + var curves = {}; + paths[path] = { + props: curves + }; + for (var property in des) { + var frames = []; + var frameCount = des[property].frameCount; + offset = des[property].offset; + for (var i = 0; i < frameCount; i++) { + var frame = getValue(); + var value = void 0; + "position" === property || "scale" === property ? value = cc.v3(getValue(), getValue(), getValue()) : "quat" === property && (value = cc.quat(getValue(), getValue(), getValue(), getValue())); + frames.push({ + frame: frame, + value: value + }); + } + curves[property] = frames; + } + } + }, + _generateJointMatrixCurve: function _generateJointMatrixCurve() { + var rootNode = this._model.rootNode; + var curveData = this._curveData; + var paths = curveData.paths; + var newCurveData = { + ratios: [], + jointMatrixMap: {} + }; + var jointMatrixMap = newCurveData.jointMatrixMap; + function walk(node, time, pm) { + var matrix; + var EPSILON = 1e-4; + var path = paths[node.path]; + if (node !== rootNode && path) { + var props = path.props; + for (var prop in props) { + var frames = props[prop]; + for (var i = 0; i < frames.length; i++) { + var end = frames[i]; + if (Math.abs(end.frame - time) < EPSILON) { + node[prop].set(end.value); + break; + } + if (end.frame > time) { + var start = frames[i - 1]; + var ratio = (time - start.frame) / (end.frame - start.frame); + start.value.lerp(end.value, ratio, node[prop]); + break; + } + } + } + matrix = cc.mat4(); + _mat["default"].fromRTS(matrix, node.quat, node.position, node.scale); + pm && _mat["default"].mul(matrix, pm, matrix); + props._jointMatrix || (props._jointMatrix = []); + var bindWorldMatrix; + if (node.uniqueBindPose) { + bindWorldMatrix = cc.mat4(); + _mat["default"].mul(bindWorldMatrix, matrix, node.uniqueBindPose); + } + jointMatrixMap[node.path] || (jointMatrixMap[node.path] = []); + bindWorldMatrix ? jointMatrixMap[node.path].push(maxtrixToArray(bindWorldMatrix)) : jointMatrixMap[node.path].push(matrix); + } + var children = node.children; + for (var name in children) { + var child = children[name]; + walk(child, time, matrix); + } + } + var time = 0; + var duration = this.duration; + var step = 1 / this.sample; + while (time < duration) { + newCurveData.ratios.push(time / duration); + walk(rootNode, time); + time += step; + } + this._curveData = newCurveData; + }, + _createJointMatrixCurve: function _createJointMatrixCurve(state, root) { + var curve = new JointMatrixCurve(); + curve.ratios = this.curveData.ratios; + curve.pairs = []; + var jointMatrixMap = this.curveData.jointMatrixMap; + for (var path in jointMatrixMap) { + var target = cc.find(path, root); + if (!target) continue; + curve.pairs.push({ + target: target, + values: jointMatrixMap[path] + }); + } + return [curve]; + }, + createCurves: function createCurves(state, root) { + if (!this._model) { + cc.warn("Skeleton Animation Clip [" + this.name + "] Can not find model"); + return []; + } + this._init(); + return this._model.precomputeJointMatrix ? this._createJointMatrixCurve(state, root) : AnimationClip.prototype.createCurves.call(this, state, root); + } + }); + cc.SkeletonAnimationClip = module.exports = SkeletonAnimationClip; + }), { + "../../../animation/animation-clip": 11, + "../../value-types/mat4": 341, + "./CCJointMatrixCurve": 64 + }], + 68: [(function (require, module, exports) { + "use strict"; + var _mat = _interopRequireDefault(require("../../value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Skeleton = require("./CCSkeleton"); + var MeshRenderer = require("../../mesh/CCMeshRenderer"); + var RenderFlow = require("../../renderer/render-flow"); + var enums = require("../../../renderer/enums"); + var _m4_tmp = cc.mat4(); + var _m4_tmp2 = cc.mat4(); + var SkinnedMeshRenderer = cc.Class({ + name: "cc.SkinnedMeshRenderer", + extends: MeshRenderer, + editor: false, + ctor: function ctor() { + this._jointsData = this._jointsFloat32Data = null; + this._jointsTexture = null; + this._joints = []; + this._dummyNode = new cc.Node(); + this._jointsTextureOptions = null; + this._usingRGBA8Texture = false; + }, + properties: { + _skeleton: Skeleton, + _rootBone: cc.Node, + skeleton: { + get: function get() { + return this._skeleton; + }, + set: function set(val) { + this._skeleton = val; + this._init(); + }, + type: Skeleton + }, + rootBone: { + get: function get() { + return this._rootBone; + }, + set: function set(val) { + this._rootBone = val; + this._init(); + }, + type: cc.Node + }, + enableAutoBatch: { + get: function get() { + return false; + }, + visible: false, + override: true + } + }, + __preload: function __preload() { + this._super(); + this._init(); + }, + _init: function _init() { + this._model = this._skeleton && this._skeleton.model; + this._calFunc = null; + this._initJoints(); + this._initJointsTexture(); + this._initCalcFunc(); + this._updateRenderNode(); + }, + _calcWorldMatrixToRoot: function _calcWorldMatrixToRoot(joint) { + var worldMatrixToRoot = joint._worldMatrixToRoot; + if (worldMatrixToRoot) return; + joint._worldMatrixToRoot = worldMatrixToRoot = cc.mat4(); + joint.getLocalMatrix(worldMatrixToRoot); + var parent = joint.parent; + if (parent !== this.rootBone) { + parent._worldMatrixToRoot || this._calcWorldMatrixToRoot(parent); + _mat["default"].mul(worldMatrixToRoot, parent._worldMatrixToRoot, worldMatrixToRoot); + } + }, + _validateRender: function _validateRender() { + if (!this._jointsData) { + this.disableRender(); + return; + } + this._super(); + }, + _initJoints: function _initJoints() { + var joints = this._joints; + joints.length = 0; + if (!this.skeleton || !this.rootBone) return; + var useJointMatrix = this._useJointMatrix(); + var jointPaths = this.skeleton.jointPaths; + var rootBone = this.rootBone; + for (var i = 0; i < jointPaths.length; i++) { + var joint = cc.find(jointPaths[i], rootBone); + joint || cc.warn("Can not find joint in root bone [%s] with path [%s]", rootBone.name, jointPaths[i]); + if (useJointMatrix) { + joint._renderFlag &= ~RenderFlow.FLAG_CHILDREN; + this._calcWorldMatrixToRoot(joint); + } + joints.push(joint); + } + if (useJointMatrix) { + var uniqueBindPoses = this.skeleton.uniqueBindPoses; + for (var _i = 0; _i < jointPaths.length; _i++) { + var _joint = joints[_i]; + if (uniqueBindPoses[_i]) { + _mat["default"].mul(_m4_tmp, _joint._worldMatrixToRoot, uniqueBindPoses[_i]); + _joint._jointMatrix = _mat["default"].toArray([], _m4_tmp); + } else _joint._jointMatrix = _joint._worldMatrixToRoot; + } + } + }, + _initJointsTexture: function _initJointsTexture() { + if (!this._skeleton) return; + var jointCount = this._joints.length; + var inited = false; + if (jointCount <= cc.sys.getMaxJointMatrixSize()) { + inited = true; + this._jointsData = this._jointsFloat32Data = new Float32Array(16 * jointCount); + } + if (!inited) { + var SUPPORT_FLOAT_TEXTURE = !!cc.sys.glExtension("OES_texture_float"); + var size; + size = jointCount > 256 ? 64 : jointCount > 64 ? 32 : jointCount > 16 ? 16 : 8; + this._jointsData = this._jointsFloat32Data = new Float32Array(size * size * 4); + var pixelFormat = cc.Texture2D.PixelFormat.RGBA32F, width = size, height = size; + if (!SUPPORT_FLOAT_TEXTURE) { + this._jointsData = new Uint8Array(this._jointsFloat32Data.buffer); + pixelFormat = cc.Texture2D.PixelFormat.RGBA8888; + width *= 4; + this._usingRGBA8Texture = true; + cc.warn("SkinnedMeshRenderer [" + this.node.name + "] has too many joints [" + jointCount + "] and device do not support float32 texture, fallback to use RGBA8888 texture, which is much slower."); + } + var texture = this._jointsTexture || new cc.Texture2D(); + var NEAREST = cc.Texture2D.Filter.NEAREST; + texture.setFilters(NEAREST, NEAREST); + texture.initWithData(this._jointsData, pixelFormat, width, height); + this._jointsTexture = texture; + this._jointsTextureOptions = { + format: pixelFormat, + width: texture.width, + height: texture.height, + images: [] + }; + } + this._updateMaterial(); + }, + _updateMaterial: function _updateMaterial() { + MeshRenderer.prototype._updateMaterial.call(this); + var materials = this.getMaterials(); + for (var i = 0; i < materials.length; i++) { + var material = materials[i]; + if (this._jointsTexture) { + material.setProperty("jointsTexture", this._jointsTexture); + material.setProperty("jointsTextureSize", new Float32Array([this._jointsTexture.width, this._jointsTexture.height])); + material.define("CC_JOINTS_TEXTURE_FLOAT32", !!cc.sys.glExtension("OES_texture_float")); + material.define("CC_USE_JOINTS_TEXTRUE", true); + } else { + this._jointsFloat32Data && material.setProperty("jointMatrices", this._jointsFloat32Data, void 0, true); + material.define("CC_USE_JOINTS_TEXTRUE", false); + } + material.define("CC_USE_SKINNING", true); + } + }, + _setJointsDataWithArray: function _setJointsDataWithArray(iMatrix, matrixArray) { + var data = this._jointsFloat32Data; + data.set(matrixArray, 16 * iMatrix); + }, + _setJointsDataWithMatrix: function _setJointsDataWithMatrix(iMatrix, matrix) { + this._jointsFloat32Data.set(matrix.m, 16 * iMatrix); + }, + _commitJointsData: function _commitJointsData() { + if (this._jointsTexture) { + this._jointsTextureOptions.images[0] = this._jointsData; + this._jointsTexture.update(this._jointsTextureOptions); + } + }, + _useJointMatrix: function _useJointMatrix() { + return this._model && this._model.precomputeJointMatrix; + }, + _updateRenderNode: function _updateRenderNode() { + this._useJointMatrix() || this._usingRGBA8Texture ? this._assembler.setRenderNode(this.rootBone) : this._assembler.setRenderNode(this._dummyNode); + }, + _initCalcFunc: function _initCalcFunc() { + this._useJointMatrix() ? this._calFunc = this._calJointMatrix : this._usingRGBA8Texture ? this._calFunc = this._calRGBA8WorldMatrix : this._calFunc = this._calWorldMatrix; + }, + _calJointMatrix: function _calJointMatrix() { + var joints = this._joints; + var bindposes = this.skeleton.bindposes; + var uniqueBindPoses = this.skeleton.uniqueBindPoses; + for (var i = 0; i < joints.length; ++i) { + var joint = joints[i]; + var jointMatrix = joint._jointMatrix; + if (uniqueBindPoses[i]) this._setJointsDataWithArray(i, jointMatrix); else { + _mat["default"].multiply(_m4_tmp, jointMatrix, bindposes[i]); + this._setJointsDataWithMatrix(i, _m4_tmp); + } + } + }, + _calRGBA8WorldMatrix: function _calRGBA8WorldMatrix() { + var joints = this._joints; + var bindposes = this.skeleton.bindposes; + this.rootBone._updateWorldMatrix(); + var rootMatrix = this.rootBone._worldMatrix; + var invRootMat = _mat["default"].invert(_m4_tmp2, rootMatrix); + for (var i = 0; i < joints.length; ++i) { + var joint = joints[i]; + joint._updateWorldMatrix(); + _mat["default"].multiply(_m4_tmp, invRootMat, joint._worldMatrix); + _mat["default"].multiply(_m4_tmp, _m4_tmp, bindposes[i]); + this._setJointsDataWithMatrix(i, _m4_tmp); + } + }, + _calWorldMatrix: function _calWorldMatrix() { + var joints = this._joints; + var bindposes = this.skeleton.bindposes; + for (var i = 0; i < joints.length; ++i) { + var joint = joints[i]; + joint._updateWorldMatrix(); + _mat["default"].multiply(_m4_tmp, joint._worldMatrix, bindposes[i]); + this._setJointsDataWithMatrix(i, _m4_tmp); + } + }, + calcJointMatrix: function calcJointMatrix() { + if (!this.skeleton || !this.rootBone) return; + this._calFunc.call(this); + this._commitJointsData(); + } + }); + cc.SkinnedMeshRenderer = module.exports = SkinnedMeshRenderer; + }), { + "../../../renderer/enums": 367, + "../../mesh/CCMeshRenderer": 208, + "../../renderer/render-flow": 272, + "../../value-types/mat4": 341, + "./CCSkeleton": 65 + }], + 69: [(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; + subClass.__proto__ = superClass; + } + var SkinnedMeshRenderer = require("./CCSkinnedMeshRenderer"); + var MeshRendererAssembler = require("../../mesh/mesh-renderer"); + var RenderFlow = require("../../renderer/render-flow"); + var SkinnedMeshRendererAssembler = (function (_MeshRendererAssemble) { + _inheritsLoose(SkinnedMeshRendererAssembler, _MeshRendererAssemble); + function SkinnedMeshRendererAssembler() { + return _MeshRendererAssemble.apply(this, arguments) || this; + } + var _proto = SkinnedMeshRendererAssembler.prototype; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + comp.calcJointMatrix(); + _MeshRendererAssemble.prototype.fillBuffers.call(this, comp, renderer); + }; + return SkinnedMeshRendererAssembler; + })(MeshRendererAssembler); + exports["default"] = SkinnedMeshRendererAssembler; + cc.Assembler.register(SkinnedMeshRenderer, SkinnedMeshRendererAssembler); + module.exports = exports["default"]; + }), { + "../../mesh/mesh-renderer": 211, + "../../renderer/render-flow": 272, + "./CCSkinnedMeshRenderer": 68 + }], + 70: [(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": 263 + }], + 71: [(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, true)) { + 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, persistNodeList); + (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": 72, + "./CCScheduler": 76, + "./component-scheduler": 143, + "./event-manager": 184, + "./event/event-target": 186, + "./node-activator": 212, + "./platform/CCObject": 245, + "./renderer": 271 + }], + 72: [(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 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": 22, + "../core/renderer/utils/dynamic-atlas/manager": 274, + "./CCDebug": 70, + "./event/event-target": 186, + "./renderer/index.js": 271 + }], + 73: [(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": 184, + "./event/event": 187, + "./event/event-target": 186, + "./platform/CCMacro": 244, + "./platform/js": 260, + "./renderer/render-flow": 272, + "./utils/affine-transform": 315, + "./utils/base-node": 316, + "./utils/prefab-helper": 327, + "./utils/trans-pool": 333, + "./value-types": 339 + }], + 74: [(function (require, module, exports) { + "use strict"; + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it; + if ("undefined" === typeof Symbol || null == o[Symbol.iterator]) { + 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."); + } + it = o[Symbol.iterator](); + return it.next.bind(it); + } + 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": 73, + "./renderer/render-flow": 272 + }], + 75: [(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": 73 + }], + 76: [(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": 256, + "./platform/js": 260 + }], + 77: [(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": 78, + "./bundle": 79, + "./cache": 80, + "./depend-util": 82, + "./downloader": 89, + "./factory": 90, + "./fetch": 91, + "./helper": 93, + "./load": 95, + "./pack-manager": 96, + "./parser": 97, + "./pipeline": 98, + "./preprocess": 99, + "./releaseManager": 100, + "./request-item": 101, + "./shared": 102, + "./task": 103, + "./urlTransformer": 104, + "./utilities": 105 + }], + 78: [(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", cb); + })); + }, + 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": 80, + "./releaseManager": 100, + "./shared": 102 + }], + 79: [(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": 81, + "./releaseManager": 100, + "./shared": 102, + "./utilities": 105 + }], + 80: [(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": 260 + }], + 81: [(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": 260, + "./cache": 80, + "./helper": 93, + "./utilities": 105 + }], + 82: [(function (require, module, exports) { + "use strict"; + var _deserializeCompiled = _interopRequireWildcard(require("../platform/deserialize-compiled")); + function _getRequireWildcardCache() { + if ("function" !== typeof WeakMap) return null; + var cache = new WeakMap(); + _getRequireWildcardCache = function _getRequireWildcardCache() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) return obj; + if (null === obj || "object" !== typeof obj && "function" !== typeof obj) return { + default: obj + }; + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) return cache.get(obj); + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) if (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": 254, + "./cache": 80, + "./deserialize": 84, + "./shared": 102 + }], + 83: [(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": 71, + "../platform/js": 260, + "./depend-util": 82, + "./downloader": 89, + "./factory": 90, + "./helper": 93, + "./releaseManager": 100, + "./utilities": 105 + }], + 84: [(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": 255, + "../platform/deserialize-compiled": 254, + "../platform/deserialize-editor": void 0, + "./helper": 93 + }], + 85: [(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": 105 + }], + 86: [(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": 105 + }], + 87: [(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": 105 + }], + 88: [(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": 105 + }], + 89: [(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 = "./static/cocos-build/web-mobile/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": 70, + "../platform/CCSys": 248, + "../platform/js": 260, + "../platform/utils": 263, + "./cache": 80, + "./download-dom-audio": 85, + "./download-dom-image": 86, + "./download-file": 87, + "./download-script.js": 88, + "./font-loader": 92, + "./shared": 102, + "./utilities": 105 + }], + 90: [(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": 79, + "./cache": 80, + "./shared": 102 + }], + 91: [(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": 96, + "./shared": 102, + "./task": 103, + "./utilities": 105 + }], + 92: [(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": 331 + }], + 93: [(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": 319, + "./shared": 102 + }], + 94: [(function (require, module, exports) { + "use strict"; + require("./deprecated"); + require("./CCAssetManager"); + }), { + "./CCAssetManager": 77, + "./deprecated": 83 + }], + 95: [(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": 96, + "./parser": 97, + "./pipeline": 98, + "./shared": 102, + "./task": 103, + "./utilities": 105 + }], + 96: [(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": 254, + "../platform/js": 260, + "./cache": 80, + "./downloader": 89, + "./shared": 102 + }], + 97: [(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": 246, + "../platform/CCSys": 248, + "../platform/js": 260, + "./cache": 80, + "./deserialize": 84, + "./helper": 93, + "./shared": 102 + }], + 98: [(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": 103 + }], + 99: [(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": 102, + "./task": 103 + }], + 100: [(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 _i3 = 0, _l2 = persistNodes.length; _i3 < _l2; _i3++) { + var node = persistNodes[_i3]; + var deps = _persistNodeDeps.get(node.uuid); + for (var _i4 = 0, _l3 = deps.length; _i4 < _l3; _i4++) { + var dependAsset = assets.get(deps[_i4]); + 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": 106, + "../platform/utils": 263, + "./cache": 80, + "./depend-util": 82, + "./shared": 102 + }], + 101: [(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; + }), {}], + 102: [(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": 80, + "./pipeline": 98 + }], + 103: [(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; + }), {}], + 104: [(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": 93, + "./request-item": 101, + "./shared": 102 + }], + 105: [(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": 106, + "../platform/utils": 263, + "./depend-util": 82, + "./helper": 93, + "./shared": 102 + }], + 106: [(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": 245 + }], + 107: [(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": 186, + "./CCAsset": 106 + }], + 108: [(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; + }), {}], + 109: [(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; + }), {}], + 110: [(function (require, module, exports) { + "use strict"; + var Font = cc.Class({ + name: "cc.Font", + extends: cc.Asset + }); + cc.Font = module.exports = Font; + }), {}], + 111: [(function (require, module, exports) { + "use strict"; + var JsonAsset = cc.Class({ + name: "cc.JsonAsset", + extends: cc.Asset, + properties: { + json: null + } + }); + module.exports = cc.JsonAsset = JsonAsset; + }), {}], + 112: [(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; + }), {}], + 113: [(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": 258 + }], + 114: [(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": 372, + "../renderer": 271, + "./CCTexture2D": 121 + }], + 115: [(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; + }), {}], + 116: [(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; + }), {}], + 117: [(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; + }), {}], + 118: [(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(); + }, + _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; + } + }); + var proto = SpriteFrame.prototype; + proto.copyWithZone = proto.clone; + proto.copy = proto.clone; + proto.initWithTexture = proto.setTexture; + cc.SpriteFrame = SpriteFrame; + module.exports = SpriteFrame; + }), { + "../assets/CCAsset": 106, + "../event/event-target": 186 + }], + 119: [(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": 110 + }], + 120: [(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; + }), {}], + 121: [(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; + }, + 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._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(); + } + }); + cc.Texture2D = module.exports = Texture2D; + }), { + "../../renderer/gfx": 372, + "../assets/CCAsset": 106, + "../event/event-target": 186, + "../platform/CCClass": 239, + "../platform/id-generater": 256, + "../renderer": 271 + }], + 122: [(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": 106, + "./CCAudioClip": 107, + "./CCBitmapFont": 108, + "./CCBufferAsset": 109, + "./CCFont": 110, + "./CCJsonAsset": 111, + "./CCLabelAtlas": 112, + "./CCPrefab": 113, + "./CCRenderTexture": 114, + "./CCSceneAsset": 115, + "./CCScripts": 116, + "./CCSpriteAtlas": 117, + "./CCSpriteFrame": 118, + "./CCTTFFont": 119, + "./CCTextAsset": 120, + "./CCTexture2D": 121, + "./material": 129 + }], + 123: [(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": 106, + "./effect-parser": 126 + }], + 124: [(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; + }, + 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(); + } + }, + 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); + } + } + }, + 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); + } + } + }); + var _default = Material; + exports["default"] = _default; + cc.Material = Material; + module.exports = exports["default"]; + }), { + "../../utils/texture-util": 332, + "../CCAsset": 106, + "../CCTexture2D": 121, + "./CCEffectAsset": 123 + }], + 125: [(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); + return Constructor; + } + var gfx = cc.gfx; + var EffectBase = (function () { + function EffectBase() { + this._dirty = true; + 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; + 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; + }; + _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; + }; + _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; + }; + _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; + }; + _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; + }; + _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": 363 + }], + 126: [(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": 363, + "../../../renderer/core/technique": 365, + "../../../renderer/enums": 367, + "../../../renderer/types": 396, + "./effect": 128 + }], + 127: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var gfx = cc.gfx; + var EffectVariant = (function (_EffectBase) { + _inheritsLoose(EffectVariant, _EffectBase); + _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; + } + }]); + function EffectVariant(effect) { + var _this; + _this = _EffectBase.call(this) || this; + _this._effect = void 0; + _this._passes = []; + _this._stagePasses = {}; + _this._hash = 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() { + if (!this._dirty) return this._hash; + this._dirty = false; + var hash = ""; + hash += _utils["default"].serializePasses(this._passes); + var effect = this._effect; + effect && (hash += _utils["default"].serializePasses(effect.passes)); + this._hash = (0, _murmurhash2_gc["default"])(hash, 666); + this.updateHash(this._hash); + return this._hash; + }; + return EffectVariant; + })(_effectBase["default"]); + exports["default"] = EffectVariant; + cc.EffectVariant = EffectVariant; + module.exports = exports["default"]; + }), { + "../../../renderer/murmurhash2_gc": 390, + "./effect-base": 125, + "./utils": 132 + }], + 128: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Effect = (function (_EffectBase) { + _inheritsLoose(Effect, _EffectBase); + _createClass(Effect, [{ + key: "technique", + get: function get() { + return this._technique; + } + }, { + key: "passes", + get: function get() { + return this._technique.passes; + } + }]); + 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); + }; + return Effect; + })(_effectBase["default"]); + exports["default"] = Effect; + cc.Effect = Effect; + module.exports = exports["default"]; + }), { + "./effect-base": 125 + }], + 129: [(function (require, module, exports) { + "use strict"; + require("./CCEffectAsset"); + require("./CCMaterial"); + require("./material-variant"); + }), { + "./CCEffectAsset": 123, + "./CCMaterial": 124, + "./material-variant": 131 + }], + 130: [(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; + subClass.__proto__ = superClass; + } + 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": 326, + "./utils": 132 + }], + 131: [(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, _temp; + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var ccclass = cc._decorator.ccclass; + var MaterialVariant = (_dec = ccclass("cc.MaterialVariant"), _dec(_class = (_temp = (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); + }; + _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; + } + }]); + 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; + }; + return MaterialVariant; + })(_CCMaterial["default"]), _temp)) || _class); + exports["default"] = MaterialVariant; + cc.MaterialVariant = MaterialVariant; + module.exports = exports["default"]; + }), { + "./CCMaterial": 124, + "./effect-variant": 127, + "./material-pool": 130 + }], + 132: [(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": 367 + }], + 133: [(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": 73 + }], + 134: [(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": 392, + "../CCGame": 72, + "../geom-utils": 194, + "../renderer/index": 271, + "../renderer/render-flow": 272, + "../utils/affine-transform": 315, + "../value-types": 339 + }], + 135: [(function (require, module, exports) { + "use strict"; + cc.Collider.Box = cc.Class({ + properties: { + _offset: cc.v2(0, 0), + _size: cc.size(100, 100), + offset: { + tooltip: false, + get: function get() { + return this._offset; + }, + set: function set(value) { + this._offset = value; + }, + type: cc.Vec2 + }, + size: { + tooltip: false, + get: function get() { + return this._size; + }, + set: function set(value) { + this._size.width = value.width < 0 ? 0 : value.width; + this._size.height = value.height < 0 ? 0 : value.height; + }, + type: cc.Size + } + }, + resetInEditor: false + }); + var BoxCollider = cc.Class({ + name: "cc.BoxCollider", + extends: cc.Collider, + mixins: [cc.Collider.Box], + editor: false + }); + cc.BoxCollider = module.exports = BoxCollider; + }), {}], + 136: [(function (require, module, exports) { + "use strict"; + cc.Collider.Circle = cc.Class({ + properties: { + _offset: cc.v2(0, 0), + _radius: 50, + offset: { + tooltip: false, + get: function get() { + return this._offset; + }, + set: function set(value) { + this._offset = value; + }, + type: cc.Vec2 + }, + radius: { + tooltip: false, + get: function get() { + return this._radius; + }, + set: function set(value) { + this._radius = value < 0 ? 0 : value; + } + } + }, + resetInEditor: false + }); + var CircleCollider = cc.Class({ + name: "cc.CircleCollider", + extends: cc.Collider, + mixins: [cc.Collider.Circle], + editor: false + }); + cc.CircleCollider = module.exports = CircleCollider; + }), {}], + 137: [(function (require, module, exports) { + "use strict"; + var Collider = cc.Class({ + name: "cc.Collider", + extends: cc.Component, + properties: { + editing: { + default: false, + serializable: false, + tooltip: false + }, + tag: { + tooltip: false, + default: 0, + range: [0, 1e7], + type: cc.Integer + } + }, + onDisable: function onDisable() { + cc.director.getCollisionManager().removeCollider(this); + }, + onEnable: function onEnable() { + cc.director.getCollisionManager().addCollider(this); + } + }); + cc.Collider = module.exports = Collider; + }), {}], + 138: [(function (require, module, exports) { + "use strict"; + var _vec = _interopRequireDefault(require("../value-types/vec2")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var Contact = require("./CCContact"); + var CollisionType = Contact.CollisionType; + var NodeEvent = require("../CCNode").EventType; + var _vec2 = new _vec["default"](); + function obbApplyMatrix(rect, mat4, out_bl, out_tl, out_tr, out_br) { + var x = rect.x; + var y = rect.y; + var width = rect.width; + var height = rect.height; + var mat4m = mat4.m; + var m00 = mat4m[0], m01 = mat4m[1], m04 = mat4m[4], m05 = mat4m[5]; + var m12 = mat4m[12], m13 = mat4m[13]; + var tx = m00 * x + m04 * y + m12; + var ty = m01 * x + m05 * y + m13; + var xa = m00 * width; + var xb = m01 * width; + var yc = m04 * height; + var yd = m05 * 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; + } + var CollisionManager = cc.Class({ + mixins: [cc.EventTarget], + properties: { + enabled: false, + enabledDrawBoundingBox: false + }, + ctor: function ctor() { + this._contacts = []; + this._colliders = []; + this._debugDrawer = null; + this._enabledDebugDraw = false; + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + }, + update: function update(dt) { + if (!this.enabled) return; + var i, l; + var colliders = this._colliders; + for (i = 0, l = colliders.length; i < l; i++) this.updateCollider(colliders[i]); + var contacts = this._contacts; + var results = []; + for (i = 0, l = contacts.length; i < l; i++) { + var collisionType = contacts[i].updateState(); + if (collisionType === CollisionType.None) continue; + results.push([collisionType, contacts[i]]); + } + for (i = 0, l = results.length; i < l; i++) { + var result = results[i]; + this._doCollide(result[0], result[1]); + } + this.drawColliders(); + }, + _doCollide: function _doCollide(collisionType, contact) { + var contactFunc; + switch (collisionType) { + case CollisionType.CollisionEnter: + contactFunc = "onCollisionEnter"; + break; + + case CollisionType.CollisionStay: + contactFunc = "onCollisionStay"; + break; + + case CollisionType.CollisionExit: + contactFunc = "onCollisionExit"; + } + var collider1 = contact.collider1; + var collider2 = contact.collider2; + var comps1 = collider1.node._components; + var comps2 = collider2.node._components; + var i, l, comp; + for (i = 0, l = comps1.length; i < l; i++) { + comp = comps1[i]; + comp[contactFunc] && comp[contactFunc](collider2, collider1); + } + for (i = 0, l = comps2.length; i < l; i++) { + comp = comps2[i]; + comp[contactFunc] && comp[contactFunc](collider1, collider2); + } + }, + shouldCollide: function shouldCollide(c1, c2) { + var node1 = c1.node, node2 = c2.node; + var collisionMatrix = cc.game.collisionMatrix; + return node1 !== node2 && collisionMatrix[node1.groupIndex][node2.groupIndex]; + }, + initCollider: function initCollider(collider) { + if (!collider.world) { + var world = collider.world = {}; + world.aabb = cc.rect(); + world.preAabb = cc.rect(); + world.matrix = cc.mat4(); + world.radius = 0; + if (collider instanceof cc.BoxCollider) { + world.position = null; + world.points = [cc.v2(), cc.v2(), cc.v2(), cc.v2()]; + } else if (collider instanceof cc.PolygonCollider) { + world.position = null; + world.points = collider.points.map((function (p) { + return cc.v2(p.x, p.y); + })); + } else if (collider instanceof cc.CircleCollider) { + world.position = cc.v2(); + world.points = null; + } + } + }, + updateCollider: function updateCollider(collider) { + var offset = collider.offset; + var world = collider.world; + var aabb = world.aabb; + var m = world.matrix; + collider.node.getWorldMatrix(m); + var preAabb = world.preAabb; + preAabb.x = aabb.x; + preAabb.y = aabb.y; + preAabb.width = aabb.width; + preAabb.height = aabb.height; + if (collider instanceof cc.BoxCollider) { + var size = collider.size; + aabb.x = offset.x - size.width / 2; + aabb.y = offset.y - size.height / 2; + aabb.width = size.width; + aabb.height = size.height; + var wps = world.points; + var wp0 = wps[0], wp1 = wps[1], wp2 = wps[2], wp3 = wps[3]; + obbApplyMatrix(aabb, m, wp0, wp1, wp2, wp3); + var minx = Math.min(wp0.x, wp1.x, wp2.x, wp3.x); + var miny = Math.min(wp0.y, wp1.y, wp2.y, wp3.y); + var maxx = Math.max(wp0.x, wp1.x, wp2.x, wp3.x); + var maxy = Math.max(wp0.y, wp1.y, wp2.y, wp3.y); + aabb.x = minx; + aabb.y = miny; + aabb.width = maxx - minx; + aabb.height = maxy - miny; + } else if (collider instanceof cc.CircleCollider) { + _vec["default"].transformMat4(_vec2, collider.offset, m); + world.position.x = _vec2.x; + world.position.y = _vec2.y; + var mm = m.m; + var tempx = mm[12], tempy = mm[13]; + mm[12] = mm[13] = 0; + _vec2.x = collider.radius; + _vec2.y = 0; + _vec["default"].transformMat4(_vec2, _vec2, m); + var d = Math.sqrt(_vec2.x * _vec2.x + _vec2.y * _vec2.y); + world.radius = d; + aabb.x = world.position.x - d; + aabb.y = world.position.y - d; + aabb.width = 2 * d; + aabb.height = 2 * d; + mm[12] = tempx; + mm[13] = tempy; + } else if (collider instanceof cc.PolygonCollider) { + var points = collider.points; + var worldPoints = world.points; + worldPoints.length = points.length; + var _minx = 1e6, _miny = 1e6, _maxx = -1e6, _maxy = -1e6; + for (var i = 0, l = points.length; i < l; i++) { + worldPoints[i] || (worldPoints[i] = cc.v2()); + _vec2.x = points[i].x + offset.x; + _vec2.y = points[i].y + offset.y; + _vec["default"].transformMat4(_vec2, _vec2, m); + var x = _vec2.x; + var y = _vec2.y; + worldPoints[i].x = x; + worldPoints[i].y = y; + x > _maxx && (_maxx = x); + x < _minx && (_minx = x); + y > _maxy && (_maxy = y); + y < _miny && (_miny = y); + } + aabb.x = _minx; + aabb.y = _miny; + aabb.width = _maxx - _minx; + aabb.height = _maxy - _miny; + } + }, + addCollider: function addCollider(collider) { + var colliders = this._colliders; + var index = colliders.indexOf(collider); + if (-1 === index) { + for (var i = 0, l = colliders.length; i < l; i++) { + var other = colliders[i]; + if (this.shouldCollide(collider, other)) { + var contact = new Contact(collider, other); + this._contacts.push(contact); + } + } + colliders.push(collider); + this.initCollider(collider); + } + collider.node.on(NodeEvent.GROUP_CHANGED, this.onNodeGroupChanged, this); + }, + removeCollider: function removeCollider(collider) { + var colliders = this._colliders; + var index = colliders.indexOf(collider); + if (index >= 0) { + colliders.splice(index, 1); + var contacts = this._contacts; + for (var i = contacts.length - 1; i >= 0; i--) { + var contact = contacts[i]; + if (contact.collider1 === collider || contact.collider2 === collider) { + contact.touching && this._doCollide(CollisionType.CollisionExit, contact); + contacts.splice(i, 1); + } + } + collider.node.off(NodeEvent.GROUP_CHANGED, this.onNodeGroupChanged, this); + } else cc.errorID(6600); + }, + onNodeGroupChanged: function onNodeGroupChanged(node) { + var colliders = node.getComponents(cc.Collider); + for (var i = 0, l = colliders.length; i < l; i++) { + var collider = colliders[i]; + if (cc.PhysicsCollider && collider instanceof cc.PhysicsCollider) continue; + this.removeCollider(collider); + this.addCollider(collider); + } + }, + drawColliders: function drawColliders() { + if (!this._enabledDebugDraw) return; + this._checkDebugDrawValid(); + var debugDrawer = this._debugDrawer; + debugDrawer.clear(); + var colliders = this._colliders; + for (var i = 0, l = colliders.length; i < l; i++) { + var collider = colliders[i]; + debugDrawer.strokeColor = cc.Color.WHITE; + if (collider instanceof cc.BoxCollider || collider instanceof cc.PolygonCollider) { + var ps = collider.world.points; + if (ps.length > 0) { + debugDrawer.moveTo(ps[0].x, ps[0].y); + for (var j = 1; j < ps.length; j++) debugDrawer.lineTo(ps[j].x, ps[j].y); + debugDrawer.close(); + debugDrawer.stroke(); + } + } else if (collider instanceof cc.CircleCollider) { + debugDrawer.circle(collider.world.position.x, collider.world.position.y, collider.world.radius); + debugDrawer.stroke(); + } + if (this.enabledDrawBoundingBox) { + var aabb = collider.world.aabb; + debugDrawer.strokeColor = cc.Color.BLUE; + debugDrawer.moveTo(aabb.xMin, aabb.yMin); + debugDrawer.lineTo(aabb.xMin, aabb.yMax); + debugDrawer.lineTo(aabb.xMax, aabb.yMax); + debugDrawer.lineTo(aabb.xMax, aabb.yMin); + debugDrawer.close(); + debugDrawer.stroke(); + } + } + }, + _checkDebugDrawValid: function _checkDebugDrawValid() { + if (!this._debugDrawer || !this._debugDrawer.isValid) { + var node = new cc.Node("COLLISION_MANAGER_DEBUG_DRAW"); + node.zIndex = cc.macro.MAX_ZINDEX; + cc.game.addPersistRootNode(node); + this._debugDrawer = node.addComponent(cc.Graphics); + } + } + }); + cc.js.getset(CollisionManager.prototype, "enabledDebugDraw", (function () { + return this._enabledDebugDraw; + }), (function (value) { + if (value && !this._enabledDebugDraw) { + this._checkDebugDrawValid(); + this._debugDrawer.node.active = true; + } else if (!value && this._enabledDebugDraw) { + this._debugDrawer.clear(true); + this._debugDrawer.node.active = false; + } + this._enabledDebugDraw = value; + })); + cc.CollisionManager = module.exports = CollisionManager; + }), { + "../CCNode": 73, + "../value-types/vec2": 348, + "./CCContact": 139 + }], + 139: [(function (require, module, exports) { + "use strict"; + var Intersection = require("./CCIntersection"); + var CollisionType = cc.Enum({ + None: 0, + CollisionEnter: 1, + CollisionStay: 2, + CollisionExit: 3 + }); + function Contact(collider1, collider2) { + this.collider1 = collider1; + this.collider2 = collider2; + this.touching = false; + var isCollider1Polygon = collider1 instanceof cc.BoxCollider || collider1 instanceof cc.PolygonCollider; + var isCollider2Polygon = collider2 instanceof cc.BoxCollider || collider2 instanceof cc.PolygonCollider; + var isCollider1Circle = collider1 instanceof cc.CircleCollider; + var isCollider2Circle = collider2 instanceof cc.CircleCollider; + if (isCollider1Polygon && isCollider2Polygon) this.testFunc = Intersection.polygonPolygon; else if (isCollider1Circle && isCollider2Circle) this.testFunc = Intersection.circleCircle; else if (isCollider1Polygon && isCollider2Circle) this.testFunc = Intersection.polygonCircle; else if (isCollider1Circle && isCollider2Polygon) { + this.testFunc = Intersection.polygonCircle; + this.collider1 = collider2; + this.collider2 = collider1; + } else cc.errorID(6601, cc.js.getClassName(collider1), cc.js.getClassName(collider2)); + } + Contact.prototype.test = function () { + var world1 = this.collider1.world; + var world2 = this.collider2.world; + if (!world1.aabb.intersects(world2.aabb)) return false; + if (this.testFunc === Intersection.polygonPolygon) return this.testFunc(world1.points, world2.points); + if (this.testFunc === Intersection.circleCircle) return this.testFunc(world1, world2); + if (this.testFunc === Intersection.polygonCircle) return this.testFunc(world1.points, world2); + return false; + }; + Contact.prototype.updateState = function () { + var result = this.test(); + var type = CollisionType.None; + if (result && !this.touching) { + this.touching = true; + type = CollisionType.CollisionEnter; + } else if (result && this.touching) type = CollisionType.CollisionStay; else if (!result && this.touching) { + this.touching = false; + type = CollisionType.CollisionExit; + } + return type; + }; + Contact.CollisionType = CollisionType; + module.exports = Contact; + }), { + "./CCIntersection": 140 + }], + 140: [(function (require, module, exports) { + "use strict"; + var Intersection = {}; + function lineLine(a1, a2, b1, b2) { + var ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x); + var ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x); + var u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y); + if (0 !== u_b) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) return true; + } + return false; + } + Intersection.lineLine = lineLine; + function lineRect(a1, a2, b) { + var r0 = new cc.Vec2(b.x, b.y); + var r1 = new cc.Vec2(b.x, b.yMax); + var r2 = new cc.Vec2(b.xMax, b.yMax); + var r3 = new cc.Vec2(b.xMax, b.y); + if (lineLine(a1, a2, r0, r1)) return true; + if (lineLine(a1, a2, r1, r2)) return true; + if (lineLine(a1, a2, r2, r3)) return true; + if (lineLine(a1, a2, r3, r0)) return true; + return false; + } + Intersection.lineRect = lineRect; + function linePolygon(a1, a2, b) { + var length = b.length; + for (var i = 0; i < length; ++i) { + var b1 = b[i]; + var b2 = b[(i + 1) % length]; + if (lineLine(a1, a2, b1, b2)) return true; + } + return false; + } + Intersection.linePolygon = linePolygon; + function rectRect(a, b) { + var a_min_x = a.x; + var a_min_y = a.y; + var a_max_x = a.x + a.width; + var a_max_y = a.y + a.height; + var b_min_x = b.x; + var b_min_y = b.y; + var b_max_x = b.x + b.width; + var b_max_y = b.y + b.height; + return a_min_x <= b_max_x && a_max_x >= b_min_x && a_min_y <= b_max_y && a_max_y >= b_min_y; + } + Intersection.rectRect = rectRect; + function rectPolygon(a, b) { + var i, l; + var r0 = new cc.Vec2(a.x, a.y); + var r1 = new cc.Vec2(a.x, a.yMax); + var r2 = new cc.Vec2(a.xMax, a.yMax); + var r3 = new cc.Vec2(a.xMax, a.y); + if (linePolygon(r0, r1, b)) return true; + if (linePolygon(r1, r2, b)) return true; + if (linePolygon(r2, r3, b)) return true; + if (linePolygon(r3, r0, b)) return true; + for (i = 0, l = b.length; i < l; ++i) if (pointInPolygon(b[i], a)) return true; + if (pointInPolygon(r0, b)) return true; + if (pointInPolygon(r1, b)) return true; + if (pointInPolygon(r2, b)) return true; + if (pointInPolygon(r3, b)) return true; + return false; + } + Intersection.rectPolygon = rectPolygon; + function polygonPolygon(a, b) { + var i, l; + for (i = 0, l = a.length; i < l; ++i) { + var a1 = a[i]; + var a2 = a[(i + 1) % l]; + if (linePolygon(a1, a2, b)) return true; + } + for (i = 0, l = b.length; i < l; ++i) if (pointInPolygon(b[i], a)) return true; + for (i = 0, l = a.length; i < l; ++i) if (pointInPolygon(a[i], b)) return true; + return false; + } + Intersection.polygonPolygon = polygonPolygon; + function circleCircle(a, b) { + var distance = a.position.sub(b.position).mag(); + return distance < a.radius + b.radius; + } + Intersection.circleCircle = circleCircle; + function polygonCircle(polygon, circle) { + var position = circle.position; + if (pointInPolygon(position, polygon)) return true; + for (var i = 0, l = polygon.length; i < l; i++) { + var start = 0 === i ? polygon[polygon.length - 1] : polygon[i - 1]; + var end = polygon[i]; + if (pointLineDistance(position, start, end, true) < circle.radius) return true; + } + return false; + } + Intersection.polygonCircle = polygonCircle; + function pointInPolygon(point, polygon) { + var inside = false; + var x = point.x; + var y = point.y; + var length = polygon.length; + for (var i = 0, j = length - 1; i < length; j = i++) { + var xi = polygon[i].x, yi = polygon[i].y, xj = polygon[j].x, yj = polygon[j].y, intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; + intersect && (inside = !inside); + } + return inside; + } + Intersection.pointInPolygon = pointInPolygon; + function pointLineDistance(point, start, end, isSegment) { + var dx = end.x - start.x; + var dy = end.y - start.y; + var d = dx * dx + dy * dy; + var t = ((point.x - start.x) * dx + (point.y - start.y) * dy) / d; + var p; + p = isSegment ? d ? t < 0 ? start : t > 1 ? end : cc.v2(start.x + t * dx, start.y + t * dy) : start : cc.v2(start.x + t * dx, start.y + t * dy); + dx = point.x - p.x; + dy = point.y - p.y; + return Math.sqrt(dx * dx + dy * dy); + } + Intersection.pointLineDistance = pointLineDistance; + cc.Intersection = module.exports = Intersection; + }), {}], + 141: [(function (require, module, exports) { + "use strict"; + cc.Collider.Polygon = cc.Class({ + properties: { + threshold: { + default: 1, + serializable: false, + visible: false + }, + _offset: cc.v2(0, 0), + offset: { + get: function get() { + return this._offset; + }, + set: function set(value) { + this._offset = value; + }, + type: cc.Vec2 + }, + points: { + tooltip: false, + default: function _default() { + return [cc.v2(-50, -50), cc.v2(50, -50), cc.v2(50, 50), cc.v2(-50, 50)]; + }, + type: [cc.Vec2] + } + }, + resetPointsByContour: false + }); + var PolygonCollider = cc.Class({ + name: "cc.PolygonCollider", + extends: cc.Collider, + mixins: [cc.Collider.Polygon], + editor: false + }); + cc.PolygonCollider = module.exports = PolygonCollider; + }), {}], + 142: [(function (require, module, exports) { + "use strict"; + require("./CCCollisionManager"); + require("./CCCollider"); + require("./CCBoxCollider"); + require("./CCCircleCollider"); + require("./CCPolygonCollider"); + }), { + "./CCBoxCollider": 135, + "./CCCircleCollider": 136, + "./CCCollider": 137, + "./CCCollisionManager": 138, + "./CCPolygonCollider": 141 + }], + 143: [(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": 239, + "./platform/CCObject": 245, + "./platform/js": 260, + "./utils/misc": 324 + }], + 144: [(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; + }, + 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": 186, + "../platform/js": 260, + "./CCComponent": 149 + }], + 145: [(function (require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var Component = require("./CCComponent"); + var AudioClip = require("../assets/CCAudioClip"); + var AudioSource = cc.Class({ + name: "cc.AudioSource", + extends: Component, + editor: false, + ctor: function ctor() { + this.audio = new cc._Audio(); + }, + properties: { + _clip: { + default: null, + type: AudioClip + }, + _volume: 1, + _mute: false, + _loop: false, + _pausedFlag: { + default: false, + serializable: false + }, + _firstlyEnabled: true, + isPlaying: { + get: function get() { + var state = this.audio.getState(); + return state === cc._Audio.State.PLAYING; + }, + visible: false + }, + clip: { + get: function get() { + return this._clip; + }, + set: function set(value) { + if (value === this._clip) return; + if (!(value instanceof AudioClip)) return cc.error("Wrong type of AudioClip."); + this._clip = value; + this.audio.stop(); + this.audio.src = this._clip; + this.preload && this._clip._ensureLoaded(); + }, + type: AudioClip, + tooltip: false, + animatable: false + }, + volume: { + get: function get() { + return this._volume; + }, + set: function set(value) { + value = misc.clamp01(value); + this._volume = value; + this._mute || this.audio.setVolume(value); + return value; + }, + tooltip: false + }, + mute: { + get: function get() { + return this._mute; + }, + set: function set(value) { + this._mute = value; + this.audio.setVolume(value ? 0 : this._volume); + return value; + }, + animatable: false, + tooltip: false + }, + loop: { + get: function get() { + return this._loop; + }, + set: function set(value) { + this._loop = value; + this.audio.setLoop(value); + return value; + }, + animatable: false, + tooltip: false + }, + playOnLoad: { + default: false, + tooltip: false, + animatable: false + }, + preload: { + default: false, + animatable: false + } + }, + _pausedCallback: function _pausedCallback() { + var state = this.audio.getState(); + if (state === cc._Audio.State.PLAYING) { + this.audio.pause(); + this._pausedFlag = true; + } + }, + _restoreCallback: function _restoreCallback() { + this._pausedFlag && this.audio.resume(); + this._pausedFlag = false; + }, + onLoad: function onLoad() { + this.audio.src || (this.audio.src = this._clip); + this.preload && this._clip._ensureLoaded(); + }, + onEnable: function onEnable() { + if (this.playOnLoad && this._firstlyEnabled) { + this._firstlyEnabled = false; + this.play(); + } + cc.game.on(cc.game.EVENT_HIDE, this._pausedCallback, this); + cc.game.on(cc.game.EVENT_SHOW, this._restoreCallback, this); + }, + onDisable: function onDisable() { + this.stop(); + cc.game.off(cc.game.EVENT_HIDE, this._pausedCallback, this); + cc.game.off(cc.game.EVENT_SHOW, this._restoreCallback, this); + }, + onDestroy: function onDestroy() { + this.audio.destroy(); + }, + play: function play() { + if (!this._clip) return; + var audio = this.audio; + audio.setVolume(this._mute ? 0 : this._volume); + audio.setLoop(this._loop); + audio.setCurrentTime(0); + audio.play(); + }, + stop: function stop() { + this.audio.stop(); + }, + pause: function pause() { + this.audio.pause(); + }, + resume: function resume() { + this.audio.resume(); + }, + rewind: function rewind() { + this.audio.setCurrentTime(0); + }, + getCurrentTime: function getCurrentTime() { + return this.audio.getCurrentTime(); + }, + setCurrentTime: function setCurrentTime(time) { + this.audio.setCurrentTime(time); + return time; + }, + getDuration: function getDuration() { + return this.audio.getDuration(); + } + }); + cc.AudioSource = module.exports = AudioSource; + }), { + "../assets/CCAudioClip": 107, + "../utils/misc": 324, + "./CCComponent": 149 + }], + 146: [(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": 149 + }], + 147: [(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": 321, + "./CCComponent": 149 + }], + 148: [(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": 134, + "./CCComponent": 149 + }], + 149: [(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": 245, + "../platform/id-generater": 256, + "../platform/js": 260 + }], + 150: [(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 = ""; + } + } + }); + }), {}], + 151: [(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(); + oldValue === CacheMode.CHAR && (this._ttfTexture = null); + 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 + } + }, + 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; + material && material.setProperty("texture", this._frame._texture); + 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": 124, + "../platform/CCMacro": 244, + "../renderer/utils/label/label-frame": 276, + "../renderer/utils/utils": 279, + "../utils/blend-func": 318, + "./CCRenderComponent": 160 + }], + 152: [(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": 149 + }], + 153: [(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": 149 + }], + 154: [(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": 73, + "./CCComponent": 149 + }], + 155: [(function (require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _mat = _interopRequireDefault(require("../value-types/mat4")); + var _vec = _interopRequireDefault(require("../value-types/vec2")); + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var misc = require("../utils/misc"); + var RenderComponent = require("./CCRenderComponent"); + var RenderFlow = require("../renderer/render-flow"); + var Graphics = require("../graphics/graphics"); + var _vec2_temp = new _vec["default"](); + var _mat4_temp = new _mat["default"](); + var _circlepoints = []; + function _calculateCircle(center, radius, segements) { + _circlepoints.length = 0; + var anglePerStep = 2 * Math.PI / segements; + for (var step = 0; step < segements; ++step) _circlepoints.push(cc.v2(radius.x * Math.cos(anglePerStep * step) + center.x, radius.y * Math.sin(anglePerStep * step) + center.y)); + return _circlepoints; + } + var MaskType = cc.Enum({ + RECT: 0, + ELLIPSE: 1, + IMAGE_STENCIL: 2 + }); + var SEGEMENTS_MIN = 3; + var SEGEMENTS_MAX = 1e4; + var Mask = cc.Class({ + name: "cc.Mask", + extends: RenderComponent, + editor: false, + ctor: function ctor() { + this._graphics = null; + this._enableMaterial = null; + this._exitMaterial = null; + this._clearMaterial = null; + }, + properties: { + _spriteFrame: { + default: null, + type: cc.SpriteFrame + }, + _type: MaskType.RECT, + type: { + get: function get() { + return this._type; + }, + set: function set(value) { + this._type !== value && this._resetAssembler(); + this._type = value; + if (this._type !== MaskType.IMAGE_STENCIL) { + this.spriteFrame = null; + this.alphaThreshold = 0; + this._updateGraphics(); + } + this._activateMaterial(); + }, + type: MaskType, + tooltip: false + }, + spriteFrame: { + type: cc.SpriteFrame, + tooltip: false, + get: function get() { + return this._spriteFrame; + }, + set: function set(value) { + var lastSprite = this._spriteFrame; + false; + if (lastSprite === value) return; + this._spriteFrame = value; + this.setVertsDirty(); + this._updateMaterial(); + } + }, + alphaThreshold: { + default: .1, + type: cc.Float, + range: [0, 1, .1], + slide: true, + tooltip: false, + notify: function notify() { + if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) { + cc.warnID(4201); + return; + } + this._updateMaterial(); + } + }, + inverted: { + default: false, + type: cc.Boolean, + tooltip: false, + notify: function notify() { + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && cc.warnID(4202); + } + }, + _segments: 64, + segements: { + get: function get() { + return this._segments; + }, + set: function set(value) { + this._segments = misc.clampf(value, SEGEMENTS_MIN, SEGEMENTS_MAX); + this._updateGraphics(); + }, + type: cc.Integer, + tooltip: false + }, + _resizeToTarget: { + animatable: false, + set: function set(value) { + value && this._resizeNodeToTargetNode(); + } + } + }, + statics: { + Type: MaskType + }, + onRestore: function onRestore() { + this._activateMaterial(); + }, + onEnable: function onEnable() { + this._super(); + this._type !== MaskType.IMAGE_STENCIL && this._updateGraphics(); + this.node.on(cc.Node.EventType.POSITION_CHANGED, this._updateGraphics, this); + this.node.on(cc.Node.EventType.ROTATION_CHANGED, this._updateGraphics, this); + this.node.on(cc.Node.EventType.SCALE_CHANGED, this._updateGraphics, this); + this.node.on(cc.Node.EventType.SIZE_CHANGED, this._updateGraphics, this); + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._updateGraphics, this); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.POSITION_CHANGED, this._updateGraphics, this); + this.node.off(cc.Node.EventType.ROTATION_CHANGED, this._updateGraphics, this); + this.node.off(cc.Node.EventType.SCALE_CHANGED, this._updateGraphics, this); + this.node.off(cc.Node.EventType.SIZE_CHANGED, this._updateGraphics, this); + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._updateGraphics, this); + this.node._renderFlag &= ~RenderFlow.FLAG_POST_RENDER; + }, + onDestroy: function onDestroy() { + this._super(); + this._removeGraphics(); + }, + _resizeNodeToTargetNode: false, + _validateRender: function _validateRender() { + if (this._type !== MaskType.IMAGE_STENCIL) return; + var spriteFrame = this._spriteFrame; + if (spriteFrame && spriteFrame.textureLoaded()) return; + this.disableRender(); + }, + _activateMaterial: function _activateMaterial() { + this._createGraphics(); + var material = this._materials[0]; + material = material ? _materialVariant["default"].create(material, this) : _materialVariant["default"].createWithBuiltin("2d-sprite", this); + material.define("USE_ALPHA_TEST", true); + if (this._type === MaskType.IMAGE_STENCIL) { + material.define("CC_USE_MODEL", false); + material.define("USE_TEXTURE", true); + } else { + material.define("CC_USE_MODEL", true); + material.define("USE_TEXTURE", false); + } + this._enableMaterial || (this._enableMaterial = _materialVariant["default"].createWithBuiltin("2d-sprite", this)); + if (!this._exitMaterial) { + this._exitMaterial = _materialVariant["default"].createWithBuiltin("2d-sprite", this); + this._exitMaterial.setStencilEnabled(_gfx["default"].STENCIL_DISABLE); + } + this._clearMaterial || (this._clearMaterial = _materialVariant["default"].createWithBuiltin("clear-stencil", this)); + this.setMaterial(0, material); + this._graphics._materials[0] = material; + this._updateMaterial(); + }, + _updateMaterial: function _updateMaterial() { + var material = this._materials[0]; + if (!material) return; + if (this._type === MaskType.IMAGE_STENCIL && this.spriteFrame) { + var texture = this.spriteFrame.getTexture(); + material.setProperty("texture", texture); + } + material.setProperty("alphaThreshold", this.alphaThreshold); + }, + _createGraphics: function _createGraphics() { + if (!this._graphics) { + this._graphics = new Graphics(); + cc.Assembler.init(this._graphics); + this._graphics.node = this.node; + this._graphics.lineWidth = 0; + this._graphics.strokeColor = cc.color(0, 0, 0, 0); + } + }, + _updateGraphics: function _updateGraphics() { + if (!this.enabledInHierarchy) return; + var node = this.node; + var graphics = this._graphics; + graphics.clear(false); + var width = node._contentSize.width; + var height = node._contentSize.height; + var x = -width * node._anchorPoint.x; + var y = -height * node._anchorPoint.y; + if (this._type === MaskType.RECT) graphics.rect(x, y, width, height); else if (this._type === MaskType.ELLIPSE) { + var center = cc.v2(x + width / 2, y + height / 2); + var radius = { + x: width / 2, + y: height / 2 + }; + var points = _calculateCircle(center, radius, this._segments); + for (var i = 0; i < points.length; ++i) { + var point = points[i]; + 0 === i ? graphics.moveTo(point.x, point.y) : graphics.lineTo(point.x, point.y); + } + graphics.close(); + } + cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? graphics.stroke() : graphics.fill(); + }, + _removeGraphics: function _removeGraphics() { + if (this._graphics) { + this._graphics.destroy(); + this._graphics._destroyImmediate(); + this._graphics = null; + } + }, + _hitTest: function _hitTest(cameraPt) { + var node = this.node; + var size = node.getContentSize(), w = size.width, h = size.height, testPt = _vec2_temp; + node._updateWorldMatrix(); + if (!_mat["default"].invert(_mat4_temp, node._worldMatrix)) return false; + _vec["default"].transformMat4(testPt, cameraPt, _mat4_temp); + testPt.x += node._anchorPoint.x * w; + testPt.y += node._anchorPoint.y * h; + var result = false; + if (this.type === MaskType.RECT || this.type === MaskType.IMAGE_STENCIL) result = testPt.x >= 0 && testPt.y >= 0 && testPt.x <= w && testPt.y <= h; else if (this.type === MaskType.ELLIPSE) { + var rx = w / 2, ry = h / 2; + var px = testPt.x - .5 * w, py = testPt.y - .5 * h; + result = px * px / (rx * rx) + py * py / (ry * ry) < 1; + } + this.inverted && (result = !result); + return result; + }, + markForRender: function markForRender(enable) { + var flag = RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA | RenderFlow.FLAG_POST_RENDER; + if (enable) { + this.node._renderFlag |= flag; + this.markForValidate(); + } else enable || (this.node._renderFlag &= ~flag); + }, + disableRender: function disableRender() { + this.node._renderFlag &= ~(RenderFlow.FLAG_RENDER | RenderFlow.FLAG_UPDATE_RENDER_DATA | RenderFlow.FLAG_POST_RENDER); + } + }); + cc.Mask = module.exports = Mask; + }), { + "../../renderer/gfx": 372, + "../assets/material/material-variant": 131, + "../graphics/graphics": 202, + "../renderer/render-flow": 272, + "../utils/misc": 324, + "../value-types/mat4": 341, + "../value-types/vec2": 348, + "./CCRenderComponent": 160 + }], + 156: [(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._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 + } + }, + onEnable: function onEnable() { + this._super(); + this.reset(); + }, + _updateMaterial: function _updateMaterial() { + var material = this.getMaterial(0); + material && material.setProperty("texture", this._texture); + 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": 318, + "../components/CCRenderComponent": 160 + }], + 157: [(function (require, module, exports) { + "use strict"; + var SizeMode = cc.Enum({ + Unified: 0, + Free: 1 + }); + var Direction = cc.Enum({ + Horizontal: 0, + Vertical: 1 + }); + var EventType = cc.Enum({ + PAGE_TURNING: 0 + }); + var PageView = cc.Class({ + name: "cc.PageView", + extends: cc.ScrollView, + editor: false, + ctor: function ctor() { + this._curPageIdx = 0; + this._lastPageIdx = 0; + this._pages = []; + this._initContentPos = cc.v2(); + this._scrollCenterOffsetX = []; + this._scrollCenterOffsetY = []; + }, + properties: { + sizeMode: { + default: SizeMode.Unified, + type: SizeMode, + tooltip: false, + notify: function notify() { + this._syncSizeMode(); + } + }, + direction: { + default: Direction.Horizontal, + type: Direction, + tooltip: false, + notify: function notify() { + this._syncScrollDirection(); + } + }, + scrollThreshold: { + default: .5, + type: cc.Float, + slide: true, + range: [0, 1, .01], + tooltip: false + }, + autoPageTurningThreshold: { + default: 100, + type: cc.Float, + tooltip: false + }, + pageTurningEventTiming: { + default: .1, + type: cc.Float, + range: [0, 1, .01], + tooltip: false + }, + indicator: { + default: null, + type: cc.PageViewIndicator, + tooltip: false, + notify: function notify() { + this.indicator && this.indicator.setPageView(this); + } + }, + pageTurningSpeed: { + default: .3, + type: cc.Float, + tooltip: false + }, + pageEvents: { + default: [], + type: cc.Component.EventHandler, + tooltip: false + } + }, + statics: { + SizeMode: SizeMode, + Direction: Direction, + EventType: EventType + }, + onEnable: function onEnable() { + this._super(); + this.node.on(cc.Node.EventType.SIZE_CHANGED, this._updateAllPagesSize, this); + true; + this.node.on("scroll-ended-with-threshold", this._dispatchPageTurningEvent, this); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.SIZE_CHANGED, this._updateAllPagesSize, this); + true; + this.node.off("scroll-ended-with-threshold", this._dispatchPageTurningEvent, this); + }, + onLoad: function onLoad() { + this._initPages(); + this.indicator && this.indicator.setPageView(this); + }, + getCurrentPageIndex: function getCurrentPageIndex() { + return this._curPageIdx; + }, + setCurrentPageIndex: function setCurrentPageIndex(index) { + this.scrollToPage(index, true); + }, + getPages: function getPages() { + return this._pages; + }, + addPage: function addPage(page) { + if (!page || -1 !== this._pages.indexOf(page) || !this.content) return; + this.content.addChild(page); + this._pages.push(page); + this._updatePageView(); + }, + insertPage: function insertPage(page, index) { + if (index < 0 || !page || -1 !== this._pages.indexOf(page) || !this.content) return; + var pageCount = this._pages.length; + if (index >= pageCount) this.addPage(page); else { + this._pages.splice(index, 0, page); + this.content.addChild(page); + this._updatePageView(); + } + }, + removePage: function removePage(page) { + if (!page || !this.content) return; + var index = this._pages.indexOf(page); + if (-1 === index) { + cc.warnID(4300, page.name); + return; + } + this.removePageAtIndex(index); + }, + removePageAtIndex: function removePageAtIndex(index) { + var pageList = this._pages; + if (index < 0 || index >= pageList.length) return; + var page = pageList[index]; + if (!page) return; + this.content.removeChild(page); + pageList.splice(index, 1); + this._updatePageView(); + }, + removeAllPages: function removeAllPages() { + if (!this.content) return; + var locPages = this._pages; + for (var i = 0, len = locPages.length; i < len; i++) this.content.removeChild(locPages[i]); + this._pages.length = 0; + this._updatePageView(); + }, + scrollToPage: function scrollToPage(idx, timeInSecond) { + if (idx < 0 || idx >= this._pages.length) return; + timeInSecond = void 0 !== timeInSecond ? timeInSecond : .3; + this._curPageIdx = idx; + this.scrollToOffset(this._moveOffsetValue(idx), timeInSecond, true); + this.indicator && this.indicator._changedState(); + }, + getScrollEndedEventTiming: function getScrollEndedEventTiming() { + return this.pageTurningEventTiming; + }, + _syncScrollDirection: function _syncScrollDirection() { + this.horizontal = this.direction === Direction.Horizontal; + this.vertical = this.direction === Direction.Vertical; + }, + _syncSizeMode: function _syncSizeMode() { + if (!this.content) return; + var layout = this.content.getComponent(cc.Layout); + if (layout) { + if (this.sizeMode === SizeMode.Free && this._pages.length > 0) { + var lastPage = this._pages[this._pages.length - 1]; + if (this.direction === Direction.Horizontal) { + layout.paddingLeft = (this._view.width - this._pages[0].width) / 2; + layout.paddingRight = (this._view.width - lastPage.width) / 2; + } else if (this.direction === Direction.Vertical) { + layout.paddingTop = (this._view.height - this._pages[0].height) / 2; + layout.paddingBottom = (this._view.height - lastPage.height) / 2; + } + } + layout.updateLayout(); + } + }, + _updatePageView: function _updatePageView() { + var layout = this.content.getComponent(cc.Layout); + layout && layout.enabled && layout.updateLayout(); + var pageCount = this._pages.length; + if (this._curPageIdx >= pageCount) { + this._curPageIdx = 0 === pageCount ? 0 : pageCount - 1; + this._lastPageIdx = this._curPageIdx; + } + var contentPos = this._initContentPos; + for (var i = 0; i < pageCount; ++i) { + var page = this._pages[i]; + page.setSiblingIndex(i); + this.direction === Direction.Horizontal ? this._scrollCenterOffsetX[i] = Math.abs(contentPos.x + page.x) : this._scrollCenterOffsetY[i] = Math.abs(contentPos.y + page.y); + } + this.indicator && this.indicator._refresh(); + }, + _updateAllPagesSize: function _updateAllPagesSize() { + if (this.sizeMode !== SizeMode.Unified || !this._view) return; + var locPages = this._pages; + var selfSize = this._view.getContentSize(); + for (var i = 0, len = locPages.length; i < len; i++) locPages[i].setContentSize(selfSize); + }, + _initPages: function _initPages() { + if (!this.content) return; + this._initContentPos = this.content.position; + var children = this.content.children; + for (var i = 0; i < children.length; ++i) { + var page = children[i]; + if (this._pages.indexOf(page) >= 0) continue; + this._pages.push(page); + } + this._syncScrollDirection(); + this._syncSizeMode(); + this._updatePageView(); + }, + _dispatchPageTurningEvent: function _dispatchPageTurningEvent() { + if (this._lastPageIdx === this._curPageIdx) return; + this._lastPageIdx = this._curPageIdx; + cc.Component.EventHandler.emitEvents(this.pageEvents, this, EventType.PAGE_TURNING); + this.node.emit("page-turning", this); + }, + _isScrollable: function _isScrollable(offset, index, nextIndex) { + if (this.sizeMode === SizeMode.Free) { + var curPageCenter, nextPageCenter; + if (this.direction === Direction.Horizontal) { + curPageCenter = this._scrollCenterOffsetX[index]; + nextPageCenter = this._scrollCenterOffsetX[nextIndex]; + return Math.abs(offset.x) >= Math.abs(curPageCenter - nextPageCenter) * this.scrollThreshold; + } + if (this.direction === Direction.Vertical) { + curPageCenter = this._scrollCenterOffsetY[index]; + nextPageCenter = this._scrollCenterOffsetY[nextIndex]; + return Math.abs(offset.y) >= Math.abs(curPageCenter - nextPageCenter) * this.scrollThreshold; + } + } else { + if (this.direction === Direction.Horizontal) return Math.abs(offset.x) >= this._view.width * this.scrollThreshold; + if (this.direction === Direction.Vertical) return Math.abs(offset.y) >= this._view.height * this.scrollThreshold; + } + }, + _isQuicklyScrollable: function _isQuicklyScrollable(touchMoveVelocity) { + if (this.direction === Direction.Horizontal) { + if (Math.abs(touchMoveVelocity.x) > this.autoPageTurningThreshold) return true; + } else if (this.direction === Direction.Vertical && Math.abs(touchMoveVelocity.y) > this.autoPageTurningThreshold) return true; + return false; + }, + _moveOffsetValue: function _moveOffsetValue(idx) { + var offset = cc.v2(0, 0); + this.sizeMode === SizeMode.Free ? this.direction === Direction.Horizontal ? offset.x = this._scrollCenterOffsetX[idx] : this.direction === Direction.Vertical && (offset.y = this._scrollCenterOffsetY[idx]) : this.direction === Direction.Horizontal ? offset.x = idx * this._view.width : this.direction === Direction.Vertical && (offset.y = idx * this._view.height); + return offset; + }, + _getDragDirection: function _getDragDirection(moveOffset) { + if (this.direction === Direction.Horizontal) { + if (0 === moveOffset.x) return 0; + return moveOffset.x > 0 ? 1 : -1; + } + if (this.direction === Direction.Vertical) { + if (0 === moveOffset.y) return 0; + return moveOffset.y < 0 ? 1 : -1; + } + }, + _handleReleaseLogic: function _handleReleaseLogic(touch) { + this._autoScrollToPage(); + if (this._scrolling) { + this._scrolling = false; + this._autoScrolling || this._dispatchEvent("scroll-ended"); + } + }, + _autoScrollToPage: function _autoScrollToPage() { + var bounceBackStarted = this._startBounceBackIfNeeded(); + if (bounceBackStarted) { + var bounceBackAmount = this._getHowMuchOutOfBoundary(); + bounceBackAmount = this._clampDelta(bounceBackAmount); + (bounceBackAmount.x > 0 || bounceBackAmount.y < 0) && (this._curPageIdx = 0 === this._pages.length ? 0 : this._pages.length - 1); + (bounceBackAmount.x < 0 || bounceBackAmount.y > 0) && (this._curPageIdx = 0); + this.indicator && this.indicator._changedState(); + } else { + var moveOffset = this._touchBeganPosition.sub(this._touchEndPosition); + var index = this._curPageIdx, nextIndex = index + this._getDragDirection(moveOffset); + var timeInSecond = this.pageTurningSpeed * Math.abs(index - nextIndex); + if (nextIndex < this._pages.length) { + if (this._isScrollable(moveOffset, index, nextIndex)) { + this.scrollToPage(nextIndex, timeInSecond); + return; + } + var touchMoveVelocity = this._calculateTouchMoveVelocity(); + if (this._isQuicklyScrollable(touchMoveVelocity)) { + this.scrollToPage(nextIndex, timeInSecond); + return; + } + } + this.scrollToPage(index, timeInSecond); + } + }, + _onTouchBegan: function _onTouchBegan(event, captureListeners) { + this._touchBeganPosition = event.touch.getLocation(); + this._super(event, captureListeners); + }, + _onTouchMoved: function _onTouchMoved(event, captureListeners) { + this._super(event, captureListeners); + }, + _onTouchEnded: function _onTouchEnded(event, captureListeners) { + this._touchEndPosition = event.touch.getLocation(); + this._super(event, captureListeners); + }, + _onTouchCancelled: function _onTouchCancelled(event, captureListeners) { + this._touchEndPosition = event.touch.getLocation(); + this._super(event, captureListeners); + }, + _onMouseWheel: function _onMouseWheel() { } + }); + cc.PageView = module.exports = PageView; + }), {}], + 158: [(function (require, module, exports) { + "use strict"; + var Direction = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1 + }); + var PageViewIndicator = cc.Class({ + name: "cc.PageViewIndicator", + extends: require("./CCComponent"), + editor: false, + properties: { + _layout: null, + _pageView: null, + _indicators: [], + spriteFrame: { + default: null, + type: cc.SpriteFrame, + tooltip: false + }, + direction: { + default: Direction.HORIZONTAL, + type: Direction, + tooltip: false + }, + cellSize: { + default: cc.size(20, 20), + tooltip: false + }, + spacing: { + default: 0, + tooltip: false + } + }, + statics: { + Direction: Direction + }, + onLoad: function onLoad() { + this._updateLayout(); + }, + setPageView: function setPageView(target) { + this._pageView = target; + this._refresh(); + }, + _updateLayout: function _updateLayout() { + this._layout = this.getComponent(cc.Layout); + this._layout || (this._layout = this.addComponent(cc.Layout)); + if (this.direction === Direction.HORIZONTAL) { + this._layout.type = cc.Layout.Type.HORIZONTAL; + this._layout.spacingX = this.spacing; + } else if (this.direction === Direction.VERTICAL) { + this._layout.type = cc.Layout.Type.VERTICAL; + this._layout.spacingY = this.spacing; + } + this._layout.resizeMode = cc.Layout.ResizeMode.CONTAINER; + }, + _createIndicator: function _createIndicator() { + var node = new cc.Node(); + var sprite = node.addComponent(cc.Sprite); + sprite.spriteFrame = this.spriteFrame; + sprite.sizeMode = cc.Sprite.SizeMode.CUSTOM; + node.parent = this.node; + node.width = this.cellSize.width; + node.height = this.cellSize.height; + return node; + }, + _changedState: function _changedState() { + var indicators = this._indicators; + if (0 === indicators.length) return; + var idx = this._pageView._curPageIdx; + if (idx >= indicators.length) return; + for (var i = 0; i < indicators.length; ++i) { + var node = indicators[i]; + node.opacity = 127.5; + } + indicators[idx].opacity = 255; + }, + _refresh: function _refresh() { + if (!this._pageView) return; + var indicators = this._indicators; + var pages = this._pageView.getPages(); + if (pages.length === indicators.length) return; + var i = 0; + if (pages.length > indicators.length) for (i = 0; i < pages.length; ++i) indicators[i] || (indicators[i] = this._createIndicator()); else { + var count = indicators.length - pages.length; + for (i = count; i > 0; --i) { + var node = indicators[i - 1]; + this.node.removeChild(node); + indicators.splice(i - 1, 1); + } + } + this._layout && this._layout.enabledInHierarchy && this._layout.updateLayout(); + this._changedState(); + } + }); + cc.PageViewIndicator = module.exports = PageViewIndicator; + }), { + "./CCComponent": 149 + }], + 159: [(function (require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var Component = require("./CCComponent"); + var Mode = cc.Enum({ + HORIZONTAL: 0, + VERTICAL: 1, + FILLED: 2 + }); + var ProgressBar = cc.Class({ + name: "cc.ProgressBar", + extends: Component, + editor: false, + _initBarSprite: function _initBarSprite() { + if (this.barSprite) { + var entity = this.barSprite.node; + if (!entity) return; + var nodeSize = this.node.getContentSize(); + var nodeAnchor = this.node.getAnchorPoint(); + var entitySize = entity.getContentSize(); + entity.parent === this.node && this.node.setContentSize(entitySize); + this.barSprite.fillType === cc.Sprite.FillType.RADIAL && (this.mode = Mode.FILLED); + var barSpriteSize = entity.getContentSize(); + this.mode === Mode.HORIZONTAL ? this.totalLength = barSpriteSize.width : this.mode === Mode.VERTICAL ? this.totalLength = barSpriteSize.height : this.totalLength = this.barSprite.fillRange; + if (entity.parent === this.node) { + var x = -nodeSize.width * nodeAnchor.x; + var y = 0; + entity.setPosition(cc.v2(x, y)); + } + } + }, + _updateBarStatus: function _updateBarStatus() { + if (this.barSprite) { + var entity = this.barSprite.node; + if (!entity) return; + var entityAnchorPoint = entity.getAnchorPoint(); + var entitySize = entity.getContentSize(); + var entityPosition = entity.getPosition(); + var anchorPoint = cc.v2(0, .5); + var progress = misc.clamp01(this.progress); + var actualLenth = this.totalLength * progress; + var finalContentSize; + var totalWidth; + var totalHeight; + switch (this.mode) { + case Mode.HORIZONTAL: + this.reverse && (anchorPoint = cc.v2(1, .5)); + finalContentSize = cc.size(actualLenth, entitySize.height); + totalWidth = this.totalLength; + totalHeight = entitySize.height; + break; + + case Mode.VERTICAL: + anchorPoint = this.reverse ? cc.v2(.5, 1) : cc.v2(.5, 0); + finalContentSize = cc.size(entitySize.width, actualLenth); + totalWidth = entitySize.width; + totalHeight = this.totalLength; + } + if (this.mode === Mode.FILLED) if (this.barSprite.type !== cc.Sprite.Type.FILLED) cc.warn("ProgressBar FILLED mode only works when barSprite's Type is FILLED!"); else { + this.reverse && (actualLenth *= -1); + this.barSprite.fillRange = actualLenth; + } else if (this.barSprite.type !== cc.Sprite.Type.FILLED) { + var anchorOffsetX = anchorPoint.x - entityAnchorPoint.x; + var anchorOffsetY = anchorPoint.y - entityAnchorPoint.y; + var finalPosition = cc.v2(totalWidth * anchorOffsetX, totalHeight * anchorOffsetY); + entity.setPosition(entityPosition.x + finalPosition.x, entityPosition.y + finalPosition.y); + entity.setAnchorPoint(anchorPoint); + entity.setContentSize(finalContentSize); + } else cc.warn("ProgressBar non-FILLED mode only works when barSprite's Type is non-FILLED!"); + } + }, + properties: { + barSprite: { + default: null, + type: cc.Sprite, + tooltip: false, + notify: function notify() { + this._initBarSprite(); + }, + animatable: false + }, + mode: { + default: Mode.HORIZONTAL, + type: Mode, + tooltip: false, + notify: function notify() { + if (this.barSprite) { + var entity = this.barSprite.node; + if (!entity) return; + var entitySize = entity.getContentSize(); + this.mode === Mode.HORIZONTAL ? this.totalLength = entitySize.width : this.mode === Mode.VERTICAL ? this.totalLength = entitySize.height : this.mode === Mode.FILLED && (this.totalLength = this.barSprite.fillRange); + } + }, + animatable: false + }, + _N$totalLength: 1, + totalLength: { + range: [0, Number.MAX_VALUE], + tooltip: false, + get: function get() { + return this._N$totalLength; + }, + set: function set(value) { + this.mode === Mode.FILLED && (value = misc.clamp01(value)); + this._N$totalLength = value; + this._updateBarStatus(); + } + }, + progress: { + default: 1, + type: cc.Float, + range: [0, 1, .1], + slide: true, + tooltip: false, + notify: function notify() { + this._updateBarStatus(); + } + }, + reverse: { + default: false, + tooltip: false, + notify: function notify() { + this.barSprite && (this.barSprite.fillStart = 1 - this.barSprite.fillStart); + this._updateBarStatus(); + }, + animatable: false + } + }, + statics: { + Mode: Mode + } + }); + cc.ProgressBar = module.exports = ProgressBar; + }), { + "../utils/misc": 324, + "./CCComponent": 149 + }], + 160: [(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 RenderComponent = cc.Class({ + name: "RenderComponent", + extends: Component, + editor: false, + 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._assembler = null; + }, + _resetAssembler: function _resetAssembler() { + _assembler["default"].init(this); + this._updateColor(); + 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; + } + } + }); + cc.RenderComponent = module.exports = RenderComponent; + }), { + "../assets/material/CCMaterial": 124, + "../assets/material/material-variant": 131, + "../renderer/assembler": 268, + "../renderer/render-flow": 272, + "../value-types": 339, + "./CCComponent": 149 + }], + 161: [(function (require, module, exports) { + "use strict"; + 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; + 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()); + } + } + }, + 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); + 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; + 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; + }), { + "../platform/CCMacro": 244, + "../platform/js": 260, + "../utils/html-text-parser": 322, + "../utils/text-utils": 331 + }], + 162: [(function (require, module, exports) { + "use strict"; + var Widget = require("./CCWidget"); + var WidgetManager = require("../base-ui/CCWidgetManager"); + var SafeArea = cc.Class({ + name: "cc.SafeArea", + extends: require("./CCComponent"), + editor: false, + onEnable: function onEnable() { + this.updateArea(); + cc.view.on("canvas-resize", this.updateArea, this); + }, + onDisable: function onDisable() { + cc.view.off("canvas-resize", this.updateArea, this); + }, + updateArea: function updateArea() { + var widget = this.node.getComponent(Widget); + if (!widget) return; + false; + widget.updateAlignment(); + var lastPos = this.node.position; + var lastAnchorPoint = this.node.getAnchorPoint(); + widget.isAlignTop = widget.isAlignBottom = widget.isAlignLeft = widget.isAlignRight = true; + var screenWidth = cc.winSize.width, screenHeight = cc.winSize.height; + var safeArea = cc.sys.getSafeAreaRect(); + widget.top = screenHeight - safeArea.y - safeArea.height; + widget.bottom = safeArea.y; + widget.left = safeArea.x; + widget.right = screenWidth - safeArea.x - safeArea.width; + widget.updateAlignment(); + var curPos = this.node.position; + var anchorX = lastAnchorPoint.x - (curPos.x - lastPos.x) / this.node.width; + var anchorY = lastAnchorPoint.y - (curPos.y - lastPos.y) / this.node.height; + this.node.setAnchorPoint(anchorX, anchorY); + WidgetManager.add(widget); + } + }); + cc.SafeArea = module.exports = SafeArea; + }), { + "../base-ui/CCWidgetManager": 133, + "./CCComponent": 149, + "./CCWidget": 172 + }], + 163: [(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": 324, + "./CCComponent": 149 + }], + 164: [(function (require, module, exports) { + "use strict"; + var NodeEvent = require("../CCNode").EventType; + var NUMBER_OF_GATHERED_TOUCHES_FOR_MOVE_SPEED = 5; + var OUT_OF_BOUNDARY_BREAKING_FACTOR = .05; + var EPSILON = 1e-4; + var MOVEMENT_FACTOR = .7; + var _tempPoint = cc.v2(); + var _tempPrevPoint = cc.v2(); + var quintEaseOut = function quintEaseOut(time) { + time -= 1; + return time * time * time * time * time + 1; + }; + var getTimeInMilliseconds = function getTimeInMilliseconds() { + var currentTime = new Date(); + return currentTime.getMilliseconds(); + }; + var EventType = cc.Enum({ + SCROLL_TO_TOP: 0, + SCROLL_TO_BOTTOM: 1, + SCROLL_TO_LEFT: 2, + SCROLL_TO_RIGHT: 3, + SCROLLING: 4, + BOUNCE_TOP: 5, + BOUNCE_BOTTOM: 6, + BOUNCE_LEFT: 7, + BOUNCE_RIGHT: 8, + SCROLL_ENDED: 9, + TOUCH_UP: 10, + AUTOSCROLL_ENDED_WITH_THRESHOLD: 11, + SCROLL_BEGAN: 12 + }); + var eventMap = { + "scroll-to-top": EventType.SCROLL_TO_TOP, + "scroll-to-bottom": EventType.SCROLL_TO_BOTTOM, + "scroll-to-left": EventType.SCROLL_TO_LEFT, + "scroll-to-right": EventType.SCROLL_TO_RIGHT, + scrolling: EventType.SCROLLING, + "bounce-bottom": EventType.BOUNCE_BOTTOM, + "bounce-left": EventType.BOUNCE_LEFT, + "bounce-right": EventType.BOUNCE_RIGHT, + "bounce-top": EventType.BOUNCE_TOP, + "scroll-ended": EventType.SCROLL_ENDED, + "touch-up": EventType.TOUCH_UP, + "scroll-ended-with-threshold": EventType.AUTOSCROLL_ENDED_WITH_THRESHOLD, + "scroll-began": EventType.SCROLL_BEGAN + }; + var ScrollView = cc.Class({ + name: "cc.ScrollView", + extends: require("./CCViewGroup"), + editor: false, + ctor: function ctor() { + this._topBoundary = 0; + this._bottomBoundary = 0; + this._leftBoundary = 0; + this._rightBoundary = 0; + this._touchMoveDisplacements = []; + this._touchMoveTimeDeltas = []; + this._touchMovePreviousTimestamp = 0; + this._touchMoved = false; + this._autoScrolling = false; + this._autoScrollAttenuate = false; + this._autoScrollStartPosition = cc.v2(0, 0); + this._autoScrollTargetDelta = cc.v2(0, 0); + this._autoScrollTotalTime = 0; + this._autoScrollAccumulatedTime = 0; + this._autoScrollCurrentlyOutOfBoundary = false; + this._autoScrollBraking = false; + this._autoScrollBrakingStartPosition = cc.v2(0, 0); + this._outOfBoundaryAmount = cc.v2(0, 0); + this._outOfBoundaryAmountDirty = true; + this._stopMouseWheel = false; + this._mouseWheelEventElapsedTime = 0; + this._isScrollEndedWithThresholdEventFired = false; + this._scrollEventEmitMask = 0; + this._isBouncing = false; + this._scrolling = false; + }, + properties: { + content: { + default: void 0, + type: cc.Node, + tooltip: false, + formerlySerializedAs: "content", + notify: function notify(oldValue) { + this._calculateBoundary(); + } + }, + horizontal: { + default: true, + animatable: false, + tooltip: false + }, + vertical: { + default: true, + animatable: false, + tooltip: false + }, + inertia: { + default: true, + tooltip: false + }, + brake: { + default: .5, + type: cc.Float, + range: [0, 1, .1], + tooltip: false + }, + elastic: { + default: true, + animatable: false, + tooltip: false + }, + bounceDuration: { + default: 1, + range: [0, 10], + tooltip: false + }, + horizontalScrollBar: { + default: void 0, + type: cc.Scrollbar, + tooltip: false, + notify: function notify() { + if (this.horizontalScrollBar) { + this.horizontalScrollBar.setTargetScrollView(this); + this._updateScrollBar(0); + } + }, + animatable: false + }, + verticalScrollBar: { + default: void 0, + type: cc.Scrollbar, + tooltip: false, + notify: function notify() { + if (this.verticalScrollBar) { + this.verticalScrollBar.setTargetScrollView(this); + this._updateScrollBar(0); + } + }, + animatable: false + }, + scrollEvents: { + default: [], + type: cc.Component.EventHandler, + tooltip: false + }, + cancelInnerEvents: { + default: true, + animatable: false, + tooltip: false + }, + _view: { + get: function get() { + if (this.content) return this.content.parent; + } + } + }, + statics: { + EventType: EventType + }, + scrollToBottom: function scrollToBottom(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(0, 0), + applyToHorizontal: false, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta, true); + }, + scrollToTop: function scrollToTop(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(0, 1), + applyToHorizontal: false, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToLeft: function scrollToLeft(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(0, 0), + applyToHorizontal: true, + applyToVertical: false + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToRight: function scrollToRight(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(1, 0), + applyToHorizontal: true, + applyToVertical: false + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToTopLeft: function scrollToTopLeft(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(0, 1), + applyToHorizontal: true, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToTopRight: function scrollToTopRight(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(1, 1), + applyToHorizontal: true, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToBottomLeft: function scrollToBottomLeft(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(0, 0), + applyToHorizontal: true, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToBottomRight: function scrollToBottomRight(timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(1, 0), + applyToHorizontal: true, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToOffset: function scrollToOffset(offset, timeInSecond, attenuated) { + var maxScrollOffset = this.getMaxScrollOffset(); + var anchor = cc.v2(0, 0); + 0 === maxScrollOffset.x ? anchor.x = 0 : anchor.x = offset.x / maxScrollOffset.x; + 0 === maxScrollOffset.y ? anchor.y = 1 : anchor.y = (maxScrollOffset.y - offset.y) / maxScrollOffset.y; + this.scrollTo(anchor, timeInSecond, attenuated); + }, + getScrollOffset: function getScrollOffset() { + var topDelta = this._getContentTopBoundary() - this._topBoundary; + var leftDeta = this._getContentLeftBoundary() - this._leftBoundary; + return cc.v2(leftDeta, topDelta); + }, + getMaxScrollOffset: function getMaxScrollOffset() { + var viewSize = this._view.getContentSize(); + var contentSize = this.content.getContentSize(); + var horizontalMaximizeOffset = contentSize.width - viewSize.width; + var verticalMaximizeOffset = contentSize.height - viewSize.height; + horizontalMaximizeOffset = horizontalMaximizeOffset >= 0 ? horizontalMaximizeOffset : 0; + verticalMaximizeOffset = verticalMaximizeOffset >= 0 ? verticalMaximizeOffset : 0; + return cc.v2(horizontalMaximizeOffset, verticalMaximizeOffset); + }, + scrollToPercentHorizontal: function scrollToPercentHorizontal(percent, timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(percent, 0), + applyToHorizontal: true, + applyToVertical: false + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollTo: function scrollTo(anchor, timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(anchor), + applyToHorizontal: true, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + scrollToPercentVertical: function scrollToPercentVertical(percent, timeInSecond, attenuated) { + var moveDelta = this._calculateMovePercentDelta({ + anchor: cc.v2(0, percent), + applyToHorizontal: false, + applyToVertical: true + }); + timeInSecond ? this._startAutoScroll(moveDelta, timeInSecond, false !== attenuated) : this._moveContent(moveDelta); + }, + stopAutoScroll: function stopAutoScroll() { + this._autoScrolling = false; + this._autoScrollAccumulatedTime = this._autoScrollTotalTime; + }, + setContentPosition: function setContentPosition(position) { + if (position.fuzzyEquals(this.getContentPosition(), EPSILON)) return; + this.content.setPosition(position); + this._outOfBoundaryAmountDirty = true; + }, + getContentPosition: function getContentPosition() { + return this.content.getPosition(); + }, + isScrolling: function isScrolling() { + return this._scrolling; + }, + isAutoScrolling: function isAutoScrolling() { + return this._autoScrolling; + }, + _registerEvent: function _registerEvent() { + this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, true); + this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, true); + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, true); + this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, true); + this.node.on(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, true); + }, + _unregisterEvent: function _unregisterEvent() { + this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, true); + this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, true); + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, true); + this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, true); + this.node.off(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, true); + }, + _onMouseWheel: function _onMouseWheel(event, captureListeners) { + if (!this.enabledInHierarchy) return; + if (this._hasNestedViewGroup(event, captureListeners)) return; + var deltaMove = cc.v2(0, 0); + var wheelPrecision = -.1; + false, false; + this.vertical ? deltaMove = cc.v2(0, event.getScrollY() * wheelPrecision) : this.horizontal && (deltaMove = cc.v2(event.getScrollY() * wheelPrecision, 0)); + this._mouseWheelEventElapsedTime = 0; + this._processDeltaMove(deltaMove); + if (!this._stopMouseWheel) { + this._handlePressLogic(); + this.schedule(this._checkMouseWheel, 1 / 60); + this._stopMouseWheel = true; + } + this._stopPropagationIfTargetIsMe(event); + }, + _checkMouseWheel: function _checkMouseWheel(dt) { + var currentOutOfBoundary = this._getHowMuchOutOfBoundary(); + var maxElapsedTime = .1; + if (!currentOutOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON)) { + this._processInertiaScroll(); + this.unschedule(this._checkMouseWheel); + this._dispatchEvent("scroll-ended"); + this._stopMouseWheel = false; + return; + } + this._mouseWheelEventElapsedTime += dt; + if (this._mouseWheelEventElapsedTime > maxElapsedTime) { + this._onScrollBarTouchEnded(); + this.unschedule(this._checkMouseWheel); + this._dispatchEvent("scroll-ended"); + this._stopMouseWheel = false; + } + }, + _calculateMovePercentDelta: function _calculateMovePercentDelta(options) { + var anchor = options.anchor; + var applyToHorizontal = options.applyToHorizontal; + var applyToVertical = options.applyToVertical; + this._calculateBoundary(); + anchor = anchor.clampf(cc.v2(0, 0), cc.v2(1, 1)); + var scrollSize = this._view.getContentSize(); + var contentSize = this.content.getContentSize(); + var bottomDeta = this._getContentBottomBoundary() - this._bottomBoundary; + bottomDeta = -bottomDeta; + var leftDeta = this._getContentLeftBoundary() - this._leftBoundary; + leftDeta = -leftDeta; + var moveDelta = cc.v2(0, 0); + var totalScrollDelta = 0; + if (applyToHorizontal) { + totalScrollDelta = contentSize.width - scrollSize.width; + moveDelta.x = leftDeta - totalScrollDelta * anchor.x; + } + if (applyToVertical) { + totalScrollDelta = contentSize.height - scrollSize.height; + moveDelta.y = bottomDeta - totalScrollDelta * anchor.y; + } + return moveDelta; + }, + _moveContentToTopLeft: function _moveContentToTopLeft(scrollViewSize) { + var contentSize = this.content.getContentSize(); + var bottomDeta = this._getContentBottomBoundary() - this._bottomBoundary; + bottomDeta = -bottomDeta; + var moveDelta = cc.v2(0, 0); + var totalScrollDelta = 0; + var leftDeta = this._getContentLeftBoundary() - this._leftBoundary; + leftDeta = -leftDeta; + if (contentSize.height < scrollViewSize.height) { + totalScrollDelta = contentSize.height - scrollViewSize.height; + moveDelta.y = bottomDeta - totalScrollDelta; + } + if (contentSize.width < scrollViewSize.width) { + totalScrollDelta = contentSize.width - scrollViewSize.width; + moveDelta.x = leftDeta; + } + this._updateScrollBarState(); + this._moveContent(moveDelta); + this._adjustContentOutOfBoundary(); + }, + _calculateBoundary: function _calculateBoundary() { + if (this.content) { + var layout = this.content.getComponent(cc.Layout); + layout && layout.enabledInHierarchy && layout.updateLayout(); + var viewSize = this._view.getContentSize(); + var anchorX = viewSize.width * this._view.anchorX; + var anchorY = viewSize.height * this._view.anchorY; + this._leftBoundary = -anchorX; + this._bottomBoundary = -anchorY; + this._rightBoundary = this._leftBoundary + viewSize.width; + this._topBoundary = this._bottomBoundary + viewSize.height; + this._moveContentToTopLeft(viewSize); + } + }, + _hasNestedViewGroup: function _hasNestedViewGroup(event, captureListeners) { + if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return; + if (captureListeners) for (var i = 0; i < captureListeners.length; ++i) { + var item = captureListeners[i]; + if (this.node === item) { + if (event.target.getComponent(cc.ViewGroup)) return true; + return false; + } + if (item.getComponent(cc.ViewGroup)) return true; + } + return false; + }, + _stopPropagationIfTargetIsMe: function _stopPropagationIfTargetIsMe(event) { + event.eventPhase === cc.Event.AT_TARGET && event.target === this.node && event.stopPropagation(); + }, + _onTouchBegan: function _onTouchBegan(event, captureListeners) { + if (!this.enabledInHierarchy) return; + if (this._hasNestedViewGroup(event, captureListeners)) return; + var touch = event.touch; + this.content && this._handlePressLogic(touch); + this._touchMoved = false; + this._stopPropagationIfTargetIsMe(event); + }, + _onTouchMoved: function _onTouchMoved(event, captureListeners) { + if (!this.enabledInHierarchy) return; + if (this._hasNestedViewGroup(event, captureListeners)) return; + var touch = event.touch; + this.content && this._handleMoveLogic(touch); + if (!this.cancelInnerEvents) return; + var deltaMove = touch.getLocation().sub(touch.getStartLocation()); + if (deltaMove.mag() > 7 && !this._touchMoved && event.target !== this.node) { + var cancelEvent = new cc.Event.EventTouch(event.getTouches(), event.bubbles); + cancelEvent.type = cc.Node.EventType.TOUCH_CANCEL; + cancelEvent.touch = event.touch; + cancelEvent.simulate = true; + event.target.dispatchEvent(cancelEvent); + this._touchMoved = true; + } + this._stopPropagationIfTargetIsMe(event); + }, + _onTouchEnded: function _onTouchEnded(event, captureListeners) { + if (!this.enabledInHierarchy) return; + if (this._hasNestedViewGroup(event, captureListeners)) return; + this._dispatchEvent("touch-up"); + var touch = event.touch; + this.content && this._handleReleaseLogic(touch); + this._touchMoved ? event.stopPropagation() : this._stopPropagationIfTargetIsMe(event); + }, + _onTouchCancelled: function _onTouchCancelled(event, captureListeners) { + if (!this.enabledInHierarchy) return; + if (this._hasNestedViewGroup(event, captureListeners)) return; + if (!event.simulate) { + var touch = event.touch; + this.content && this._handleReleaseLogic(touch); + } + this._stopPropagationIfTargetIsMe(event); + }, + _processDeltaMove: function _processDeltaMove(deltaMove) { + this._scrollChildren(deltaMove); + this._gatherTouchMove(deltaMove); + }, + _getLocalAxisAlignDelta: function _getLocalAxisAlignDelta(touch) { + this.node.convertToNodeSpaceAR(touch.getLocation(), _tempPoint); + this.node.convertToNodeSpaceAR(touch.getPreviousLocation(), _tempPrevPoint); + return _tempPoint.sub(_tempPrevPoint); + }, + _handleMoveLogic: function _handleMoveLogic(touch) { + var deltaMove = this._getLocalAxisAlignDelta(touch); + this._processDeltaMove(deltaMove); + }, + _scrollChildren: function _scrollChildren(deltaMove) { + deltaMove = this._clampDelta(deltaMove); + var realMove = deltaMove; + var outOfBoundary; + if (this.elastic) { + outOfBoundary = this._getHowMuchOutOfBoundary(); + realMove.x *= 0 === outOfBoundary.x ? 1 : .5; + realMove.y *= 0 === outOfBoundary.y ? 1 : .5; + } + if (!this.elastic) { + outOfBoundary = this._getHowMuchOutOfBoundary(realMove); + realMove = realMove.add(outOfBoundary); + } + var scrollEventType = -1; + if (realMove.y > 0) { + var icBottomPos = this.content.y - this.content.anchorY * this.content.height; + icBottomPos + realMove.y >= this._bottomBoundary && (scrollEventType = "scroll-to-bottom"); + } else if (realMove.y < 0) { + var icTopPos = this.content.y - this.content.anchorY * this.content.height + this.content.height; + icTopPos + realMove.y <= this._topBoundary && (scrollEventType = "scroll-to-top"); + } + if (realMove.x < 0) { + var icRightPos = this.content.x - this.content.anchorX * this.content.width + this.content.width; + icRightPos + realMove.x <= this._rightBoundary && (scrollEventType = "scroll-to-right"); + } else if (realMove.x > 0) { + var icLeftPos = this.content.x - this.content.anchorX * this.content.width; + icLeftPos + realMove.x >= this._leftBoundary && (scrollEventType = "scroll-to-left"); + } + this._moveContent(realMove, false); + if (0 !== realMove.x || 0 !== realMove.y) { + if (!this._scrolling) { + this._scrolling = true; + this._dispatchEvent("scroll-began"); + } + this._dispatchEvent("scrolling"); + } + -1 !== scrollEventType && this._dispatchEvent(scrollEventType); + }, + _handlePressLogic: function _handlePressLogic() { + this._autoScrolling && this._dispatchEvent("scroll-ended"); + this._autoScrolling = false; + this._isBouncing = false; + this._touchMovePreviousTimestamp = getTimeInMilliseconds(); + this._touchMoveDisplacements.length = 0; + this._touchMoveTimeDeltas.length = 0; + this._onScrollBarTouchBegan(); + }, + _clampDelta: function _clampDelta(delta) { + var contentSize = this.content.getContentSize(); + var scrollViewSize = this._view.getContentSize(); + contentSize.width < scrollViewSize.width && (delta.x = 0); + contentSize.height < scrollViewSize.height && (delta.y = 0); + return delta; + }, + _gatherTouchMove: function _gatherTouchMove(delta) { + delta = this._clampDelta(delta); + while (this._touchMoveDisplacements.length >= NUMBER_OF_GATHERED_TOUCHES_FOR_MOVE_SPEED) { + this._touchMoveDisplacements.shift(); + this._touchMoveTimeDeltas.shift(); + } + this._touchMoveDisplacements.push(delta); + var timeStamp = getTimeInMilliseconds(); + this._touchMoveTimeDeltas.push((timeStamp - this._touchMovePreviousTimestamp) / 1e3); + this._touchMovePreviousTimestamp = timeStamp; + }, + _startBounceBackIfNeeded: function _startBounceBackIfNeeded() { + if (!this.elastic) return false; + var bounceBackAmount = this._getHowMuchOutOfBoundary(); + bounceBackAmount = this._clampDelta(bounceBackAmount); + if (bounceBackAmount.fuzzyEquals(cc.v2(0, 0), EPSILON)) return false; + var bounceBackTime = Math.max(this.bounceDuration, 0); + this._startAutoScroll(bounceBackAmount, bounceBackTime, true); + if (!this._isBouncing) { + bounceBackAmount.y > 0 && this._dispatchEvent("bounce-top"); + bounceBackAmount.y < 0 && this._dispatchEvent("bounce-bottom"); + bounceBackAmount.x > 0 && this._dispatchEvent("bounce-right"); + bounceBackAmount.x < 0 && this._dispatchEvent("bounce-left"); + this._isBouncing = true; + } + return true; + }, + _processInertiaScroll: function _processInertiaScroll() { + var bounceBackStarted = this._startBounceBackIfNeeded(); + if (!bounceBackStarted && this.inertia) { + var touchMoveVelocity = this._calculateTouchMoveVelocity(); + !touchMoveVelocity.fuzzyEquals(cc.v2(0, 0), EPSILON) && this.brake < 1 && this._startInertiaScroll(touchMoveVelocity); + } + this._onScrollBarTouchEnded(); + }, + _handleReleaseLogic: function _handleReleaseLogic(touch) { + var delta = this._getLocalAxisAlignDelta(touch); + this._gatherTouchMove(delta); + this._processInertiaScroll(); + if (this._scrolling) { + this._scrolling = false; + this._autoScrolling || this._dispatchEvent("scroll-ended"); + } + }, + _isOutOfBoundary: function _isOutOfBoundary() { + var outOfBoundary = this._getHowMuchOutOfBoundary(); + return !outOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON); + }, + _isNecessaryAutoScrollBrake: function _isNecessaryAutoScrollBrake() { + if (this._autoScrollBraking) return true; + if (this._isOutOfBoundary()) { + if (!this._autoScrollCurrentlyOutOfBoundary) { + this._autoScrollCurrentlyOutOfBoundary = true; + this._autoScrollBraking = true; + this._autoScrollBrakingStartPosition = this.getContentPosition(); + return true; + } + } else this._autoScrollCurrentlyOutOfBoundary = false; + return false; + }, + getScrollEndedEventTiming: function getScrollEndedEventTiming() { + return EPSILON; + }, + _processAutoScrolling: function _processAutoScrolling(dt) { + var isAutoScrollBrake = this._isNecessaryAutoScrollBrake(); + var brakingFactor = isAutoScrollBrake ? OUT_OF_BOUNDARY_BREAKING_FACTOR : 1; + this._autoScrollAccumulatedTime += dt * (1 / brakingFactor); + var percentage = Math.min(1, this._autoScrollAccumulatedTime / this._autoScrollTotalTime); + this._autoScrollAttenuate && (percentage = quintEaseOut(percentage)); + var newPosition = this._autoScrollStartPosition.add(this._autoScrollTargetDelta.mul(percentage)); + var reachedEnd = Math.abs(percentage - 1) <= EPSILON; + var fireEvent = Math.abs(percentage - 1) <= this.getScrollEndedEventTiming(); + if (fireEvent && !this._isScrollEndedWithThresholdEventFired) { + this._dispatchEvent("scroll-ended-with-threshold"); + this._isScrollEndedWithThresholdEventFired = true; + } + if (this.elastic) { + var brakeOffsetPosition = newPosition.sub(this._autoScrollBrakingStartPosition); + isAutoScrollBrake && (brakeOffsetPosition = brakeOffsetPosition.mul(brakingFactor)); + newPosition = this._autoScrollBrakingStartPosition.add(brakeOffsetPosition); + } else { + var moveDelta = newPosition.sub(this.getContentPosition()); + var outOfBoundary = this._getHowMuchOutOfBoundary(moveDelta); + if (!outOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON)) { + newPosition = newPosition.add(outOfBoundary); + reachedEnd = true; + } + } + reachedEnd && (this._autoScrolling = false); + var deltaMove = newPosition.sub(this.getContentPosition()); + this._moveContent(this._clampDelta(deltaMove), reachedEnd); + this._dispatchEvent("scrolling"); + if (!this._autoScrolling) { + this._isBouncing = false; + this._scrolling = false; + this._dispatchEvent("scroll-ended"); + } + }, + _startInertiaScroll: function _startInertiaScroll(touchMoveVelocity) { + var inertiaTotalMovement = touchMoveVelocity.mul(MOVEMENT_FACTOR); + this._startAttenuatingAutoScroll(inertiaTotalMovement, touchMoveVelocity); + }, + _calculateAttenuatedFactor: function _calculateAttenuatedFactor(distance) { + if (this.brake <= 0) return 1 - this.brake; + return (1 - this.brake) * (1 / (1 + 14e-6 * distance + distance * distance * 8e-9)); + }, + _startAttenuatingAutoScroll: function _startAttenuatingAutoScroll(deltaMove, initialVelocity) { + var time = this._calculateAutoScrollTimeByInitalSpeed(initialVelocity.mag()); + var targetDelta = deltaMove.normalize(); + var contentSize = this.content.getContentSize(); + var scrollviewSize = this._view.getContentSize(); + var totalMoveWidth = contentSize.width - scrollviewSize.width; + var totalMoveHeight = contentSize.height - scrollviewSize.height; + var attenuatedFactorX = this._calculateAttenuatedFactor(totalMoveWidth); + var attenuatedFactorY = this._calculateAttenuatedFactor(totalMoveHeight); + targetDelta = cc.v2(targetDelta.x * totalMoveWidth * (1 - this.brake) * attenuatedFactorX, targetDelta.y * totalMoveHeight * attenuatedFactorY * (1 - this.brake)); + var originalMoveLength = deltaMove.mag(); + var factor = targetDelta.mag() / originalMoveLength; + targetDelta = targetDelta.add(deltaMove); + if (this.brake > 0 && factor > 7) { + factor = Math.sqrt(factor); + targetDelta = deltaMove.mul(factor).add(deltaMove); + } + if (this.brake > 0 && factor > 3) { + factor = 3; + time *= factor; + } + 0 === this.brake && factor > 1 && (time *= factor); + this._startAutoScroll(targetDelta, time, true); + }, + _calculateAutoScrollTimeByInitalSpeed: function _calculateAutoScrollTimeByInitalSpeed(initalSpeed) { + return Math.sqrt(Math.sqrt(initalSpeed / 5)); + }, + _startAutoScroll: function _startAutoScroll(deltaMove, timeInSecond, attenuated) { + var adjustedDeltaMove = this._flattenVectorByDirection(deltaMove); + this._autoScrolling = true; + this._autoScrollTargetDelta = adjustedDeltaMove; + this._autoScrollAttenuate = attenuated; + this._autoScrollStartPosition = this.getContentPosition(); + this._autoScrollTotalTime = timeInSecond; + this._autoScrollAccumulatedTime = 0; + this._autoScrollBraking = false; + this._isScrollEndedWithThresholdEventFired = false; + this._autoScrollBrakingStartPosition = cc.v2(0, 0); + var currentOutOfBoundary = this._getHowMuchOutOfBoundary(); + currentOutOfBoundary.fuzzyEquals(cc.v2(0, 0), EPSILON) || (this._autoScrollCurrentlyOutOfBoundary = true); + }, + _calculateTouchMoveVelocity: function _calculateTouchMoveVelocity() { + var totalTime = 0; + totalTime = this._touchMoveTimeDeltas.reduce((function (a, b) { + return a + b; + }), totalTime); + if (totalTime <= 0 || totalTime >= .5) return cc.v2(0, 0); + var totalMovement = cc.v2(0, 0); + totalMovement = this._touchMoveDisplacements.reduce((function (a, b) { + return a.add(b); + }), totalMovement); + return cc.v2(totalMovement.x * (1 - this.brake) / totalTime, totalMovement.y * (1 - this.brake) / totalTime); + }, + _flattenVectorByDirection: function _flattenVectorByDirection(vector) { + var result = vector; + result.x = this.horizontal ? result.x : 0; + result.y = this.vertical ? result.y : 0; + return result; + }, + _moveContent: function _moveContent(deltaMove, canStartBounceBack) { + var adjustedMove = this._flattenVectorByDirection(deltaMove); + var newPosition = this.getContentPosition().add(adjustedMove); + this.setContentPosition(newPosition); + var outOfBoundary = this._getHowMuchOutOfBoundary(); + this._updateScrollBar(outOfBoundary); + this.elastic && canStartBounceBack && this._startBounceBackIfNeeded(); + }, + _getContentLeftBoundary: function _getContentLeftBoundary() { + var contentPos = this.getContentPosition(); + return contentPos.x - this.content.getAnchorPoint().x * this.content.getContentSize().width; + }, + _getContentRightBoundary: function _getContentRightBoundary() { + var contentSize = this.content.getContentSize(); + return this._getContentLeftBoundary() + contentSize.width; + }, + _getContentTopBoundary: function _getContentTopBoundary() { + var contentSize = this.content.getContentSize(); + return this._getContentBottomBoundary() + contentSize.height; + }, + _getContentBottomBoundary: function _getContentBottomBoundary() { + var contentPos = this.getContentPosition(); + return contentPos.y - this.content.getAnchorPoint().y * this.content.getContentSize().height; + }, + _getHowMuchOutOfBoundary: function _getHowMuchOutOfBoundary(addition) { + addition = addition || cc.v2(0, 0); + if (addition.fuzzyEquals(cc.v2(0, 0), EPSILON) && !this._outOfBoundaryAmountDirty) return this._outOfBoundaryAmount; + var outOfBoundaryAmount = cc.v2(0, 0); + this._getContentLeftBoundary() + addition.x > this._leftBoundary ? outOfBoundaryAmount.x = this._leftBoundary - (this._getContentLeftBoundary() + addition.x) : this._getContentRightBoundary() + addition.x < this._rightBoundary && (outOfBoundaryAmount.x = this._rightBoundary - (this._getContentRightBoundary() + addition.x)); + this._getContentTopBoundary() + addition.y < this._topBoundary ? outOfBoundaryAmount.y = this._topBoundary - (this._getContentTopBoundary() + addition.y) : this._getContentBottomBoundary() + addition.y > this._bottomBoundary && (outOfBoundaryAmount.y = this._bottomBoundary - (this._getContentBottomBoundary() + addition.y)); + if (addition.fuzzyEquals(cc.v2(0, 0), EPSILON)) { + this._outOfBoundaryAmount = outOfBoundaryAmount; + this._outOfBoundaryAmountDirty = false; + } + outOfBoundaryAmount = this._clampDelta(outOfBoundaryAmount); + return outOfBoundaryAmount; + }, + _updateScrollBarState: function _updateScrollBarState() { + if (!this.content) return; + var contentSize = this.content.getContentSize(); + var scrollViewSize = this._view.getContentSize(); + this.verticalScrollBar && (contentSize.height < scrollViewSize.height ? this.verticalScrollBar.hide() : this.verticalScrollBar.show()); + this.horizontalScrollBar && (contentSize.width < scrollViewSize.width ? this.horizontalScrollBar.hide() : this.horizontalScrollBar.show()); + }, + _updateScrollBar: function _updateScrollBar(outOfBoundary) { + this.horizontalScrollBar && this.horizontalScrollBar._onScroll(outOfBoundary); + this.verticalScrollBar && this.verticalScrollBar._onScroll(outOfBoundary); + }, + _onScrollBarTouchBegan: function _onScrollBarTouchBegan() { + this.horizontalScrollBar && this.horizontalScrollBar._onTouchBegan(); + this.verticalScrollBar && this.verticalScrollBar._onTouchBegan(); + }, + _onScrollBarTouchEnded: function _onScrollBarTouchEnded() { + this.horizontalScrollBar && this.horizontalScrollBar._onTouchEnded(); + this.verticalScrollBar && this.verticalScrollBar._onTouchEnded(); + }, + _dispatchEvent: function _dispatchEvent(event) { + if ("scroll-ended" === event) this._scrollEventEmitMask = 0; else if ("scroll-to-top" === event || "scroll-to-bottom" === event || "scroll-to-left" === event || "scroll-to-right" === event) { + var flag = 1 << eventMap[event]; + if (this._scrollEventEmitMask & flag) return; + this._scrollEventEmitMask |= flag; + } + cc.Component.EventHandler.emitEvents(this.scrollEvents, this, eventMap[event]); + this.node.emit(event, this); + }, + _adjustContentOutOfBoundary: function _adjustContentOutOfBoundary() { + this._outOfBoundaryAmountDirty = true; + if (this._isOutOfBoundary()) { + var outOfBoundary = this._getHowMuchOutOfBoundary(cc.v2(0, 0)); + var newPosition = this.getContentPosition().add(outOfBoundary); + if (this.content) { + this.content.setPosition(newPosition); + this._updateScrollBar(0); + } + } + }, + start: function start() { + this._calculateBoundary(); + this.content && cc.director.once(cc.Director.EVENT_BEFORE_DRAW, this._adjustContentOutOfBoundary, this); + }, + _hideScrollbar: function _hideScrollbar() { + this.horizontalScrollBar && this.horizontalScrollBar.hide(); + this.verticalScrollBar && this.verticalScrollBar.hide(); + }, + onDisable: function onDisable() { + true; + this._unregisterEvent(); + if (this.content) { + this.content.off(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this); + this.content.off(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this); + if (this._view) { + this._view.off(NodeEvent.POSITION_CHANGED, this._calculateBoundary, this); + this._view.off(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this); + this._view.off(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this); + } + } + this._hideScrollbar(); + this.stopAutoScroll(); + }, + onEnable: function onEnable() { + true; + this._registerEvent(); + if (this.content) { + this.content.on(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this); + this.content.on(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this); + if (this._view) { + this._view.on(NodeEvent.POSITION_CHANGED, this._calculateBoundary, this); + this._view.on(NodeEvent.SCALE_CHANGED, this._calculateBoundary, this); + this._view.on(NodeEvent.SIZE_CHANGED, this._calculateBoundary, this); + } + } + this._updateScrollBarState(); + }, + update: function update(dt) { + this._autoScrolling && this._processAutoScrolling(dt); + } + }); + cc.ScrollView = module.exports = ScrollView; + }), { + "../CCNode": 73, + "./CCViewGroup": 171 + }], + 165: [(function (require, module, exports) { + "use strict"; + var misc = require("../utils/misc"); + var Component = require("./CCComponent"); + var Direction = cc.Enum({ + Horizontal: 0, + Vertical: 1 + }); + var Slider = cc.Class({ + name: "cc.Slider", + extends: Component, + editor: false, + ctor: function ctor() { + this._offset = cc.v2(); + this._touchHandle = false; + this._dragging = false; + }, + properties: { + handle: { + default: null, + type: cc.Button, + tooltip: false, + notify: function notify() { + false; + } + }, + direction: { + default: Direction.Horizontal, + type: Direction, + tooltip: false + }, + progress: { + default: .5, + type: cc.Float, + range: [0, 1, .1], + slide: true, + tooltip: false, + notify: function notify() { + this._updateHandlePosition(); + } + }, + slideEvents: { + default: [], + type: cc.Component.EventHandler, + tooltip: false + } + }, + statics: { + Direction: Direction + }, + __preload: function __preload() { + this._updateHandlePosition(); + }, + onEnable: function onEnable() { + this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this); + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this); + if (this.handle && this.handle.isValid) { + this.handle.node.on(cc.Node.EventType.TOUCH_START, this._onHandleDragStart, this); + this.handle.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this); + this.handle.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + } + }, + onDisable: function onDisable() { + this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this); + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this); + if (this.handle && this.handle.isValid) { + this.handle.node.off(cc.Node.EventType.TOUCH_START, this._onHandleDragStart, this); + this.handle.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this); + this.handle.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + } + }, + _onHandleDragStart: function _onHandleDragStart(event) { + this._dragging = true; + this._touchHandle = true; + this._offset = this.handle.node.convertToNodeSpaceAR(event.touch.getLocation()); + event.stopPropagation(); + }, + _onTouchBegan: function _onTouchBegan(event) { + if (!this.handle) return; + this._dragging = true; + this._touchHandle || this._handleSliderLogic(event.touch); + event.stopPropagation(); + }, + _onTouchMoved: function _onTouchMoved(event) { + if (!this._dragging) return; + this._handleSliderLogic(event.touch); + event.stopPropagation(); + }, + _onTouchEnded: function _onTouchEnded(event) { + this._dragging = false; + this._touchHandle = false; + this._offset = cc.v2(); + event.stopPropagation(); + }, + _onTouchCancelled: function _onTouchCancelled(event) { + this._dragging = false; + event.stopPropagation(); + }, + _handleSliderLogic: function _handleSliderLogic(touch) { + this._updateProgress(touch); + this._emitSlideEvent(); + }, + _emitSlideEvent: function _emitSlideEvent() { + cc.Component.EventHandler.emitEvents(this.slideEvents, this); + this.node.emit("slide", this); + }, + _updateProgress: function _updateProgress(touch) { + if (!this.handle) return; + var node = this.node; + var localTouchPos = node.convertToNodeSpaceAR(touch.getLocation()); + this.direction === Direction.Horizontal ? this.progress = misc.clamp01((localTouchPos.x - this._offset.x + node.anchorX * node.width) / node.width) : this.progress = misc.clamp01((localTouchPos.y - this._offset.y + node.anchorY * node.height) / node.height); + }, + _updateHandlePosition: function _updateHandlePosition() { + if (!this.handle) return; + var handlelocalPos; + handlelocalPos = this.direction === Direction.Horizontal ? cc.v2(-this.node.width * this.node.anchorX + this.progress * this.node.width, 0) : cc.v2(0, -this.node.height * this.node.anchorY + this.progress * this.node.height); + var worldSpacePos = this.node.convertToWorldSpaceAR(handlelocalPos); + this.handle.node.position = this.handle.node.parent.convertToNodeSpaceAR(worldSpacePos); + } + }); + cc.Slider = module.exports = Slider; + }), { + "../utils/misc": 324, + "./CCComponent": 149 + }], + 166: [(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 + } + }, + 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 = this._spriteFrame && this._spriteFrame.getTexture(); + var material = this.getMaterial(0); + if (material) { + void 0 !== material.getDefine("USE_TEXTURE") && material.define("USE_TEXTURE", true); + void 0 !== material.getProperty("texture") && material.setProperty("texture", texture); + } + 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": 73, + "../utils/blend-func": 318, + "../utils/misc": 324, + "./CCRenderComponent": 160 + }], + 167: [(function (require, module, exports) { + "use strict"; + var ComponentType = cc.Enum({ + NONE: 0, + CHECKBOX: 1, + TEXT_ATLAS: 2, + SLIDER_BAR: 3, + LIST_VIEW: 4, + PAGE_VIEW: 5 + }); + var ListDirection = cc.Enum({ + VERTICAL: 0, + HORIZONTAL: 1 + }); + var VerticalAlign = cc.Enum({ + TOP: 0, + CENTER: 1, + BOTTOM: 2 + }); + var HorizontalAlign = cc.Enum({ + LEFT: 0, + CENTER: 1, + RIGHT: 2 + }); + var StudioComponent = cc.Class({ + name: "cc.StudioComponent", + extends: cc.Component, + editor: false, + properties: false, + statics: { + ComponentType: ComponentType, + ListDirection: ListDirection, + VerticalAlign: VerticalAlign, + HorizontalAlign: HorizontalAlign + } + }); + cc.StudioComponent = module.exports = StudioComponent; + var StudioWidget = cc.Class({ + name: "cc.StudioWidget", + extends: cc.Widget, + editor: false, + _validateTargetInDEV: function _validateTargetInDEV() { } + }); + cc.StudioWidget = module.exports = StudioWidget; + }), {}], + 168: [(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": 260, + "../utils/gray-sprite-state": 321, + "./CCButton": 147, + "./CCToggleGroup": 170 + }], + 169: [(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": 260 + }], + 170: [(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": 260 + }], + 171: [(function (require, module, exports) { + "use strict"; + var ViewGroup = cc.Class({ + name: "cc.ViewGroup", + extends: require("./CCComponent") + }); + cc.ViewGroup = module.exports = ViewGroup; + }), { + "./CCComponent": 149 + }], + 172: [(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": 133, + "./CCComponent": 149 + }], + 173: [(function (require, module, exports) { + "use strict"; + var macro = require("../../platform/CCMacro"); + var EditBoxImplBase = require("../editbox/EditBoxImplBase"); + var Label = require("../CCLabel"); + var Types = require("./types"); + var InputMode = Types.InputMode; + var InputFlag = Types.InputFlag; + var KeyboardReturnType = Types.KeyboardReturnType; + function capitalize(string) { + return string.replace(/(?:^|\s)\S/g, (function (a) { + return a.toUpperCase(); + })); + } + function capitalizeFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + } + var EditBox = cc.Class({ + name: "cc.EditBox", + extends: cc.Component, + editor: false, + properties: { + _string: "", + string: { + tooltip: false, + get: function get() { + return this._string; + }, + set: function set(value) { + value = "" + value; + this.maxLength >= 0 && value.length >= this.maxLength && (value = value.slice(0, this.maxLength)); + this._string = value; + this._updateString(value); + } + }, + textLabel: { + tooltip: false, + default: null, + type: Label, + notify: function notify(oldValue) { + if (this.textLabel && this.textLabel !== oldValue) { + this._updateTextLabel(); + this._updateLabels(); + } + } + }, + placeholderLabel: { + tooltip: false, + default: null, + type: Label, + notify: function notify(oldValue) { + if (this.placeholderLabel && this.placeholderLabel !== oldValue) { + this._updatePlaceholderLabel(); + this._updateLabels(); + } + } + }, + background: { + tooltip: false, + default: null, + type: cc.Sprite, + notify: function notify(oldValue) { + this.background && this.background !== oldValue && this._updateBackgroundSprite(); + } + }, + _N$backgroundImage: { + default: void 0, + type: cc.SpriteFrame + }, + backgroundImage: { + get: function get() { + if (!this.background) return null; + return this.background.spriteFrame; + }, + set: function set(value) { + this.background && (this.background.spriteFrame = value); + } + }, + returnType: { + default: KeyboardReturnType.DEFAULT, + tooltip: false, + displayName: "KeyboardReturnType", + type: KeyboardReturnType + }, + _N$returnType: { + default: void 0, + type: cc.Float + }, + inputFlag: { + tooltip: false, + default: InputFlag.DEFAULT, + type: InputFlag, + notify: function notify() { + this._updateString(this._string); + } + }, + inputMode: { + tooltip: false, + default: InputMode.ANY, + type: InputMode, + notify: function notify(oldValue) { + if (this.inputMode !== oldValue) { + this._updateTextLabel(); + this._updatePlaceholderLabel(); + } + } + }, + fontSize: { + get: function get() { + if (!this.textLabel) return 0; + return this.textLabel.fontSize; + }, + set: function set(value) { + this.textLabel && (this.textLabel.fontSize = value); + } + }, + _N$fontSize: { + default: void 0, + type: cc.Float + }, + lineHeight: { + get: function get() { + if (!this.textLabel) return 0; + return this.textLabel.lineHeight; + }, + set: function set(value) { + this.textLabel && (this.textLabel.lineHeight = value); + } + }, + _N$lineHeight: { + default: void 0, + type: cc.Float + }, + fontColor: { + get: function get() { + if (!this.textLabel) return cc.Color.BLACK; + return this.textLabel.node.color; + }, + set: function set(value) { + if (this.textLabel) { + this.textLabel.node.color = value; + this.textLabel.node.opacity = value.a; + } + } + }, + _N$fontColor: void 0, + placeholder: { + tooltip: false, + get: function get() { + if (!this.placeholderLabel) return ""; + return this.placeholderLabel.string; + }, + set: function set(value) { + this.placeholderLabel && (this.placeholderLabel.string = value); + } + }, + _N$placeholder: { + default: void 0, + type: cc.String + }, + placeholderFontSize: { + get: function get() { + if (!this.placeholderLabel) return 0; + return this.placeholderLabel.fontSize; + }, + set: function set(value) { + this.placeholderLabel && (this.placeholderLabel.fontSize = value); + } + }, + _N$placeholderFontSize: { + default: void 0, + type: cc.Float + }, + placeholderFontColor: { + get: function get() { + if (!this.placeholderLabel) return cc.Color.BLACK; + return this.placeholderLabel.node.color; + }, + set: function set(value) { + if (this.placeholderLabel) { + this.placeholderLabel.node.color = value; + this.placeholderLabel.node.opacity = value.a; + } + } + }, + _N$placeholderFontColor: void 0, + maxLength: { + tooltip: false, + default: 20 + }, + _N$maxLength: { + default: void 0, + type: cc.Float + }, + stayOnTop: { + default: false, + notify: function notify() { + cc.warn("editBox.stayOnTop is removed since v2.1."); + } + }, + _tabIndex: 0, + tabIndex: { + tooltip: false, + get: function get() { + return this._tabIndex; + }, + set: function set(value) { + if (this._tabIndex !== value) { + this._tabIndex = value; + this._impl && this._impl.setTabIndex(value); + } + } + }, + editingDidBegan: { + default: [], + type: cc.Component.EventHandler + }, + textChanged: { + default: [], + type: cc.Component.EventHandler + }, + editingDidEnded: { + default: [], + type: cc.Component.EventHandler + }, + editingReturn: { + default: [], + type: cc.Component.EventHandler + } + }, + statics: { + _ImplClass: EditBoxImplBase, + KeyboardReturnType: KeyboardReturnType, + InputFlag: InputFlag, + InputMode: InputMode + }, + _init: function _init() { + this._upgradeComp(); + this._isLabelVisible = true; + this.node.on(cc.Node.EventType.SIZE_CHANGED, this._syncSize, this); + var impl = this._impl = new EditBox._ImplClass(); + impl.init(this); + this._updateString(this._string); + this._syncSize(); + }, + _updateBackgroundSprite: function _updateBackgroundSprite() { + var background = this.background; + if (!background) { + var node = this.node.getChildByName("BACKGROUND_SPRITE"); + node || (node = new cc.Node("BACKGROUND_SPRITE")); + background = node.getComponent(cc.Sprite); + background || (background = node.addComponent(cc.Sprite)); + node.parent = this.node; + this.background = background; + } + background.type = cc.Sprite.Type.SLICED; + if (void 0 !== this._N$backgroundImage) { + background.spriteFrame = this._N$backgroundImage; + this._N$backgroundImage = void 0; + } + }, + _updateTextLabel: function _updateTextLabel() { + var textLabel = this.textLabel; + if (!textLabel) { + var node = this.node.getChildByName("TEXT_LABEL"); + node || (node = new cc.Node("TEXT_LABEL")); + textLabel = node.getComponent(Label); + textLabel || (textLabel = node.addComponent(Label)); + node.parent = this.node; + this.textLabel = textLabel; + } + textLabel.node.setAnchorPoint(0, 1); + textLabel.overflow = Label.Overflow.CLAMP; + if (this.inputMode === InputMode.ANY) { + textLabel.verticalAlign = macro.VerticalTextAlignment.TOP; + textLabel.enableWrapText = true; + } else { + textLabel.verticalAlign = macro.VerticalTextAlignment.CENTER; + textLabel.enableWrapText = false; + } + textLabel.string = this._updateLabelStringStyle(this._string); + if (void 0 !== this._N$fontColor) { + textLabel.node.color = this._N$fontColor; + textLabel.node.opacity = this._N$fontColor.a; + this._N$fontColor = void 0; + } + if (void 0 !== this._N$fontSize) { + textLabel.fontSize = this._N$fontSize; + this._N$fontSize = void 0; + } + if (void 0 !== this._N$lineHeight) { + textLabel.lineHeight = this._N$lineHeight; + this._N$lineHeight = void 0; + } + }, + _updatePlaceholderLabel: function _updatePlaceholderLabel() { + var placeholderLabel = this.placeholderLabel; + if (!placeholderLabel) { + var node = this.node.getChildByName("PLACEHOLDER_LABEL"); + node || (node = new cc.Node("PLACEHOLDER_LABEL")); + placeholderLabel = node.getComponent(Label); + placeholderLabel || (placeholderLabel = node.addComponent(Label)); + node.parent = this.node; + this.placeholderLabel = placeholderLabel; + } + placeholderLabel.node.setAnchorPoint(0, 1); + placeholderLabel.overflow = Label.Overflow.CLAMP; + if (this.inputMode === InputMode.ANY) { + placeholderLabel.verticalAlign = macro.VerticalTextAlignment.TOP; + placeholderLabel.enableWrapText = true; + } else { + placeholderLabel.verticalAlign = macro.VerticalTextAlignment.CENTER; + placeholderLabel.enableWrapText = false; + } + placeholderLabel.string = this.placeholder; + if (void 0 !== this._N$placeholderFontColor) { + placeholderLabel.node.color = this._N$placeholderFontColor; + placeholderLabel.node.opacity = this._N$placeholderFontColor.a; + this._N$placeholderFontColor = void 0; + } + if (void 0 !== this._N$placeholderFontSize) { + placeholderLabel.fontSize = this._N$placeholderFontSize; + this._N$placeholderFontSize = void 0; + } + }, + _upgradeComp: function _upgradeComp() { + if (void 0 !== this._N$returnType) { + this.returnType = this._N$returnType; + this._N$returnType = void 0; + } + if (void 0 !== this._N$maxLength) { + this.maxLength = this._N$maxLength; + this._N$maxLength = void 0; + } + void 0 !== this._N$backgroundImage && this._updateBackgroundSprite(); + void 0 === this._N$fontColor && void 0 === this._N$fontSize && void 0 === this._N$lineHeight || this._updateTextLabel(); + void 0 === this._N$placeholderFontColor && void 0 === this._N$placeholderFontSize || this._updatePlaceholderLabel(); + if (void 0 !== this._N$placeholder) { + this.placeholder = this._N$placeholder; + this._N$placeholder = void 0; + } + }, + _syncSize: function _syncSize() { + if (this._impl) { + var size = this.node.getContentSize(); + this._impl.setSize(size.width, size.height); + } + }, + _showLabels: function _showLabels() { + this._isLabelVisible = true; + this._updateLabels(); + }, + _hideLabels: function _hideLabels() { + this._isLabelVisible = false; + this.textLabel && (this.textLabel.node.active = false); + this.placeholderLabel && (this.placeholderLabel.node.active = false); + }, + _updateLabels: function _updateLabels() { + if (this._isLabelVisible) { + var content = this._string; + this.textLabel && (this.textLabel.node.active = "" !== content); + this.placeholderLabel && (this.placeholderLabel.node.active = "" === content); + } + }, + _updateString: function _updateString(text) { + var textLabel = this.textLabel; + if (!textLabel) return; + var displayText = text; + displayText && (displayText = this._updateLabelStringStyle(displayText)); + textLabel.string = displayText; + this._updateLabels(); + }, + _updateLabelStringStyle: function _updateLabelStringStyle(text, ignorePassword) { + var inputFlag = this.inputFlag; + if (ignorePassword || inputFlag !== InputFlag.PASSWORD) inputFlag === InputFlag.INITIAL_CAPS_ALL_CHARACTERS ? text = text.toUpperCase() : inputFlag === InputFlag.INITIAL_CAPS_WORD ? text = capitalize(text) : inputFlag === InputFlag.INITIAL_CAPS_SENTENCE && (text = capitalizeFirstLetter(text)); else { + var passwordString = ""; + var len = text.length; + for (var i = 0; i < len; ++i) passwordString += "\u25cf"; + text = passwordString; + } + return text; + }, + editBoxEditingDidBegan: function editBoxEditingDidBegan() { + cc.Component.EventHandler.emitEvents(this.editingDidBegan, this); + this.node.emit("editing-did-began", this); + }, + editBoxEditingDidEnded: function editBoxEditingDidEnded() { + cc.Component.EventHandler.emitEvents(this.editingDidEnded, this); + this.node.emit("editing-did-ended", this); + }, + editBoxTextChanged: function editBoxTextChanged(text) { + text = this._updateLabelStringStyle(text, true); + this.string = text; + cc.Component.EventHandler.emitEvents(this.textChanged, text, this); + this.node.emit("text-changed", this); + }, + editBoxEditingReturn: function editBoxEditingReturn() { + cc.Component.EventHandler.emitEvents(this.editingReturn, this); + this.node.emit("editing-return", this); + }, + onEnable: function onEnable() { + true; + this._registerEvent(); + this._impl && this._impl.enable(); + }, + onDisable: function onDisable() { + true; + this._unregisterEvent(); + this._impl && this._impl.disable(); + }, + onDestroy: function onDestroy() { + this._impl && this._impl.clear(); + }, + __preload: function __preload() { + this._init(); + }, + _registerEvent: function _registerEvent() { + this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + }, + _unregisterEvent: function _unregisterEvent() { + this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this); + this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this); + }, + _onTouchBegan: function _onTouchBegan(event) { + event.stopPropagation(); + }, + _onTouchCancel: function _onTouchCancel(event) { + event.stopPropagation(); + }, + _onTouchEnded: function _onTouchEnded(event) { + this._impl && this._impl.beginEditing(); + event.stopPropagation(); + }, + setFocus: function setFocus() { + cc.errorID(1400, "setFocus()", "focus()"); + this._impl && this._impl.setFocus(true); + }, + focus: function focus() { + this._impl && this._impl.setFocus(true); + }, + blur: function blur() { + this._impl && this._impl.setFocus(false); + }, + isFocused: function isFocused() { + return !!this._impl && this._impl.isFocused(); + }, + update: function update() { + this._impl && this._impl.update(); + } + }); + cc.EditBox = module.exports = EditBox; + cc.sys.isBrowser && require("./WebEditBoxImpl"); + }), { + "../../platform/CCMacro": 244, + "../CCLabel": 151, + "../editbox/EditBoxImplBase": 174, + "./WebEditBoxImpl": 175, + "./types": 177 + }], + 174: [(function (require, module, exports) { + "use strict"; + var EditBoxImplBase = cc.Class({ + ctor: function ctor() { + this._delegate = null; + this._editing = false; + }, + init: function init(delegate) { }, + enable: function enable() { }, + disable: function disable() { + this._editing && this.endEditing(); + }, + clear: function clear() { }, + update: function update() { }, + setTabIndex: function setTabIndex(index) { }, + setSize: function setSize(width, height) { }, + setFocus: function setFocus(value) { + value ? this.beginEditing() : this.endEditing(); + }, + isFocused: function isFocused() { + return this._editing; + }, + beginEditing: function beginEditing() { }, + endEditing: function endEditing() { } + }); + module.exports = EditBoxImplBase; + }), {}], + 175: [(function (require, module, exports) { + "use strict"; + var _mat = _interopRequireDefault(require("../../value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var utils = require("../../platform/utils"); + var macro = require("../../platform/CCMacro"); + var Types = require("./types"); + var Label = require("../CCLabel"); + var tabIndexUtil = require("./tabIndexUtil"); + var EditBox = cc.EditBox; + var js = cc.js; + var InputMode = Types.InputMode; + var InputFlag = Types.InputFlag; + var KeyboardReturnType = Types.KeyboardReturnType; + var polyfill = { + zoomInvalid: false + }; + cc.sys.OS_ANDROID !== cc.sys.os || cc.sys.browserType !== cc.sys.BROWSER_TYPE_SOUGOU && cc.sys.browserType !== cc.sys.BROWSER_TYPE_360 || (polyfill.zoomInvalid = true); + var DELAY_TIME = 800; + var SCROLLY = 100; + var LEFT_PADDING = 2; + var _domCount = 0; + var _vec3 = cc.v3(); + var _currentEditBoxImpl = null; + var _fullscreen = false; + var _autoResize = false; + var BaseClass = EditBox._ImplClass; + function WebEditBoxImpl() { + BaseClass.call(this); + this._domId = "EditBoxId_" + ++_domCount; + this._placeholderStyleSheet = null; + this._elem = null; + this._isTextArea = false; + this._worldMat = new _mat["default"](); + this._cameraMat = new _mat["default"](); + this._m00 = 0; + this._m01 = 0; + this._m04 = 0; + this._m05 = 0; + this._m12 = 0; + this._m13 = 0; + this._w = 0; + this._h = 0; + this._cacheViewportRect = cc.rect(0, 0, 0, 0); + this._inputMode = null; + this._inputFlag = null; + this._returnType = null; + this._eventListeners = {}; + this._textLabelFont = null; + this._textLabelFontSize = null; + this._textLabelFontColor = null; + this._textLabelAlign = null; + this._placeholderLabelFont = null; + this._placeholderLabelFontSize = null; + this._placeholderLabelFontColor = null; + this._placeholderLabelAlign = null; + this._placeholderLineHeight = null; + } + js.extend(WebEditBoxImpl, BaseClass); + EditBox._ImplClass = WebEditBoxImpl; + Object.assign(WebEditBoxImpl.prototype, { + init: function init(delegate) { + if (!delegate) return; + this._delegate = delegate; + delegate.inputMode === InputMode.ANY ? this._createTextArea() : this._createInput(); + tabIndexUtil.add(this); + this.setTabIndex(delegate.tabIndex); + this._initStyleSheet(); + this._registerEventListeners(); + this._addDomToGameContainer(); + _fullscreen = cc.view.isAutoFullScreenEnabled(); + _autoResize = cc.view._resizeWithBrowserSize; + }, + clear: function clear() { + this._removeEventListeners(); + this._removeDomFromGameContainer(); + tabIndexUtil.remove(this); + _currentEditBoxImpl === this && (_currentEditBoxImpl = null); + }, + update: function update() { + this._updateMatrix(); + }, + setTabIndex: function setTabIndex(index) { + this._elem.tabIndex = index; + tabIndexUtil.resort(); + }, + setSize: function setSize(width, height) { + var elem = this._elem; + elem.style.width = width + "px"; + elem.style.height = height + "px"; + }, + beginEditing: function beginEditing() { + _currentEditBoxImpl && _currentEditBoxImpl !== this && _currentEditBoxImpl.setFocus(false); + this._editing = true; + _currentEditBoxImpl = this; + this._delegate.editBoxEditingDidBegan(); + this._showDom(); + this._elem.focus(); + }, + endEditing: function endEditing() { + this._elem && this._elem.blur(); + }, + _createInput: function _createInput() { + this._isTextArea = false; + this._elem = document.createElement("input"); + }, + _createTextArea: function _createTextArea() { + this._isTextArea = true; + this._elem = document.createElement("textarea"); + }, + _addDomToGameContainer: function _addDomToGameContainer() { + cc.game.container.appendChild(this._elem); + document.head.appendChild(this._placeholderStyleSheet); + }, + _removeDomFromGameContainer: function _removeDomFromGameContainer() { + var hasElem = utils.contains(cc.game.container, this._elem); + hasElem && cc.game.container.removeChild(this._elem); + var hasStyleSheet = utils.contains(document.head, this._placeholderStyleSheet); + hasStyleSheet && document.head.removeChild(this._placeholderStyleSheet); + delete this._elem; + delete this._placeholderStyleSheet; + }, + _showDom: function _showDom() { + this._updateMaxLength(); + this._updateInputType(); + this._updateStyleSheet(); + this._elem.style.display = ""; + this._delegate._hideLabels(); + cc.sys.isMobile && this._showDomOnMobile(); + }, + _hideDom: function _hideDom() { + var elem = this._elem; + elem.style.display = "none"; + this._delegate._showLabels(); + cc.sys.isMobile && this._hideDomOnMobile(); + }, + _showDomOnMobile: function _showDomOnMobile() { + if (cc.sys.os !== cc.sys.OS_ANDROID) return; + if (_fullscreen) { + cc.view.enableAutoFullScreen(false); + cc.screen.exitFullScreen(); + } + _autoResize && cc.view.resizeWithBrowserSize(false); + this._adjustWindowScroll(); + }, + _hideDomOnMobile: function _hideDomOnMobile() { + if (cc.sys.os === cc.sys.OS_ANDROID) { + _autoResize && cc.view.resizeWithBrowserSize(true); + setTimeout((function () { + _currentEditBoxImpl || _fullscreen && cc.view.enableAutoFullScreen(true); + }), DELAY_TIME); + } + this._scrollBackWindow(); + }, + _adjustWindowScroll: function _adjustWindowScroll() { + var self = this; + setTimeout((function () { + window.scrollY < SCROLLY && self._elem.scrollIntoView({ + block: "start", + inline: "nearest", + behavior: "smooth" + }); + }), DELAY_TIME); + }, + _scrollBackWindow: function _scrollBackWindow() { + setTimeout((function () { + var sys = cc.sys; + if (sys.browserType === sys.BROWSER_TYPE_WECHAT && sys.os === sys.OS_IOS) { + window.top && window.top.scrollTo(0, 0); + return; + } + window.scrollTo(0, 0); + }), DELAY_TIME); + }, + _updateCameraMatrix: function _updateCameraMatrix() { + var node = this._delegate.node; + node.getWorldMatrix(this._worldMat); + var worldMat = this._worldMat; + var nodeContentSize = node._contentSize, nodeAnchorPoint = node._anchorPoint; + _vec3.x = -nodeAnchorPoint.x * nodeContentSize.width; + _vec3.y = -nodeAnchorPoint.y * nodeContentSize.height; + _mat["default"].transform(worldMat, worldMat, _vec3); + false; + var camera = cc.Camera.findCamera(node); + if (!camera) return false; + camera.getWorldToScreenMatrix2D(this._cameraMat); + _mat["default"].mul(this._cameraMat, this._cameraMat, worldMat); + return true; + }, + _updateMatrix: function _updateMatrix() { + if (false, !this._updateCameraMatrix()) return; + var cameraMatm = this._cameraMat.m; + var node = this._delegate.node; + var localView = cc.view; + if (this._m00 === cameraMatm[0] && this._m01 === cameraMatm[1] && this._m04 === cameraMatm[4] && this._m05 === cameraMatm[5] && this._m12 === cameraMatm[12] && this._m13 === cameraMatm[13] && this._w === node._contentSize.width && this._h === node._contentSize.height && this._cacheViewportRect.equals(localView._viewportRect)) return; + this._m00 = cameraMatm[0]; + this._m01 = cameraMatm[1]; + this._m04 = cameraMatm[4]; + this._m05 = cameraMatm[5]; + this._m12 = cameraMatm[12]; + this._m13 = cameraMatm[13]; + this._w = node._contentSize.width; + this._h = node._contentSize.height; + this._cacheViewportRect.set(localView._viewportRect); + var scaleX = localView._scaleX, scaleY = localView._scaleY, viewport = localView._viewportRect, dpr = localView._devicePixelRatio; + scaleX /= dpr; + scaleY /= dpr; + var container = cc.game.container; + var a = cameraMatm[0] * scaleX, b = cameraMatm[1], c = cameraMatm[4], d = cameraMatm[5] * scaleY; + var offsetX = container && container.style.paddingLeft && parseInt(container.style.paddingLeft); + offsetX += viewport.x / dpr; + var offsetY = container && container.style.paddingBottom && parseInt(container.style.paddingBottom); + offsetY += viewport.y / dpr; + var tx = cameraMatm[12] * scaleX + offsetX, ty = cameraMatm[13] * scaleY + offsetY; + if (polyfill.zoomInvalid) { + this.setSize(node.width * a, node.height * d); + a = 1; + d = 1; + } + var elem = this._elem; + var matrix = "matrix(" + a + "," + -b + "," + -c + "," + d + "," + tx + "," + -ty + ")"; + elem.style["transform"] = matrix; + elem.style["-webkit-transform"] = matrix; + elem.style["transform-origin"] = "0px 100% 0px"; + elem.style["-webkit-transform-origin"] = "0px 100% 0px"; + }, + _updateInputType: function _updateInputType() { + var delegate = this._delegate, inputMode = delegate.inputMode, inputFlag = delegate.inputFlag, returnType = delegate.returnType, elem = this._elem; + if (this._inputMode === inputMode && this._inputFlag === inputFlag && this._returnType === returnType) return; + this._inputMode = inputMode; + this._inputFlag = inputFlag; + this._returnType = returnType; + if (this._isTextArea) { + var _textTransform = "none"; + inputFlag === InputFlag.INITIAL_CAPS_ALL_CHARACTERS ? _textTransform = "uppercase" : inputFlag === InputFlag.INITIAL_CAPS_WORD && (_textTransform = "capitalize"); + elem.style.textTransform = _textTransform; + return; + } + if (inputFlag === InputFlag.PASSWORD) { + elem.type = "password"; + elem.style.textTransform = "none"; + return; + } + var type = elem.type; + if (inputMode === InputMode.EMAIL_ADDR) type = "email"; else if (inputMode === InputMode.NUMERIC || inputMode === InputMode.DECIMAL) type = "number"; else if (inputMode === InputMode.PHONE_NUMBER) { + type = "number"; + elem.pattern = "[0-9]*"; + } else if (inputMode === InputMode.URL) type = "url"; else { + type = "text"; + returnType === KeyboardReturnType.SEARCH && (type = "search"); + } + elem.type = type; + var textTransform = "none"; + inputFlag === InputFlag.INITIAL_CAPS_ALL_CHARACTERS ? textTransform = "uppercase" : inputFlag === InputFlag.INITIAL_CAPS_WORD && (textTransform = "capitalize"); + elem.style.textTransform = textTransform; + }, + _updateMaxLength: function _updateMaxLength() { + var maxLength = this._delegate.maxLength; + maxLength < 0 && (maxLength = 65535); + this._elem.maxLength = maxLength; + }, + _initStyleSheet: function _initStyleSheet() { + var elem = this._elem; + elem.style.display = "none"; + elem.style.border = 0; + elem.style.background = "transparent"; + elem.style.width = "100%"; + elem.style.height = "100%"; + elem.style.active = 0; + elem.style.outline = "medium"; + elem.style.padding = "0"; + elem.style.textTransform = "none"; + elem.style.position = "absolute"; + elem.style.bottom = "0px"; + elem.style.left = LEFT_PADDING + "px"; + elem.className = "cocosEditBox"; + elem.id = this._domId; + if (this._isTextArea) { + elem.style.resize = "none"; + elem.style.overflow_y = "scroll"; + } else { + elem.type = "text"; + elem.style["-moz-appearance"] = "textfield"; + } + this._placeholderStyleSheet = document.createElement("style"); + }, + _updateStyleSheet: function _updateStyleSheet() { + var delegate = this._delegate, elem = this._elem; + elem.value = delegate.string; + elem.placeholder = delegate.placeholder; + this._updateTextLabel(delegate.textLabel); + this._updatePlaceholderLabel(delegate.placeholderLabel); + }, + _updateTextLabel: function _updateTextLabel(textLabel) { + if (!textLabel) return; + var font = textLabel.font; + font = !font || font instanceof cc.BitmapFont ? textLabel.fontFamily : font._fontFamily; + var fontSize = textLabel.fontSize * textLabel.node.scaleY; + if (this._textLabelFont === font && this._textLabelFontSize === fontSize && this._textLabelFontColor === textLabel.fontColor && this._textLabelAlign === textLabel.horizontalAlign) return; + this._textLabelFont = font; + this._textLabelFontSize = fontSize; + this._textLabelFontColor = textLabel.fontColor; + this._textLabelAlign = textLabel.horizontalAlign; + var elem = this._elem; + elem.style.fontSize = fontSize + "px"; + elem.style.color = textLabel.node.color.toCSS(); + elem.style.fontFamily = font; + switch (textLabel.horizontalAlign) { + case Label.HorizontalAlign.LEFT: + elem.style.textAlign = "left"; + break; + + case Label.HorizontalAlign.CENTER: + elem.style.textAlign = "center"; + break; + + case Label.HorizontalAlign.RIGHT: + elem.style.textAlign = "right"; + } + }, + _updatePlaceholderLabel: function _updatePlaceholderLabel(placeholderLabel) { + if (!placeholderLabel) return; + var font = placeholderLabel.font; + font = !font || font instanceof cc.BitmapFont ? placeholderLabel.fontFamily : placeholderLabel.font._fontFamily; + var fontSize = placeholderLabel.fontSize * placeholderLabel.node.scaleY; + if (this._placeholderLabelFont === font && this._placeholderLabelFontSize === fontSize && this._placeholderLabelFontColor === placeholderLabel.fontColor && this._placeholderLabelAlign === placeholderLabel.horizontalAlign && this._placeholderLineHeight === placeholderLabel.fontSize) return; + this._placeholderLabelFont = font; + this._placeholderLabelFontSize = fontSize; + this._placeholderLabelFontColor = placeholderLabel.fontColor; + this._placeholderLabelAlign = placeholderLabel.horizontalAlign; + this._placeholderLineHeight = placeholderLabel.fontSize; + var styleEl = this._placeholderStyleSheet; + var fontColor = placeholderLabel.node.color.toCSS(); + var lineHeight = placeholderLabel.fontSize; + var horizontalAlign; + switch (placeholderLabel.horizontalAlign) { + case Label.HorizontalAlign.LEFT: + horizontalAlign = "left"; + break; + + case Label.HorizontalAlign.CENTER: + horizontalAlign = "center"; + break; + + case Label.HorizontalAlign.RIGHT: + horizontalAlign = "right"; + } + styleEl.innerHTML = "#" + this._domId + "::-webkit-input-placeholder,#" + this._domId + "::-moz-placeholder,#" + this._domId + ":-ms-input-placeholder{text-transform: initial; font-family: " + font + "; font-size: " + fontSize + "px; color: " + fontColor + "; line-height: " + lineHeight + "px; text-align: " + horizontalAlign + ";}"; + cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE && (styleEl.innerHTML += "#" + this._domId + "::-ms-clear{display: none;}"); + }, + _registerEventListeners: function _registerEventListeners() { + var impl = this, elem = this._elem, inputLock = false, cbs = this._eventListeners; + cbs.compositionStart = function () { + inputLock = true; + }; + cbs.compositionEnd = function () { + inputLock = false; + impl._delegate.editBoxTextChanged(elem.value); + }; + cbs.onInput = function () { + if (inputLock) return; + var maxLength = impl._delegate.maxLength; + maxLength >= 0 && (elem.value = elem.value.slice(0, maxLength)); + impl._delegate.editBoxTextChanged(elem.value); + }; + cbs.onClick = function (e) { + impl._editing && cc.sys.isMobile && impl._adjustWindowScroll(); + }; + cbs.onKeydown = function (e) { + if (e.keyCode === macro.KEY.enter) { + e.stopPropagation(); + impl._delegate.editBoxEditingReturn(); + impl._isTextArea || elem.blur(); + } else if (e.keyCode === macro.KEY.tab) { + e.stopPropagation(); + e.preventDefault(); + tabIndexUtil.next(impl); + } + }; + cbs.onBlur = function () { + cc.sys.isMobile && inputLock && cbs.compositionEnd(); + impl._editing = false; + _currentEditBoxImpl = null; + impl._hideDom(); + impl._delegate.editBoxEditingDidEnded(); + }; + elem.addEventListener("compositionstart", cbs.compositionStart); + elem.addEventListener("compositionend", cbs.compositionEnd); + elem.addEventListener("input", cbs.onInput); + elem.addEventListener("keydown", cbs.onKeydown); + elem.addEventListener("blur", cbs.onBlur); + elem.addEventListener("touchstart", cbs.onClick); + }, + _removeEventListeners: function _removeEventListeners() { + var elem = this._elem, cbs = this._eventListeners; + elem.removeEventListener("compositionstart", cbs.compositionStart); + elem.removeEventListener("compositionend", cbs.compositionEnd); + elem.removeEventListener("input", cbs.onInput); + elem.removeEventListener("keydown", cbs.onKeydown); + elem.removeEventListener("blur", cbs.onBlur); + elem.removeEventListener("touchstart", cbs.onClick); + cbs.compositionStart = null; + cbs.compositionEnd = null; + cbs.onInput = null; + cbs.onKeydown = null; + cbs.onBlur = null; + cbs.onClick = null; + } + }); + }), { + "../../platform/CCMacro": 244, + "../../platform/utils": 263, + "../../value-types/mat4": 341, + "../CCLabel": 151, + "./tabIndexUtil": 176, + "./types": 177 + }], + 176: [(function (require, module, exports) { + "use strict"; + var tabIndexUtil = { + _tabIndexList: [], + add: function add(editBoxImpl) { + var list = this._tabIndexList; + var index = list.indexOf(editBoxImpl); + -1 === index && list.push(editBoxImpl); + }, + remove: function remove(editBoxImpl) { + var list = this._tabIndexList; + var index = list.indexOf(editBoxImpl); + -1 !== index && list.splice(index, 1); + }, + resort: function resort() { + this._tabIndexList.sort((function (a, b) { + return a._delegate._tabIndex - b._delegate._tabIndex; + })); + }, + next: function next(editBoxImpl) { + var list = this._tabIndexList; + var index = list.indexOf(editBoxImpl); + editBoxImpl.setFocus(false); + if (-1 !== index) { + var nextImpl = list[index + 1]; + nextImpl && nextImpl._delegate._tabIndex >= 0 && nextImpl.setFocus(true); + } + } + }; + module.exports = tabIndexUtil; + }), {}], + 177: [(function (require, module, exports) { + "use strict"; + var KeyboardReturnType = cc.Enum({ + DEFAULT: 0, + DONE: 1, + SEND: 2, + SEARCH: 3, + GO: 4, + NEXT: 5 + }); + var InputMode = cc.Enum({ + ANY: 0, + EMAIL_ADDR: 1, + NUMERIC: 2, + PHONE_NUMBER: 3, + URL: 4, + DECIMAL: 5, + SINGLE_LINE: 6 + }); + var InputFlag = cc.Enum({ + PASSWORD: 0, + SENSITIVE: 1, + INITIAL_CAPS_WORD: 2, + INITIAL_CAPS_SENTENCE: 3, + INITIAL_CAPS_ALL_CHARACTERS: 4, + DEFAULT: 5 + }); + module.exports = { + KeyboardReturnType: KeyboardReturnType, + InputMode: InputMode, + InputFlag: InputFlag + }; + }), {}], + 178: [(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": 144, + "./CCAudioSource": 145, + "./CCBlockInputEvents": 146, + "./CCButton": 147, + "./CCCanvas": 148, + "./CCComponent": 149, + "./CCComponentEventHandler": 150, + "./CCLabel": 151, + "./CCLabelOutline": 152, + "./CCLabelShadow": 153, + "./CCLayout": 154, + "./CCMask": 155, + "./CCMotionStreak": 156, + "./CCPageView": 157, + "./CCPageViewIndicator": 158, + "./CCProgressBar": 159, + "./CCRichText": 161, + "./CCSafeArea": 162, + "./CCScrollBar": 163, + "./CCScrollView": 164, + "./CCSlider": 165, + "./CCSprite": 166, + "./CCToggle": 168, + "./CCToggleContainer": 169, + "./CCToggleGroup": 170, + "./CCWidget": 172, + "./SubContextView": void 0, + "./editbox/CCEditBox": 173, + "./missing-script": 179 + }], + 179: [(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; + }), {}], + 180: [(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": 187 + }], + 181: [(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": 260 + }], + 182: [(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": 260, + "./CCEventListener": 181 + }], + 183: [(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); + } + }; + }), {}], + 184: [(function (require, module, exports) { + "use strict"; + require("./CCEvent"); + require("./CCTouch"); + require("./CCEventListener"); + var eventManager = require("./CCEventManager"); + module.exports = eventManager; + false; + }), { + "./CCEvent": 180, + "./CCEventListener": 181, + "./CCEventManager": 182, + "./CCTouch": 183 + }], + 185: [(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": 252 + }], + 186: [(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": 252, + "../platform/js": 260 + }], + 187: [(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": 260 + }], + 188: [(function (require, module, exports) { + "use strict"; + require("./event"); + require("./event-listeners"); + require("./event-target"); + require("./system-event"); + }), { + "./event": 187, + "./event-listeners": 185, + "./event-target": 186, + "./system-event": 189 + }], + 189: [(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": 184, + "../event/event-target": 186, + "../platform/CCInputManager": 243 + }], + 190: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../value-types/vec3")); + var _mat = _interopRequireDefault(require("../value-types/mat3")); + var _enums = _interopRequireDefault(require("./enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _v3_tmp = new _vec["default"](); + var _v3_tmp2 = new _vec["default"](); + var _m3_tmp = new _mat["default"](); + var transform_extent_m4 = function transform_extent_m4(out, extent, m4) { + var _m3_tmpm = _m3_tmp.m, m4m = m4.m; + _m3_tmpm[0] = Math.abs(m4m[0]); + _m3_tmpm[1] = Math.abs(m4m[1]); + _m3_tmpm[2] = Math.abs(m4m[2]); + _m3_tmpm[3] = Math.abs(m4m[4]); + _m3_tmpm[4] = Math.abs(m4m[5]); + _m3_tmpm[5] = Math.abs(m4m[6]); + _m3_tmpm[6] = Math.abs(m4m[8]); + _m3_tmpm[7] = Math.abs(m4m[9]); + _m3_tmpm[8] = Math.abs(m4m[10]); + _vec["default"].transformMat3(out, extent, _m3_tmp); + }; + var aabb = (function () { + aabb.create = function create(px, py, pz, w, h, l) { + return new aabb(px, py, pz, w, h, l); + }; + aabb.clone = function clone(a) { + return new aabb(a.center.x, a.center.y, a.center.z, a.halfExtents.x, a.halfExtents.y, a.halfExtents.z); + }; + aabb.copy = function copy(out, a) { + _vec["default"].copy(out.center, a.center); + _vec["default"].copy(out.halfExtents, a.halfExtents); + return out; + }; + aabb.fromPoints = function fromPoints(out, minPos, maxPos) { + _vec["default"].scale(out.center, _vec["default"].add(_v3_tmp, minPos, maxPos), .5); + _vec["default"].scale(out.halfExtents, _vec["default"].sub(_v3_tmp2, maxPos, minPos), .5); + return out; + }; + aabb.set = function set(out, px, py, pz, w, h, l) { + _vec["default"].set(out.center, px, py, pz); + _vec["default"].set(out.halfExtents, w, h, l); + return out; + }; + function aabb(px, py, pz, w, h, l) { + this.center = void 0; + this.halfExtents = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_AABB; + this.center = new _vec["default"](px, py, pz); + this.halfExtents = new _vec["default"](w, h, l); + } + var _proto = aabb.prototype; + _proto.getBoundary = function getBoundary(minPos, maxPos) { + _vec["default"].sub(minPos, this.center, this.halfExtents); + _vec["default"].add(maxPos, this.center, this.halfExtents); + }; + _proto.transform = function transform(m, pos, rot, scale, out) { + out || (out = this); + _vec["default"].transformMat4(out.center, this.center, m); + transform_extent_m4(out.halfExtents, this.halfExtents, m); + }; + return aabb; + })(); + exports["default"] = aabb; + module.exports = exports["default"]; + }), { + "../value-types/mat3": 340, + "../value-types/vec3": 349, + "./enums": 192 + }], + 191: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.point_plane = point_plane; + exports.pt_point_plane = pt_point_plane; + exports.pt_point_aabb = pt_point_aabb; + exports.pt_point_obb = pt_point_obb; + var _valueTypes = require("../value-types"); + var X = new _valueTypes.Vec3(); + var Y = new _valueTypes.Vec3(); + var Z = new _valueTypes.Vec3(); + var d = new _valueTypes.Vec3(); + var min = new _valueTypes.Vec3(); + var max = new _valueTypes.Vec3(); + var u = new Array(3); + var e = new Array(3); + function point_plane(point, plane_) { + return _valueTypes.Vec3.dot(plane_.n, point) - plane_.d; + } + function pt_point_plane(out, point, plane_) { + var t = point_plane(point, plane_); + return _valueTypes.Vec3.subtract(out, point, _valueTypes.Vec3.multiplyScalar(out, plane_.n, t)); + } + function pt_point_aabb(out, point, aabb_) { + _valueTypes.Vec3.copy(out, point); + _valueTypes.Vec3.subtract(min, aabb_.center, aabb_.halfExtents); + _valueTypes.Vec3.add(max, aabb_.center, aabb_.halfExtents); + out.x = out.x < min.x ? min.x : out.x; + out.y = out.y < min.x ? min.y : out.y; + out.z = out.z < min.x ? min.z : out.z; + out.x = out.x > max.x ? max.x : out.x; + out.y = out.y > max.x ? max.y : out.y; + out.z = out.z > max.x ? max.z : out.z; + return out; + } + function pt_point_obb(out, point, obb_) { + var obbm = obb_.orientation.m; + _valueTypes.Vec3.set(X, obbm[0], obbm[1], obbm[2]); + _valueTypes.Vec3.set(Y, obbm[3], obbm[4], obbm[5]); + _valueTypes.Vec3.set(Z, obbm[6], obbm[7], obbm[8]); + u[0] = X; + u[1] = Y; + u[2] = Z; + e[0] = obb_.halfExtents.x; + e[1] = obb_.halfExtents.y; + e[2] = obb_.halfExtents.z; + _valueTypes.Vec3.subtract(d, point, obb_.center); + _valueTypes.Vec3.set(out, obb_.center.x, obb_.center.y, obb_.center.z); + for (var i = 0; i < 3; i++) { + var dist = _valueTypes.Vec3.dot(d, u[i]); + dist > e[i] && (dist = e[i]); + dist < -e[i] && (dist = -e[i]); + out.x += dist * u[i].x; + out.y += dist * u[i].y; + out.z += dist * u[i].z; + } + return out; + } + }), { + "../value-types": 339 + }], + 192: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _default = { + SHAPE_RAY: 1, + SHAPE_LINE: 2, + SHAPE_SPHERE: 4, + SHAPE_AABB: 8, + SHAPE_OBB: 16, + SHAPE_PLANE: 32, + SHAPE_TRIANGLE: 64, + SHAPE_FRUSTUM: 128, + SHAPE_FRUSTUM_ACCURATE: 256 + }; + exports["default"] = _default; + module.exports = exports["default"]; + }), {}], + 193: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../value-types"); + var _enums = _interopRequireDefault(require("./enums")); + var _plane = _interopRequireDefault(require("./plane")); + 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); + return Constructor; + } + var _v = new Array(8); + _v[0] = new _valueTypes.Vec3(1, 1, 1); + _v[1] = new _valueTypes.Vec3(-1, 1, 1); + _v[2] = new _valueTypes.Vec3(-1, -1, 1); + _v[3] = new _valueTypes.Vec3(1, -1, 1); + _v[4] = new _valueTypes.Vec3(1, 1, -1); + _v[5] = new _valueTypes.Vec3(-1, 1, -1); + _v[6] = new _valueTypes.Vec3(-1, -1, -1); + _v[7] = new _valueTypes.Vec3(1, -1, -1); + var frustum = (function () { + frustum.create = function create() { + return new frustum(); + }; + frustum.clone = function clone(f) { + return frustum.copy(new frustum(), f); + }; + frustum.copy = function copy(out, f) { + out._type = f._type; + for (var i = 0; i < 6; ++i) _plane["default"].copy(out.planes[i], f.planes[i]); + for (var _i = 0; _i < 8; ++_i) _valueTypes.Vec3.copy(out.vertices[_i], f.vertices[_i]); + return out; + }; + _createClass(frustum, [{ + key: "accurate", + set: function set(b) { + this._type = b ? _enums["default"].SHAPE_FRUSTUM_ACCURATE : _enums["default"].SHAPE_FRUSTUM; + } + }]); + function frustum() { + this.planes = void 0; + this.vertices = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_FRUSTUM; + this.planes = new Array(6); + for (var i = 0; i < 6; ++i) this.planes[i] = _plane["default"].create(0, 0, 0, 0); + this.vertices = new Array(8); + for (var _i2 = 0; _i2 < 8; ++_i2) this.vertices[_i2] = new _valueTypes.Vec3(); + } + var _proto = frustum.prototype; + _proto.update = function update(m, inv) { + var mm = m.m; + _valueTypes.Vec3.set(this.planes[0].n, mm[3] + mm[0], mm[7] + mm[4], mm[11] + mm[8]); + this.planes[0].d = -(mm[15] + mm[12]); + _valueTypes.Vec3.set(this.planes[1].n, mm[3] - mm[0], mm[7] - mm[4], mm[11] - mm[8]); + this.planes[1].d = -(mm[15] - mm[12]); + _valueTypes.Vec3.set(this.planes[2].n, mm[3] + mm[1], mm[7] + mm[5], mm[11] + mm[9]); + this.planes[2].d = -(mm[15] + mm[13]); + _valueTypes.Vec3.set(this.planes[3].n, mm[3] - mm[1], mm[7] - mm[5], mm[11] - mm[9]); + this.planes[3].d = -(mm[15] - mm[13]); + _valueTypes.Vec3.set(this.planes[4].n, mm[3] + mm[2], mm[7] + mm[6], mm[11] + mm[10]); + this.planes[4].d = -(mm[15] + mm[14]); + _valueTypes.Vec3.set(this.planes[5].n, mm[3] - mm[2], mm[7] - mm[6], mm[11] - mm[10]); + this.planes[5].d = -(mm[15] - mm[14]); + if (this._type !== _enums["default"].SHAPE_FRUSTUM_ACCURATE) return; + for (var i = 0; i < 6; i++) { + var pl = this.planes[i]; + var invDist = 1 / pl.n.length(); + _valueTypes.Vec3.multiplyScalar(pl.n, pl.n, invDist); + pl.d *= invDist; + } + for (var _i3 = 0; _i3 < 8; _i3++) _valueTypes.Vec3.transformMat4(this.vertices[_i3], _v[_i3], inv); + }; + _proto.transform = function transform(mat) { + if (this._type !== _enums["default"].SHAPE_FRUSTUM_ACCURATE) return; + for (var i = 0; i < 8; i++) _valueTypes.Vec3.transformMat4(this.vertices[i], this.vertices[i], mat); + _plane["default"].fromPoints(this.planes[0], this.vertices[1], this.vertices[5], this.vertices[6]); + _plane["default"].fromPoints(this.planes[1], this.vertices[3], this.vertices[7], this.vertices[4]); + _plane["default"].fromPoints(this.planes[2], this.vertices[6], this.vertices[7], this.vertices[3]); + _plane["default"].fromPoints(this.planes[3], this.vertices[0], this.vertices[4], this.vertices[5]); + _plane["default"].fromPoints(this.planes[4], this.vertices[2], this.vertices[3], this.vertices[0]); + _plane["default"].fromPoints(this.planes[0], this.vertices[7], this.vertices[6], this.vertices[5]); + }; + return frustum; + })(); + exports["default"] = frustum; + frustum.createOrtho = (function () { + var _temp_v3 = new _valueTypes.Vec3(); + return function (out, width, height, near, far, transform) { + var halfWidth = width / 2; + var halfHeight = height / 2; + _valueTypes.Vec3.set(_temp_v3, halfWidth, halfHeight, near); + _valueTypes.Vec3.transformMat4(out.vertices[0], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, -halfWidth, halfHeight, near); + _valueTypes.Vec3.transformMat4(out.vertices[1], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, -halfWidth, -halfHeight, near); + _valueTypes.Vec3.transformMat4(out.vertices[2], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, halfWidth, -halfHeight, near); + _valueTypes.Vec3.transformMat4(out.vertices[3], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, halfWidth, halfHeight, far); + _valueTypes.Vec3.transformMat4(out.vertices[4], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, -halfWidth, halfHeight, far); + _valueTypes.Vec3.transformMat4(out.vertices[5], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, -halfWidth, -halfHeight, far); + _valueTypes.Vec3.transformMat4(out.vertices[6], _temp_v3, transform); + _valueTypes.Vec3.set(_temp_v3, halfWidth, -halfHeight, far); + _valueTypes.Vec3.transformMat4(out.vertices[7], _temp_v3, transform); + _plane["default"].fromPoints(out.planes[0], out.vertices[1], out.vertices[6], out.vertices[5]); + _plane["default"].fromPoints(out.planes[1], out.vertices[3], out.vertices[4], out.vertices[7]); + _plane["default"].fromPoints(out.planes[2], out.vertices[6], out.vertices[3], out.vertices[7]); + _plane["default"].fromPoints(out.planes[3], out.vertices[0], out.vertices[5], out.vertices[4]); + _plane["default"].fromPoints(out.planes[4], out.vertices[2], out.vertices[0], out.vertices[3]); + _plane["default"].fromPoints(out.planes[0], out.vertices[7], out.vertices[5], out.vertices[6]); + }; + })(); + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./enums": 192, + "./plane": 198 + }], + 194: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + var _exportNames = { + enums: true, + Triangle: true, + Aabb: true, + Ray: true, + intersect: true, + Sphere: true, + Obb: true, + Frustum: true, + Line: true, + Plane: true + }; + exports.Plane = exports.Line = exports.Frustum = exports.Obb = exports.Sphere = exports.intersect = exports.Ray = exports.Aabb = exports.Triangle = exports.enums = void 0; + var _enums = _interopRequireDefault(require("./enums")); + exports.enums = _enums["default"]; + var _triangle = _interopRequireDefault(require("./triangle")); + exports.Triangle = _triangle["default"]; + var _aabb = _interopRequireDefault(require("./aabb")); + exports.Aabb = _aabb["default"]; + var _ray = _interopRequireDefault(require("./ray")); + exports.Ray = _ray["default"]; + var _intersect = _interopRequireDefault(require("./intersect")); + exports.intersect = _intersect["default"]; + var _sphere = _interopRequireDefault(require("./sphere")); + exports.Sphere = _sphere["default"]; + var _obb = _interopRequireDefault(require("./obb")); + exports.Obb = _obb["default"]; + var _frustum = _interopRequireDefault(require("./frustum")); + exports.Frustum = _frustum["default"]; + var _line = _interopRequireDefault(require("./line")); + exports.Line = _line["default"]; + var _plane = _interopRequireDefault(require("./plane")); + exports.Plane = _plane["default"]; + var _distance = require("./distance"); + Object.keys(_distance).forEach((function (key) { + if ("default" === key || "__esModule" === key) return; + if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; + if (key in exports && exports[key] === _distance[key]) return; + exports[key] = _distance[key]; + })); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + cc.geomUtils = module.exports; + }), { + "./aabb": 190, + "./distance": 191, + "./enums": 192, + "./frustum": 193, + "./intersect": 195, + "./line": 196, + "./obb": 197, + "./plane": 198, + "./ray": 199, + "./sphere": 200, + "./triangle": 201 + }], + 195: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _recyclePool = _interopRequireDefault(require("../../renderer/memop/recycle-pool")); + var _valueTypes = require("../value-types"); + var _aabb = _interopRequireDefault(require("./aabb")); + var distance = _interopRequireWildcard(require("./distance")); + var _enums = _interopRequireDefault(require("./enums")); + var _ray = _interopRequireDefault(require("./ray")); + var _triangle = _interopRequireDefault(require("./triangle")); + function _getRequireWildcardCache() { + if ("function" !== typeof WeakMap) return null; + var cache = new WeakMap(); + _getRequireWildcardCache = function _getRequireWildcardCache() { + return cache; + }; + return cache; + } + function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) return obj; + if (null === obj || "object" !== typeof obj && "function" !== typeof obj) return { + default: obj + }; + var cache = _getRequireWildcardCache(); + if (cache && cache.has(obj)) return cache.get(obj); + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (var key in obj) if (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; + } + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ray_mesh = (function () { + var tri = _triangle["default"].create(); + var minDist = Infinity; + function getVec3(out, data, idx, stride) { + _valueTypes.Vec3.set(out, data[idx * stride], data[idx * stride + 1], data[idx * stride + 2]); + } + return function (ray, mesh) { + minDist = Infinity; + var subMeshes = mesh._subMeshes; + for (var i = 0; i < subMeshes.length; i++) { + if (subMeshes[i]._primitiveType !== _gfx["default"].PT_TRIANGLES) continue; + var subData = mesh._subDatas[i] || mesh._subDatas[0]; + var posData = mesh._getAttrMeshData(i, _gfx["default"].ATTR_POSITION); + var iData = subData.getIData(Uint16Array); + var format = subData.vfm; + var fmt = format.element(_gfx["default"].ATTR_POSITION); + var num = fmt.num; + for (var _i = 0; _i < iData.length; _i += 3) { + getVec3(tri.a, posData, iData[_i], num); + getVec3(tri.b, posData, iData[_i + 1], num); + getVec3(tri.c, posData, iData[_i + 2], num); + var dist = ray_triangle(ray, tri); + dist > 0 && dist < minDist && (minDist = dist); + } + } + return minDist; + }; + })(); + var rayMesh = ray_mesh; + var ray_cast = (function () { + function traversal(node, cb) { + var children = node.children; + for (var i = children.length - 1; i >= 0; i--) { + var child = children[i]; + traversal(child, cb); + } + cb(node); + } + function cmp(a, b) { + return a.distance - b.distance; + } + function transformMat4Normal(out, a, m) { + var mm = m.m; + var x = a.x, y = a.y, z = a.z, rhw = mm[3] * x + mm[7] * y + mm[11] * z; + rhw = rhw ? 1 / rhw : 1; + out.x = (mm[0] * x + mm[4] * y + mm[8] * z) * rhw; + out.y = (mm[1] * x + mm[5] * y + mm[9] * z) * rhw; + out.z = (mm[2] * x + mm[6] * y + mm[10] * z) * rhw; + return out; + } + var resultsPool = new _recyclePool["default"](function () { + return { + distance: 0, + node: null + }; + }, 1); + var results = []; + var nodeAabb = _aabb["default"].create(); + var minPos = new _valueTypes.Vec3(); + var maxPos = new _valueTypes.Vec3(); + var modelRay = new _ray["default"](); + var m4_1 = cc.mat4(); + var m4_2 = cc.mat4(); + var d = new _valueTypes.Vec3(); + function distanceValid(distance) { + return distance > 0 && distance < Infinity; + } + return function (root, worldRay, handler, filter) { + resultsPool.reset(); + results.length = 0; + root = root || cc.director.getScene(); + traversal(root, (function (node) { + if (filter && !filter(node)) return; + _valueTypes.Mat4.invert(m4_2, node.getWorldMatrix(m4_1)); + _valueTypes.Vec3.transformMat4(modelRay.o, worldRay.o, m4_2); + _valueTypes.Vec3.normalize(modelRay.d, transformMat4Normal(modelRay.d, worldRay.d, m4_2)); + var distance = Infinity; + var component = node._renderComponent; + if (component instanceof cc.MeshRenderer) distance = ray_aabb(modelRay, component._boundingBox); else if (node.width && node.height) { + _valueTypes.Vec3.set(minPos, -node.width * node.anchorX, -node.height * node.anchorY, node.z); + _valueTypes.Vec3.set(maxPos, node.width * (1 - node.anchorX), node.height * (1 - node.anchorY), node.z); + _aabb["default"].fromPoints(nodeAabb, minPos, maxPos); + distance = ray_aabb(modelRay, nodeAabb); + } + if (!distanceValid(distance)) return; + handler && (distance = handler(modelRay, node, distance)); + if (distanceValid(distance)) { + _valueTypes.Vec3.scale(d, modelRay.d, distance); + transformMat4Normal(d, d, m4_1); + var res = resultsPool.add(); + res.node = node; + res.distance = _valueTypes.Vec3.mag(d); + results.push(res); + } + })); + results.sort(cmp); + return results; + }; + })(); + var raycast = ray_cast; + var ray_plane = (function () { + var pt = new _valueTypes.Vec3(0, 0, 0); + return function (ray, plane) { + var denom = _valueTypes.Vec3.dot(ray.d, plane.n); + if (Math.abs(denom) < Number.EPSILON) return 0; + _valueTypes.Vec3.multiplyScalar(pt, plane.n, plane.d); + var t = _valueTypes.Vec3.dot(_valueTypes.Vec3.subtract(pt, pt, ray.o), plane.n) / denom; + if (t < 0) return 0; + return t; + }; + })(); + var line_plane = (function () { + var ab = new _valueTypes.Vec3(0, 0, 0); + return function (line, plane) { + _valueTypes.Vec3.subtract(ab, line.e, line.s); + var t = (plane.d - _valueTypes.Vec3.dot(line.s, plane.n)) / _valueTypes.Vec3.dot(ab, plane.n); + if (t < 0 || t > 1) return 0; + return t; + }; + })(); + var ray_triangle = (function () { + var ab = new _valueTypes.Vec3(0, 0, 0); + var ac = new _valueTypes.Vec3(0, 0, 0); + var pvec = new _valueTypes.Vec3(0, 0, 0); + var tvec = new _valueTypes.Vec3(0, 0, 0); + var qvec = new _valueTypes.Vec3(0, 0, 0); + return function (ray, triangle, doubleSided) { + _valueTypes.Vec3.subtract(ab, triangle.b, triangle.a); + _valueTypes.Vec3.subtract(ac, triangle.c, triangle.a); + _valueTypes.Vec3.cross(pvec, ray.d, ac); + var det = _valueTypes.Vec3.dot(ab, pvec); + if (det < Number.EPSILON && (!doubleSided || det > -Number.EPSILON)) return 0; + var inv_det = 1 / det; + _valueTypes.Vec3.subtract(tvec, ray.o, triangle.a); + var u = _valueTypes.Vec3.dot(tvec, pvec) * inv_det; + if (u < 0 || u > 1) return 0; + _valueTypes.Vec3.cross(qvec, tvec, ab); + var v = _valueTypes.Vec3.dot(ray.d, qvec) * inv_det; + if (v < 0 || u + v > 1) return 0; + var t = _valueTypes.Vec3.dot(ac, qvec) * inv_det; + return t < 0 ? 0 : t; + }; + })(); + var rayTriangle = ray_triangle; + var line_triangle = (function () { + var ab = new _valueTypes.Vec3(0, 0, 0); + var ac = new _valueTypes.Vec3(0, 0, 0); + var qp = new _valueTypes.Vec3(0, 0, 0); + var ap = new _valueTypes.Vec3(0, 0, 0); + var n = new _valueTypes.Vec3(0, 0, 0); + var e = new _valueTypes.Vec3(0, 0, 0); + return function (line, triangle, outPt) { + _valueTypes.Vec3.subtract(ab, triangle.b, triangle.a); + _valueTypes.Vec3.subtract(ac, triangle.c, triangle.a); + _valueTypes.Vec3.subtract(qp, line.s, line.e); + _valueTypes.Vec3.cross(n, ab, ac); + var det = _valueTypes.Vec3.dot(qp, n); + if (det <= 0) return 0; + _valueTypes.Vec3.subtract(ap, line.s, triangle.a); + var t = _valueTypes.Vec3.dot(ap, n); + if (t < 0 || t > det) return 0; + _valueTypes.Vec3.cross(e, qp, ap); + var v = _valueTypes.Vec3.dot(ac, e); + if (v < 0 || v > det) return 0; + var w = -_valueTypes.Vec3.dot(ab, e); + if (w < 0 || v + w > det) return 0; + if (outPt) { + var invDet = 1 / det; + v *= invDet; + w *= invDet; + var u = 1 - v - w; + _valueTypes.Vec3.set(outPt, triangle.a.x * u + triangle.b.x * v + triangle.c.x * w, triangle.a.y * u + triangle.b.y * v + triangle.c.y * w, triangle.a.z * u + triangle.b.z * v + triangle.c.z * w); + } + return 1; + }; + })(); + var line_quad = (function () { + var pq = new _valueTypes.Vec3(0, 0, 0); + var pa = new _valueTypes.Vec3(0, 0, 0); + var pb = new _valueTypes.Vec3(0, 0, 0); + var pc = new _valueTypes.Vec3(0, 0, 0); + var pd = new _valueTypes.Vec3(0, 0, 0); + var m = new _valueTypes.Vec3(0, 0, 0); + var tmp = new _valueTypes.Vec3(0, 0, 0); + return function (p, q, a, b, c, d, outPt) { + _valueTypes.Vec3.subtract(pq, q, p); + _valueTypes.Vec3.subtract(pa, a, p); + _valueTypes.Vec3.subtract(pb, b, p); + _valueTypes.Vec3.subtract(pc, c, p); + _valueTypes.Vec3.cross(m, pc, pq); + var v = _valueTypes.Vec3.dot(pa, m); + if (v >= 0) { + var u = -_valueTypes.Vec3.dot(pb, m); + if (u < 0) return 0; + var w = _valueTypes.Vec3.dot(_valueTypes.Vec3.cross(tmp, pq, pb), pa); + if (w < 0) return 0; + if (outPt) { + var denom = 1 / (u + v + w); + u *= denom; + v *= denom; + w *= denom; + _valueTypes.Vec3.set(outPt, a.x * u + b.x * v + c.x * w, a.y * u + b.y * v + c.y * w, a.z * u + b.z * v + c.z * w); + } + } else { + _valueTypes.Vec3.subtract(pd, d, p); + var _u = _valueTypes.Vec3.dot(pd, m); + if (_u < 0) return 0; + var _w = _valueTypes.Vec3.dot(_valueTypes.Vec3.cross(tmp, pq, pa), pd); + if (_w < 0) return 0; + if (outPt) { + v = -v; + var _denom = 1 / (_u + v + _w); + _u *= _denom; + v *= _denom; + _w *= _denom; + _valueTypes.Vec3.set(outPt, a.x * _u + d.x * v + c.x * _w, a.y * _u + d.y * v + c.y * _w, a.z * _u + d.z * v + c.z * _w); + } + } + return 1; + }; + })(); + var ray_sphere = (function () { + var e = new _valueTypes.Vec3(0, 0, 0); + return function (ray, sphere) { + var r = sphere.radius; + var c = sphere.center; + var o = ray.o; + var d = ray.d; + var rSq = r * r; + _valueTypes.Vec3.subtract(e, c, o); + var eSq = e.lengthSqr(); + var aLength = _valueTypes.Vec3.dot(e, d); + var fSq = rSq - (eSq - aLength * aLength); + if (fSq < 0) return 0; + var f = Math.sqrt(fSq); + var t = eSq < rSq ? aLength + f : aLength - f; + if (t < 0) return 0; + return t; + }; + })(); + var ray_aabb = (function () { + var min = new _valueTypes.Vec3(); + var max = new _valueTypes.Vec3(); + return function (ray, aabb) { + var o = ray.o, d = ray.d; + var ix = 1 / d.x, iy = 1 / d.y, iz = 1 / d.z; + _valueTypes.Vec3.subtract(min, aabb.center, aabb.halfExtents); + _valueTypes.Vec3.add(max, aabb.center, aabb.halfExtents); + var t1 = (min.x - o.x) * ix; + var t2 = (max.x - o.x) * ix; + var t3 = (min.y - o.y) * iy; + var t4 = (max.y - o.y) * iy; + var t5 = (min.z - o.z) * iz; + var t6 = (max.z - o.z) * iz; + var tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)), Math.min(t5, t6)); + var tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)), Math.max(t5, t6)); + if (tmax < 0 || tmin > tmax) return 0; + return tmin; + }; + })(); + var rayAabb = ray_aabb; + var ray_obb = (function () { + var center = new _valueTypes.Vec3(); + var o = new _valueTypes.Vec3(); + var d = new _valueTypes.Vec3(); + var X = new _valueTypes.Vec3(); + var Y = new _valueTypes.Vec3(); + var Z = new _valueTypes.Vec3(); + var p = new _valueTypes.Vec3(); + var size = new Array(3); + var f = new Array(3); + var e = new Array(3); + var t = new Array(6); + return function (ray, obb) { + size[0] = obb.halfExtents.x; + size[1] = obb.halfExtents.y; + size[2] = obb.halfExtents.z; + center = obb.center; + o = ray.o; + d = ray.d; + var obbm = obb.orientation.m; + _valueTypes.Vec3.set(X, obbm[0], obbm[1], obbm[2]); + _valueTypes.Vec3.set(Y, obbm[3], obbm[4], obbm[5]); + _valueTypes.Vec3.set(Z, obbm[6], obbm[7], obbm[8]); + _valueTypes.Vec3.subtract(p, center, o); + f[0] = _valueTypes.Vec3.dot(X, d); + f[1] = _valueTypes.Vec3.dot(Y, d); + f[2] = _valueTypes.Vec3.dot(Z, d); + e[0] = _valueTypes.Vec3.dot(X, p); + e[1] = _valueTypes.Vec3.dot(Y, p); + e[2] = _valueTypes.Vec3.dot(Z, p); + for (var i = 0; i < 3; ++i) { + if (0 === f[i]) { + if (-e[i] - size[i] > 0 || -e[i] + size[i] < 0) return 0; + f[i] = 1e-7; + } + t[2 * i + 0] = (e[i] + size[i]) / f[i]; + t[2 * i + 1] = (e[i] - size[i]) / f[i]; + } + var tmin = Math.max(Math.max(Math.min(t[0], t[1]), Math.min(t[2], t[3])), Math.min(t[4], t[5])); + var tmax = Math.min(Math.min(Math.max(t[0], t[1]), Math.max(t[2], t[3])), Math.max(t[4], t[5])); + if (tmax < 0 || tmin > tmax || tmin < 0) return 0; + return tmin; + }; + })(); + var aabb_aabb = (function () { + var aMin = new _valueTypes.Vec3(); + var aMax = new _valueTypes.Vec3(); + var bMin = new _valueTypes.Vec3(); + var bMax = new _valueTypes.Vec3(); + return function (aabb1, aabb2) { + _valueTypes.Vec3.subtract(aMin, aabb1.center, aabb1.halfExtents); + _valueTypes.Vec3.add(aMax, aabb1.center, aabb1.halfExtents); + _valueTypes.Vec3.subtract(bMin, aabb2.center, aabb2.halfExtents); + _valueTypes.Vec3.add(bMax, aabb2.center, aabb2.halfExtents); + return aMin.x <= bMax.x && aMax.x >= bMin.x && aMin.y <= bMax.y && aMax.y >= bMin.y && aMin.z <= bMax.z && aMax.z >= bMin.z; + }; + })(); + function getAABBVertices(min, max, out) { + _valueTypes.Vec3.set(out[0], min.x, max.y, max.z); + _valueTypes.Vec3.set(out[1], min.x, max.y, min.z); + _valueTypes.Vec3.set(out[2], min.x, min.y, max.z); + _valueTypes.Vec3.set(out[3], min.x, min.y, min.z); + _valueTypes.Vec3.set(out[4], max.x, max.y, max.z); + _valueTypes.Vec3.set(out[5], max.x, max.y, min.z); + _valueTypes.Vec3.set(out[6], max.x, min.y, max.z); + _valueTypes.Vec3.set(out[7], max.x, min.y, min.z); + } + function getOBBVertices(c, e, a1, a2, a3, out) { + _valueTypes.Vec3.set(out[0], c.x + a1.x * e.x + a2.x * e.y + a3.x * e.z, c.y + a1.y * e.x + a2.y * e.y + a3.y * e.z, c.z + a1.z * e.x + a2.z * e.y + a3.z * e.z); + _valueTypes.Vec3.set(out[1], c.x - a1.x * e.x + a2.x * e.y + a3.x * e.z, c.y - a1.y * e.x + a2.y * e.y + a3.y * e.z, c.z - a1.z * e.x + a2.z * e.y + a3.z * e.z); + _valueTypes.Vec3.set(out[2], c.x + a1.x * e.x - a2.x * e.y + a3.x * e.z, c.y + a1.y * e.x - a2.y * e.y + a3.y * e.z, c.z + a1.z * e.x - a2.z * e.y + a3.z * e.z); + _valueTypes.Vec3.set(out[3], c.x + a1.x * e.x + a2.x * e.y - a3.x * e.z, c.y + a1.y * e.x + a2.y * e.y - a3.y * e.z, c.z + a1.z * e.x + a2.z * e.y - a3.z * e.z); + _valueTypes.Vec3.set(out[4], c.x - a1.x * e.x - a2.x * e.y - a3.x * e.z, c.y - a1.y * e.x - a2.y * e.y - a3.y * e.z, c.z - a1.z * e.x - a2.z * e.y - a3.z * e.z); + _valueTypes.Vec3.set(out[5], c.x + a1.x * e.x - a2.x * e.y - a3.x * e.z, c.y + a1.y * e.x - a2.y * e.y - a3.y * e.z, c.z + a1.z * e.x - a2.z * e.y - a3.z * e.z); + _valueTypes.Vec3.set(out[6], c.x - a1.x * e.x + a2.x * e.y - a3.x * e.z, c.y - a1.y * e.x + a2.y * e.y - a3.y * e.z, c.z - a1.z * e.x + a2.z * e.y - a3.z * e.z); + _valueTypes.Vec3.set(out[7], c.x - a1.x * e.x - a2.x * e.y + a3.x * e.z, c.y - a1.y * e.x - a2.y * e.y + a3.y * e.z, c.z - a1.z * e.x - a2.z * e.y + a3.z * e.z); + } + function getInterval(vertices, axis) { + var min = _valueTypes.Vec3.dot(axis, vertices[0]), max = min; + for (var i = 1; i < 8; ++i) { + var projection = _valueTypes.Vec3.dot(axis, vertices[i]); + min = projection < min ? projection : min; + max = projection > max ? projection : max; + } + return [min, max]; + } + var aabb_obb = (function () { + var test = new Array(15); + for (var i = 0; i < 15; i++) test[i] = new _valueTypes.Vec3(0, 0, 0); + var vertices = new Array(8); + var vertices2 = new Array(8); + for (var _i2 = 0; _i2 < 8; _i2++) { + vertices[_i2] = new _valueTypes.Vec3(0, 0, 0); + vertices2[_i2] = new _valueTypes.Vec3(0, 0, 0); + } + var min = new _valueTypes.Vec3(); + var max = new _valueTypes.Vec3(); + return function (aabb, obb) { + var obbm = obb.orientation.m; + _valueTypes.Vec3.set(test[0], 1, 0, 0); + _valueTypes.Vec3.set(test[1], 0, 1, 0); + _valueTypes.Vec3.set(test[2], 0, 0, 1); + _valueTypes.Vec3.set(test[3], obbm[0], obbm[1], obbm[2]); + _valueTypes.Vec3.set(test[4], obbm[3], obbm[4], obbm[5]); + _valueTypes.Vec3.set(test[5], obbm[6], obbm[7], obbm[8]); + for (var _i3 = 0; _i3 < 3; ++_i3) { + _valueTypes.Vec3.cross(test[6 + 3 * _i3 + 0], test[_i3], test[0]); + _valueTypes.Vec3.cross(test[6 + 3 * _i3 + 1], test[_i3], test[1]); + _valueTypes.Vec3.cross(test[6 + 3 * _i3 + 1], test[_i3], test[2]); + } + _valueTypes.Vec3.subtract(min, aabb.center, aabb.halfExtents); + _valueTypes.Vec3.add(max, aabb.center, aabb.halfExtents); + getAABBVertices(min, max, vertices); + getOBBVertices(obb.center, obb.halfExtents, test[3], test[4], test[5], vertices2); + for (var j = 0; j < 15; ++j) { + var a = getInterval(vertices, test[j]); + var b = getInterval(vertices2, test[j]); + if (b[0] > a[1] || a[0] > b[1]) return 0; + } + return 1; + }; + })(); + var aabb_plane = function aabb_plane(aabb, plane) { + var r = aabb.halfExtents.x * Math.abs(plane.n.x) + aabb.halfExtents.y * Math.abs(plane.n.y) + aabb.halfExtents.z * Math.abs(plane.n.z); + var dot = _valueTypes.Vec3.dot(plane.n, aabb.center); + if (dot + r < plane.d) return -1; + if (dot - r > plane.d) return 0; + return 1; + }; + var aabb_frustum = function aabb_frustum(aabb, frustum) { + for (var i = 0; i < frustum.planes.length; i++) if (-1 === aabb_plane(aabb, frustum.planes[i])) return 0; + return 1; + }; + var aabb_frustum_accurate = (function () { + var tmp = new Array(8); + var out1 = 0, out2 = 0; + for (var i = 0; i < tmp.length; i++) tmp[i] = new _valueTypes.Vec3(0, 0, 0); + return function (aabb, frustum) { + var result = 0, intersects = false; + for (var _i4 = 0; _i4 < frustum.planes.length; _i4++) { + result = aabb_plane(aabb, frustum.planes[_i4]); + if (-1 === result) return 0; + 1 === result && (intersects = true); + } + if (!intersects) return 1; + for (var _i5 = 0; _i5 < frustum.vertices.length; _i5++) _valueTypes.Vec3.subtract(tmp[_i5], frustum.vertices[_i5], aabb.center); + out1 = 0, out2 = 0; + for (var _i6 = 0; _i6 < frustum.vertices.length; _i6++) tmp[_i6].x > aabb.halfExtents.x ? out1++ : tmp[_i6].x < -aabb.halfExtents.x && out2++; + if (out1 === frustum.vertices.length || out2 === frustum.vertices.length) return 0; + out1 = 0; + out2 = 0; + for (var _i7 = 0; _i7 < frustum.vertices.length; _i7++) tmp[_i7].y > aabb.halfExtents.y ? out1++ : tmp[_i7].y < -aabb.halfExtents.y && out2++; + if (out1 === frustum.vertices.length || out2 === frustum.vertices.length) return 0; + out1 = 0; + out2 = 0; + for (var _i8 = 0; _i8 < frustum.vertices.length; _i8++) tmp[_i8].z > aabb.halfExtents.z ? out1++ : tmp[_i8].z < -aabb.halfExtents.z && out2++; + if (out1 === frustum.vertices.length || out2 === frustum.vertices.length) return 0; + return 1; + }; + })(); + var obb_point = (function () { + var tmp = new _valueTypes.Vec3(0, 0, 0), m3 = new _valueTypes.Mat3(); + var lessThan = function lessThan(a, b) { + return Math.abs(a.x) < b.x && Math.abs(a.y) < b.y && Math.abs(a.z) < b.z; + }; + return function (obb, point) { + _valueTypes.Vec3.subtract(tmp, point, obb.center); + _valueTypes.Vec3.transformMat3(tmp, tmp, _valueTypes.Mat3.transpose(m3, obb.orientation)); + return lessThan(tmp, obb.halfExtents); + }; + })(); + var obb_plane = (function () { + var absDot = function absDot(n, x, y, z) { + return Math.abs(n.x * x + n.y * y + n.z * z); + }; + return function (obb, plane) { + var obbm = obb.orientation.m; + var r = obb.halfExtents.x * absDot(plane.n, obbm[0], obbm[1], obbm[2]) + obb.halfExtents.y * absDot(plane.n, obbm[3], obbm[4], obbm[5]) + obb.halfExtents.z * absDot(plane.n, obbm[6], obbm[7], obbm[8]); + var dot = _valueTypes.Vec3.dot(plane.n, obb.center); + if (dot + r < plane.d) return -1; + if (dot - r > plane.d) return 0; + return 1; + }; + })(); + var obb_frustum = function obb_frustum(obb, frustum) { + for (var i = 0; i < frustum.planes.length; i++) if (-1 === obb_plane(obb, frustum.planes[i])) return 0; + return 1; + }; + var obb_frustum_accurate = (function () { + var tmp = new Array(8); + var dist = 0, out1 = 0, out2 = 0; + for (var i = 0; i < tmp.length; i++) tmp[i] = new _valueTypes.Vec3(0, 0, 0); + var dot = function dot(n, x, y, z) { + return n.x * x + n.y * y + n.z * z; + }; + return function (obb, frustum) { + var result = 0, intersects = false; + for (var _i9 = 0; _i9 < frustum.planes.length; _i9++) { + result = obb_plane(obb, frustum.planes[_i9]); + if (-1 === result) return 0; + 1 === result && (intersects = true); + } + if (!intersects) return 1; + for (var _i10 = 0; _i10 < frustum.vertices.length; _i10++) _valueTypes.Vec3.subtract(tmp[_i10], frustum.vertices[_i10], obb.center); + out1 = 0, out2 = 0; + var obbm = obb.orientation.m; + for (var _i11 = 0; _i11 < frustum.vertices.length; _i11++) { + dist = dot(tmp[_i11], obbm[0], obbm[1], obbm[2]); + dist > obb.halfExtents.x ? out1++ : dist < -obb.halfExtents.x && out2++; + } + if (out1 === frustum.vertices.length || out2 === frustum.vertices.length) return 0; + out1 = 0; + out2 = 0; + for (var _i12 = 0; _i12 < frustum.vertices.length; _i12++) { + dist = dot(tmp[_i12], obbm[3], obbm[4], obbm[5]); + dist > obb.halfExtents.y ? out1++ : dist < -obb.halfExtents.y && out2++; + } + if (out1 === frustum.vertices.length || out2 === frustum.vertices.length) return 0; + out1 = 0; + out2 = 0; + for (var _i13 = 0; _i13 < frustum.vertices.length; _i13++) { + dist = dot(tmp[_i13], obbm[6], obbm[7], obbm[8]); + dist > obb.halfExtents.z ? out1++ : dist < -obb.halfExtents.z && out2++; + } + if (out1 === frustum.vertices.length || out2 === frustum.vertices.length) return 0; + return 1; + }; + })(); + var obb_obb = (function () { + var test = new Array(15); + for (var i = 0; i < 15; i++) test[i] = new _valueTypes.Vec3(0, 0, 0); + var vertices = new Array(8); + var vertices2 = new Array(8); + for (var _i14 = 0; _i14 < 8; _i14++) { + vertices[_i14] = new _valueTypes.Vec3(0, 0, 0); + vertices2[_i14] = new _valueTypes.Vec3(0, 0, 0); + } + return function (obb1, obb2) { + var obb1m = obb1.orientation.m; + var obb2m = obb2.orientation.m; + _valueTypes.Vec3.set(test[0], obb1m[0], obb1m[1], obb1m[2]); + _valueTypes.Vec3.set(test[1], obb1m[3], obb1m[4], obb1m[5]); + _valueTypes.Vec3.set(test[2], obb1m[6], obb1m[7], obb1m[8]); + _valueTypes.Vec3.set(test[3], obb2m[0], obb2m[1], obb2m[2]); + _valueTypes.Vec3.set(test[4], obb2m[3], obb2m[4], obb2m[5]); + _valueTypes.Vec3.set(test[5], obb2m[6], obb2m[7], obb2m[8]); + for (var _i15 = 0; _i15 < 3; ++_i15) { + _valueTypes.Vec3.cross(test[6 + 3 * _i15 + 0], test[_i15], test[0]); + _valueTypes.Vec3.cross(test[6 + 3 * _i15 + 1], test[_i15], test[1]); + _valueTypes.Vec3.cross(test[6 + 3 * _i15 + 1], test[_i15], test[2]); + } + getOBBVertices(obb1.center, obb1.halfExtents, test[0], test[1], test[2], vertices); + getOBBVertices(obb2.center, obb2.halfExtents, test[3], test[4], test[5], vertices2); + for (var _i16 = 0; _i16 < 15; ++_i16) { + var a = getInterval(vertices, test[_i16]); + var b = getInterval(vertices2, test[_i16]); + if (b[0] > a[1] || a[0] > b[1]) return 0; + } + return 1; + }; + })(); + var sphere_plane = function sphere_plane(sphere, plane) { + var dot = _valueTypes.Vec3.dot(plane.n, sphere.center); + var r = sphere.radius * plane.n.length(); + if (dot + r < plane.d) return -1; + if (dot - r > plane.d) return 0; + return 1; + }; + var sphere_frustum = function sphere_frustum(sphere, frustum) { + for (var i = 0; i < frustum.planes.length; i++) if (-1 === sphere_plane(sphere, frustum.planes[i])) return 0; + return 1; + }; + var sphere_frustum_accurate = (function () { + var pt = new _valueTypes.Vec3(0, 0, 0), map = [1, -1, 1, -1, 1, -1]; + return function (sphere, frustum) { + for (var i = 0; i < 6; i++) { + var plane = frustum.planes[i]; + var r = sphere.radius, c = sphere.center; + var n = plane.n, d = plane.d; + var dot = _valueTypes.Vec3.dot(n, c); + if (dot + r < d) return 0; + if (dot - r > d) continue; + _valueTypes.Vec3.add(pt, c, _valueTypes.Vec3.multiplyScalar(pt, n, r)); + for (var j = 0; j < 6; j++) { + if (j === i || j === i + map[i]) continue; + var test = frustum.planes[j]; + if (_valueTypes.Vec3.dot(test.n, pt) < test.d) return 0; + } + } + return 1; + }; + })(); + var sphere_sphere = function sphere_sphere(sphere0, sphere1) { + var r = sphere0.radius + sphere1.radius; + return _valueTypes.Vec3.squaredDistance(sphere0.center, sphere1.center) < r * r; + }; + var sphere_aabb = (function () { + var pt = new _valueTypes.Vec3(); + return function (sphere, aabb) { + distance.pt_point_aabb(pt, sphere.center, aabb); + return _valueTypes.Vec3.squaredDistance(sphere.center, pt) < sphere.radius * sphere.radius; + }; + })(); + var sphere_obb = (function () { + var pt = new _valueTypes.Vec3(); + return function (sphere, obb) { + distance.pt_point_obb(pt, sphere.center, obb); + return _valueTypes.Vec3.squaredDistance(sphere.center, pt) < sphere.radius * sphere.radius; + }; + })(); + var intersect = { + rayAabb: rayAabb, + rayMesh: rayMesh, + raycast: raycast, + rayTriangle: rayTriangle, + ray_sphere: ray_sphere, + ray_aabb: ray_aabb, + ray_obb: ray_obb, + ray_plane: ray_plane, + ray_triangle: ray_triangle, + line_plane: line_plane, + line_triangle: line_triangle, + line_quad: line_quad, + sphere_sphere: sphere_sphere, + sphere_aabb: sphere_aabb, + sphere_obb: sphere_obb, + sphere_plane: sphere_plane, + sphere_frustum: sphere_frustum, + sphere_frustum_accurate: sphere_frustum_accurate, + aabb_aabb: aabb_aabb, + aabb_obb: aabb_obb, + aabb_plane: aabb_plane, + aabb_frustum: aabb_frustum, + aabb_frustum_accurate: aabb_frustum_accurate, + obb_obb: obb_obb, + obb_plane: obb_plane, + obb_frustum: obb_frustum, + obb_frustum_accurate: obb_frustum_accurate, + obb_point: obb_point, + resolve: function resolve(g1, g2, outPt) { + void 0 === outPt && (outPt = null); + var type1 = g1._type, type2 = g2._type; + var resolver = this[type1 | type2]; + return type1 < type2 ? resolver(g1, g2, outPt) : resolver(g2, g1, outPt); + } + }; + intersect[_enums["default"].SHAPE_RAY | _enums["default"].SHAPE_SPHERE] = ray_sphere; + intersect[_enums["default"].SHAPE_RAY | _enums["default"].SHAPE_AABB] = ray_aabb; + intersect[_enums["default"].SHAPE_RAY | _enums["default"].SHAPE_OBB] = ray_obb; + intersect[_enums["default"].SHAPE_RAY | _enums["default"].SHAPE_PLANE] = ray_plane; + intersect[_enums["default"].SHAPE_RAY | _enums["default"].SHAPE_TRIANGLE] = ray_triangle; + intersect[_enums["default"].SHAPE_LINE | _enums["default"].SHAPE_PLANE] = line_plane; + intersect[_enums["default"].SHAPE_LINE | _enums["default"].SHAPE_TRIANGLE] = line_triangle; + intersect[_enums["default"].SHAPE_SPHERE] = sphere_sphere; + intersect[_enums["default"].SHAPE_SPHERE | _enums["default"].SHAPE_AABB] = sphere_aabb; + intersect[_enums["default"].SHAPE_SPHERE | _enums["default"].SHAPE_OBB] = sphere_obb; + intersect[_enums["default"].SHAPE_SPHERE | _enums["default"].SHAPE_PLANE] = sphere_plane; + intersect[_enums["default"].SHAPE_SPHERE | _enums["default"].SHAPE_FRUSTUM] = sphere_frustum; + intersect[_enums["default"].SHAPE_SPHERE | _enums["default"].SHAPE_FRUSTUM_ACCURATE] = sphere_frustum_accurate; + intersect[_enums["default"].SHAPE_AABB] = aabb_aabb; + intersect[_enums["default"].SHAPE_AABB | _enums["default"].SHAPE_OBB] = aabb_obb; + intersect[_enums["default"].SHAPE_AABB | _enums["default"].SHAPE_PLANE] = aabb_plane; + intersect[_enums["default"].SHAPE_AABB | _enums["default"].SHAPE_FRUSTUM] = aabb_frustum; + intersect[_enums["default"].SHAPE_AABB | _enums["default"].SHAPE_FRUSTUM_ACCURATE] = aabb_frustum_accurate; + intersect[_enums["default"].SHAPE_OBB] = obb_obb; + intersect[_enums["default"].SHAPE_OBB | _enums["default"].SHAPE_PLANE] = obb_plane; + intersect[_enums["default"].SHAPE_OBB | _enums["default"].SHAPE_FRUSTUM] = obb_frustum; + intersect[_enums["default"].SHAPE_OBB | _enums["default"].SHAPE_FRUSTUM_ACCURATE] = obb_frustum_accurate; + var _default = intersect; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../../renderer/gfx": 372, + "../../renderer/memop/recycle-pool": 387, + "../value-types": 339, + "./aabb": 190, + "./distance": 191, + "./enums": 192, + "./ray": 199, + "./triangle": 201 + }], + 196: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../value-types"); + var _enums = _interopRequireDefault(require("./enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var line = (function () { + line.create = function create(sx, sy, sz, ex, ey, ez) { + return new line(sx, sy, sz, ex, ey, ez); + }; + line.clone = function clone(a) { + return new line(a.s.x, a.s.y, a.s.z, a.e.x, a.e.y, a.e.z); + }; + line.copy = function copy(out, a) { + _valueTypes.Vec3.copy(out.s, a.s); + _valueTypes.Vec3.copy(out.e, a.e); + return out; + }; + line.fromPoints = function fromPoints(out, start, end) { + _valueTypes.Vec3.copy(out.s, start); + _valueTypes.Vec3.copy(out.e, end); + return out; + }; + line.set = function set(out, sx, sy, sz, ex, ey, ez) { + out.s.x = sx; + out.s.y = sy; + out.s.z = sz; + out.e.x = ex; + out.e.y = ey; + out.e.z = ez; + return out; + }; + line.len = function len(a) { + return _valueTypes.Vec3.distance(a.s, a.e); + }; + function line(sx, sy, sz, ex, ey, ez) { + void 0 === sx && (sx = 0); + void 0 === sy && (sy = 0); + void 0 === sz && (sz = 0); + void 0 === ex && (ex = 0); + void 0 === ey && (ey = 0); + void 0 === ez && (ez = -1); + this.s = void 0; + this.e = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_LINE; + this.s = new _valueTypes.Vec3(sx, sy, sz); + this.e = new _valueTypes.Vec3(ex, ey, ez); + } + var _proto = line.prototype; + _proto.length = function length() { + return _valueTypes.Vec3.distance(this.s, this.e); + }; + return line; + })(); + exports["default"] = line; + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./enums": 192 + }], + 197: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../value-types"); + 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); + return Constructor; + } + var _v3_tmp = new _valueTypes.Vec3(); + var _v3_tmp2 = new _valueTypes.Vec3(); + var _m3_tmp = new _valueTypes.Mat3(); + var transform_extent_m3 = function transform_extent_m3(out, extent, m3) { + var m3_tmpm = _m3_tmp.m, m3m = m3.m; + m3_tmpm[0] = Math.abs(m3m[0]); + m3_tmpm[1] = Math.abs(m3m[1]); + m3_tmpm[2] = Math.abs(m3m[2]); + m3_tmpm[3] = Math.abs(m3m[3]); + m3_tmpm[4] = Math.abs(m3m[4]); + m3_tmpm[5] = Math.abs(m3m[5]); + m3_tmpm[6] = Math.abs(m3m[6]); + m3_tmpm[7] = Math.abs(m3m[7]); + m3_tmpm[8] = Math.abs(m3m[8]); + _valueTypes.Vec3.transformMat3(out, extent, _m3_tmp); + }; + var obb = (function () { + obb.create = function create(cx, cy, cz, hw, hh, hl, ox_1, ox_2, ox_3, oy_1, oy_2, oy_3, oz_1, oz_2, oz_3) { + return new obb(cx, cy, cz, hw, hh, hl, ox_1, ox_2, ox_3, oy_1, oy_2, oy_3, oz_1, oz_2, oz_3); + }; + obb.clone = function clone(a) { + var aom = a.orientation.m; + return new obb(a.center.x, a.center.y, a.center.z, a.halfExtents.x, a.halfExtents.y, a.halfExtents.z, aom[0], aom[1], aom[2], aom[3], aom[4], aom[5], aom[6], aom[7], aom[8]); + }; + obb.copy = function copy(out, a) { + _valueTypes.Vec3.copy(out.center, a.center); + _valueTypes.Vec3.copy(out.halfExtents, a.halfExtents); + _valueTypes.Mat3.copy(out.orientation, a.orientation); + return out; + }; + obb.fromPoints = function fromPoints(out, minPos, maxPos) { + _valueTypes.Vec3.multiplyScalar(out.center, _valueTypes.Vec3.add(_v3_tmp, minPos, maxPos), .5); + _valueTypes.Vec3.multiplyScalar(out.halfExtents, _valueTypes.Vec3.subtract(_v3_tmp2, maxPos, minPos), .5); + _valueTypes.Mat3.identity(out.orientation); + return out; + }; + obb.set = function set(out, cx, cy, cz, hw, hh, hl, ox_1, ox_2, ox_3, oy_1, oy_2, oy_3, oz_1, oz_2, oz_3) { + _valueTypes.Vec3.set(out.center, cx, cy, cz); + _valueTypes.Vec3.set(out.halfExtents, hw, hh, hl); + _valueTypes.Mat3.set(out.orientation, ox_1, ox_2, ox_3, oy_1, oy_2, oy_3, oz_1, oz_2, oz_3); + return out; + }; + _createClass(obb, [{ + key: "type", + get: function get() { + return this._type; + } + }]); + function obb(cx, cy, cz, hw, hh, hl, ox_1, ox_2, ox_3, oy_1, oy_2, oy_3, oz_1, oz_2, oz_3) { + void 0 === cx && (cx = 0); + void 0 === cy && (cy = 0); + void 0 === cz && (cz = 0); + void 0 === hw && (hw = 1); + void 0 === hh && (hh = 1); + void 0 === hl && (hl = 1); + void 0 === ox_1 && (ox_1 = 1); + void 0 === ox_2 && (ox_2 = 0); + void 0 === ox_3 && (ox_3 = 0); + void 0 === oy_1 && (oy_1 = 0); + void 0 === oy_2 && (oy_2 = 1); + void 0 === oy_3 && (oy_3 = 0); + void 0 === oz_1 && (oz_1 = 0); + void 0 === oz_2 && (oz_2 = 0); + void 0 === oz_3 && (oz_3 = 1); + this.center = void 0; + this.halfExtents = void 0; + this.orientation = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_OBB; + this.center = new _valueTypes.Vec3(cx, cy, cz); + this.halfExtents = new _valueTypes.Vec3(hw, hh, hl); + this.orientation = new _valueTypes.Mat3(ox_1, ox_2, ox_3, oy_1, oy_2, oy_3, oz_1, oz_2, oz_3); + } + var _proto = obb.prototype; + _proto.getBoundary = function getBoundary(minPos, maxPos) { + transform_extent_m3(_v3_tmp, this.halfExtents, this.orientation); + _valueTypes.Vec3.subtract(minPos, this.center, _v3_tmp); + _valueTypes.Vec3.add(maxPos, this.center, _v3_tmp); + }; + _proto.transform = function transform(m, pos, rot, scale, out) { + _valueTypes.Vec3.transformMat4(out.center, this.center, m); + _valueTypes.Mat3.fromQuat(out.orientation, rot); + _valueTypes.Vec3.multiply(out.halfExtents, this.halfExtents, scale); + }; + _proto.translateAndRotate = function translateAndRotate(m, rot, out) { + _valueTypes.Vec3.transformMat4(out.center, this.center, m); + _valueTypes.Mat3.fromQuat(out.orientation, rot); + }; + _proto.setScale = function setScale(scale, out) { + _valueTypes.Vec3.multiply(out.halfExtents, this.halfExtents, scale); + }; + return obb; + })(); + exports["default"] = obb; + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./enums": 192 + }], + 198: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../value-types"); + var _enums = _interopRequireDefault(require("./enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var v1 = new _valueTypes.Vec3(0, 0, 0); + var v2 = new _valueTypes.Vec3(0, 0, 0); + var temp_mat = cc.mat4(); + var temp_vec4 = cc.v4(); + var plane = (function () { + plane.create = function create(nx, ny, nz, d) { + return new plane(nx, ny, nz, d); + }; + plane.clone = function clone(p) { + return new plane(p.n.x, p.n.y, p.n.z, p.d); + }; + plane.copy = function copy(out, p) { + _valueTypes.Vec3.copy(out.n, p.n); + out.d = p.d; + return out; + }; + plane.fromPoints = function fromPoints(out, a, b, c) { + _valueTypes.Vec3.subtract(v1, b, a); + _valueTypes.Vec3.subtract(v2, c, a); + _valueTypes.Vec3.normalize(out.n, _valueTypes.Vec3.cross(out.n, v1, v2)); + out.d = _valueTypes.Vec3.dot(out.n, a); + return out; + }; + plane.set = function set(out, nx, ny, nz, d) { + out.n.x = nx; + out.n.y = ny; + out.n.z = nz; + out.d = d; + return out; + }; + plane.fromNormalAndPoint = function fromNormalAndPoint(out, normal, point) { + _valueTypes.Vec3.copy(out.n, normal); + out.d = _valueTypes.Vec3.dot(normal, point); + return out; + }; + plane.normalize = function normalize(out, a) { + var len = a.n.len(); + _valueTypes.Vec3.normalize(out.n, a.n); + len > 0 && (out.d = a.d / len); + return out; + }; + function plane(nx, ny, nz, d) { + void 0 === nx && (nx = 0); + void 0 === ny && (ny = 1); + void 0 === nz && (nz = 0); + void 0 === d && (d = 0); + this.n = void 0; + this.d = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_PLANE; + this.n = new _valueTypes.Vec3(nx, ny, nz); + this.d = d; + } + var _proto = plane.prototype; + _proto.transform = function transform(mat) { + _valueTypes.Mat4.invert(temp_mat, mat); + _valueTypes.Mat4.transpose(temp_mat, temp_mat); + _valueTypes.Vec4.set(temp_vec4, this.n.x, this.n.y, this.n.z, this.d); + _valueTypes.Vec4.transformMat4(temp_vec4, temp_vec4, temp_mat); + _valueTypes.Vec3.set(this.n, temp_vec4.x, temp_vec4.y, temp_vec4.z); + this.d = temp_vec4.w; + }; + return plane; + })(); + exports["default"] = plane; + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./enums": 192 + }], + 199: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../value-types"); + var _enums = _interopRequireDefault(require("./enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ray = (function () { + ray.create = function create(ox, oy, oz, dx, dy, dz) { + void 0 === ox && (ox = 0); + void 0 === oy && (oy = 0); + void 0 === oz && (oz = 0); + void 0 === dx && (dx = 0); + void 0 === dy && (dy = 0); + void 0 === dz && (dz = 1); + return new ray(ox, oy, oz, dx, dy, dz); + }; + ray.clone = function clone(a) { + return new ray(a.o.x, a.o.y, a.o.z, a.d.x, a.d.y, a.d.z); + }; + ray.copy = function copy(out, a) { + _valueTypes.Vec3.copy(out.o, a.o); + _valueTypes.Vec3.copy(out.d, a.d); + return out; + }; + ray.fromPoints = function fromPoints(out, origin, target) { + _valueTypes.Vec3.copy(out.o, origin); + _valueTypes.Vec3.normalize(out.d, _valueTypes.Vec3.subtract(out.d, target, origin)); + return out; + }; + ray.set = function set(out, ox, oy, oz, dx, dy, dz) { + out.o.x = ox; + out.o.y = oy; + out.o.z = oz; + out.d.x = dx; + out.d.y = dy; + out.d.z = dz; + return out; + }; + function ray(ox, oy, oz, dx, dy, dz) { + void 0 === ox && (ox = 0); + void 0 === oy && (oy = 0); + void 0 === oz && (oz = 0); + void 0 === dx && (dx = 0); + void 0 === dy && (dy = 0); + void 0 === dz && (dz = -1); + this.o = void 0; + this.d = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_RAY; + this.o = new _valueTypes.Vec3(ox, oy, oz); + this.d = new _valueTypes.Vec3(dx, dy, dz); + } + var _proto = ray.prototype; + _proto.computeHit = function computeHit(out, distance) { + _valueTypes.Vec3.normalize(out, this.d); + _valueTypes.Vec3.scaleAndAdd(out, this.o, out, distance); + }; + return ray; + })(); + exports["default"] = ray; + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./enums": 192 + }], + 200: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../value-types"); + var _enums = _interopRequireDefault(require("./enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var _v3_tmp = new _valueTypes.Vec3(); + var sphere = (function () { + sphere.create = function create(cx, cy, cz, r) { + return new sphere(cx, cy, cz, r); + }; + sphere.clone = function clone(p) { + return new sphere(p.center.x, p.center.y, p.center.z, p.radius); + }; + sphere.copy = function copy(out, p) { + _valueTypes.Vec3.copy(out.center, p.center); + out.radius = p.radius; + return out; + }; + sphere.fromPoints = function fromPoints(out, minPos, maxPos) { + _valueTypes.Vec3.multiplyScalar(out.center, _valueTypes.Vec3.add(_v3_tmp, minPos, maxPos), .5); + out.radius = .5 * _valueTypes.Vec3.subtract(_v3_tmp, maxPos, minPos).len(); + return out; + }; + sphere.set = function set(out, cx, cy, cz, r) { + out.center.x = cx; + out.center.y = cy; + out.center.z = cz; + out.radius = r; + return out; + }; + function sphere(cx, cy, cz, r) { + void 0 === cx && (cx = 0); + void 0 === cy && (cy = 0); + void 0 === cz && (cz = 0); + void 0 === r && (r = 1); + this.center = void 0; + this.radius = void 0; + this._type = void 0; + this._type = _enums["default"].SHAPE_SPHERE; + this.center = new _valueTypes.Vec3(cx, cy, cz); + this.radius = r; + } + var _proto = sphere.prototype; + _proto.clone = function clone() { + return sphere.clone(this); + }; + _proto.copy = function copy(a) { + return sphere.copy(this, a); + }; + _proto.getBoundary = function getBoundary(minPos, maxPos) { + _valueTypes.Vec3.set(minPos, this.center.x - this.radius, this.center.y - this.radius, this.center.z - this.radius); + _valueTypes.Vec3.set(maxPos, this.center.x + this.radius, this.center.y + this.radius, this.center.z + this.radius); + }; + _proto.transform = function transform(m, pos, rot, scale, out) { + _valueTypes.Vec3.transformMat4(out.center, this.center, m); + out.radius = this.radius * scale.maxAxis(); + }; + _proto.translateAndRotate = function translateAndRotate(m, rot, out) { + _valueTypes.Vec3.transformMat4(out.center, this.center, m); + }; + _proto.setScale = function setScale(scale, out) { + out.radius = this.radius * scale.maxAxis(); + }; + return sphere; + })(); + exports["default"] = sphere; + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./enums": 192 + }], + 201: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../value-types/vec3")); + var _enums = _interopRequireDefault(require("./enums")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var triangle = (function () { + triangle.create = function create(ax, ay, az, bx, by, bz, cx, cy, cz) { + return new triangle(ax, ay, az, bx, by, bz, cx, cy, cz); + }; + triangle.clone = function clone(t) { + return new triangle(t.a.x, t.a.y, t.a.z, t.b.x, t.b.y, t.b.z, t.c.x, t.c.y, t.c.z); + }; + triangle.copy = function copy(out, t) { + _vec["default"].copy(out.a, t.a); + _vec["default"].copy(out.b, t.b); + _vec["default"].copy(out.c, t.c); + return out; + }; + triangle.fromPoints = function fromPoints(out, a, b, c) { + _vec["default"].copy(out.a, a); + _vec["default"].copy(out.b, b); + _vec["default"].copy(out.c, c); + return out; + }; + triangle.set = function set(out, ax, ay, az, bx, by, bz, cx, cy, cz) { + out.a.x = ax; + out.a.y = ay; + out.a.z = az; + out.b.x = bx; + out.b.y = by; + out.b.z = bz; + out.c.x = cx; + out.c.y = cy; + out.c.z = cz; + return out; + }; + function triangle(ax, ay, az, bx, by, bz, cx, cy, cz) { + this.a = void 0; + this.b = void 0; + this.c = void 0; + this._type = void 0; + this.a = new _vec["default"](ax, ay, az); + this.b = new _vec["default"](bx, by, bz); + this.c = new _vec["default"](cx, cy, cz); + this._type = _enums["default"].SHAPE_TRIANGLE; + } + return triangle; + })(); + exports["default"] = triangle; + module.exports = exports["default"]; + }), { + "../value-types/vec3": 349, + "./enums": 192 + }], + 202: [(function (require, module, exports) { + "use strict"; + var RenderComponent = require("../components/CCRenderComponent"); + var Material = require("../assets/material/CCMaterial"); + var Types = require("./types"); + var LineCap = Types.LineCap; + var LineJoin = Types.LineJoin; + var Graphics = cc.Class({ + name: "cc.Graphics", + extends: RenderComponent, + editor: false, + ctor: function ctor() { + this._impl = new Graphics._Impl(this); + }, + properties: { + _lineWidth: 2, + _strokeColor: cc.Color.BLACK, + _lineJoin: LineJoin.MITER, + _lineCap: LineCap.BUTT, + _fillColor: cc.Color.WHITE, + _miterLimit: 10, + lineWidth: { + get: function get() { + return this._lineWidth; + }, + set: function set(value) { + this._lineWidth = value; + this._impl.lineWidth = value; + } + }, + lineJoin: { + get: function get() { + return this._lineJoin; + }, + set: function set(value) { + this._lineJoin = value; + this._impl.lineJoin = value; + }, + type: LineJoin + }, + lineCap: { + get: function get() { + return this._lineCap; + }, + set: function set(value) { + this._lineCap = value; + this._impl.lineCap = value; + }, + type: LineCap + }, + strokeColor: { + get: function get() { + return this._strokeColor; + }, + set: function set(value) { + this._impl.strokeColor = this._strokeColor = cc.color(value); + } + }, + fillColor: { + get: function get() { + return this._fillColor; + }, + set: function set(value) { + this._impl.fillColor = this._fillColor = cc.color(value); + } + }, + miterLimit: { + get: function get() { + return this._miterLimit; + }, + set: function set(value) { + this._miterLimit = value; + this._impl.miterLimit = value; + } + } + }, + statics: { + LineJoin: LineJoin, + LineCap: LineCap + }, + onRestore: function onRestore() { + this._impl || (this._impl = new Graphics._Impl(this)); + }, + onDestroy: function onDestroy() { + this.clear(true); + this._super(); + this._impl = null; + }, + _getDefaultMaterial: function _getDefaultMaterial() { + return Material.getBuiltinMaterial("2d-graphics"); + }, + _updateMaterial: function _updateMaterial() { + var material = this._materials[0]; + if (!material) return; + void 0 !== material.getDefine("CC_USE_MODEL") && material.define("CC_USE_MODEL", true); + void 0 !== material.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && material.define("CC_SUPPORT_standard_derivatives", true); + }, + moveTo: function moveTo(x, y) { + if (true, x instanceof cc.Vec2) { + cc.warn("[moveTo] : Can not pass Vec2 as [x, y] value, please check it."); + return; + } + this._impl.moveTo(x, y); + }, + lineTo: function lineTo(x, y) { + if (true, x instanceof cc.Vec2) { + cc.warn("[moveTo] : Can not pass Vec2 as [x, y] value, please check it."); + return; + } + this._impl.lineTo(x, y); + }, + bezierCurveTo: function bezierCurveTo(c1x, c1y, c2x, c2y, x, y) { + this._impl.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); + }, + quadraticCurveTo: function quadraticCurveTo(cx, cy, x, y) { + this._impl.quadraticCurveTo(cx, cy, x, y); + }, + arc: function arc(cx, cy, r, startAngle, endAngle, counterclockwise) { + this._impl.arc(cx, cy, r, startAngle, endAngle, counterclockwise); + }, + ellipse: function ellipse(cx, cy, rx, ry) { + this._impl.ellipse(cx, cy, rx, ry); + }, + circle: function circle(cx, cy, r) { + this._impl.circle(cx, cy, r); + }, + rect: function rect(x, y, w, h) { + this._impl.rect(x, y, w, h); + }, + roundRect: function roundRect(x, y, w, h, r) { + this._impl.roundRect(x, y, w, h, r); + }, + fillRect: function fillRect(x, y, w, h) { + this.rect(x, y, w, h); + this.fill(); + }, + clear: function clear(clean) { + this._impl.clear(clean); + this._assembler && this._assembler.clear(clean); + }, + close: function close() { + this._impl.close(); + }, + stroke: function stroke() { + this._assembler || this._resetAssembler(); + this._assembler.stroke(this); + }, + fill: function fill() { + this._assembler || this._resetAssembler(); + this._assembler.fill(this); + } + }); + cc.Graphics = module.exports = Graphics; + cc.Graphics.Types = Types; + cc.Graphics.Helper = require("./helper"); + }), { + "../assets/material/CCMaterial": 124, + "../components/CCRenderComponent": 160, + "./helper": 203, + "./types": 205 + }], + 203: [(function (require, module, exports) { + "use strict"; + var PointFlags = require("./types").PointFlags; + var PI = Math.PI; + var min = Math.min; + var max = Math.max; + var cos = Math.cos; + var sin = Math.sin; + var abs = Math.abs; + var sign = Math.sign; + var KAPPA90 = .5522847493; + function arc(ctx, cx, cy, r, startAngle, endAngle, counterclockwise) { + counterclockwise = counterclockwise || false; + var a = 0, da = 0, hda = 0, kappa = 0; + var dx = 0, dy = 0, x = 0, y = 0, tanx = 0, tany = 0; + var px = 0, py = 0, ptanx = 0, ptany = 0; + var i, ndivs; + da = endAngle - startAngle; + if (counterclockwise) if (abs(da) >= 2 * PI) da = 2 * PI; else while (da < 0) da += 2 * PI; else if (abs(da) >= 2 * PI) da = 2 * -PI; else while (da > 0) da -= 2 * PI; + ndivs = 0 | max(1, min(abs(da) / (.5 * PI) + .5, 5)); + hda = da / ndivs / 2; + kappa = abs(4 / 3 * (1 - cos(hda)) / sin(hda)); + counterclockwise || (kappa = -kappa); + for (i = 0; i <= ndivs; i++) { + a = startAngle + da * (i / ndivs); + dx = cos(a); + dy = sin(a); + x = cx + dx * r; + y = cy + dy * r; + tanx = -dy * r * kappa; + tany = dx * r * kappa; + 0 === i ? ctx.moveTo(x, y) : ctx.bezierCurveTo(px + ptanx, py + ptany, x - tanx, y - tany, x, y); + px = x; + py = y; + ptanx = tanx; + ptany = tany; + } + } + function ellipse(ctx, cx, cy, rx, ry) { + ctx.moveTo(cx - rx, cy); + ctx.bezierCurveTo(cx - rx, cy + ry * KAPPA90, cx - rx * KAPPA90, cy + ry, cx, cy + ry); + ctx.bezierCurveTo(cx + rx * KAPPA90, cy + ry, cx + rx, cy + ry * KAPPA90, cx + rx, cy); + ctx.bezierCurveTo(cx + rx, cy - ry * KAPPA90, cx + rx * KAPPA90, cy - ry, cx, cy - ry); + ctx.bezierCurveTo(cx - rx * KAPPA90, cy - ry, cx - rx, cy - ry * KAPPA90, cx - rx, cy); + ctx.close(); + } + function roundRect(ctx, x, y, w, h, r) { + if (r < .1) { + ctx.rect(x, y, w, h); + return; + } + var rx = min(r, .5 * abs(w)) * sign(w), ry = min(r, .5 * abs(h)) * sign(h); + ctx.moveTo(x, y + ry); + ctx.lineTo(x, y + h - ry); + ctx.bezierCurveTo(x, y + h - ry * (1 - KAPPA90), x + rx * (1 - KAPPA90), y + h, x + rx, y + h); + ctx.lineTo(x + w - rx, y + h); + ctx.bezierCurveTo(x + w - rx * (1 - KAPPA90), y + h, x + w, y + h - ry * (1 - KAPPA90), x + w, y + h - ry); + ctx.lineTo(x + w, y + ry); + ctx.bezierCurveTo(x + w, y + ry * (1 - KAPPA90), x + w - rx * (1 - KAPPA90), y, x + w - rx, y); + ctx.lineTo(x + rx, y); + ctx.bezierCurveTo(x + rx * (1 - KAPPA90), y, x, y + ry * (1 - KAPPA90), x, y + ry); + ctx.close(); + } + function tesselateBezier(ctx, x1, y1, x2, y2, x3, y3, x4, y4, level, type) { + var x12, y12, x23, y23, x34, y34, x123, y123, x234, y234, x1234, y1234; + var dx, dy, d2, d3; + if (level > 10) return; + x12 = .5 * (x1 + x2); + y12 = .5 * (y1 + y2); + x23 = .5 * (x2 + x3); + y23 = .5 * (y2 + y3); + x34 = .5 * (x3 + x4); + y34 = .5 * (y3 + y4); + x123 = .5 * (x12 + x23); + y123 = .5 * (y12 + y23); + dx = x4 - x1; + dy = y4 - y1; + d2 = abs((x2 - x4) * dy - (y2 - y4) * dx); + d3 = abs((x3 - x4) * dy - (y3 - y4) * dx); + if ((d2 + d3) * (d2 + d3) < ctx._tessTol * (dx * dx + dy * dy)) { + ctx._addPoint(x4, y4, 0 === type ? type | PointFlags.PT_BEVEL : type); + return; + } + x234 = .5 * (x23 + x34); + y234 = .5 * (y23 + y34); + x1234 = .5 * (x123 + x234); + y1234 = .5 * (y123 + y234); + tesselateBezier(ctx, x1, y1, x12, y12, x123, y123, x1234, y1234, level + 1, 0); + tesselateBezier(ctx, x1234, y1234, x234, y234, x34, y34, x4, y4, level + 1, type); + } + module.exports = { + arc: arc, + ellipse: ellipse, + roundRect: roundRect, + tesselateBezier: tesselateBezier + }; + }), { + "./types": 205 + }], + 204: [(function (require, module, exports) { + "use strict"; + require("./graphics"); + }), { + "./graphics": 202 + }], + 205: [(function (require, module, exports) { + "use strict"; + var LineCap = cc.Enum({ + BUTT: 0, + ROUND: 1, + SQUARE: 2 + }); + var LineJoin = cc.Enum({ + BEVEL: 0, + ROUND: 1, + MITER: 2 + }); + var PointFlags = cc.Enum({ + PT_CORNER: 1, + PT_LEFT: 2, + PT_BEVEL: 4, + PT_INNERBEVEL: 8 + }); + module.exports = { + LineCap: LineCap, + LineJoin: LineJoin, + PointFlags: PointFlags + }; + }), {}], + 206: [(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("./mesh"); + require("./3d"); + require("./base-ui/CCWidgetManager"); + }), { + "./3d": 30, + "./CCNode": 73, + "./CCPrivateNode": 74, + "./CCScene": 75, + "./assets": 122, + "./base-ui/CCWidgetManager": 133, + "./camera/CCCamera": 134, + "./collider": 142, + "./collider/CCIntersection": 140, + "./components": 178, + "./geom-utils": 194, + "./graphics": 204, + "./mesh": 209, + "./physics": 224, + "./platform": 257 + }], + 207: [(function (require, module, exports) { + "use strict"; + var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler")); + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _meshData = require("./mesh-data"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var renderer = require("../renderer"); + var EventTarget = require("../event/event-target"); + function applyColor(data, offset, value) { + data[offset] = value._val; + } + function applyVec2(data, offset, value) { + data[offset] = value.x; + data[offset + 1] = value.y; + } + function applyVec3(data, offset, value) { + data[offset] = value.x; + data[offset + 1] = value.y; + data[offset + 2] = value.z; + } + var _compType2fn = { + 5120: "getInt8", + 5121: "getUint8", + 5122: "getInt16", + 5123: "getUint16", + 5124: "getInt32", + 5125: "getUint32", + 5126: "getFloat32" + }; + var _compType2write = { + 5120: "setInt8", + 5121: "setUint8", + 5122: "setInt16", + 5123: "setUint16", + 5124: "setInt32", + 5125: "setUint32", + 5126: "setFloat32" + }; + var littleEndian = (function () { + var buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true); + return 256 === new Int16Array(buffer)[0]; + })(); + var Mesh = cc.Class({ + name: "cc.Mesh", + extends: cc.Asset, + mixins: [EventTarget], + properties: { + _nativeAsset: { + override: true, + get: function get() { + return this._buffer; + }, + set: function set(bin) { + this._buffer = ArrayBuffer.isView(bin) ? bin.buffer : bin; + this.initWithBuffer(); + } + }, + _vertexBundles: { + default: null, + type: _meshData.VertexBundle + }, + _primitives: { + default: null, + Primitive: _meshData.Primitive + }, + _minPos: cc.v3(), + _maxPos: cc.v3(), + subMeshes: { + get: function get() { + return this._subMeshes; + }, + set: function set(v) { + this._subMeshes = v; + } + }, + subDatas: { + get: function get() { + return this._subDatas; + } + } + }, + ctor: function ctor() { + this._subMeshes = []; + this._subDatas = []; + this.loaded = false; + }, + initWithBuffer: function initWithBuffer() { + this._subMeshes.length = 0; + var primitives = this._primitives; + for (var i = 0; i < primitives.length; i++) { + var primitive = primitives[i]; + var ibrange = primitive.data; + var ibData = new Uint8Array(this._buffer, ibrange.offset, ibrange.length); + var vertexBundle = this._vertexBundles[primitive.vertexBundleIndices[0]]; + var vbRange = vertexBundle.data; + var gfxVFmt = new _gfx["default"].VertexFormat(vertexBundle.formats); + var vbData = new Uint8Array(this._buffer, vbRange.offset, vbRange.length); + var canBatch = this._canVertexFormatBatch(gfxVFmt); + var meshData = new _meshData.MeshData(); + meshData.vData = vbData; + meshData.iData = ibData; + meshData.vfm = gfxVFmt; + meshData.offset = vbRange.offset; + meshData.canBatch = canBatch; + this._subDatas.push(meshData); + false; + var vbBuffer = new _gfx["default"].VertexBuffer(renderer.device, gfxVFmt, _gfx["default"].USAGE_STATIC, vbData); + var ibBuffer = new _gfx["default"].IndexBuffer(renderer.device, primitive.indexUnit, _gfx["default"].USAGE_STATIC, ibData); + this._subMeshes.push(new _inputAssembler["default"](vbBuffer, ibBuffer)); + } + this.loaded = true; + this.emit("load"); + }, + _canVertexFormatBatch: function _canVertexFormatBatch(format) { + var aPosition = format._attr2el[_gfx["default"].ATTR_POSITION]; + var canBatch = !aPosition || aPosition.type === _gfx["default"].ATTR_TYPE_FLOAT32 && format._bytes % 4 === 0; + return canBatch; + }, + init: function init(vertexFormat, vertexCount, dynamic, index) { + void 0 === dynamic && (dynamic = false); + void 0 === index && (index = 0); + var data = new Uint8Array(vertexFormat._bytes * vertexCount); + var meshData = new _meshData.MeshData(); + meshData.vData = data; + meshData.vfm = vertexFormat; + meshData.vDirty = true; + meshData.canBatch = this._canVertexFormatBatch(vertexFormat); + true; + var vb = new _gfx["default"].VertexBuffer(renderer.device, vertexFormat, dynamic ? _gfx["default"].USAGE_DYNAMIC : _gfx["default"].USAGE_STATIC, data); + meshData.vb = vb; + this._subMeshes[index] = new _inputAssembler["default"](meshData.vb); + var oldSubData = this._subDatas[index]; + if (oldSubData) { + oldSubData.vb && oldSubData.vb.destroy(); + oldSubData.ib && oldSubData.ib.destroy(); + } + this._subDatas[index] = meshData; + this.loaded = true; + this.emit("load"); + this.emit("init-format"); + }, + setVertices: function setVertices(name, values, index) { + index = index || 0; + var subData = this._subDatas[index]; + var el = subData.vfm.element(name); + if (!el) return cc.warn("Cannot find " + name + " attribute in vertex defines."); + var isFlatMode = "number" === typeof values[0]; + var elNum = el.num; + var verticesCount = isFlatMode ? values.length / elNum | 0 : values.length; + subData.vData.byteLength < verticesCount * el.stride && subData.setVData(new Uint8Array(verticesCount * subData.vfm._bytes)); + var data; + var bytes = 4; + if (name === _gfx["default"].ATTR_COLOR) if (isFlatMode) { + data = subData.getVData(); + bytes = 1; + } else data = subData.getVData(Uint32Array); else data = subData.getVData(Float32Array); + var stride = el.stride / bytes; + var offset = el.offset / bytes; + if (isFlatMode) for (var i = 0, l = values.length / elNum; i < l; i++) { + var sOffset = i * elNum; + var dOffset = i * stride + offset; + for (var j = 0; j < elNum; j++) data[dOffset + j] = values[sOffset + j]; + } else { + var applyFunc; + applyFunc = name === _gfx["default"].ATTR_COLOR ? applyColor : 2 === elNum ? applyVec2 : applyVec3; + for (var _i = 0, _l = values.length; _i < _l; _i++) { + var v = values[_i]; + var vOffset = _i * stride + offset; + applyFunc(data, vOffset, v); + } + } + subData.vDirty = true; + }, + setIndices: function setIndices(indices, index, dynamic) { + index = index || 0; + var iData = indices; + if (indices instanceof Uint16Array) iData = new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength); else if (Array.isArray(indices)) { + iData = new Uint16Array(indices); + iData = new Uint8Array(iData.buffer, iData.byteOffset, iData.byteLength); + } + var usage = dynamic ? _gfx["default"].USAGE_DYNAMIC : _gfx["default"].USAGE_STATIC; + var subData = this._subDatas[index]; + if (subData.ib) { + subData.iData = iData; + subData.iDirty = true; + } else { + subData.iData = iData; + true; + var buffer = new _gfx["default"].IndexBuffer(renderer.device, _gfx["default"].INDEX_FMT_UINT16, usage, iData, iData.byteLength / _gfx["default"].IndexBuffer.BYTES_PER_INDEX[_gfx["default"].INDEX_FMT_UINT16]); + subData.ib = buffer; + this._subMeshes[index]._indexBuffer = subData.ib; + } + }, + setPrimitiveType: function setPrimitiveType(type, index) { + index = index || 0; + var subMesh = this._subMeshes[index]; + if (!subMesh) { + cc.warn("Do not have sub mesh at index " + index); + return; + } + this._subMeshes[index]._primitiveType = type; + }, + clear: function clear() { + this._subMeshes.length = 0; + var subDatas = this._subDatas; + for (var i = 0, len = subDatas.length; i < len; i++) { + var vb = subDatas[i].vb; + vb && vb.destroy(); + var ib = subDatas[i].ib; + ib && ib.destroy(); + } + subDatas.length = 0; + }, + setBoundingBox: function setBoundingBox(min, max) { + this._minPos = min; + this._maxPos = max; + }, + destroy: function destroy() { + this.clear(); + }, + _uploadData: function _uploadData() { + var subDatas = this._subDatas; + for (var i = 0, len = subDatas.length; i < len; i++) { + var subData = subDatas[i]; + if (subData.vDirty) { + var buffer = subData.vb, data = subData.vData; + buffer.update(0, data); + subData.vDirty = false; + } + if (subData.iDirty) { + var _buffer = subData.ib, _data = subData.iData; + _buffer.update(0, _data); + subData.iDirty = false; + } + } + }, + _getAttrMeshData: function _getAttrMeshData(subDataIndex, name) { + var subData = this._subDatas[subDataIndex]; + if (!subData) return []; + var format = subData.vfm; + var fmt = format.element(name); + if (!fmt) return []; + subData.attrDatas || (subData.attrDatas = {}); + var attrDatas = subData.attrDatas; + var data = attrDatas[name]; + if (data) return data; + data = attrDatas[name] = []; + var vbData = subData.vData; + var dv = new DataView(vbData.buffer, vbData.byteOffset, vbData.byteLength); + var stride = fmt.stride; + var eleOffset = fmt.offset; + var eleNum = fmt.num; + var eleByte = fmt.bytes / eleNum; + var fn = _compType2fn[fmt.type]; + var vertexCount = vbData.byteLength / format._bytes; + for (var i = 0; i < vertexCount; i++) { + var offset = i * stride + eleOffset; + for (var j = 0; j < eleNum; j++) { + var v = dv[fn](offset + j * eleByte, littleEndian); + data.push(v); + } + } + return data; + }, + copyAttribute: function copyAttribute(primitiveIndex, attributeName, buffer, stride, offset) { + var written = false; + var subData = this._subDatas[primitiveIndex]; + if (!subData) return written; + var format = subData.vfm; + var fmt = format.element(attributeName); + if (!fmt) return written; + var writter = _compType2write[fmt.type]; + if (!writter) return written; + var data = this._getAttrMeshData(primitiveIndex, attributeName); + var vertexCount = subData.vData.byteLength / format._bytes; + var eleByte = fmt.bytes / fmt.num; + if (data.length > 0) { + var outputView = new DataView(buffer, offset); + var outputStride = stride; + var num = fmt.num; + for (var i = 0; i < vertexCount; ++i) { + var index = i * num; + for (var j = 0; j < num; ++j) { + var inputOffset = index + j; + var outputOffset = outputStride * i + eleByte * j; + outputView[writter](outputOffset, data[inputOffset], littleEndian); + } + } + written = true; + } + return written; + }, + copyIndices: function copyIndices(primitiveIndex, outputArray) { + var subData = this._subDatas[primitiveIndex]; + if (!subData) return false; + var iData = subData.iData; + var indexCount = iData.length / 2; + var dv = new DataView(iData.buffer, iData.byteOffset, iData.byteLength); + var fn = _compType2fn[_gfx["default"].INDEX_FMT_UINT8]; + for (var i = 0; i < indexCount; ++i) outputArray[i] = dv[fn](2 * i); + return true; + } + }); + cc.Mesh = module.exports = Mesh; + }), { + "../../renderer/core/input-assembler": 362, + "../../renderer/gfx": 372, + "../event/event-target": 186, + "../renderer": 271, + "./mesh-data": 210 + }], + 208: [(function (require, module, exports) { + "use strict"; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _inputAssembler = _interopRequireDefault(require("../../renderer/core/input-assembler")); + var _aabb = _interopRequireDefault(require("../geom-utils/aabb")); + var _vec = _interopRequireDefault(require("../value-types/vec3")); + var _mat = _interopRequireDefault(require("../value-types/mat4")); + var _materialVariant = _interopRequireDefault(require("../assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var RenderComponent = require("../components/CCRenderComponent"); + var Mesh = require("./CCMesh"); + var RenderFlow = require("../renderer/render-flow"); + var Renderer = require("../renderer"); + var Material = require("../assets/material/CCMaterial"); + var ShadowCastingMode = cc.Enum({ + OFF: 0, + ON: 1 + }); + var MeshRenderer = cc.Class({ + name: "cc.MeshRenderer", + extends: RenderComponent, + editor: false, + properties: { + _mesh: { + default: null, + type: Mesh + }, + _receiveShadows: false, + _shadowCastingMode: ShadowCastingMode.OFF, + _enableAutoBatch: false, + mesh: { + get: function get() { + return this._mesh; + }, + set: function set(v) { + if (this._mesh === v) return; + this._setMesh(v); + if (!v) { + this.disableRender(); + return; + } + this.markForRender(true); + this.node._renderFlag |= RenderFlow.FLAG_TRANSFORM; + }, + type: Mesh, + animatable: false + }, + textures: { + default: [], + type: cc.Texture2D, + visible: false + }, + receiveShadows: { + get: function get() { + return this._receiveShadows; + }, + set: function set(val) { + this._receiveShadows = val; + this._updateReceiveShadow(); + }, + animatable: false + }, + shadowCastingMode: { + get: function get() { + return this._shadowCastingMode; + }, + set: function set(val) { + this._shadowCastingMode = val; + this._updateCastShadow(); + }, + type: ShadowCastingMode, + animatable: false + }, + enableAutoBatch: { + get: function get() { + return this._enableAutoBatch; + }, + set: function set(val) { + this._enableAutoBatch = val; + } + } + }, + statics: { + ShadowCastingMode: ShadowCastingMode + }, + ctor: function ctor() { + this._boundingBox = cc.geomUtils && new _aabb["default"](); + true; + this._debugDatas = { + wireFrame: [], + normal: [] + }; + }, + onEnable: function onEnable() { + var _this = this; + this._super(); + if (this._mesh && !this._mesh.loaded) { + this.disableRender(); + this._mesh.once("load", (function () { + if (!_this.isValid) return; + _this._setMesh(_this._mesh); + _this.markForRender(true); + })); + cc.assetManager.postLoadNative(this._mesh); + } else this._setMesh(this._mesh); + this._updateRenderNode(); + this._updateMaterial(); + }, + onDestroy: function onDestroy() { + this._setMesh(null); + cc.pool.assembler.put(this._assembler); + }, + _updateRenderNode: function _updateRenderNode() { + this._assembler.setRenderNode(this.node); + }, + _setMesh: function _setMesh(mesh) { + cc.geomUtils && mesh && _aabb["default"].fromPoints(this._boundingBox, mesh._minPos, mesh._maxPos); + this._mesh && this._mesh.off("init-format", this._updateMeshAttribute, this); + mesh && mesh.on("init-format", this._updateMeshAttribute, this); + this._mesh = mesh; + this._assembler && (this._assembler._worldDatas = {}); + this._updateMeshAttribute(); + }, + _getDefaultMaterial: function _getDefaultMaterial() { + return Material.getBuiltinMaterial("unlit"); + }, + _validateRender: function _validateRender() { + var mesh = this._mesh; + if (mesh && mesh._subDatas.length > 0) return; + this.disableRender(); + }, + _updateMaterial: function _updateMaterial() { + var textures = this.textures; + if (textures && textures.length > 0) { + var defaultMaterial = this._getDefaultMaterial(); + for (var i = 0; i < textures.length; i++) { + var material = this._materials[i]; + if (material && material._uuid !== defaultMaterial._uuid) continue; + if (!material) { + material = _materialVariant["default"].create(defaultMaterial, this); + this.setMaterial(i, material); + } + material.setProperty("diffuseTexture", textures[i]); + } + } + this._updateReceiveShadow(); + this._updateCastShadow(); + this._updateMeshAttribute(); + }, + _updateReceiveShadow: function _updateReceiveShadow() { + var materials = this.getMaterials(); + for (var i = 0; i < materials.length; i++) materials[i].define("CC_USE_SHADOW_MAP", this._receiveShadows, void 0, true); + }, + _updateCastShadow: function _updateCastShadow() { + var materials = this.getMaterials(); + for (var i = 0; i < materials.length; i++) materials[i].define("CC_CASTING_SHADOW", this._shadowCastingMode === ShadowCastingMode.ON, void 0, true); + }, + _updateMeshAttribute: function _updateMeshAttribute() { + var subDatas = this._mesh && this._mesh.subDatas; + if (!subDatas) return; + var materials = this.getMaterials(); + for (var i = 0; i < materials.length; i++) { + if (!subDatas[i]) break; + var vfm = subDatas[i].vfm; + var material = materials[i]; + material.define("CC_USE_ATTRIBUTE_COLOR", !!vfm.element(_gfx["default"].ATTR_COLOR), void 0, true); + material.define("CC_USE_ATTRIBUTE_UV0", !!vfm.element(_gfx["default"].ATTR_UV0), void 0, true); + material.define("CC_USE_ATTRIBUTE_NORMAL", !!vfm.element(_gfx["default"].ATTR_NORMAL), void 0, true); + material.define("CC_USE_ATTRIBUTE_TANGENT", !!vfm.element(_gfx["default"].ATTR_TANGENT), void 0, true); + } + true; + for (var name in this._debugDatas) this._debugDatas[name].length = 0; + false; + }, + _checkBacth: function _checkBacth() { } + }); + true; + var BLACK_COLOR = cc.Color.BLACK; + var RED_COLOR = cc.Color.RED; + var v3_tmp = [cc.v3(), cc.v3()]; + var mat4_tmp = cc.mat4(); + var createDebugDataFns = { + normal: function normal(comp, ia, subData, subIndex) { + var oldVfm = subData.vfm; + var normalEle = oldVfm.element(_gfx["default"].ATTR_NORMAL); + var posEle = oldVfm.element(_gfx["default"].ATTR_POSITION); + var jointEle = oldVfm.element(_gfx["default"].ATTR_JOINTS); + var weightEle = oldVfm.element(_gfx["default"].ATTR_WEIGHTS); + if (!normalEle || !posEle) return; + var indices = []; + var vbData = []; + var lineLength = 100; + _vec["default"].set(v3_tmp[0], 5, 0, 0); + _mat["default"].invert(mat4_tmp, comp.node._worldMatrix); + _vec["default"].transformMat4Normal(v3_tmp[0], v3_tmp[0], mat4_tmp); + lineLength = v3_tmp[0].mag(); + var mesh = comp.mesh; + var posData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_POSITION); + var normalData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_NORMAL); + var jointData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_JOINTS); + var weightData = mesh._getAttrMeshData(subIndex, _gfx["default"].ATTR_WEIGHTS); + var vertexCount = posData.length / posEle.num; + for (var i = 0; i < vertexCount; i++) { + var normalIndex = i * normalEle.num; + var posIndex = i * posEle.num; + _vec["default"].set(v3_tmp[0], normalData[normalIndex], normalData[normalIndex + 1], normalData[normalIndex + 2]); + _vec["default"].set(v3_tmp[1], posData[posIndex], posData[posIndex + 1], posData[posIndex + 2]); + _vec["default"].scaleAndAdd(v3_tmp[0], v3_tmp[1], v3_tmp[0], lineLength); + for (var lineIndex = 0; lineIndex < 2; lineIndex++) { + vbData.push(v3_tmp[lineIndex].x, v3_tmp[lineIndex].y, v3_tmp[lineIndex].z); + if (jointEle) { + var jointIndex = i * jointEle.num; + for (var j = 0; j < jointEle.num; j++) vbData.push(jointData[jointIndex + j]); + } + if (weightEle) { + var weightIndex = i * weightEle.num; + for (var _j = 0; _j < weightEle.num; _j++) vbData.push(weightData[weightIndex + _j]); + } + } + indices.push(2 * i, 2 * i + 1); + } + var formatOpts = [{ + name: _gfx["default"].ATTR_POSITION, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: 3 + }]; + jointEle && formatOpts.push({ + name: _gfx["default"].ATTR_JOINTS, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: jointEle.num + }); + weightEle && formatOpts.push({ + name: _gfx["default"].ATTR_WEIGHTS, + type: _gfx["default"].ATTR_TYPE_FLOAT32, + num: weightEle.num + }); + var gfxVFmt = new _gfx["default"].VertexFormat(formatOpts); + var vb = new _gfx["default"].VertexBuffer(Renderer.device, gfxVFmt, _gfx["default"].USAGE_STATIC, new Float32Array(vbData)); + var ibData = new Uint16Array(indices); + var ib = new _gfx["default"].IndexBuffer(Renderer.device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, ibData, ibData.length); + var m = _materialVariant["default"].createWithBuiltin("unlit"); + m.setProperty("diffuseColor", RED_COLOR); + return { + material: m, + ia: new _inputAssembler["default"](vb, ib, _gfx["default"].PT_LINES) + }; + }, + wireFrame: function wireFrame(comp, ia, subData) { + var oldIbData = subData.getIData(Uint16Array); + var m = _materialVariant["default"].createWithBuiltin("unlit"); + m.setProperty("diffuseColor", BLACK_COLOR); + var indices = []; + for (var i = 0; i < oldIbData.length; i += 3) { + var a = oldIbData[i + 0]; + var b = oldIbData[i + 1]; + var c = oldIbData[i + 2]; + indices.push(a, b, b, c, c, a); + } + var ibData = new Uint16Array(indices); + var ib = new _gfx["default"].IndexBuffer(Renderer.device, _gfx["default"].INDEX_FMT_UINT16, _gfx["default"].USAGE_STATIC, ibData, ibData.length); + return { + material: m, + ia: new _inputAssembler["default"](ia._vertexBuffer, ib, _gfx["default"].PT_LINES) + }; + } + }; + var _proto = MeshRenderer.prototype; + _proto._updateDebugDatas = function () { + var debugDatas = this._debugDatas; + var subMeshes = this._mesh.subMeshes; + var subDatas = this._mesh._subDatas; + for (var name in debugDatas) { + var debugData = debugDatas[name]; + if (debugData.length === subMeshes.length) continue; + if (!cc.macro["SHOW_MESH_" + name.toUpperCase()]) continue; + debugData.length = subMeshes.length; + for (var i = 0; i < subMeshes.length; i++) debugData[i] = createDebugDataFns[name](this, subMeshes[i], subDatas[i], i); + } + }; + cc.MeshRenderer = module.exports = MeshRenderer; + }), { + "../../renderer/core/input-assembler": 362, + "../../renderer/gfx": 372, + "../assets/material/CCMaterial": 124, + "../assets/material/material-variant": 131, + "../components/CCRenderComponent": 160, + "../geom-utils/aabb": 190, + "../renderer": 271, + "../renderer/render-flow": 272, + "../value-types/mat4": 341, + "../value-types/vec3": 349, + "./CCMesh": 207 + }], + 209: [(function (require, module, exports) { + "use strict"; + require("./CCMesh"); + true; + require("./CCMeshRenderer"); + require("./mesh-renderer"); + }), { + "./CCMesh": 207, + "./CCMeshRenderer": 208, + "./mesh-renderer": 211 + }], + 210: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.MeshData = MeshData; + exports.Primitive = exports.VertexBundle = exports.VertexFormat = exports.BufferRange = void 0; + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var BufferRange = cc.Class({ + name: "cc.BufferRange", + properties: { + offset: 0, + length: 0 + } + }); + exports.BufferRange = BufferRange; + var VertexFormat = cc.Class({ + name: "cc.mesh.VertexFormat", + properties: { + name: "", + type: -1, + num: -1, + normalize: false + } + }); + exports.VertexFormat = VertexFormat; + var VertexBundle = cc.Class({ + name: "cc.mesh.VertexBundle", + properties: { + data: { + default: null, + type: BufferRange + }, + formats: { + default: [], + type: VertexFormat + }, + verticesCount: 0 + } + }); + exports.VertexBundle = VertexBundle; + var Primitive = cc.Class({ + name: "cc.mesh.Primitive", + properties: { + vertexBundleIndices: { + default: [], + type: cc.Float + }, + data: { + default: null, + type: BufferRange + }, + indexUnit: _gfx["default"].INDEX_FMT_UINT16, + topology: _gfx["default"].PT_TRIANGLES + } + }); + exports.Primitive = Primitive; + function MeshData() { + this.vData = null; + this.float32VData = null; + this.uint32VData = null; + this.iData = null; + this.uint16IData = null; + this.vfm = null; + this.offset = 0; + this.vb = null; + this.ib = null; + this.vDirty = false; + this.iDirty = false; + this.enable = true; + } + MeshData.prototype.setVData = function (data) { + this.vData = data; + this.float32VData = null; + this.uint32VData = null; + }; + MeshData.prototype.getVData = function (format) { + if (format === Float32Array) { + this.float32VData || (this.float32VData = new Float32Array(this.vData.buffer, this.vData.byteOffset, this.vData.byteLength / 4)); + return this.float32VData; + } + if (format === Uint32Array) { + this.uint32VData || (this.uint32VData = new Uint32Array(this.vData.buffer, this.vData.byteOffset, this.vData.byteLength / 4)); + return this.uint32VData; + } + return this.vData; + }; + MeshData.prototype.getIData = function (format) { + if (format === Uint16Array) { + this.uint16IData || (this.uint16IData = new Uint16Array(this.iData.buffer, this.iData.byteOffset, this.iData.byteLength / 2)); + return this.uint16IData; + } + return this.iData; + }; + }), { + "../../renderer/gfx": 372 + }], + 211: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("../renderer/assembler")); + var _gfx = _interopRequireDefault(require("../../renderer/gfx")); + var _vec = _interopRequireDefault(require("../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var MeshRenderer = require("./CCMeshRenderer"); + var _tmp_vec3 = new _vec["default"](); + var MeshRendererAssembler = (function (_Assembler) { + _inheritsLoose(MeshRendererAssembler, _Assembler); + function MeshRendererAssembler() { + return _Assembler.apply(this, arguments) || this; + } + var _proto = MeshRendererAssembler.prototype; + _proto.init = function init(renderComp) { + _Assembler.prototype.init.call(this, renderComp); + this._worldDatas = {}; + this._renderNode = null; + }; + _proto.setRenderNode = function setRenderNode(node) { + this._renderNode = node; + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + if (!comp.mesh) return; + comp.mesh._uploadData(); + var isCullingMaskSame = renderer.cullingMask === comp.node._cullingMask; + var enableAutoBatch = comp.enableAutoBatch; + var materials = comp._materials; + var submeshes = comp.mesh._subMeshes; + var subDatas = comp.mesh.subDatas; + for (var i = 0; i < submeshes.length; i++) { + var ia = submeshes[i]; + var meshData = subDatas[i]; + var material = materials[i] || materials[0]; + if (!enableAutoBatch || !meshData.canBatch || ia._primitiveType !== _gfx["default"].PT_TRIANGLES) { + renderer._flush(); + renderer.material = material; + renderer.cullingMask = comp.node._cullingMask; + renderer.node = this._renderNode; + renderer._flushIA(ia); + continue; + } + isCullingMaskSame && material.getHash() === renderer.material.getHash() || renderer._flush(); + renderer.material = material; + renderer.cullingMask = comp.node._cullingMask; + renderer.node = renderer._dummyNode; + this._fillBuffer(comp, meshData, renderer, i); + } + if ((true, cc.macro.SHOW_MESH_WIREFRAME || cc.macro.SHOW_MESH_NORMAL) && !(comp.node._cullingMask & 1 << cc.Node.BuiltinGroupIndex.DEBUG)) { + renderer._flush(); + renderer.node = this._renderNode; + comp._updateDebugDatas(); + cc.macro.SHOW_MESH_WIREFRAME && this._drawDebugDatas(comp, renderer, "wireFrame"); + cc.macro.SHOW_MESH_NORMAL && this._drawDebugDatas(comp, renderer, "normal"); + } + }; + _proto._fillBuffer = function _fillBuffer(comp, meshData, renderer, dataIndex) { + var vData = meshData.getVData(Float32Array); + var vtxFormat = meshData.vfm; + var vertexCount = vData.byteLength / vtxFormat._bytes | 0; + var indices = meshData.getIData(Uint16Array); + var indicesCount = indices.length; + var buffer = renderer.getBuffer("mesh", vtxFormat); + var offsetInfo = buffer.request(vertexCount, indicesCount); + var indiceOffset = offsetInfo.indiceOffset, vertexOffset = offsetInfo.byteOffset >> 2, vertexId = offsetInfo.vertexOffset, vbuf = buffer._vData, ibuf = buffer._iData; + !renderer.worldMatDirty && this._worldDatas[dataIndex] || this._updateWorldVertices(dataIndex, vertexCount, vData, vtxFormat, comp.node._worldMatrix); + vbuf.set(this._worldDatas[dataIndex], vertexOffset); + for (var i = 0; i < indicesCount; i++) ibuf[indiceOffset + i] = vertexId + indices[i]; + }; + _proto._updateWorldVertices = function _updateWorldVertices(dataIndex, vertexCount, local, vtxFormat, wolrdMatrix) { + var world = this._worldDatas[dataIndex]; + if (!world) { + world = this._worldDatas[dataIndex] = new Float32Array(local.length); + world.set(local); + } + var floatCount = vtxFormat._bytes / 4; + var elements = vtxFormat._elements; + for (var i = 0, n = elements.length; i < n; i++) { + var element = elements[i]; + var attrOffset = element.offset / 4; + if (element.name === _gfx["default"].ATTR_POSITION || element.name === _gfx["default"].ATTR_NORMAL) { + var transformMat4 = element.name === _gfx["default"].ATTR_NORMAL ? _vec["default"].transformMat4Normal : _vec["default"].transformMat4; + for (var j = 0; j < vertexCount; j++) { + var offset = j * floatCount + attrOffset; + _tmp_vec3.x = local[offset]; + _tmp_vec3.y = local[offset + 1]; + _tmp_vec3.z = local[offset + 2]; + transformMat4(_tmp_vec3, _tmp_vec3, wolrdMatrix); + world[offset] = _tmp_vec3.x; + world[offset + 1] = _tmp_vec3.y; + world[offset + 2] = _tmp_vec3.z; + } + } + } + }; + _proto._drawDebugDatas = function _drawDebugDatas(comp, renderer, name) { + var debugDatas = comp._debugDatas[name]; + if (!debugDatas) return; + for (var i = 0; i < debugDatas.length; i++) { + var debugData = debugDatas[i]; + if (!debugData) continue; + var material = debugData.material; + renderer.material = material; + renderer._flushIA(debugData.ia); + } + }; + return MeshRendererAssembler; + })(_assembler["default"]); + exports["default"] = MeshRendererAssembler; + _assembler["default"].register(MeshRenderer, MeshRendererAssembler); + module.exports = exports["default"]; + }), { + "../../renderer/gfx": 372, + "../renderer/assembler": 268, + "../value-types/vec3": 349, + "./CCMeshRenderer": 208 + }], + 212: [(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": 143, + "./platform/CCObject": 245, + "./platform/js": 260, + "./utils/misc": 324 + }], + 213: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("./CCPhysicsTypes").PTM_RATIO; + var ContactType = require("./CCPhysicsTypes").ContactType; + var pools = []; + var pointCache = [cc.v2(), cc.v2()]; + var b2worldmanifold = new b2.WorldManifold(); + var worldmanifold = { + points: [], + separations: [], + normal: cc.v2() + }; + function ManifoldPoint() { + this.localPoint = cc.v2(); + this.normalImpulse = 0; + this.tangentImpulse = 0; + } + var manifoldPointCache = [new ManifoldPoint(), new ManifoldPoint()]; + var b2manifold = new b2.Manifold(); + var manifold = { + type: 0, + localPoint: cc.v2(), + localNormal: cc.v2(), + points: [] + }; + var impulse = { + normalImpulses: [], + tangentImpulses: [] + }; + function PhysicsContact() { } + PhysicsContact.prototype.init = function (b2contact) { + this.colliderA = b2contact.GetFixtureA().collider; + this.colliderB = b2contact.GetFixtureB().collider; + this.disabled = false; + this.disabledOnce = false; + this._impulse = null; + this._inverted = false; + this._b2contact = b2contact; + b2contact._contact = this; + }; + PhysicsContact.prototype.reset = function () { + this.setTangentSpeed(0); + this.resetFriction(); + this.resetRestitution(); + this.colliderA = null; + this.colliderB = null; + this.disabled = false; + this._impulse = null; + this._b2contact._contact = null; + this._b2contact = null; + }; + PhysicsContact.prototype.getWorldManifold = function () { + var points = worldmanifold.points; + var separations = worldmanifold.separations; + var normal = worldmanifold.normal; + this._b2contact.GetWorldManifold(b2worldmanifold); + var b2points = b2worldmanifold.points; + var b2separations = b2worldmanifold.separations; + var count = this._b2contact.GetManifold().pointCount; + points.length = separations.length = count; + for (var i = 0; i < count; i++) { + var p = pointCache[i]; + p.x = b2points[i].x * PTM_RATIO; + p.y = b2points[i].y * PTM_RATIO; + points[i] = p; + separations[i] = b2separations[i] * PTM_RATIO; + } + normal.x = b2worldmanifold.normal.x; + normal.y = b2worldmanifold.normal.y; + if (this._inverted) { + normal.x *= -1; + normal.y *= -1; + } + return worldmanifold; + }; + PhysicsContact.prototype.getManifold = function () { + var points = manifold.points; + var localNormal = manifold.localNormal; + var localPoint = manifold.localPoint; + var b2manifold = this._b2contact.GetManifold(); + var b2points = b2manifold.points; + var count = points.length = b2manifold.pointCount; + for (var i = 0; i < count; i++) { + var p = manifoldPointCache[i]; + var b2p = b2points[i]; + p.localPoint.x = b2p.localPoint.x * PTM_RATIO; + p.localPoint.Y = b2p.localPoint.Y * PTM_RATIO; + p.normalImpulse = b2p.normalImpulse * PTM_RATIO; + p.tangentImpulse = b2p.tangentImpulse; + points[i] = p; + } + localPoint.x = b2manifold.localPoint.x * PTM_RATIO; + localPoint.y = b2manifold.localPoint.y * PTM_RATIO; + localNormal.x = b2manifold.localNormal.x; + localNormal.y = b2manifold.localNormal.y; + manifold.type = b2manifold.type; + if (this._inverted) { + localNormal.x *= -1; + localNormal.y *= -1; + } + return manifold; + }; + PhysicsContact.prototype.getImpulse = function () { + var b2impulse = this._impulse; + if (!b2impulse) return null; + var normalImpulses = impulse.normalImpulses; + var tangentImpulses = impulse.tangentImpulses; + var count = b2impulse.count; + for (var i = 0; i < count; i++) { + normalImpulses[i] = b2impulse.normalImpulses[i] * PTM_RATIO; + tangentImpulses[i] = b2impulse.tangentImpulses[i]; + } + tangentImpulses.length = normalImpulses.length = count; + return impulse; + }; + PhysicsContact.prototype.emit = function (contactType) { + var func; + switch (contactType) { + case ContactType.BEGIN_CONTACT: + func = "onBeginContact"; + break; + + case ContactType.END_CONTACT: + func = "onEndContact"; + break; + + case ContactType.PRE_SOLVE: + func = "onPreSolve"; + break; + + case ContactType.POST_SOLVE: + func = "onPostSolve"; + } + var colliderA = this.colliderA; + var colliderB = this.colliderB; + var bodyA = colliderA.body; + var bodyB = colliderB.body; + var comps; + var i, l, comp; + if (bodyA.enabledContactListener) { + comps = bodyA.node._components; + this._inverted = false; + for (i = 0, l = comps.length; i < l; i++) { + comp = comps[i]; + comp[func] && comp[func](this, colliderA, colliderB); + } + } + if (bodyB.enabledContactListener) { + comps = bodyB.node._components; + this._inverted = true; + for (i = 0, l = comps.length; i < l; i++) { + comp = comps[i]; + comp[func] && comp[func](this, colliderB, colliderA); + } + } + if (this.disabled || this.disabledOnce) { + this.setEnabled(false); + this.disabledOnce = false; + } + }; + PhysicsContact.get = function (b2contact) { + var c; + c = 0 === pools.length ? new cc.PhysicsContact() : pools.pop(); + c.init(b2contact); + return c; + }; + PhysicsContact.put = function (b2contact) { + var c = b2contact._contact; + if (!c) return; + pools.push(c); + c.reset(); + }; + var _p = PhysicsContact.prototype; + _p.setEnabled = function (value) { + this._b2contact.SetEnabled(value); + }; + _p.isTouching = function () { + return this._b2contact.IsTouching(); + }; + _p.setTangentSpeed = function (value) { + this._b2contact.SetTangentSpeed(value / PTM_RATIO); + }; + _p.getTangentSpeed = function () { + return this._b2contact.GetTangentSpeed() * PTM_RATIO; + }; + _p.setFriction = function (value) { + this._b2contact.SetFriction(value); + }; + _p.getFriction = function () { + return this._b2contact.GetFriction(); + }; + _p.resetFriction = function () { + return this._b2contact.ResetFriction(); + }; + _p.setRestitution = function (value) { + this._b2contact.SetRestitution(value); + }; + _p.getRestitution = function () { + return this._b2contact.GetRestitution(); + }; + _p.resetRestitution = function () { + return this._b2contact.ResetRestitution(); + }; + PhysicsContact.ContactType = ContactType; + cc.PhysicsContact = module.exports = PhysicsContact; + }), { + "./CCPhysicsTypes": 215 + }], + 214: [(function (require, module, exports) { + "use strict"; + var PhysicsTypes = require("./CCPhysicsTypes"); + var ContactType = PhysicsTypes.ContactType; + var BodyType = PhysicsTypes.BodyType; + var RayCastType = PhysicsTypes.RayCastType; + var DrawBits = PhysicsTypes.DrawBits; + var PTM_RATIO = PhysicsTypes.PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = PhysicsTypes.ANGLE_TO_PHYSICS_ANGLE; + var PHYSICS_ANGLE_TO_ANGLE = PhysicsTypes.PHYSICS_ANGLE_TO_ANGLE; + var convertToNodeRotation = require("./utils").convertToNodeRotation; + var DebugDraw = require("./platform/CCPhysicsDebugDraw"); + var b2_aabb_tmp = new b2.AABB(); + var b2_vec2_tmp1 = new b2.Vec2(); + var b2_vec2_tmp2 = new b2.Vec2(); + var vec2_tmp = cc.v2(); + var PhysicsManager = cc.Class({ + mixins: [cc.EventTarget], + statics: { + DrawBits: DrawBits, + PTM_RATIO: PTM_RATIO, + VELOCITY_ITERATIONS: 10, + POSITION_ITERATIONS: 10, + FIXED_TIME_STEP: 1 / 60, + MAX_ACCUMULATOR: .2 + }, + ctor: function ctor() { + this._debugDrawFlags = 0; + this._debugDrawer = null; + this._world = null; + this._bodies = []; + this._joints = []; + this._contactMap = {}; + this._contactID = 0; + this._delayEvents = []; + this._accumulator = 0; + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + this.enabledAccumulator = false; + }, + pushDelayEvent: function pushDelayEvent(target, func, args) { + this._steping ? this._delayEvents.push({ + target: target, + func: func, + args: args + }) : target[func].apply(target, args); + }, + update: function update(dt) { + var world = this._world; + if (!world || !this.enabled) return; + this.emit("before-step"); + this._steping = true; + var velocityIterations = PhysicsManager.VELOCITY_ITERATIONS; + var positionIterations = PhysicsManager.POSITION_ITERATIONS; + if (this.enabledAccumulator) { + this._accumulator += dt; + var FIXED_TIME_STEP = PhysicsManager.FIXED_TIME_STEP; + var MAX_ACCUMULATOR = PhysicsManager.MAX_ACCUMULATOR; + this._accumulator > MAX_ACCUMULATOR && (this._accumulator = MAX_ACCUMULATOR); + while (this._accumulator > FIXED_TIME_STEP) { + world.Step(FIXED_TIME_STEP, velocityIterations, positionIterations); + this._accumulator -= FIXED_TIME_STEP; + } + } else { + var timeStep = 1 / cc.game.config["frameRate"]; + world.Step(timeStep, velocityIterations, positionIterations); + } + if (this.debugDrawFlags) { + this._checkDebugDrawValid(); + this._debugDrawer.clear(); + world.DrawDebugData(); + } + this._steping = false; + var events = this._delayEvents; + for (var i = 0, l = events.length; i < l; i++) { + var event = events[i]; + event.target[event.func].apply(event.target, event.args); + } + events.length = 0; + this._syncNode(); + }, + testPoint: function testPoint(point) { + var x = b2_vec2_tmp1.x = point.x / PTM_RATIO; + var y = b2_vec2_tmp1.y = point.y / PTM_RATIO; + var d = .2 / PTM_RATIO; + b2_aabb_tmp.lowerBound.x = x - d; + b2_aabb_tmp.lowerBound.y = y - d; + b2_aabb_tmp.upperBound.x = x + d; + b2_aabb_tmp.upperBound.y = y + d; + var callback = this._aabbQueryCallback; + callback.init(b2_vec2_tmp1); + this._world.QueryAABB(callback, b2_aabb_tmp); + var fixture = callback.getFixture(); + if (fixture) return fixture.collider; + return null; + }, + testAABB: function testAABB(rect) { + b2_aabb_tmp.lowerBound.x = rect.xMin / PTM_RATIO; + b2_aabb_tmp.lowerBound.y = rect.yMin / PTM_RATIO; + b2_aabb_tmp.upperBound.x = rect.xMax / PTM_RATIO; + b2_aabb_tmp.upperBound.y = rect.yMax / PTM_RATIO; + var callback = this._aabbQueryCallback; + callback.init(); + this._world.QueryAABB(callback, b2_aabb_tmp); + var fixtures = callback.getFixtures(); + var colliders = fixtures.map((function (fixture) { + return fixture.collider; + })); + return colliders; + }, + rayCast: function rayCast(p1, p2, type) { + if (p1.equals(p2)) return []; + type = type || RayCastType.Closest; + b2_vec2_tmp1.x = p1.x / PTM_RATIO; + b2_vec2_tmp1.y = p1.y / PTM_RATIO; + b2_vec2_tmp2.x = p2.x / PTM_RATIO; + b2_vec2_tmp2.y = p2.y / PTM_RATIO; + var callback = this._raycastQueryCallback; + callback.init(type); + this._world.RayCast(callback, b2_vec2_tmp1, b2_vec2_tmp2); + var fixtures = callback.getFixtures(); + if (fixtures.length > 0) { + var points = callback.getPoints(); + var normals = callback.getNormals(); + var fractions = callback.getFractions(); + var results = []; + for (var i = 0, l = fixtures.length; i < l; i++) { + var fixture = fixtures[i]; + var collider = fixture.collider; + if (type === RayCastType.AllClosest) { + var result = results.find((function (result) { + return result.collider === collider; + })); + if (result) { + if (fractions[i] < result.fraction) { + result.fixtureIndex = collider._getFixtureIndex(fixture); + result.point.x = points[i].x * PTM_RATIO; + result.point.y = points[i].y * PTM_RATIO; + result.normal.x = normals[i].x; + result.normal.y = normals[i].y; + result.fraction = fractions[i]; + } + continue; + } + } + results.push({ + collider: collider, + fixtureIndex: collider._getFixtureIndex(fixture), + point: cc.v2(points[i].x * PTM_RATIO, points[i].y * PTM_RATIO), + normal: cc.v2(normals[i]), + fraction: fractions[i] + }); + } + return results; + } + return []; + }, + syncPosition: function syncPosition() { + var bodies = this._bodies; + for (var i = 0; i < bodies.length; i++) bodies[i].syncPosition(); + }, + syncRotation: function syncRotation() { + var bodies = this._bodies; + for (var i = 0; i < bodies.length; i++) bodies[i].syncRotation(); + }, + _registerContactFixture: function _registerContactFixture(fixture) { + this._contactListener.registerContactFixture(fixture); + }, + _unregisterContactFixture: function _unregisterContactFixture(fixture) { + this._contactListener.unregisterContactFixture(fixture); + }, + _addBody: function _addBody(body, bodyDef) { + var world = this._world; + var node = body.node; + if (!world || !node) return; + body._b2Body = world.CreateBody(bodyDef); + body._b2Body.body = body; + this._bodies.push(body); + }, + _removeBody: function _removeBody(body) { + var world = this._world; + if (!world) return; + body._b2Body.body = null; + world.DestroyBody(body._b2Body); + body._b2Body = null; + cc.js.array.remove(this._bodies, body); + }, + _addJoint: function _addJoint(joint, jointDef) { + var b2joint = this._world.CreateJoint(jointDef); + if (!b2joint) return; + b2joint._joint = joint; + joint._joint = b2joint; + this._joints.push(joint); + }, + _removeJoint: function _removeJoint(joint) { + joint._isValid() && this._world.DestroyJoint(joint._joint); + joint._joint && (joint._joint._joint = null); + cc.js.array.remove(this._joints, joint); + }, + _initCallback: function _initCallback() { + if (!this._world) { + cc.warn("Please init PhysicsManager first"); + return; + } + if (this._contactListener) return; + var listener = new cc.PhysicsContactListener(); + listener.setBeginContact(this._onBeginContact); + listener.setEndContact(this._onEndContact); + listener.setPreSolve(this._onPreSolve); + listener.setPostSolve(this._onPostSolve); + this._world.SetContactListener(listener); + this._contactListener = listener; + this._aabbQueryCallback = new cc.PhysicsAABBQueryCallback(); + this._raycastQueryCallback = new cc.PhysicsRayCastCallback(); + }, + _init: function _init() { + this.enabled = true; + this.debugDrawFlags = DrawBits.e_shapeBit; + }, + _getWorld: function _getWorld() { + return this._world; + }, + _syncNode: function _syncNode() { + var bodies = this._bodies; + for (var i = 0, l = bodies.length; i < l; i++) { + var body = bodies[i]; + var node = body.node; + var b2body = body._b2Body; + var pos = b2body.GetPosition(); + vec2_tmp.x = pos.x * PTM_RATIO; + vec2_tmp.y = pos.y * PTM_RATIO; + var angle = b2body.GetAngle() * PHYSICS_ANGLE_TO_ANGLE; + if (null !== node.parent.parent) { + vec2_tmp = node.parent.convertToNodeSpaceAR(vec2_tmp); + angle = convertToNodeRotation(node.parent, angle); + } + var tempMask = node._eventMask; + node._eventMask = 0; + node.position = vec2_tmp; + node.angle = -angle; + node._eventMask = tempMask; + body.type === BodyType.Animated && body.resetVelocity(); + } + }, + _onBeginContact: function _onBeginContact(b2contact) { + var c = cc.PhysicsContact.get(b2contact); + c.emit(ContactType.BEGIN_CONTACT); + }, + _onEndContact: function _onEndContact(b2contact) { + var c = b2contact._contact; + if (!c) return; + c.emit(ContactType.END_CONTACT); + cc.PhysicsContact.put(b2contact); + }, + _onPreSolve: function _onPreSolve(b2contact) { + var c = b2contact._contact; + if (!c) return; + c.emit(ContactType.PRE_SOLVE); + }, + _onPostSolve: function _onPostSolve(b2contact, impulse) { + var c = b2contact._contact; + if (!c) return; + c._impulse = impulse; + c.emit(ContactType.POST_SOLVE); + c._impulse = null; + }, + _checkDebugDrawValid: function _checkDebugDrawValid() { + if (!this._debugDrawer || !this._debugDrawer.isValid) { + var node = new cc.Node("PHYSICS_MANAGER_DEBUG_DRAW"); + node.zIndex = cc.macro.MAX_ZINDEX; + cc.game.addPersistRootNode(node); + this._debugDrawer = node.addComponent(cc.Graphics); + var debugDraw = new DebugDraw(this._debugDrawer); + debugDraw.SetFlags(this.debugDrawFlags); + this._world.SetDebugDraw(debugDraw); + } + } + }); + cc.js.getset(PhysicsManager.prototype, "enabled", (function () { + return this._enabled; + }), (function (value) { + false; + if (value && !this._world) { + var world = new b2.World(new b2.Vec2(0, -10)); + world.SetAllowSleeping(true); + this._world = world; + this._initCallback(); + } + this._enabled = value; + })); + cc.js.getset(PhysicsManager.prototype, "debugDrawFlags", (function () { + return this._debugDrawFlags; + }), (function (value) { + false; + value && !this._debugDrawFlags ? this._debugDrawer && this._debugDrawer.node && (this._debugDrawer.node.active = true) : !value && this._debugDrawFlags && this._debugDrawer && this._debugDrawer.node && (this._debugDrawer.node.active = false); + if (value) { + this._checkDebugDrawValid(); + this._world.m_debugDraw.SetFlags(value); + } + this._debugDrawFlags = value; + if (value) { + this._checkDebugDrawValid(); + this._world.m_debugDraw.SetFlags(value); + } + })); + cc.js.getset(PhysicsManager.prototype, "gravity", (function () { + if (this._world) { + var g = this._world.GetGravity(); + return cc.v2(g.x * PTM_RATIO, g.y * PTM_RATIO); + } + return cc.v2(); + }), (function (value) { + this._world && this._world.SetGravity(new b2.Vec2(value.x / PTM_RATIO, value.y / PTM_RATIO)); + })); + cc.PhysicsManager = module.exports = PhysicsManager; + }), { + "./CCPhysicsTypes": 215, + "./platform/CCPhysicsDebugDraw": 236, + "./utils": 238 + }], + 215: [(function (require, module, exports) { + "use strict"; + var ContactType = { + BEGIN_CONTACT: "begin-contact", + END_CONTACT: "end-contact", + PRE_SOLVE: "pre-solve", + POST_SOLVE: "post-solve" + }; + var BodyType = cc.Enum({ + Static: 0, + Kinematic: 1, + Dynamic: 2, + Animated: 3 + }); + cc.RigidBodyType = BodyType; + var RayCastType = cc.Enum({ + Closest: 0, + Any: 1, + AllClosest: 2, + All: 3 + }); + cc.RayCastType = RayCastType; + module.exports = { + BodyType: BodyType, + ContactType: ContactType, + RayCastType: RayCastType, + DrawBits: b2.DrawFlags, + PTM_RATIO: 32, + ANGLE_TO_PHYSICS_ANGLE: -Math.PI / 180, + PHYSICS_ANGLE_TO_ANGLE: -180 / Math.PI + }; + }), {}], + 216: [(function (require, module, exports) { + "use strict"; + function At(i, vertices) { + var s = vertices.length; + return vertices[i < 0 ? s - -i % s : i % s]; + } + function Copy(i, j, vertices) { + var p = []; + while (j < i) j += vertices.length; + for (; i <= j; ++i) p.push(At(i, vertices)); + return p; + } + function ConvexPartition(vertices) { + ForceCounterClockWise(vertices); + var list = []; + var d, lowerDist, upperDist; + var p; + var lowerInt = cc.v2(); + var upperInt = cc.v2(); + var lowerIndex = 0, upperIndex = 0; + var lowerPoly, upperPoly; + for (var i = 0; i < vertices.length; ++i) if (Reflex(i, vertices)) { + lowerDist = upperDist = 1e8; + for (var j = 0; j < vertices.length; ++j) { + if (Left(At(i - 1, vertices), At(i, vertices), At(j, vertices)) && RightOn(At(i - 1, vertices), At(i, vertices), At(j - 1, vertices))) { + p = LineIntersect(At(i - 1, vertices), At(i, vertices), At(j, vertices), At(j - 1, vertices)); + if (Right(At(i + 1, vertices), At(i, vertices), p)) { + d = SquareDist(At(i, vertices), p); + if (d < lowerDist) { + lowerDist = d; + lowerInt = p; + lowerIndex = j; + } + } + } + if (Left(At(i + 1, vertices), At(i, vertices), At(j + 1, vertices)) && RightOn(At(i + 1, vertices), At(i, vertices), At(j, vertices))) { + p = LineIntersect(At(i + 1, vertices), At(i, vertices), At(j, vertices), At(j + 1, vertices)); + if (Left(At(i - 1, vertices), At(i, vertices), p)) { + d = SquareDist(At(i, vertices), p); + if (d < upperDist) { + upperDist = d; + upperIndex = j; + upperInt = p; + } + } + } + } + if (lowerIndex == (upperIndex + 1) % vertices.length) { + var sp = lowerInt.add(upperInt).div(2); + lowerPoly = Copy(i, upperIndex, vertices); + lowerPoly.push(sp); + upperPoly = Copy(lowerIndex, i, vertices); + upperPoly.push(sp); + } else { + var highestScore = 0, bestIndex = lowerIndex; + while (upperIndex < lowerIndex) upperIndex += vertices.length; + for (var j = lowerIndex; j <= upperIndex; ++j) if (CanSee(i, j, vertices)) { + var score = 1 / (SquareDist(At(i, vertices), At(j, vertices)) + 1); + Reflex(j, vertices) ? RightOn(At(j - 1, vertices), At(j, vertices), At(i, vertices)) && LeftOn(At(j + 1, vertices), At(j, vertices), At(i, vertices)) ? score += 3 : score += 2 : score += 1; + if (score > highestScore) { + bestIndex = j; + highestScore = score; + } + } + lowerPoly = Copy(i, bestIndex, vertices); + upperPoly = Copy(bestIndex, i, vertices); + } + list = list.concat(ConvexPartition(lowerPoly)); + list = list.concat(ConvexPartition(upperPoly)); + return list; + } + list.push(vertices); + for (var i = list.length - 1; i >= 0; i--) 0 == list[i].length && list.splice(i, 0); + return list; + } + function CanSee(i, j, vertices) { + if (Reflex(i, vertices)) { + if (LeftOn(At(i, vertices), At(i - 1, vertices), At(j, vertices)) && RightOn(At(i, vertices), At(i + 1, vertices), At(j, vertices))) return false; + } else if (RightOn(At(i, vertices), At(i + 1, vertices), At(j, vertices)) || LeftOn(At(i, vertices), At(i - 1, vertices), At(j, vertices))) return false; + if (Reflex(j, vertices)) { + if (LeftOn(At(j, vertices), At(j - 1, vertices), At(i, vertices)) && RightOn(At(j, vertices), At(j + 1, vertices), At(i, vertices))) return false; + } else if (RightOn(At(j, vertices), At(j + 1, vertices), At(i, vertices)) || LeftOn(At(j, vertices), At(j - 1, vertices), At(i, vertices))) return false; + for (var k = 0; k < vertices.length; ++k) { + if ((k + 1) % vertices.length == i || k == i || (k + 1) % vertices.length == j || k == j) continue; + var intersectionPoint = cc.v2(); + if (LineIntersect2(At(i, vertices), At(j, vertices), At(k, vertices), At(k + 1, vertices), intersectionPoint)) return false; + } + return true; + } + function Reflex(i, vertices) { + return Right(i, vertices); + } + function Right(a, b, c) { + if ("undefined" === typeof c) { + var i = a, vertices = b; + a = At(i - 1, vertices); + b = At(i, vertices); + c = At(i + 1, vertices); + } + return Area(a, b, c) < 0; + } + function Left(a, b, c) { + return Area(a, b, c) > 0; + } + function LeftOn(a, b, c) { + return Area(a, b, c) >= 0; + } + function RightOn(a, b, c) { + return Area(a, b, c) <= 0; + } + function SquareDist(a, b) { + var dx = b.x - a.x; + var dy = b.y - a.y; + return dx * dx + dy * dy; + } + function ForceCounterClockWise(vertices) { + IsCounterClockWise(vertices) || vertices.reverse(); + } + function IsCounterClockWise(vertices) { + if (vertices.length < 3) return true; + return GetSignedArea(vertices) > 0; + } + function GetSignedArea(vertices) { + var i; + var area = 0; + for (i = 0; i < vertices.length; i++) { + var j = (i + 1) % vertices.length; + area += vertices[i].x * vertices[j].y; + area -= vertices[i].y * vertices[j].x; + } + area /= 2; + return area; + } + function LineIntersect(p1, p2, q1, q2) { + var i = cc.v2(); + var a1 = p2.y - p1.y; + var b1 = p1.x - p2.x; + var c1 = a1 * p1.x + b1 * p1.y; + var a2 = q2.y - q1.y; + var b2 = q1.x - q2.x; + var c2 = a2 * q1.x + b2 * q1.y; + var det = a1 * b2 - a2 * b1; + if (!FloatEquals(det, 0)) { + i.x = (b2 * c1 - b1 * c2) / det; + i.y = (a1 * c2 - a2 * c1) / det; + } + return i; + } + function LineIntersect2(a0, a1, b0, b1, intersectionPoint) { + if (a0 == b0 || a0 == b1 || a1 == b0 || a1 == b1) return false; + var x1 = a0.x; + var y1 = a0.y; + var x2 = a1.x; + var y2 = a1.y; + var x3 = b0.x; + var y3 = b0.y; + var x4 = b1.x; + var y4 = b1.y; + if (Math.max(x1, x2) < Math.min(x3, x4) || Math.max(x3, x4) < Math.min(x1, x2)) return false; + if (Math.max(y1, y2) < Math.min(y3, y4) || Math.max(y3, y4) < Math.min(y1, y2)) return false; + var ua = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); + var ub = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); + var denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + if (Math.abs(denom) < 1e-6) return false; + ua /= denom; + ub /= denom; + if (0 < ua && ua < 1 && 0 < ub && ub < 1) { + intersectionPoint.x = x1 + ua * (x2 - x1); + intersectionPoint.y = y1 + ua * (y2 - y1); + return true; + } + return false; + } + function FloatEquals(value1, value2) { + return Math.abs(value1 - value2) <= 1e-6; + } + function Area(a, b, c) { + return a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y); + } + module.exports = { + ConvexPartition: ConvexPartition, + ForceCounterClockWise: ForceCounterClockWise, + IsCounterClockWise: IsCounterClockWise + }; + }), {}], + 217: [(function (require, module, exports) { + "use strict"; + var NodeEvent = require("../CCNode").EventType; + var PTM_RATIO = require("./CCPhysicsTypes").PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = require("./CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE; + var PHYSICS_ANGLE_TO_ANGLE = require("./CCPhysicsTypes").PHYSICS_ANGLE_TO_ANGLE; + var getWorldRotation = require("./utils").getWorldRotation; + var BodyType = require("./CCPhysicsTypes").BodyType; + var tempb2Vec21 = new b2.Vec2(); + var tempb2Vec22 = new b2.Vec2(); + var VEC2_ZERO = cc.Vec2.ZERO; + var RigidBody = cc.Class({ + name: "cc.RigidBody", + extends: cc.Component, + editor: false, + properties: { + _type: BodyType.Dynamic, + _allowSleep: true, + _gravityScale: 1, + _linearDamping: 0, + _angularDamping: 0, + _linearVelocity: cc.v2(0, 0), + _angularVelocity: 0, + _fixedRotation: false, + enabled: { + get: function get() { + return this._enabled; + }, + set: function set() { + cc.warnID(8200); + }, + visible: false, + override: true + }, + enabledContactListener: { + default: false, + tooltip: false + }, + bullet: { + default: false, + tooltip: false + }, + type: { + type: BodyType, + tooltip: false, + get: function get() { + return this._type; + }, + set: function set(value) { + this._type = value; + this._b2Body && (value === BodyType.Animated ? this._b2Body.SetType(BodyType.Kinematic) : this._b2Body.SetType(value)); + } + }, + allowSleep: { + tooltip: false, + get: function get() { + if (this._b2Body) return this._b2Body.IsSleepingAllowed(); + return this._allowSleep; + }, + set: function set(value) { + this._allowSleep = value; + this._b2Body && this._b2Body.SetSleepingAllowed(value); + } + }, + gravityScale: { + tooltip: false, + get: function get() { + return this._gravityScale; + }, + set: function set(value) { + this._gravityScale = value; + this._b2Body && this._b2Body.SetGravityScale(value); + } + }, + linearDamping: { + tooltip: false, + get: function get() { + return this._linearDamping; + }, + set: function set(value) { + this._linearDamping = value; + this._b2Body && this._b2Body.SetLinearDamping(this._linearDamping); + } + }, + angularDamping: { + tooltip: false, + get: function get() { + return this._angularDamping; + }, + set: function set(value) { + this._angularDamping = value; + this._b2Body && this._b2Body.SetAngularDamping(value); + } + }, + linearVelocity: { + tooltip: false, + type: cc.Vec2, + get: function get() { + var lv = this._linearVelocity; + if (this._b2Body) { + var velocity = this._b2Body.GetLinearVelocity(); + lv.x = velocity.x * PTM_RATIO; + lv.y = velocity.y * PTM_RATIO; + } + return lv; + }, + set: function set(value) { + this._linearVelocity = value; + var b2body = this._b2Body; + if (b2body) { + var temp = b2body.m_linearVelocity; + temp.Set(value.x / PTM_RATIO, value.y / PTM_RATIO); + b2body.SetLinearVelocity(temp); + } + } + }, + angularVelocity: { + tooltip: false, + get: function get() { + if (this._b2Body) return this._b2Body.GetAngularVelocity() * PHYSICS_ANGLE_TO_ANGLE; + return this._angularVelocity; + }, + set: function set(value) { + this._angularVelocity = value; + this._b2Body && this._b2Body.SetAngularVelocity(value * ANGLE_TO_PHYSICS_ANGLE); + } + }, + fixedRotation: { + tooltip: false, + get: function get() { + return this._fixedRotation; + }, + set: function set(value) { + this._fixedRotation = value; + this._b2Body && this._b2Body.SetFixedRotation(value); + } + }, + awake: { + visible: false, + tooltip: false, + get: function get() { + return !!this._b2Body && this._b2Body.IsAwake(); + }, + set: function set(value) { + this._b2Body && this._b2Body.SetAwake(value); + } + }, + awakeOnLoad: { + default: true, + tooltip: false, + animatable: false + }, + active: { + visible: false, + get: function get() { + return !!this._b2Body && this._b2Body.IsActive(); + }, + set: function set(value) { + this._b2Body && this._b2Body.SetActive(value); + } + } + }, + getLocalPoint: function getLocalPoint(worldPoint, out) { + out = out || cc.v2(); + if (this._b2Body) { + tempb2Vec21.Set(worldPoint.x / PTM_RATIO, worldPoint.y / PTM_RATIO); + var pos = this._b2Body.GetLocalPoint(tempb2Vec21, out); + out.x = pos.x * PTM_RATIO; + out.y = pos.y * PTM_RATIO; + } + return out; + }, + getWorldPoint: function getWorldPoint(localPoint, out) { + out = out || cc.v2(); + if (this._b2Body) { + tempb2Vec21.Set(localPoint.x / PTM_RATIO, localPoint.y / PTM_RATIO); + var pos = this._b2Body.GetWorldPoint(tempb2Vec21, out); + out.x = pos.x * PTM_RATIO; + out.y = pos.y * PTM_RATIO; + } + return out; + }, + getWorldVector: function getWorldVector(localVector, out) { + out = out || cc.v2(); + if (this._b2Body) { + tempb2Vec21.Set(localVector.x / PTM_RATIO, localVector.y / PTM_RATIO); + var vector = this._b2Body.GetWorldVector(tempb2Vec21, out); + out.x = vector.x * PTM_RATIO; + out.y = vector.y * PTM_RATIO; + } + return out; + }, + getLocalVector: function getLocalVector(worldVector, out) { + out = out || cc.v2(); + if (this._b2Body) { + tempb2Vec21.Set(worldVector.x / PTM_RATIO, worldVector.y / PTM_RATIO); + var vector = this._b2Body.GetLocalVector(tempb2Vec21, out); + out.x = vector.x * PTM_RATIO; + out.y = vector.y * PTM_RATIO; + } + return out; + }, + getWorldPosition: function getWorldPosition(out) { + out = out || cc.v2(); + if (this._b2Body) { + var pos = this._b2Body.GetPosition(); + out.x = pos.x * PTM_RATIO; + out.y = pos.y * PTM_RATIO; + } + return out; + }, + getWorldRotation: function getWorldRotation() { + if (this._b2Body) return this._b2Body.GetAngle() * PHYSICS_ANGLE_TO_ANGLE; + return 0; + }, + getLocalCenter: function getLocalCenter(out) { + out = out || cc.v2(); + if (this._b2Body) { + var pos = this._b2Body.GetLocalCenter(); + out.x = pos.x * PTM_RATIO; + out.y = pos.y * PTM_RATIO; + } + return out; + }, + getWorldCenter: function getWorldCenter(out) { + out = out || cc.v2(); + if (this._b2Body) { + var pos = this._b2Body.GetWorldCenter(); + out.x = pos.x * PTM_RATIO; + out.y = pos.y * PTM_RATIO; + } + return out; + }, + getLinearVelocityFromWorldPoint: function getLinearVelocityFromWorldPoint(worldPoint, out) { + out = out || cc.v2(); + if (this._b2Body) { + tempb2Vec21.Set(worldPoint.x / PTM_RATIO, worldPoint.y / PTM_RATIO); + var velocity = this._b2Body.GetLinearVelocityFromWorldPoint(tempb2Vec21, out); + out.x = velocity.x * PTM_RATIO; + out.y = velocity.y * PTM_RATIO; + } + return out; + }, + getMass: function getMass() { + return this._b2Body ? this._b2Body.GetMass() : 0; + }, + getInertia: function getInertia() { + return this._b2Body ? this._b2Body.GetInertia() * PTM_RATIO * PTM_RATIO : 0; + }, + getJointList: function getJointList() { + if (!this._b2Body) return []; + var joints = []; + var list = this._b2Body.GetJointList(); + if (!list) return []; + joints.push(list.joint._joint); + var prev = list.prev; + while (prev) { + joints.push(prev.joint._joint); + prev = prev.prev; + } + var next = list.next; + while (next) { + joints.push(next.joint._joint); + next = next.next; + } + return joints; + }, + applyForce: function applyForce(force, point, wake) { + if (this._b2Body) { + tempb2Vec21.Set(force.x / PTM_RATIO, force.y / PTM_RATIO); + tempb2Vec22.Set(point.x / PTM_RATIO, point.y / PTM_RATIO); + this._b2Body.ApplyForce(tempb2Vec21, tempb2Vec22, wake); + } + }, + applyForceToCenter: function applyForceToCenter(force, wake) { + if (this._b2Body) { + tempb2Vec21.Set(force.x / PTM_RATIO, force.y / PTM_RATIO); + this._b2Body.ApplyForceToCenter(tempb2Vec21, wake); + } + }, + applyTorque: function applyTorque(torque, wake) { + this._b2Body && this._b2Body.ApplyTorque(torque / PTM_RATIO, wake); + }, + applyLinearImpulse: function applyLinearImpulse(impulse, point, wake) { + if (this._b2Body) { + tempb2Vec21.Set(impulse.x / PTM_RATIO, impulse.y / PTM_RATIO); + tempb2Vec22.Set(point.x / PTM_RATIO, point.y / PTM_RATIO); + this._b2Body.ApplyLinearImpulse(tempb2Vec21, tempb2Vec22, wake); + } + }, + applyAngularImpulse: function applyAngularImpulse(impulse, wake) { + this._b2Body && this._b2Body.ApplyAngularImpulse(impulse / PTM_RATIO / PTM_RATIO, wake); + }, + syncPosition: function syncPosition(enableAnimated) { + var b2body = this._b2Body; + if (!b2body) return; + var pos = this.node.convertToWorldSpaceAR(VEC2_ZERO); + var temp; + temp = this.type === BodyType.Animated ? b2body.GetLinearVelocity() : b2body.GetPosition(); + temp.x = pos.x / PTM_RATIO; + temp.y = pos.y / PTM_RATIO; + if (this.type === BodyType.Animated && enableAnimated) { + var b2Pos = b2body.GetPosition(); + var timeStep = cc.game.config["frameRate"]; + temp.x = (temp.x - b2Pos.x) * timeStep; + temp.y = (temp.y - b2Pos.y) * timeStep; + b2body.SetAwake(true); + b2body.SetLinearVelocity(temp); + } else b2body.SetTransformVec(temp, b2body.GetAngle()); + }, + syncRotation: function syncRotation(enableAnimated) { + var b2body = this._b2Body; + if (!b2body) return; + var rotation = ANGLE_TO_PHYSICS_ANGLE * getWorldRotation(this.node); + if (this.type === BodyType.Animated && enableAnimated) { + var b2Rotation = b2body.GetAngle(); + var timeStep = cc.game.config["frameRate"]; + b2body.SetAwake(true); + b2body.SetAngularVelocity((rotation - b2Rotation) * timeStep); + } else b2body.SetTransformVec(b2body.GetPosition(), rotation); + }, + resetVelocity: function resetVelocity() { + var b2body = this._b2Body; + if (!b2body) return; + var temp = b2body.m_linearVelocity; + temp.Set(0, 0); + b2body.SetLinearVelocity(temp); + b2body.SetAngularVelocity(0); + }, + onEnable: function onEnable() { + this._init(); + }, + onDisable: function onDisable() { + this._destroy(); + }, + _registerNodeEvents: function _registerNodeEvents() { + var node = this.node; + node.on(NodeEvent.POSITION_CHANGED, this._onNodePositionChanged, this); + node.on(NodeEvent.ROTATION_CHANGED, this._onNodeRotationChanged, this); + node.on(NodeEvent.SCALE_CHANGED, this._onNodeScaleChanged, this); + }, + _unregisterNodeEvents: function _unregisterNodeEvents() { + var node = this.node; + node.off(NodeEvent.POSITION_CHANGED, this._onNodePositionChanged, this); + node.off(NodeEvent.ROTATION_CHANGED, this._onNodeRotationChanged, this); + node.off(NodeEvent.SCALE_CHANGED, this._onNodeScaleChanged, this); + }, + _onNodePositionChanged: function _onNodePositionChanged() { + this.syncPosition(true); + }, + _onNodeRotationChanged: function _onNodeRotationChanged(event) { + this.syncRotation(true); + }, + _onNodeScaleChanged: function _onNodeScaleChanged(event) { + if (this._b2Body) { + var colliders = this.getComponents(cc.PhysicsCollider); + for (var i = 0; i < colliders.length; i++) colliders[i].apply(); + } + }, + _init: function _init() { + cc.director.getPhysicsManager().pushDelayEvent(this, "__init", []); + }, + _destroy: function _destroy() { + cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", []); + }, + __init: function __init() { + if (this._inited) return; + this._registerNodeEvents(); + var bodyDef = new b2.BodyDef(); + this.type === BodyType.Animated ? bodyDef.type = BodyType.Kinematic : bodyDef.type = this.type; + bodyDef.allowSleep = this.allowSleep; + bodyDef.gravityScale = this.gravityScale; + bodyDef.linearDamping = this.linearDamping; + bodyDef.angularDamping = this.angularDamping; + var linearVelocity = this.linearVelocity; + bodyDef.linearVelocity = new b2.Vec2(linearVelocity.x / PTM_RATIO, linearVelocity.y / PTM_RATIO); + bodyDef.angularVelocity = this.angularVelocity * ANGLE_TO_PHYSICS_ANGLE; + bodyDef.fixedRotation = this.fixedRotation; + bodyDef.bullet = this.bullet; + var node = this.node; + var pos = node.convertToWorldSpaceAR(VEC2_ZERO); + bodyDef.position = new b2.Vec2(pos.x / PTM_RATIO, pos.y / PTM_RATIO); + bodyDef.angle = -Math.PI / 180 * getWorldRotation(node); + bodyDef.awake = this.awakeOnLoad; + cc.director.getPhysicsManager()._addBody(this, bodyDef); + this._inited = true; + }, + __destroy: function __destroy() { + if (!this._inited) return; + cc.director.getPhysicsManager()._removeBody(this); + this._unregisterNodeEvents(); + this._inited = false; + }, + _getBody: function _getBody() { + return this._b2Body; + } + }); + cc.RigidBody = module.exports = RigidBody; + }), { + "../CCNode": 73, + "./CCPhysicsTypes": 215, + "./utils": 238 + }], + 218: [(function (require, module, exports) { + "use strict"; + var box2d = require("../../../external/box2d/box2d"); + window.b2 = {}; + for (var key in box2d) { + if (-1 !== key.indexOf("b2_")) continue; + var newKey = key.replace("b2", ""); + b2[newKey] = box2d[key]; + } + b2.maxPolygonVertices = 8; + }), { + "../../../external/box2d/box2d": 435 + }], + 219: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var PhysicsBoxCollider = cc.Class({ + name: "cc.PhysicsBoxCollider", + extends: cc.PhysicsCollider, + mixins: [cc.Collider.Box], + editor: { + menu: false, + requireComponent: cc.RigidBody + }, + _createShape: function _createShape(scale) { + var scaleX = Math.abs(scale.x); + var scaleY = Math.abs(scale.y); + var width = this.size.width / 2 / PTM_RATIO * scaleX; + var height = this.size.height / 2 / PTM_RATIO * scaleY; + var offsetX = this.offset.x / PTM_RATIO * scaleX; + var offsetY = this.offset.y / PTM_RATIO * scaleY; + var shape = new b2.PolygonShape(); + shape.SetAsBox(width, height, new b2.Vec2(offsetX, offsetY), 0); + return shape; + } + }); + cc.PhysicsBoxCollider = module.exports = PhysicsBoxCollider; + }), { + "../CCPhysicsTypes": 215 + }], + 220: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var PhysicsChainCollider = cc.Class({ + name: "cc.PhysicsChainCollider", + extends: cc.PhysicsCollider, + editor: { + menu: false, + inspector: false, + requireComponent: cc.RigidBody + }, + properties: { + loop: false, + points: { + default: function _default() { + return [cc.v2(-50, 0), cc.v2(50, 0)]; + }, + type: [cc.Vec2] + }, + threshold: { + default: 1, + serializable: false, + visible: false + } + }, + _createShape: function _createShape(scale) { + var shape = new b2.ChainShape(); + var points = this.points; + var vertices = []; + for (var i = 0; i < points.length; i++) { + var p = points[i]; + vertices.push(new b2.Vec2(p.x / PTM_RATIO * scale.x, p.y / PTM_RATIO * scale.y)); + } + this.loop ? shape.CreateLoop(vertices, vertices.length) : shape.CreateChain(vertices, vertices.length); + return shape; + }, + resetInEditor: false, + resetPointsByContour: false + }); + cc.PhysicsChainCollider = module.exports = PhysicsChainCollider; + }), { + "../CCPhysicsTypes": 215 + }], + 221: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var PhysicsCircleCollider = cc.Class({ + name: "cc.PhysicsCircleCollider", + extends: cc.PhysicsCollider, + mixins: [cc.Collider.Circle], + editor: { + menu: false, + requireComponent: cc.RigidBody + }, + _createShape: function _createShape(scale) { + var scaleX = Math.abs(scale.x); + var scaleY = Math.abs(scale.y); + var offsetX = this.offset.x / PTM_RATIO * scaleX; + var offsetY = this.offset.y / PTM_RATIO * scaleY; + var shape = new b2.CircleShape(); + shape.m_radius = this.radius / PTM_RATIO * scaleX; + shape.m_p = new b2.Vec2(offsetX, offsetY); + return shape; + } + }); + cc.PhysicsCircleCollider = module.exports = PhysicsCircleCollider; + }), { + "../CCPhysicsTypes": 215 + }], + 222: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var getWorldScale = require("../utils").getWorldScale; + var b2_aabb_tmp = new b2.AABB(); + var PhysicsCollider = cc.Class({ + name: "cc.PhysicsCollider", + extends: cc.Collider, + ctor: function ctor() { + this._fixtures = []; + this._shapes = []; + this._inited = false; + this._rect = cc.rect(); + }, + properties: { + _density: 1, + _sensor: false, + _friction: .2, + _restitution: 0, + density: { + tooltip: false, + get: function get() { + return this._density; + }, + set: function set(value) { + this._density = value; + } + }, + sensor: { + tooltip: false, + get: function get() { + return this._sensor; + }, + set: function set(value) { + this._sensor = value; + } + }, + friction: { + tooltip: false, + get: function get() { + return this._friction; + }, + set: function set(value) { + this._friction = value; + } + }, + restitution: { + tooltip: false, + get: function get() { + return this._restitution; + }, + set: function set(value) { + this._restitution = value; + } + }, + body: { + default: null, + type: cc.RigidBody, + visible: false + } + }, + onDisable: function onDisable() { + this._destroy(); + }, + onEnable: function onEnable() { + this._init(); + }, + start: function start() { + this._init(); + }, + _getFixtureIndex: function _getFixtureIndex(fixture) { + return this._fixtures.indexOf(fixture); + }, + _init: function _init() { + cc.director.getPhysicsManager().pushDelayEvent(this, "__init", []); + }, + _destroy: function _destroy() { + cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", []); + }, + __init: function __init() { + if (this._inited) return; + var body = this.body || this.getComponent(cc.RigidBody); + if (!body) return; + var innerBody = body._getBody(); + if (!innerBody) return; + var node = body.node; + var scale = getWorldScale(node); + this._scale = scale; + var shapes = 0 === scale.x && 0 === scale.y ? [] : this._createShape(scale); + shapes instanceof Array || (shapes = [shapes]); + var categoryBits = 1 << node.groupIndex; + var maskBits = 0; + var bits = cc.game.collisionMatrix[node.groupIndex]; + for (var i = 0; i < bits.length; i++) { + if (!bits[i]) continue; + maskBits |= 1 << i; + } + var filter = { + categoryBits: categoryBits, + maskBits: maskBits, + groupIndex: 0 + }; + var manager = cc.director.getPhysicsManager(); + for (var _i = 0; _i < shapes.length; _i++) { + var shape = shapes[_i]; + var fixDef = new b2.FixtureDef(); + fixDef.density = this.density; + fixDef.isSensor = this.sensor; + fixDef.friction = this.friction; + fixDef.restitution = this.restitution; + fixDef.shape = shape; + fixDef.filter = filter; + var fixture = innerBody.CreateFixture(fixDef); + fixture.collider = this; + body.enabledContactListener && manager._registerContactFixture(fixture); + this._shapes.push(shape); + this._fixtures.push(fixture); + } + this.body = body; + this._inited = true; + }, + __destroy: function __destroy() { + if (!this._inited) return; + var fixtures = this._fixtures; + var body = this.body._getBody(); + var manager = cc.director.getPhysicsManager(); + for (var i = fixtures.length - 1; i >= 0; i--) { + var fixture = fixtures[i]; + fixture.collider = null; + manager._unregisterContactFixture(fixture); + body && body.DestroyFixture(fixture); + } + this.body = null; + this._fixtures.length = 0; + this._shapes.length = 0; + this._inited = false; + }, + _createShape: function _createShape() { }, + apply: function apply() { + this._destroy(); + this._init(); + }, + getAABB: function getAABB() { + var MAX = 1e7; + var minX = MAX, minY = MAX; + var maxX = -MAX, maxY = -MAX; + var xf = this.body._getBody().GetTransform(); + var fixtures = this._fixtures; + for (var i = 0; i < fixtures.length; i++) { + var shape = fixtures[i].GetShape(); + var count = shape.GetChildCount(); + for (var j = 0; j < count; j++) { + shape.ComputeAABB(b2_aabb_tmp, xf, j); + b2_aabb_tmp.lowerBound.x < minX && (minX = b2_aabb_tmp.lowerBound.x); + b2_aabb_tmp.lowerBound.y < minY && (minY = b2_aabb_tmp.lowerBound.y); + b2_aabb_tmp.upperBound.x > maxX && (maxX = b2_aabb_tmp.upperBound.x); + b2_aabb_tmp.upperBound.y > maxY && (maxY = b2_aabb_tmp.upperBound.y); + } + } + minX *= PTM_RATIO; + minY *= PTM_RATIO; + maxX *= PTM_RATIO; + maxY *= PTM_RATIO; + var r = this._rect; + r.x = minX; + r.y = minY; + r.width = maxX - minX; + r.height = maxY - minY; + return r; + } + }); + cc.PhysicsCollider = module.exports = PhysicsCollider; + }), { + "../CCPhysicsTypes": 215, + "../utils": 238 + }], + 223: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var PolygonSeparator = require("../CCPolygonSeparator"); + var PhysicsPolygonCollider = cc.Class({ + name: "cc.PhysicsPolygonCollider", + extends: cc.PhysicsCollider, + mixins: [cc.Collider.Polygon], + editor: { + menu: false, + inspector: false, + requireComponent: cc.RigidBody + }, + _createShape: function _createShape(scale) { + var shapes = []; + var points = this.points; + points.length > 0 && points[0].equals(points[points.length - 1]) && (points.length -= 1); + var polys = PolygonSeparator.ConvexPartition(points); + var offset = this.offset; + for (var i = 0; i < polys.length; i++) { + var poly = polys[i]; + var shape = null, vertices = []; + var firstVertice = null; + for (var j = 0, l = poly.length; j < l; j++) { + shape || (shape = new b2.PolygonShape()); + var p = poly[j]; + var x = (p.x + offset.x) / PTM_RATIO * scale.x; + var y = (p.y + offset.y) / PTM_RATIO * scale.y; + var v = new b2.Vec2(x, y); + vertices.push(v); + firstVertice || (firstVertice = v); + if (vertices.length === b2.maxPolygonVertices) { + shape.Set(vertices, vertices.length); + shapes.push(shape); + shape = null; + j < l - 1 && (vertices = [firstVertice, vertices[vertices.length - 1]]); + } + } + if (shape) { + shape.Set(vertices, vertices.length); + shapes.push(shape); + } + } + return shapes; + } + }); + cc.PhysicsPolygonCollider = module.exports = PhysicsPolygonCollider; + }), { + "../CCPhysicsTypes": 215, + "../CCPolygonSeparator": 216 + }], + 224: [(function (require, module, exports) { + "use strict"; + require("./box2d-adapter"); + require("./CCPhysicsManager"); + require("./CCRigidBody"); + require("./CCPhysicsContact"); + require("./collider/CCPhysicsCollider"); + require("./collider/CCPhysicsChainCollider"); + require("./collider/CCPhysicsCircleCollider"); + require("./collider/CCPhysicsBoxCollider"); + require("./collider/CCPhysicsPolygonCollider"); + require("./joint/CCJoint"); + require("./joint/CCDistanceJoint"); + require("./joint/CCRevoluteJoint"); + require("./joint/CCMouseJoint"); + require("./joint/CCMotorJoint"); + require("./joint/CCPrismaticJoint"); + require("./joint/CCWeldJoint"); + require("./joint/CCWheelJoint"); + require("./joint/CCRopeJoint"); + require("./platform/CCPhysicsContactListner"); + require("./platform/CCPhysicsAABBQueryCallback"); + require("./platform/CCPhysicsRayCastCallback"); + }), { + "./CCPhysicsContact": 213, + "./CCPhysicsManager": 214, + "./CCRigidBody": 217, + "./box2d-adapter": 218, + "./collider/CCPhysicsBoxCollider": 219, + "./collider/CCPhysicsChainCollider": 220, + "./collider/CCPhysicsCircleCollider": 221, + "./collider/CCPhysicsCollider": 222, + "./collider/CCPhysicsPolygonCollider": 223, + "./joint/CCDistanceJoint": 225, + "./joint/CCJoint": 226, + "./joint/CCMotorJoint": 227, + "./joint/CCMouseJoint": 228, + "./joint/CCPrismaticJoint": 229, + "./joint/CCRevoluteJoint": 230, + "./joint/CCRopeJoint": 231, + "./joint/CCWeldJoint": 232, + "./joint/CCWheelJoint": 233, + "./platform/CCPhysicsAABBQueryCallback": 234, + "./platform/CCPhysicsContactListner": 235, + "./platform/CCPhysicsRayCastCallback": 237 + }], + 225: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var DistanceJoint = cc.Class({ + name: "cc.DistanceJoint", + extends: cc.Joint, + editor: false, + properties: { + _distance: 1, + _frequency: 0, + _dampingRatio: 0, + distance: { + tooltip: false, + get: function get() { + return this._distance; + }, + set: function set(value) { + this._distance = value; + this._joint && this._joint.SetLength(value); + } + }, + frequency: { + tooltip: false, + get: function get() { + return this._frequency; + }, + set: function set(value) { + this._frequency = value; + this._joint && this._joint.SetFrequency(value); + } + }, + dampingRatio: { + tooltip: false, + get: function get() { + return this._dampingRatio; + }, + set: function set(value) { + this._dampingRatio = value; + this._joint && this._joint.SetDampingRatio(value); + } + } + }, + _createJointDef: function _createJointDef() { + var def = new b2.DistanceJointDef(); + def.localAnchorA = new b2.Vec2(this.anchor.x / PTM_RATIO, this.anchor.y / PTM_RATIO); + def.localAnchorB = new b2.Vec2(this.connectedAnchor.x / PTM_RATIO, this.connectedAnchor.y / PTM_RATIO); + def.length = this.distance / PTM_RATIO; + def.dampingRatio = this.dampingRatio; + def.frequencyHz = this.frequency; + return def; + } + }); + cc.DistanceJoint = module.exports = DistanceJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 226: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var Joint = cc.Class({ + name: "cc.Joint", + extends: cc.Component, + editor: { + requireComponent: cc.RigidBody + }, + properties: { + anchor: { + default: cc.v2(0, 0), + tooltip: false + }, + connectedAnchor: { + default: cc.v2(0, 0), + tooltip: false + }, + connectedBody: { + default: null, + type: cc.RigidBody, + tooltip: false + }, + collideConnected: { + default: false, + tooltip: false + } + }, + onDisable: function onDisable() { + this._destroy(); + }, + onEnable: function onEnable() { + this._init(); + }, + start: function start() { + this._init(); + }, + apply: function apply() { + this._destroy(); + this._init(); + }, + getWorldAnchor: function getWorldAnchor() { + if (this._joint) { + var anchor = this._joint.GetAnchorA(); + return cc.v2(anchor.x * PTM_RATIO, anchor.y * PTM_RATIO); + } + return cc.Vec2.ZERO; + }, + getWorldConnectedAnchor: function getWorldConnectedAnchor() { + if (this._joint) { + var anchor = this._joint.GetAnchorB(); + return cc.v2(anchor.x * PTM_RATIO, anchor.y * PTM_RATIO); + } + return cc.Vec2.ZERO; + }, + getReactionForce: function getReactionForce(timeStep) { + var out = cc.v2(); + if (this._joint) return this._joint.GetReactionForce(timeStep, out); + return out; + }, + getReactionTorque: function getReactionTorque(timeStep) { + if (this._joint) return this._joint.GetReactionTorque(timeStep); + return 0; + }, + _init: function _init() { + cc.director.getPhysicsManager().pushDelayEvent(this, "__init", []); + }, + _destroy: function _destroy() { + cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", []); + }, + __init: function __init() { + if (this._inited) return; + this.body = this.getComponent(cc.RigidBody); + if (this._isValid()) { + var def = this._createJointDef(); + if (!def) return; + def.bodyA = this.body._getBody(); + def.bodyB = this.connectedBody._getBody(); + def.collideConnected = this.collideConnected; + cc.director.getPhysicsManager()._addJoint(this, def); + this._inited = true; + } + }, + __destroy: function __destroy() { + if (!this._inited) return; + cc.director.getPhysicsManager()._removeJoint(this); + this._joint = null; + this._inited = false; + }, + _createJointDef: function _createJointDef() { + return null; + }, + _isValid: function _isValid() { + return this.body && this.body._getBody() && this.connectedBody && this.connectedBody._getBody(); + } + }); + cc.Joint = module.exports = Joint; + }), { + "../CCPhysicsTypes": 215 + }], + 227: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = require("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE; + var MotorJoint = cc.Class({ + name: "cc.MotorJoint", + extends: cc.Joint, + editor: false, + properties: { + _linearOffset: cc.v2(0, 0), + _angularOffset: 0, + _maxForce: 1, + _maxTorque: 1, + _correctionFactor: .3, + anchor: { + tooltip: false, + default: cc.v2(0, 0), + override: true, + visible: false + }, + connectedAnchor: { + tooltip: false, + default: cc.v2(0, 0), + override: true, + visible: false + }, + linearOffset: { + tooltip: false, + get: function get() { + return this._linearOffset; + }, + set: function set(value) { + this._linearOffset = value; + this._joint && this._joint.SetLinearOffset(new b2.Vec2(value.x / PTM_RATIO, value.y / PTM_RATIO)); + } + }, + angularOffset: { + tooltip: false, + get: function get() { + return this._angularOffset; + }, + set: function set(value) { + this._angularOffset = value; + this._joint && this._joint.SetAngularOffset(value); + } + }, + maxForce: { + tooltip: false, + get: function get() { + return this._maxForce; + }, + set: function set(value) { + this._maxForce = value; + this._joint && this._joint.SetMaxForce(value); + } + }, + maxTorque: { + tooltip: false, + get: function get() { + return this._maxTorque; + }, + set: function set(value) { + this._maxTorque = value; + this._joint && this._joint.SetMaxTorque(value); + } + }, + correctionFactor: { + tooltip: false, + get: function get() { + return this._correctionFactor; + }, + set: function set(value) { + this._correctionFactor = value; + this._joint && this._joint.SetCorrectionFactor(value); + } + } + }, + _createJointDef: function _createJointDef() { + var def = new b2.MotorJointDef(); + def.linearOffset = new b2.Vec2(this.linearOffset.x / PTM_RATIO, this.linearOffset.y / PTM_RATIO); + def.angularOffset = this.angularOffset * ANGLE_TO_PHYSICS_ANGLE; + def.maxForce = this.maxForce; + def.maxTorque = this.maxTorque; + def.correctionFactor = this.correctionFactor; + return def; + } + }); + cc.MotorJoint = module.exports = MotorJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 228: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var tempB2Vec2 = new b2.Vec2(); + var MouseJoint = cc.Class({ + name: "cc.MouseJoint", + extends: cc.Joint, + editor: false, + properties: { + _target: 1, + _frequency: 5, + _dampingRatio: .7, + _maxForce: 0, + connectedBody: { + default: null, + type: cc.RigidBody, + visible: false, + override: true + }, + collideConnected: { + default: true, + visible: false, + override: true + }, + anchor: { + tooltip: false, + default: cc.v2(0, 0), + override: true, + visible: false + }, + connectedAnchor: { + tooltip: false, + default: cc.v2(0, 0), + override: true, + visible: false + }, + mouseRegion: { + tooltip: false, + default: null, + type: cc.Node + }, + target: { + tooltip: false, + visible: false, + get: function get() { + return this._target; + }, + set: function set(value) { + this._target = value; + if (this._joint) { + tempB2Vec2.x = value.x / PTM_RATIO; + tempB2Vec2.y = value.y / PTM_RATIO; + this._joint.SetTarget(tempB2Vec2); + } + } + }, + frequency: { + tooltip: false, + get: function get() { + return this._frequency; + }, + set: function set(value) { + this._frequency = value; + this._joint && this._joint.SetFrequency(value); + } + }, + dampingRatio: { + tooltip: false, + get: function get() { + return this._dampingRatio; + }, + set: function set(value) { + this._dampingRatio = value; + this._joint && this._joint.SetDampingRatio(value); + } + }, + maxForce: { + tooltip: false, + visible: false, + get: function get() { + return this._maxForce; + }, + set: function set(value) { + this._maxForce = value; + this._joint && this._joint.SetMaxForce(value); + } + } + }, + onLoad: function onLoad() { + var mouseRegion = this.mouseRegion || this.node; + mouseRegion.on(cc.Node.EventType.TOUCH_START, this.onTouchBegan, this); + mouseRegion.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this); + mouseRegion.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this); + mouseRegion.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchEnd, this); + }, + onEnable: function onEnable() { }, + start: function start() { }, + onTouchBegan: function onTouchBegan(event) { + var manager = cc.director.getPhysicsManager(); + var target = this._pressPoint = event.touch.getLocation(); + cc.Camera && cc.Camera.main && (target = cc.Camera.main.getScreenToWorldPoint(target)); + var collider = manager.testPoint(target); + if (!collider) return; + var body = this.connectedBody = collider.body; + body.awake = true; + this.maxForce = 1e3 * this.connectedBody.getMass(); + this.target = target; + this._init(); + }, + onTouchMove: function onTouchMove(event) { + this._pressPoint = event.touch.getLocation(); + }, + onTouchEnd: function onTouchEnd(event) { + this._destroy(); + this._pressPoint = null; + }, + _createJointDef: function _createJointDef() { + var def = new b2.MouseJointDef(); + tempB2Vec2.x = this.target.x / PTM_RATIO; + tempB2Vec2.y = this.target.y / PTM_RATIO; + def.target = tempB2Vec2; + def.maxForce = this.maxForce; + def.dampingRatio = this.dampingRatio; + def.frequencyHz = this.frequency; + return def; + }, + update: function update() { + if (!this._pressPoint || !this._isValid()) return; + var camera = cc.Camera.findCamera(this.node); + this.target = camera ? camera.getScreenToWorldPoint(this._pressPoint) : this._pressPoint; + } + }); + cc.MouseJoint = module.exports = MouseJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 229: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = require("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE; + var PrismaticJoint = cc.Class({ + name: "cc.PrismaticJoint", + extends: cc.Joint, + editor: false, + properties: { + localAxisA: { + default: cc.v2(1, 0), + tooltip: false + }, + referenceAngle: { + default: 0, + tooltip: false + }, + enableLimit: { + default: false, + tooltip: false + }, + enableMotor: { + default: false, + tooltip: false + }, + lowerLimit: { + default: 0, + tooltip: false + }, + upperLimit: { + default: 0, + tooltip: false + }, + _maxMotorForce: 0, + _motorSpeed: 0, + maxMotorForce: { + tooltip: false, + get: function get() { + return this._maxMotorForce; + }, + set: function set(value) { + this._maxMotorForce = value; + this._joint && this._joint.SetMaxMotorForce(value); + } + }, + motorSpeed: { + tooltip: false, + get: function get() { + return this._motorSpeed; + }, + set: function set(value) { + this._motorSpeed = value; + this._joint && this._joint.SetMotorSpeed(value); + } + } + }, + _createJointDef: function _createJointDef() { + var def = new b2.PrismaticJointDef(); + def.localAnchorA = new b2.Vec2(this.anchor.x / PTM_RATIO, this.anchor.y / PTM_RATIO); + def.localAnchorB = new b2.Vec2(this.connectedAnchor.x / PTM_RATIO, this.connectedAnchor.y / PTM_RATIO); + def.localAxisA = new b2.Vec2(this.localAxisA.x, this.localAxisA.y); + def.referenceAngle = this.referenceAngle * ANGLE_TO_PHYSICS_ANGLE; + def.enableLimit = this.enableLimit; + def.lowerTranslation = this.lowerLimit / PTM_RATIO; + def.upperTranslation = this.upperLimit / PTM_RATIO; + def.enableMotor = this.enableMotor; + def.maxMotorForce = this.maxMotorForce; + def.motorSpeed = this.motorSpeed; + return def; + } + }); + cc.PrismaticJoint = module.exports = PrismaticJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 230: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = require("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE; + var PHYSICS_ANGLE_TO_ANGLE = require("../CCPhysicsTypes").PHYSICS_ANGLE_TO_ANGLE; + var RevoluteJoint = cc.Class({ + name: "cc.RevoluteJoint", + extends: cc.Joint, + editor: false, + properties: { + _maxMotorTorque: 0, + _motorSpeed: 0, + _enableLimit: false, + _enableMotor: false, + referenceAngle: { + default: 0, + tooltip: false + }, + lowerAngle: { + default: 0, + tooltip: false + }, + upperAngle: { + default: 0, + tooltip: false + }, + maxMotorTorque: { + tooltip: false, + get: function get() { + return this._maxMotorTorque; + }, + set: function set(value) { + this._maxMotorTorque = value; + this._joint && this._joint.SetMaxMotorTorque(value); + } + }, + motorSpeed: { + tooltip: false, + get: function get() { + return this._motorSpeed; + }, + set: function set(value) { + this._motorSpeed = value; + this._joint && this._joint.SetMotorSpeed(value * ANGLE_TO_PHYSICS_ANGLE); + } + }, + enableLimit: { + tooltip: false, + get: function get() { + return this._enableLimit; + }, + set: function set(value) { + this._enableLimit = value; + this._joint && this._joint.EnableLimit(value); + } + }, + enableMotor: { + tooltip: false, + get: function get() { + return this._enableMotor; + }, + set: function set(value) { + this._enableMotor = value; + this._joint && this._joint.EnableMotor(value); + } + } + }, + getJointAngle: function getJointAngle() { + if (this._joint) return this._joint.GetJointAngle() * PHYSICS_ANGLE_TO_ANGLE; + return 0; + }, + setLimits: function setLimits(lower, upper) { + if (this._joint) return this._joint.SetLimits(lower * ANGLE_TO_PHYSICS_ANGLE, upper * ANGLE_TO_PHYSICS_ANGLE); + }, + _createJointDef: function _createJointDef() { + var def = new b2.RevoluteJointDef(); + def.localAnchorA = new b2.Vec2(this.anchor.x / PTM_RATIO, this.anchor.y / PTM_RATIO); + def.localAnchorB = new b2.Vec2(this.connectedAnchor.x / PTM_RATIO, this.connectedAnchor.y / PTM_RATIO); + def.lowerAngle = this.upperAngle * ANGLE_TO_PHYSICS_ANGLE; + def.upperAngle = this.lowerAngle * ANGLE_TO_PHYSICS_ANGLE; + def.maxMotorTorque = this.maxMotorTorque; + def.motorSpeed = this.motorSpeed * ANGLE_TO_PHYSICS_ANGLE; + def.enableLimit = this.enableLimit; + def.enableMotor = this.enableMotor; + def.referenceAngle = this.referenceAngle * ANGLE_TO_PHYSICS_ANGLE; + return def; + } + }); + cc.RevoluteJoint = module.exports = RevoluteJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 231: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var RopeJoint = cc.Class({ + name: "cc.RopeJoint", + extends: cc.Joint, + editor: false, + properties: { + _maxLength: 1, + maxLength: { + tooltip: false, + get: function get() { + return this._maxLength; + }, + set: function set(value) { + this._maxLength = value; + this._joint && this._joint.SetMaxLength(value); + } + } + }, + _createJointDef: function _createJointDef() { + var def = new b2.RopeJointDef(); + def.localAnchorA = new b2.Vec2(this.anchor.x / PTM_RATIO, this.anchor.y / PTM_RATIO); + def.localAnchorB = new b2.Vec2(this.connectedAnchor.x / PTM_RATIO, this.connectedAnchor.y / PTM_RATIO); + def.maxLength = this.maxLength / PTM_RATIO; + return def; + } + }); + cc.RopeJoint = module.exports = RopeJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 232: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = require("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE; + var WeldJoint = cc.Class({ + name: "cc.WeldJoint", + extends: cc.Joint, + editor: false, + properties: { + referenceAngle: { + default: 0, + tooltip: false + }, + _frequency: 0, + _dampingRatio: 0, + frequency: { + tooltip: false, + get: function get() { + return this._frequency; + }, + set: function set(value) { + this._frequency = value; + this._joint && this._joint.SetFrequency(value); + } + }, + dampingRatio: { + tooltip: false, + get: function get() { + return this._dampingRatio; + }, + set: function set(value) { + this._dampingRatio = value; + this._joint && this._joint.SetDampingRatio(value); + } + } + }, + _createJointDef: function _createJointDef() { + var def = new b2.WeldJointDef(); + def.localAnchorA = new b2.Vec2(this.anchor.x / PTM_RATIO, this.anchor.y / PTM_RATIO); + def.localAnchorB = new b2.Vec2(this.connectedAnchor.x / PTM_RATIO, this.connectedAnchor.y / PTM_RATIO); + def.referenceAngle = this.referenceAngle * ANGLE_TO_PHYSICS_ANGLE; + def.frequencyHz = this.frequency; + def.dampingRatio = this.dampingRatio; + return def; + } + }); + cc.WeldJoint = module.exports = WeldJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 233: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var ANGLE_TO_PHYSICS_ANGLE = require("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE; + var WheelJoint = cc.Class({ + name: "cc.WheelJoint", + extends: cc.Joint, + editor: false, + properties: { + _maxMotorTorque: 0, + _motorSpeed: 0, + _enableMotor: false, + _frequency: 2, + _dampingRatio: .7, + localAxisA: { + default: cc.v2(1, 0), + tooltip: false + }, + maxMotorTorque: { + tooltip: false, + get: function get() { + return this._maxMotorTorque; + }, + set: function set(value) { + this._maxMotorTorque = value; + this._joint && this._joint.SetMaxMotorTorque(value); + } + }, + motorSpeed: { + tooltip: false, + get: function get() { + return this._motorSpeed; + }, + set: function set(value) { + this._motorSpeed = value; + this._joint && this._joint.SetMotorSpeed(value * ANGLE_TO_PHYSICS_ANGLE); + } + }, + enableMotor: { + tooltip: false, + get: function get() { + return this._enableMotor; + }, + set: function set(value) { + this._enableMotor = value; + this._joint && this._joint.EnableMotor(value); + } + }, + frequency: { + tooltip: false, + get: function get() { + return this._frequency; + }, + set: function set(value) { + this._frequency = value; + this._joint && this._joint.SetSpringFrequencyHz(value); + } + }, + dampingRatio: { + tooltip: false, + get: function get() { + return this._dampingRatio; + }, + set: function set(value) { + this._dampingRatio = value; + this._joint && this._joint.SetDampingRatio(value); + } + } + }, + _createJointDef: function _createJointDef() { + var def = new b2.WheelJointDef(); + def.localAnchorA = new b2.Vec2(this.anchor.x / PTM_RATIO, this.anchor.y / PTM_RATIO); + def.localAnchorB = new b2.Vec2(this.connectedAnchor.x / PTM_RATIO, this.connectedAnchor.y / PTM_RATIO); + def.localAxisA = new b2.Vec2(this.localAxisA.x, this.localAxisA.y); + def.maxMotorTorque = this.maxMotorTorque; + def.motorSpeed = this.motorSpeed * ANGLE_TO_PHYSICS_ANGLE; + def.enableMotor = this.enableMotor; + def.dampingRatio = this.dampingRatio; + def.frequencyHz = this.frequency; + return def; + } + }); + cc.WheelJoint = module.exports = WheelJoint; + }), { + "../CCPhysicsTypes": 215 + }], + 234: [(function (require, module, exports) { + "use strict"; + var BodyType = require("../CCPhysicsTypes").BodyType; + function PhysicsAABBQueryCallback() { + this._point = new b2.Vec2(); + this._isPoint = false; + this._fixtures = []; + } + PhysicsAABBQueryCallback.prototype.init = function (point) { + if (point) { + this._isPoint = true; + this._point.x = point.x; + this._point.y = point.y; + } else this._isPoint = false; + this._fixtures.length = 0; + }; + PhysicsAABBQueryCallback.prototype.ReportFixture = function (fixture) { + var body = fixture.GetBody(); + if (body.GetType() === BodyType.Dynamic) if (this._isPoint) { + if (fixture.TestPoint(this._point)) { + this._fixtures.push(fixture); + return false; + } + } else this._fixtures.push(fixture); + return true; + }; + PhysicsAABBQueryCallback.prototype.getFixture = function () { + return this._fixtures[0]; + }; + PhysicsAABBQueryCallback.prototype.getFixtures = function () { + return this._fixtures; + }; + cc.PhysicsAABBQueryCallback = module.exports = PhysicsAABBQueryCallback; + }), { + "../CCPhysicsTypes": 215 + }], + 235: [(function (require, module, exports) { + "use strict"; + function PhysicsContactListener() { + this._contactFixtures = []; + } + PhysicsContactListener.prototype.setBeginContact = function (cb) { + this._BeginContact = cb; + }; + PhysicsContactListener.prototype.setEndContact = function (cb) { + this._EndContact = cb; + }; + PhysicsContactListener.prototype.setPreSolve = function (cb) { + this._PreSolve = cb; + }; + PhysicsContactListener.prototype.setPostSolve = function (cb) { + this._PostSolve = cb; + }; + PhysicsContactListener.prototype.BeginContact = function (contact) { + if (!this._BeginContact) return; + var fixtureA = contact.GetFixtureA(); + var fixtureB = contact.GetFixtureB(); + var fixtures = this._contactFixtures; + contact._shouldReport = false; + if (-1 !== fixtures.indexOf(fixtureA) || -1 !== fixtures.indexOf(fixtureB)) { + contact._shouldReport = true; + this._BeginContact(contact); + } + }; + PhysicsContactListener.prototype.EndContact = function (contact) { + if (this._EndContact && contact._shouldReport) { + contact._shouldReport = false; + this._EndContact(contact); + } + }; + PhysicsContactListener.prototype.PreSolve = function (contact, oldManifold) { + this._PreSolve && contact._shouldReport && this._PreSolve(contact, oldManifold); + }; + PhysicsContactListener.prototype.PostSolve = function (contact, impulse) { + this._PostSolve && contact._shouldReport && this._PostSolve(contact, impulse); + }; + PhysicsContactListener.prototype.registerContactFixture = function (fixture) { + this._contactFixtures.push(fixture); + }; + PhysicsContactListener.prototype.unregisterContactFixture = function (fixture) { + cc.js.array.remove(this._contactFixtures, fixture); + }; + cc.PhysicsContactListener = module.exports = PhysicsContactListener; + }), {}], + 236: [(function (require, module, exports) { + "use strict"; + var PTM_RATIO = require("../CCPhysicsTypes").PTM_RATIO; + var _tmp_vec2 = cc.v2(); + var GREEN_COLOR = cc.Color.GREEN; + var RED_COLOR = cc.Color.RED; + function PhysicsDebugDraw(drawer) { + b2.Draw.call(this); + this._drawer = drawer; + this._xf = this._dxf = new b2.Transform(); + } + cc.js.extend(PhysicsDebugDraw, b2.Draw); + cc.js.mixin(PhysicsDebugDraw.prototype, { + _DrawPolygon: function _DrawPolygon(vertices, vertexCount) { + var drawer = this._drawer; + for (var i = 0; i < vertexCount; i++) { + b2.Transform.MulXV(this._xf, vertices[i], _tmp_vec2); + var x = _tmp_vec2.x * PTM_RATIO, y = _tmp_vec2.y * PTM_RATIO; + 0 === i ? drawer.moveTo(x, y) : drawer.lineTo(x, y); + } + drawer.close(); + }, + DrawPolygon: function DrawPolygon(vertices, vertexCount, color) { + this._applyStrokeColor(color); + this._DrawPolygon(vertices, vertexCount); + this._drawer.stroke(); + }, + DrawSolidPolygon: function DrawSolidPolygon(vertices, vertexCount, color) { + this._applyFillColor(color); + this._DrawPolygon(vertices, vertexCount); + this._drawer.fill(); + this._drawer.stroke(); + }, + _DrawCircle: function _DrawCircle(center, radius) { + var p = this._xf.p; + this._drawer.circle((center.x + p.x) * PTM_RATIO, (center.y + p.y) * PTM_RATIO, radius * PTM_RATIO); + }, + DrawCircle: function DrawCircle(center, radius, color) { + this._applyStrokeColor(color); + this._DrawCircle(center, radius); + this._drawer.stroke(); + }, + DrawSolidCircle: function DrawSolidCircle(center, radius, axis, color) { + this._applyFillColor(color); + this._DrawCircle(center, radius); + this._drawer.fill(); + }, + DrawSegment: function DrawSegment(p1, p2, color) { + var drawer = this._drawer; + if (p1.x === p2.x && p1.y === p2.y) { + this._applyFillColor(color); + this._DrawCircle(p1, 2 / PTM_RATIO); + drawer.fill(); + return; + } + this._applyStrokeColor(color); + b2.Transform.MulXV(this._xf, p1, _tmp_vec2); + drawer.moveTo(_tmp_vec2.x * PTM_RATIO, _tmp_vec2.y * PTM_RATIO); + b2.Transform.MulXV(this._xf, p2, _tmp_vec2); + drawer.lineTo(_tmp_vec2.x * PTM_RATIO, _tmp_vec2.y * PTM_RATIO); + drawer.stroke(); + }, + DrawTransform: function DrawTransform(xf) { + var drawer = this._drawer; + drawer.strokeColor = RED_COLOR; + _tmp_vec2.x = _tmp_vec2.y = 0; + b2.Transform.MulXV(xf, _tmp_vec2, _tmp_vec2); + drawer.moveTo(_tmp_vec2.x * PTM_RATIO, _tmp_vec2.y * PTM_RATIO); + _tmp_vec2.x = 1; + _tmp_vec2.y = 0; + b2.Transform.MulXV(xf, _tmp_vec2, _tmp_vec2); + drawer.lineTo(_tmp_vec2.x * PTM_RATIO, _tmp_vec2.y * PTM_RATIO); + drawer.stroke(); + drawer.strokeColor = GREEN_COLOR; + _tmp_vec2.x = _tmp_vec2.y = 0; + b2.Transform.MulXV(xf, _tmp_vec2, _tmp_vec2); + drawer.moveTo(_tmp_vec2.x * PTM_RATIO, _tmp_vec2.y * PTM_RATIO); + _tmp_vec2.x = 0; + _tmp_vec2.y = 1; + b2.Transform.MulXV(xf, _tmp_vec2, _tmp_vec2); + drawer.lineTo(_tmp_vec2.x * PTM_RATIO, _tmp_vec2.y * PTM_RATIO); + drawer.stroke(); + }, + DrawPoint: function DrawPoint(center, radius, color) { }, + _applyStrokeColor: function _applyStrokeColor(color) { + var strokeColor = this._drawer.strokeColor; + strokeColor.r = 255 * color.r; + strokeColor.g = 255 * color.g; + strokeColor.b = 255 * color.b; + strokeColor.a = 150; + this._drawer.strokeColor = strokeColor; + }, + _applyFillColor: function _applyFillColor(color) { + var fillColor = this._drawer.fillColor; + fillColor.r = 255 * color.r; + fillColor.g = 255 * color.g; + fillColor.b = 255 * color.b; + fillColor.a = 150; + this._drawer.fillColor = fillColor; + }, + PushTransform: function PushTransform(xf) { + this._xf = xf; + }, + PopTransform: function PopTransform() { + this._xf = this._dxf; + } + }); + module.exports = PhysicsDebugDraw; + }), { + "../CCPhysicsTypes": 215 + }], + 237: [(function (require, module, exports) { + "use strict"; + function PhysicsRayCastCallback() { + this._type = 0; + this._fixtures = []; + this._points = []; + this._normals = []; + this._fractions = []; + } + PhysicsRayCastCallback.prototype.init = function (type) { + this._type = type; + this._fixtures.length = 0; + this._points.length = 0; + this._normals.length = 0; + this._fractions.length = 0; + }; + PhysicsRayCastCallback.prototype.ReportFixture = function (fixture, point, normal, fraction) { + if (0 === this._type) { + this._fixtures[0] = fixture; + this._points[0] = point; + this._normals[0] = normal; + this._fractions[0] = fraction; + return fraction; + } + this._fixtures.push(fixture); + this._points.push(cc.v2(point)); + this._normals.push(cc.v2(normal)); + this._fractions.push(fraction); + if (1 === this._type) return 0; + if (this._type >= 2) return 1; + return fraction; + }; + PhysicsRayCastCallback.prototype.getFixtures = function () { + return this._fixtures; + }; + PhysicsRayCastCallback.prototype.getPoints = function () { + return this._points; + }; + PhysicsRayCastCallback.prototype.getNormals = function () { + return this._normals; + }; + PhysicsRayCastCallback.prototype.getFractions = function () { + return this._fractions; + }; + cc.PhysicsRayCastCallback = module.exports = PhysicsRayCastCallback; + }), {}], + 238: [(function (require, module, exports) { + "use strict"; + function getWorldRotation(node) { + var rot = node.angle; + var parent = node.parent; + while (parent.parent) { + rot += parent.angle; + parent = parent.parent; + } + return -rot; + } + function getWorldScale(node) { + var scaleX = node.scaleX; + var scaleY = node.scaleY; + var parent = node.parent; + while (parent.parent) { + scaleX *= parent.scaleX; + scaleY *= parent.scaleY; + parent = parent.parent; + } + return cc.v2(scaleX, scaleY); + } + function convertToNodeRotation(node, rotation) { + rotation -= -node.angle; + var parent = node.parent; + while (parent.parent) { + rotation -= -parent.angle; + parent = parent.parent; + } + return rotation; + } + module.exports = { + getWorldRotation: getWorldRotation, + getWorldScale: getWorldScale, + convertToNodeRotation: convertToNodeRotation + }; + }), {}], + 239: [(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 && !!js.isChildClassOf(base, cc.Component) && 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"); + } + 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": 241, + "./attribute": 251, + "./js": 260, + "./preprocess-class": 261, + "./requiring-frame": 262, + "./utils": 263 + }], + 240: [(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": 239, + "./js": 260, + "./preprocess-class": 261, + "./utils": 263 + }], + 241: [(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": 260 + }], + 242: [(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": 184, + "./CCInputManager": 243 + }], + 243: [(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": 184, + "./CCMacro": 244, + "./CCSys": 248 + }], + 244: [(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: true + }; + 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; + }), {}], + 245: [(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": 239, + "./js": 260 + }], + 246: [(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": 260 + }], + 247: [(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(); + }), {}], + 248: [(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 + }; + 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; + }), {}], + 249: [(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": 186, + "../platform/CCClass": 239, + "../platform/js": 260, + "../renderer": 271 + }], + 250: [(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; + } + }; + }), {}], + 251: [(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": 239, + "./js": 260, + "./utils": 263 + }], + 252: [(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": 260 + }], + 253: [(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 + }; + }), {}], + 254: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = deserialize; + exports.unpackJSONs = unpackJSONs; + exports.packCustomObjData = packCustomObjData; + exports.hasNativeDep = hasNativeDep; + exports.getDependUuidList = getDependUuidList; + 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[VALUETYPE_SETTER] = 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 = instanceTypes === EMPTY_PLACEHOLDER ? 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": 338, + "../value-types/mat4": 341, + "../value-types/quat": 342, + "../value-types/rect": 343, + "../value-types/size": 344, + "../value-types/vec2": 348, + "../value-types/vec3": 349, + "../value-types/vec4": 350, + "./js": 260 + }], + 255: [(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": 254, + "./deserialize-editor": void 0 + }], + 256: [(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; + }), {}], + 257: [(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": 239, + "./CCClassDecorator": 240, + "./CCEnum": 241, + "./CCMacro": 244, + "./CCObject": 245, + "./CCSys": 248, + "./CCVisibleRect": 250, + "./callbacks-invoker": 252, + "./deserialize": 255, + "./instantiate": 259, + "./instantiate-jit": 258, + "./js": 260, + "./requiring-frame": 262 + }], + 258: [(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": 239, + "./CCObject": 245, + "./attribute": 251, + "./compiler": 253, + "./js": 260 + }], + 259: [(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": 347, + "./CCObject": 245, + "./js": 260, + "./utils": 263 + }], + 260: [(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": 325, + "./id-generater": 256 + }], + 261: [(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": 239, + "./attribute": 251, + "./js": 260 + }], + 262: [(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; + }), {}], + 263: [(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": 260 + }], + 264: [(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": 71, + "./CCScheduler": 76, + "./asset-manager": 94, + "./event": 188, + "./event-manager": 184, + "./platform/CCInputExtension": 242, + "./platform/CCInputManager": 243, + "./platform/CCMacro": 244, + "./platform/CCScreen": 247, + "./platform/CCSys": 248, + "./platform/CCView": 249, + "./platform/js": 260, + "./renderer": 271, + "./utils": 323, + "./value-types": 339 + }], + 265: [(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); + 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; + subClass.__proto__ = superClass; + } + 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.packToDynamicAtlas = function packToDynamicAtlas(comp, frame) { + false; + if (!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; + if (material.getProperty("texture") !== frame._texture) { + comp._vertsDirty = true; + comp._updateMaterial(); + } + }; + _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 + }); + cc.Assembler2D = Assembler2D; + module.exports = exports["default"]; + }), { + "../value-types": 339, + "./assembler": 268, + "./utils/dynamic-atlas/manager": 274, + "./webgl/render-data": 311 + }], + 266: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vertexFormat = require("./webgl/vertex-format"); + var _vec = _interopRequireDefault(require("../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var vec3_temps = []; + for (var i = 0; i < 4; i++) vec3_temps.push(cc.v3()); + var Assembler3D = { + floatsPerVert: 6, + uvOffset: 3, + colorOffset: 5, + getBuffer: function getBuffer(renderer) { + return renderer._meshBuffer3D; + }, + getVfmt: function getVfmt() { + return _vertexFormat.vfmt3D; + }, + updateWorldVerts: function updateWorldVerts(comp) { + var matrix = comp.node._worldMatrix; + var local = this._local; + var world = this._renderData.vDatas[0]; + _vec["default"].set(vec3_temps[0], local[0], local[1], 0); + _vec["default"].set(vec3_temps[1], local[2], local[1], 0); + _vec["default"].set(vec3_temps[2], local[0], local[3], 0); + _vec["default"].set(vec3_temps[3], local[2], local[3], 0); + var floatsPerVert = this.floatsPerVert; + for (var _i = 0; _i < 4; _i++) { + var vertex = vec3_temps[_i]; + _vec["default"].transformMat4(vertex, vertex, matrix); + var dstOffset = floatsPerVert * _i; + world[dstOffset] = vertex.x; + world[dstOffset + 1] = vertex.y; + world[dstOffset + 2] = vertex.z; + } + } + }; + cc.Assembler3D = Assembler3D; + var _default = Assembler3D; + exports["default"] = _default; + module.exports = exports["default"]; + }), { + "../value-types/vec3": 349, + "./webgl/vertex-format": 313 + }], + 267: [(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; + subClass.__proto__ = superClass; + } + 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": 326 + }], + 268: [(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")); + 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.fillBuffers = function fillBuffers(comp, renderer) { }; + _proto.getVfmt = function getVfmt() { + return _vertexFormat.vfmtPosUvColor; + }; + 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": 267, + "./webgl/vertex-format": 313 + }], + 269: [(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; + }), {}], + 270: [(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; + }), {}], + 271: [(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": 362, + "../../renderer/core/pass": 363, + "../../renderer/gfx": 372, + "../../renderer/renderers/forward-renderer": 391, + "../../renderer/scene/scene": 395, + "./canvas": void 0, + "./canvas/Device": 269, + "./canvas/Texture2D": 270, + "./webgl/assemblers": 283, + "./webgl/model-batcher": 309 + }], + 272: [(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; + }), {}], + 273: [(function (require, module, exports) { + "use strict"; + var RenderTexture = require("../../../assets/CCRenderTexture"); + var space = 2; + function Atlas(width, height) { + var texture = new RenderTexture(); + texture.initWithSize(width, height); + texture.update(); + this._texture = texture; + this._x = space; + this._y = space; + this._nexty = space; + this._width = width; + this._height = height; + this._innerTextureInfos = {}; + this._innerSpriteFrames = []; + this._count = 0; + } + Atlas.DEFAULT_HASH = new RenderTexture()._getHash(); + cc.js.mixin(Atlas.prototype, { + insertSpriteFrame: function insertSpriteFrame(spriteFrame) { + var rect = spriteFrame._rect, texture = spriteFrame._texture, info = this._innerTextureInfos[texture._id]; + var sx = rect.x, sy = rect.y; + if (info) { + sx += info.x; + sy += info.y; + } else { + var width = texture.width, height = texture.height; + if (this._x + width + space > this._width) { + this._x = space; + this._y = this._nexty; + } + this._y + height + space > this._nexty && (this._nexty = this._y + height + space); + if (this._nexty > this._height) return null; + if (cc.dynamicAtlasManager.textureBleeding) { + if (width <= 8 || height <= 8) { + this._texture.drawTextureAt(texture, this._x - 1, this._y - 1); + this._texture.drawTextureAt(texture, this._x - 1, this._y + 1); + this._texture.drawTextureAt(texture, this._x + 1, this._y - 1); + this._texture.drawTextureAt(texture, this._x + 1, this._y + 1); + } + this._texture.drawTextureAt(texture, this._x - 1, this._y); + this._texture.drawTextureAt(texture, this._x + 1, this._y); + this._texture.drawTextureAt(texture, this._x, this._y - 1); + this._texture.drawTextureAt(texture, this._x, this._y + 1); + } + this._texture.drawTextureAt(texture, this._x, this._y); + this._innerTextureInfos[texture._id] = { + x: this._x, + y: this._y, + texture: texture + }; + this._count++; + sx += this._x; + sy += this._y; + this._x += width + space; + this._dirty = true; + } + var frame = { + x: sx, + y: sy, + texture: this._texture + }; + this._innerSpriteFrames.push(spriteFrame); + return frame; + }, + update: function update() { + if (!this._dirty) return; + this._texture.update(); + this._dirty = false; + }, + deleteInnerTexture: function deleteInnerTexture(texture) { + if (texture && this._innerTextureInfos[texture._id]) { + delete this._innerTextureInfos[texture._id]; + this._count--; + } + }, + isEmpty: function isEmpty() { + return this._count <= 0; + }, + reset: function reset() { + this._x = space; + this._y = space; + this._nexty = space; + var frames = this._innerSpriteFrames; + for (var i = 0, l = frames.length; i < l; i++) { + var frame = frames[i]; + if (!frame.isValid) continue; + frame._resetDynamicAtlasFrame(); + } + this._innerSpriteFrames.length = 0; + this._innerTextureInfos = {}; + }, + destroy: function destroy() { + this.reset(); + this._texture.destroy(); + } + }); + module.exports = Atlas; + }), { + "../../../assets/CCRenderTexture": 114 + }], + 274: [(function (require, module, exports) { + "use strict"; + var Atlas = require("./atlas"); + var _atlases = []; + var _atlasIndex = -1; + var _maxAtlasCount = 5; + var _textureSize = 2048; + var _maxFrameSize = 512; + var _textureBleeding = true; + var _debugNode = null; + function newAtlas() { + var atlas = _atlases[++_atlasIndex]; + if (!atlas) { + atlas = new Atlas(_textureSize, _textureSize); + _atlases.push(atlas); + } + return atlas; + } + function beforeSceneLoad() { + dynamicAtlasManager.reset(); + } + var _enabled = false; + var dynamicAtlasManager = { + Atlas: Atlas, + 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; + }, + insertSpriteFrame: function insertSpriteFrame(spriteFrame) { + false; + if (!_enabled || _atlasIndex === _maxAtlasCount || !spriteFrame || spriteFrame._original) return null; + if (!spriteFrame._texture.packable) return null; + var atlas = _atlases[_atlasIndex]; + atlas || (atlas = newAtlas()); + var frame = atlas.insertSpriteFrame(spriteFrame); + if (!frame && _atlasIndex !== _maxAtlasCount) { + atlas = newAtlas(); + return atlas.insertSpriteFrame(spriteFrame); + } + return frame; + }, + 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; + this.deleteAtlasTexture(texture); + }, + deleteAtlasTexture: function deleteAtlasTexture(texture) { + if (texture) for (var i = _atlases.length - 1; i >= 0; i--) { + _atlases[i].deleteInnerTexture(texture); + if (_atlases[i].isEmpty()) { + _atlases[i].destroy(); + _atlases.splice(i, 1); + _atlasIndex--; + } + } + }, + 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; + }), { + "./atlas": 273 + }], + 275: [(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; + subClass.__proto__ = superClass; + } + 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 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); + this._updateFontFamily(comp); + this._updateProperties(comp); + this._updateLabelInfo(comp); + this._updateContent(); + this.updateWorldVerts(comp); + _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; + this.packToDynamicAtlas(comp, _spriteFrame); + }; + _proto._updateLabelInfo = function _updateLabelInfo() { + shareLabelInfo.hash = ""; + shareLabelInfo.margin = 0; + }; + _proto._updateProperties = function _updateProperties(comp) { + _string = comp.string.toString(); + _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 (_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; + } + _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); + } + } + 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) { }; + _proto._quadsUpdated = function _quadsUpdated(comp) { }; + _proto._reserveQuads = function _reserveQuads() { }; + return BmfontAssembler; + })(_assembler2d["default"]); + exports["default"] = BmfontAssembler; + module.exports = exports["default"]; + }), { + "../../../components/CCLabel": 151, + "../../../platform/CCMacro": 244, + "../../../utils/text-utils": 331, + "../../assembler-2d": 265, + "../utils": 279 + }], + 276: [(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; + }), {}], + 277: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _bmfont = _interopRequireDefault(require("../../webgl/assemblers/label/2d/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; + subClass.__proto__ = superClass; + } + 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(width, height) { + var texture = new RenderTexture(); + texture.initWithSize(width, height); + texture.update(); + this._fontDefDictionary = new FontAtlas(texture); + this._x = space; + this._y = space; + this._nexty = space; + this._width = width; + this._height = height; + cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this); + } + cc.js.mixin(LetterAtlas.prototype, { + insertLetterTexture: function insertLetterTexture(letterTexture) { + var texture = letterTexture._texture; + var width = texture.width, height = texture.height; + 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) return null; + this._fontDefDictionary._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._fontDefDictionary._texture; + letter.valid = true; + letter.w = letterTexture._width - bleed; + letter.h = letterTexture._height - bleed; + letter.xAdvance = letter.w; + letter.offsetY = letterTexture._offsetY; + this._x += width + space; + this._fontDefDictionary.addLetterDefinitions(letterTexture._hash, letter); + return letter; + }, + update: function update() { + if (!this._dirty) return; + this._fontDefDictionary._texture.update(); + this._dirty = false; + }, + reset: function reset() { + this._x = space; + this._y = space; + this._nexty = space; + var chars = this._fontDefDictionary._letterDefinitions; + for (var i = 0, l = chars.length; i < l; i++) { + var _char2 = chars[i]; + if (!_char2.isValid) continue; + _char2.destroy(); + } + this._fontDefDictionary.clear(); + }, + destroy: function destroy() { + this.reset(); + this._fontDefDictionary._texture.destroy(); + this._fontDefDictionary._texture = null; + }, + beforeSceneLoad: function beforeSceneLoad() { + this.clearAllCache(); + }, + clearAllCache: function clearAllCache() { + this.destroy(); + var texture = new RenderTexture(); + texture.initWithSize(this._width, this._height); + texture.update(); + this._fontDefDictionary._texture = texture; + }, + getLetter: function getLetter(key) { + return this._fontDefDictionary._letterDefinitions[key]; + }, + getTexture: function getTexture() { + return this._fontDefDictionary.getTexture(); + }, + getLetterDefinitionForChar: function getLetterDefinitionForChar(_char3, labelInfo) { + var hash = _char3.charCodeAt(0) + labelInfo.hash; + var letter = this._fontDefDictionary._letterDefinitions[hash]; + if (!letter) { + var temp = new LetterTexture(_char3, labelInfo); + temp.updateRenderData(); + letter = this.insertLetterTexture(temp); + temp.destroy(); + } + return letter; + } + }); + 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 LetterFontAssembler = (function (_WebglBmfontAssembler) { + _inheritsLoose(LetterFontAssembler, _WebglBmfontAssembler); + function LetterFontAssembler() { + return _WebglBmfontAssembler.apply(this, arguments) || this; + } + var _proto = LetterFontAssembler.prototype; + _proto._getAssemblerData = function _getAssemblerData() { + if (!_shareAtlas) { + _shareAtlas = new LetterAtlas(_atlasWidth, _atlasHeight); + cc.Label._shareAtlas = _shareAtlas; + } + return _shareAtlas.getTexture(); + }; + _proto._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; + } + }; + _proto._updateLabelInfo = function _updateLabelInfo(comp) { + shareLabelInfo.fontDesc = this._getFontDesc(); + shareLabelInfo.color = comp.node.color; + shareLabelInfo.hash = computeHash(shareLabelInfo); + }; + _proto._getFontDesc = function _getFontDesc() { + var fontDesc = shareLabelInfo.fontSize.toString() + "px "; + fontDesc += shareLabelInfo.fontFamily; + _isBold && (fontDesc = "bold " + fontDesc); + return fontDesc; + }; + _proto._computeHorizontalKerningForText = function _computeHorizontalKerningForText() { }; + _proto._determineRect = function _determineRect(tempRect) { + return false; + }; + return LetterFontAssembler; + })(_bmfont["default"]); + exports["default"] = LetterFontAssembler; + module.exports = exports["default"]; + }), { + "../../../assets/CCRenderTexture": 114, + "../../../components/CCComponent": 149, + "../../../components/CCLabel": 151, + "../../../components/CCLabelOutline": 152, + "../../../utils/text-utils": 331, + "../../webgl/assemblers/label/2d/bmfont": 284, + "../utils": 279 + }], + 278: [(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; + subClass.__proto__ = superClass; + } + 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 _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); + this._calDynamicAtlas(comp); + comp._actualFontSize = _fontSize; + comp.node.setContentSize(_nodeContentSize); + this.updateVerts(comp); + comp._vertsDirty = false; + _context = null; + _canvas = null; + _texture = null; + }; + _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; + 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; + _string = comp.string.toString(); + _fontSize = comp._fontSize; + _drawFontSize = _fontSize; + _underlineThickness = comp.underlineHeight || _drawFontSize / 8; + _overflow = comp.overflow; + _canvasSize.width = comp.node.width; + _canvasSize.height = comp.node.height; + _nodeContentSize = comp.node.getContentSize(); + _lineHeight = comp._lineHeight; + _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; + }; + _proto._setupShadow = function _setupShadow() { + _context.shadowColor = "rgba(" + _shadowColor.r + ", " + _shadowColor.g + ", " + _shadowColor.b + ", " + _shadowColor.a / 255 + ")"; + _context.shadowBlur = _shadowComp.blur; + _context.shadowOffsetX = _shadowComp.offset.x; + _context.shadowOffsetY = -_shadowComp.offset.y; + }; + _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; + var frame = comp._frame; + deleteFromDynamicAtlas(comp, frame); + frame._original || frame.setRect(cc.rect(0, 0, _canvas.width, _canvas.height)); + this.packToDynamicAtlas(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": 151, + "../../../components/CCLabelOutline": 152, + "../../../components/CCLabelShadow": 153, + "../../../platform/CCMacro": 244, + "../../../utils/text-utils": 331, + "../../assembler-2d": 265, + "../utils": 279 + }], + 279: [(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": 274 + }], + 280: [(function (require, module, exports) { + "use strict"; + cc.Graphics.earcut = module.exports = earcut; + function earcut(data, holeIndices, dim) { + dim = dim || 2; + var hasHoles = holeIndices && holeIndices.length, outerLen = hasHoles ? holeIndices[0] * dim : data.length, outerNode = linkedList(data, 0, outerLen, dim, true), triangles = []; + if (!outerNode) return triangles; + var minX, minY, maxX, maxY, x, y, size; + hasHoles && (outerNode = eliminateHoles(data, holeIndices, outerNode, dim)); + if (data.length > 80 * dim) { + minX = maxX = data[0]; + minY = maxY = data[1]; + for (var i = dim; i < outerLen; i += dim) { + x = data[i]; + y = data[i + 1]; + x < minX && (minX = x); + y < minY && (minY = y); + x > maxX && (maxX = x); + y > maxY && (maxY = y); + } + size = Math.max(maxX - minX, maxY - minY); + } + earcutLinked(outerNode, triangles, dim, minX, minY, size); + return triangles; + } + function linkedList(data, start, end, dim, clockwise) { + var i, last; + if (clockwise === signedArea(data, start, end, dim) > 0) for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); else for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); + if (last && equals(last, last.next)) { + removeNode(last); + last = last.next; + } + return last; + } + function filterPoints(start, end) { + if (!start) return start; + end || (end = start); + var p = start, again; + do { + again = false; + if (p.steiner || !equals(p, p.next) && 0 !== area(p.prev, p, p.next)) p = p.next; else { + removeNode(p); + p = end = p.prev; + if (p === p.next) return null; + again = true; + } + } while (again || p !== end); + return end; + } + function earcutLinked(ear, triangles, dim, minX, minY, size, pass) { + if (!ear) return; + !pass && size && indexCurve(ear, minX, minY, size); + var stop = ear, prev, next; + while (ear.prev !== ear.next) { + prev = ear.prev; + next = ear.next; + if (size ? isEarHashed(ear, minX, minY, size) : isEar(ear)) { + triangles.push(prev.i / dim); + triangles.push(ear.i / dim); + triangles.push(next.i / dim); + removeNode(ear); + ear = next.next; + stop = next.next; + continue; + } + ear = next; + if (ear === stop) { + if (pass) if (1 === pass) { + ear = cureLocalIntersections(ear, triangles, dim); + earcutLinked(ear, triangles, dim, minX, minY, size, 2); + } else 2 === pass && splitEarcut(ear, triangles, dim, minX, minY, size); else earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1); + break; + } + } + } + function isEar(ear) { + var a = ear.prev, b = ear, c = ear.next; + if (area(a, b, c) >= 0) return false; + var p = ear.next.next; + while (p !== ear.prev) { + if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.next; + } + return true; + } + function isEarHashed(ear, minX, minY, size) { + var a = ear.prev, b = ear, c = ear.next; + if (area(a, b, c) >= 0) return false; + var minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x, minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y, maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x, maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y; + var minZ = zOrder(minTX, minTY, minX, minY, size), maxZ = zOrder(maxTX, maxTY, minX, minY, size); + var p = ear.nextZ; + while (p && p.z <= maxZ) { + if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.nextZ; + } + p = ear.prevZ; + while (p && p.z >= minZ) { + if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + } + return true; + } + function cureLocalIntersections(start, triangles, dim) { + var p = start; + do { + var a = p.prev, b = p.next.next; + if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { + triangles.push(a.i / dim); + triangles.push(p.i / dim); + triangles.push(b.i / dim); + removeNode(p); + removeNode(p.next); + p = start = b; + } + p = p.next; + } while (p !== start); + return p; + } + function splitEarcut(start, triangles, dim, minX, minY, size) { + var a = start; + do { + var b = a.next.next; + while (b !== a.prev) { + if (a.i !== b.i && isValidDiagonal(a, b)) { + var c = splitPolygon(a, b); + a = filterPoints(a, a.next); + c = filterPoints(c, c.next); + earcutLinked(a, triangles, dim, minX, minY, size); + earcutLinked(c, triangles, dim, minX, minY, size); + return; + } + b = b.next; + } + a = a.next; + } while (a !== start); + } + function eliminateHoles(data, holeIndices, outerNode, dim) { + var queue = [], i, len, start, end, list; + for (i = 0, len = holeIndices.length; i < len; i++) { + start = holeIndices[i] * dim; + end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; + list = linkedList(data, start, end, dim, false); + list === list.next && (list.steiner = true); + queue.push(getLeftmost(list)); + } + queue.sort(compareX); + for (i = 0; i < queue.length; i++) { + eliminateHole(queue[i], outerNode); + outerNode = filterPoints(outerNode, outerNode.next); + } + return outerNode; + } + function compareX(a, b) { + return a.x - b.x; + } + function eliminateHole(hole, outerNode) { + outerNode = findHoleBridge(hole, outerNode); + if (outerNode) { + var b = splitPolygon(outerNode, hole); + filterPoints(b, b.next); + } + } + function findHoleBridge(hole, outerNode) { + var p = outerNode, hx = hole.x, hy = hole.y, qx = -Infinity, m; + do { + if (hy <= p.y && hy >= p.next.y) { + var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); + if (x <= hx && x > qx) { + qx = x; + if (x === hx) { + if (hy === p.y) return p; + if (hy === p.next.y) return p.next; + } + m = p.x < p.next.x ? p : p.next; + } + } + p = p.next; + } while (p !== outerNode); + if (!m) return null; + if (hx === qx) return m.prev; + var stop = m, mx = m.x, my = m.y, tanMin = Infinity, tan; + p = m.next; + while (p !== stop) { + if (hx >= p.x && p.x >= mx && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { + tan = Math.abs(hy - p.y) / (hx - p.x); + if ((tan < tanMin || tan === tanMin && p.x > m.x) && locallyInside(p, hole)) { + m = p; + tanMin = tan; + } + } + p = p.next; + } + return m; + } + function indexCurve(start, minX, minY, size) { + var p = start; + do { + null === p.z && (p.z = zOrder(p.x, p.y, minX, minY, size)); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + } while (p !== start); + p.prevZ.nextZ = null; + p.prevZ = null; + sortLinked(p); + } + function sortLinked(list) { + var i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1; + do { + p = list; + list = null; + tail = null; + numMerges = 0; + while (p) { + numMerges++; + q = p; + pSize = 0; + for (i = 0; i < inSize; i++) { + pSize++; + q = q.nextZ; + if (!q) break; + } + qSize = inSize; + while (pSize > 0 || qSize > 0 && q) { + if (0 === pSize) { + e = q; + q = q.nextZ; + qSize--; + } else if (0 !== qSize && q) if (p.z <= q.z) { + e = p; + p = p.nextZ; + pSize--; + } else { + e = q; + q = q.nextZ; + qSize--; + } else { + e = p; + p = p.nextZ; + pSize--; + } + tail ? tail.nextZ = e : list = e; + e.prevZ = tail; + tail = e; + } + p = q; + } + tail.nextZ = null; + inSize *= 2; + } while (numMerges > 1); + return list; + } + function zOrder(x, y, minX, minY, size) { + x = 32767 * (x - minX) / size; + y = 32767 * (y - minY) / size; + x = 16711935 & (x | x << 8); + x = 252645135 & (x | x << 4); + x = 858993459 & (x | x << 2); + x = 1431655765 & (x | x << 1); + y = 16711935 & (y | y << 8); + y = 252645135 & (y | y << 4); + y = 858993459 & (y | y << 2); + y = 1431655765 & (y | y << 1); + return x | y << 1; + } + function getLeftmost(start) { + var p = start, leftmost = start; + do { + p.x < leftmost.x && (leftmost = p); + p = p.next; + } while (p !== start); + return leftmost; + } + function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) { + return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; + } + function isValidDiagonal(a, b) { + return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); + } + function area(p, q, r) { + return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); + } + function equals(p1, p2) { + return p1.x === p2.x && p1.y === p2.y; + } + function intersects(p1, q1, p2, q2) { + if (equals(p1, q1) && equals(p2, q2) || equals(p1, q2) && equals(p2, q1)) return true; + return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 && area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0; + } + function intersectsPolygon(a, b) { + var p = a; + do { + if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true; + p = p.next; + } while (p !== a); + return false; + } + function locallyInside(a, b) { + return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; + } + function middleInside(a, b) { + var p = a, inside = false, px = (a.x + b.x) / 2, py = (a.y + b.y) / 2; + do { + p.y > py !== p.next.y > py && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x && (inside = !inside); + p = p.next; + } while (p !== a); + return inside; + } + function splitPolygon(a, b) { + var a2 = new Node(a.i, a.x, a.y), b2 = new Node(b.i, b.x, b.y), an = a.next, bp = b.prev; + a.next = b; + b.prev = a; + a2.next = an; + an.prev = a2; + b2.next = a2; + a2.prev = b2; + bp.next = b2; + b2.prev = bp; + return b2; + } + function insertNode(i, x, y, last) { + var p = new Node(i, x, y); + if (last) { + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + } else { + p.prev = p; + p.next = p; + } + return p; + } + function removeNode(p) { + p.next.prev = p.prev; + p.prev.next = p.next; + p.prevZ && (p.prevZ.nextZ = p.nextZ); + p.nextZ && (p.nextZ.prevZ = p.prevZ); + } + function Node(i, x, y) { + this.i = i; + this.x = x; + this.y = y; + this.prev = null; + this.next = null; + this.z = null; + this.prevZ = null; + this.nextZ = null; + this.steiner = false; + } + earcut.deviation = function (data, holeIndices, dim, triangles) { + var hasHoles = holeIndices && holeIndices.length; + var outerLen = hasHoles ? holeIndices[0] * dim : data.length; + var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim)); + if (hasHoles) for (var i = 0, len = holeIndices.length; i < len; i++) { + var start = holeIndices[i] * dim; + var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; + polygonArea -= Math.abs(signedArea(data, start, end, dim)); + } + var trianglesArea = 0; + for (i = 0; i < triangles.length; i += 3) { + var a = triangles[i] * dim; + var b = triangles[i + 1] * dim; + var c = triangles[i + 2] * dim; + trianglesArea += Math.abs((data[a] - data[c]) * (data[b + 1] - data[a + 1]) - (data[a] - data[b]) * (data[c + 1] - data[a + 1])); + } + return 0 === polygonArea && 0 === trianglesArea ? 0 : Math.abs((trianglesArea - polygonArea) / polygonArea); + }; + function signedArea(data, start, end, dim) { + var sum = 0; + for (var i = start, j = end - dim; i < end; i += dim) { + sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); + j = i; + } + return sum; + } + earcut.flatten = function (data) { + var dim = data[0][0].length, result = { + vertices: [], + holes: [], + dimensions: dim + }, holeIndex = 0; + for (var i = 0; i < data.length; i++) { + for (var j = 0; j < data[i].length; j++) for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]); + if (i > 0) { + holeIndex += data[i - 1].length; + result.holes.push(holeIndex); + } + } + return result; + }; + }), {}], + 281: [(function (require, module, exports) { + "use strict"; + var Helper = require("../../../../graphics/helper"); + var PointFlags = require("../../../../graphics/types").PointFlags; + var Point = cc.Graphics.Point = cc.Class({ + name: "cc.GraphicsPoint", + extends: cc.Vec2, + ctor: function ctor(x, y) { + this.reset(); + }, + reset: function reset() { + this.dx = 0; + this.dy = 0; + this.dmx = 0; + this.dmy = 0; + this.flags = 0; + this.len = 0; + } + }); + function Path() { + this.reset(); + } + cc.js.mixin(Path.prototype, { + reset: function reset() { + this.closed = false; + this.nbevel = 0; + this.complex = true; + this.points ? this.points.length = 0 : this.points = []; + } + }); + function Impl(graphics) { + this._tessTol = .25; + this._distTol = .01; + this._updatePathOffset = false; + this._paths = null; + this._pathLength = 0; + this._pathOffset = 0; + this._points = null; + this._pointsOffset = 0; + this._commandx = 0; + this._commandy = 0; + this._paths = []; + this._points = []; + } + cc.js.mixin(Impl.prototype, { + moveTo: function moveTo(x, y) { + if (this._updatePathOffset) { + this._pathOffset = this._pathLength; + this._updatePathOffset = false; + } + this._addPath(); + this._addPoint(x, y, PointFlags.PT_CORNER); + this._commandx = x; + this._commandy = y; + }, + lineTo: function lineTo(x, y) { + this._addPoint(x, y, PointFlags.PT_CORNER); + this._commandx = x; + this._commandy = y; + }, + bezierCurveTo: function bezierCurveTo(c1x, c1y, c2x, c2y, x, y) { + var path = this._curPath; + var last = path.points[path.points.length - 1]; + if (last.x === c1x && last.y === c1y && c2x === x && c2y === y) { + this.lineTo(x, y); + return; + } + Helper.tesselateBezier(this, last.x, last.y, c1x, c1y, c2x, c2y, x, y, 0, PointFlags.PT_CORNER); + this._commandx = x; + this._commandy = y; + }, + quadraticCurveTo: function quadraticCurveTo(cx, cy, x, y) { + var x0 = this._commandx; + var y0 = this._commandy; + this.bezierCurveTo(x0 + 2 / 3 * (cx - x0), y0 + 2 / 3 * (cy - y0), x + 2 / 3 * (cx - x), y + 2 / 3 * (cy - y), x, y); + }, + arc: function arc(cx, cy, r, startAngle, endAngle, counterclockwise) { + Helper.arc(this, cx, cy, r, startAngle, endAngle, counterclockwise); + }, + ellipse: function ellipse(cx, cy, rx, ry) { + Helper.ellipse(this, cx, cy, rx, ry); + this._curPath.complex = false; + }, + circle: function circle(cx, cy, r) { + Helper.ellipse(this, cx, cy, r, r); + this._curPath.complex = false; + }, + rect: function rect(x, y, w, h) { + this.moveTo(x, y); + this.lineTo(x, y + h); + this.lineTo(x + w, y + h); + this.lineTo(x + w, y); + this.close(); + this._curPath.complex = false; + }, + roundRect: function roundRect(x, y, w, h, r) { + Helper.roundRect(this, x, y, w, h, r); + this._curPath.complex = false; + }, + clear: function clear(clean) { + this._pathLength = 0; + this._pathOffset = 0; + this._pointsOffset = 0; + this._curPath = null; + if (clean) { + this._paths.length = 0; + this._points.length = 0; + } + }, + close: function close() { + this._curPath.closed = true; + }, + _addPath: function _addPath() { + var offset = this._pathLength; + var path = this._paths[offset]; + if (path) path.reset(); else { + path = new Path(); + this._paths.push(path); + } + this._pathLength++; + this._curPath = path; + return path; + }, + _addPoint: function _addPoint(x, y, flags) { + var path = this._curPath; + if (!path) return; + var pt; + var points = this._points; + var pathPoints = path.points; + var offset = this._pointsOffset++; + pt = points[offset]; + if (pt) { + pt.x = x; + pt.y = y; + } else { + pt = new Point(x, y); + points.push(pt); + } + pt.flags = flags; + pathPoints.push(pt); + } + }); + cc.Graphics._Impl = Impl; + module.exports = Impl; + }), { + "../../../../graphics/helper": 203, + "../../../../graphics/types": 205 + }], + 282: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("../../../assembler")); + var _inputAssembler = _interopRequireDefault(require("../../../../../renderer/core/input-assembler")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var MeshBuffer = require("../../mesh-buffer"); + var renderer = require("../../../index"); + var Graphics = require("../../../../graphics/graphics"); + var PointFlags = require("../../../../graphics/types").PointFlags; + var LineJoin = Graphics.LineJoin; + var LineCap = Graphics.LineCap; + var Earcut = require("./earcut"); + require("./impl"); + var MAX_VERTEX = 65535; + var MAX_INDICE = 2 * MAX_VERTEX; + var PI = Math.PI; + var min = Math.min; + var max = Math.max; + var ceil = Math.ceil; + var acos = Math.acos; + var cos = Math.cos; + var sin = Math.sin; + var atan2 = Math.atan2; + function curveDivs(r, arc, tol) { + var da = 2 * acos(r / (r + tol)); + return max(2, ceil(arc / da)); + } + function clamp(v, min, max) { + if (v < min) return min; + if (v > max) return max; + return v; + } + var gfx = cc.gfx; + var vfmtPosColorSdf = new gfx.VertexFormat([{ + name: gfx.ATTR_POSITION, + type: gfx.ATTR_TYPE_FLOAT32, + num: 2 + }, { + name: gfx.ATTR_COLOR, + type: gfx.ATTR_TYPE_UINT8, + num: 4, + normalize: true + }, { + name: "a_dist", + type: gfx.ATTR_TYPE_FLOAT32, + num: 1 + }]); + vfmtPosColorSdf.name = "vfmtPosColorSdf"; + var GraphicsAssembler = (function (_Assembler) { + _inheritsLoose(GraphicsAssembler, _Assembler); + function GraphicsAssembler(graphics) { + var _this; + _this = _Assembler.call(this, graphics) || this; + _this._buffer = null; + _this._buffers = []; + _this._bufferOffset = 0; + return _this; + } + var _proto = GraphicsAssembler.prototype; + _proto.getVfmt = function getVfmt() { + return vfmtPosColorSdf; + }; + _proto.getVfmtFloatCount = function getVfmtFloatCount() { + return 4; + }; + _proto.requestBuffer = function requestBuffer() { + var buffer = { + indiceStart: 0, + vertexStart: 0 + }; + var meshbuffer = new MeshBuffer(renderer._handle, this.getVfmt()); + buffer.meshbuffer = meshbuffer; + var ia = new _inputAssembler["default"](meshbuffer._vb, meshbuffer._ib); + buffer.ia = ia; + this._buffers.push(buffer); + return buffer; + }; + _proto.getBuffers = function getBuffers() { + 0 === this._buffers.length && this.requestBuffer(); + return this._buffers; + }; + _proto.clear = function clear(clean) { + this._bufferOffset = 0; + var datas = this._buffers; + if (clean) { + for (var i = 0, l = datas.length; i < l; i++) { + var data = datas[i]; + data.meshbuffer.destroy(); + data.meshbuffer = null; + } + datas.length = 0; + } else for (var _i = 0, _l = datas.length; _i < _l; _i++) { + var _data = datas[_i]; + _data.indiceStart = 0; + _data.vertexStart = 0; + var meshbuffer = _data.meshbuffer; + meshbuffer.reset(); + } + }; + _proto.fillBuffers = function fillBuffers(graphics, renderer) { + renderer._flush(); + renderer.node = graphics.node; + renderer.material = graphics._materials[0]; + var buffers = this.getBuffers(); + for (var index = 0, length = buffers.length; index < length; index++) { + var buffer = buffers[index]; + var meshbuffer = buffer.meshbuffer; + buffer.ia._count = buffer.indiceStart; + renderer._flushIA(buffer.ia); + meshbuffer.uploadData(); + } + }; + _proto.genBuffer = function genBuffer(graphics, cverts) { + var buffers = this.getBuffers(); + var buffer = buffers[this._bufferOffset]; + var meshbuffer = buffer.meshbuffer; + var maxVertsCount = buffer.vertexStart + cverts; + if (maxVertsCount > MAX_VERTEX || 3 * maxVertsCount > MAX_INDICE) { + ++this._bufferOffset; + maxVertsCount = cverts; + if (this._bufferOffset < buffers.length) buffer = buffers[this._bufferOffset]; else { + buffer = this.requestBuffer(graphics); + buffers[this._bufferOffset] = buffer; + } + meshbuffer = buffer.meshbuffer; + } + maxVertsCount > meshbuffer.vertexOffset && meshbuffer.requestStatic(cverts, 3 * cverts); + this._buffer = buffer; + return buffer; + }; + _proto.stroke = function stroke(graphics) { + this._curColor = graphics._strokeColor._val; + this._flattenPaths(graphics._impl); + this._expandStroke(graphics); + graphics._impl._updatePathOffset = true; + }; + _proto.fill = function fill(graphics) { + this._curColor = graphics._fillColor._val; + this._expandFill(graphics); + graphics._impl._updatePathOffset = true; + }; + _proto._expandStroke = function _expandStroke(graphics) { + var w = .5 * graphics.lineWidth, lineCap = graphics.lineCap, lineJoin = graphics.lineJoin, miterLimit = graphics.miterLimit; + var impl = graphics._impl; + var ncap = curveDivs(w, PI, impl._tessTol); + this._calculateJoins(impl, w, lineJoin, miterLimit); + var paths = impl._paths; + var cverts = 0; + for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) { + var path = paths[i]; + var pointsLength = path.points.length; + lineJoin === LineJoin.ROUND ? cverts += 2 * (pointsLength + path.nbevel * (ncap + 2) + 1) : cverts += 2 * (pointsLength + 5 * path.nbevel + 1); + path.closed || (lineCap === LineCap.ROUND ? cverts += 2 * (2 * ncap + 2) : cverts += 12); + } + var buffer = this.genBuffer(graphics, cverts), meshbuffer = buffer.meshbuffer, vData = meshbuffer._vData, iData = meshbuffer._iData; + for (var _i2 = impl._pathOffset, _l2 = impl._pathLength; _i2 < _l2; _i2++) { + var _path = paths[_i2]; + var pts = _path.points; + var _pointsLength = pts.length; + var offset = buffer.vertexStart; + var p0 = void 0, p1 = void 0; + var start = void 0, end = void 0, loop = void 0; + loop = _path.closed; + if (loop) { + p0 = pts[_pointsLength - 1]; + p1 = pts[0]; + start = 0; + end = _pointsLength; + } else { + p0 = pts[0]; + p1 = pts[1]; + start = 1; + end = _pointsLength - 1; + } + p1 = p1 || p0; + if (!loop) { + var dPos = p1.sub(p0); + dPos.normalizeSelf(); + var dx = dPos.x; + var dy = dPos.y; + lineCap === LineCap.BUTT ? this._buttCapStart(p0, dx, dy, w, 0) : lineCap === LineCap.SQUARE ? this._buttCapStart(p0, dx, dy, w, w) : lineCap === LineCap.ROUND && this._roundCapStart(p0, dx, dy, w, ncap); + } + for (var j = start; j < end; ++j) { + if (lineJoin === LineJoin.ROUND) this._roundJoin(p0, p1, w, w, ncap); else if (0 !== (p1.flags & (PointFlags.PT_BEVEL | PointFlags.PT_INNERBEVEL))) this._bevelJoin(p0, p1, w, w); else { + this._vset(p1.x + p1.dmx * w, p1.y + p1.dmy * w, 1); + this._vset(p1.x - p1.dmx * w, p1.y - p1.dmy * w, -1); + } + p0 = p1; + p1 = pts[j + 1]; + } + if (loop) { + var floatCount = this.getVfmtFloatCount(); + var vDataoOfset = offset * floatCount; + this._vset(vData[vDataoOfset], vData[vDataoOfset + 1], 1); + this._vset(vData[vDataoOfset + floatCount], vData[vDataoOfset + floatCount + 1], -1); + } else { + var _dPos = p1.sub(p0); + _dPos.normalizeSelf(); + var _dx = _dPos.x; + var _dy = _dPos.y; + lineCap === LineCap.BUTT ? this._buttCapEnd(p1, _dx, _dy, w, 0) : lineCap === LineCap.SQUARE ? this._buttCapEnd(p1, _dx, _dy, w, w) : lineCap === LineCap.ROUND && this._roundCapEnd(p1, _dx, _dy, w, ncap); + } + var indicesOffset = buffer.indiceStart; + for (var _start = offset + 2, _end = buffer.vertexStart; _start < _end; _start++) { + iData[indicesOffset++] = _start - 2; + iData[indicesOffset++] = _start - 1; + iData[indicesOffset++] = _start; + } + buffer.indiceStart = indicesOffset; + } + }; + _proto._expandFill = function _expandFill(graphics) { + var impl = graphics._impl; + var paths = impl._paths; + var cverts = 0; + for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) { + var path = paths[i]; + var pointsLength = path.points.length; + cverts += pointsLength; + } + var buffer = this.genBuffer(graphics, cverts), meshbuffer = buffer.meshbuffer, vData = meshbuffer._vData, iData = meshbuffer._iData; + for (var _i3 = impl._pathOffset, _l3 = impl._pathLength; _i3 < _l3; _i3++) { + var _path2 = paths[_i3]; + var pts = _path2.points; + var _pointsLength2 = pts.length; + if (0 === _pointsLength2) continue; + var offset = buffer.vertexStart; + for (var j = 0; j < _pointsLength2; ++j) this._vset(pts[j].x, pts[j].y); + var indicesOffset = buffer.indiceStart; + if (_path2.complex) { + var earcutData = []; + var floatCount = this.getVfmtFloatCount(); + for (var _j = offset, end = buffer.vertexStart; _j < end; _j++) { + var vDataOffset = _j * floatCount; + earcutData.push(vData[vDataOffset]); + earcutData.push(vData[vDataOffset + 1]); + } + var newIndices = Earcut(earcutData, null, 2); + if (!newIndices || 0 === newIndices.length) continue; + for (var _j2 = 0, nIndices = newIndices.length; _j2 < nIndices; _j2++) iData[indicesOffset++] = newIndices[_j2] + offset; + } else { + var first = offset; + for (var start = offset + 2, _end2 = buffer.vertexStart; start < _end2; start++) { + iData[indicesOffset++] = first; + iData[indicesOffset++] = start - 1; + iData[indicesOffset++] = start; + } + } + buffer.indiceStart = indicesOffset; + } + }; + _proto._calculateJoins = function _calculateJoins(impl, w, lineJoin, miterLimit) { + var iw = 0; + w > 0 && (iw = 1 / w); + var paths = impl._paths; + for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) { + var path = paths[i]; + var pts = path.points; + var ptsLength = pts.length; + var p0 = pts[ptsLength - 1]; + var p1 = pts[0]; + var nleft = 0; + path.nbevel = 0; + for (var j = 0; j < ptsLength; j++) { + var dmr2 = void 0, cross = void 0, limit = void 0; + var dlx0 = p0.dy; + var dly0 = -p0.dx; + var dlx1 = p1.dy; + var dly1 = -p1.dx; + p1.dmx = .5 * (dlx0 + dlx1); + p1.dmy = .5 * (dly0 + dly1); + dmr2 = p1.dmx * p1.dmx + p1.dmy * p1.dmy; + if (dmr2 > 1e-6) { + var scale = 1 / dmr2; + scale > 600 && (scale = 600); + p1.dmx *= scale; + p1.dmy *= scale; + } + cross = p1.dx * p0.dy - p0.dx * p1.dy; + if (cross > 0) { + nleft++; + p1.flags |= PointFlags.PT_LEFT; + } + limit = max(11, min(p0.len, p1.len) * iw); + dmr2 * limit * limit < 1 && (p1.flags |= PointFlags.PT_INNERBEVEL); + var dmwx = p1.dmx * w; + var dmwy = p1.dmy * w; + var dmlen = dmwx * dmwx + dmwy * dmwy; + (dmlen > p1.len * p1.len || dmlen > p0.len * p0.len) && (p1.flags |= PointFlags.PT_INNERBEVEL); + p1.flags & PointFlags.PT_CORNER && (dmr2 * miterLimit * miterLimit < 1 || lineJoin === LineJoin.BEVEL || lineJoin === LineJoin.ROUND) && (p1.flags |= PointFlags.PT_BEVEL); + 0 !== (p1.flags & (PointFlags.PT_BEVEL | PointFlags.PT_INNERBEVEL)) && path.nbevel++; + p0 = p1; + p1 = pts[j + 1]; + } + } + }; + _proto._flattenPaths = function _flattenPaths(impl) { + var paths = impl._paths; + for (var i = impl._pathOffset, l = impl._pathLength; i < l; i++) { + var path = paths[i]; + var pts = path.points; + var p0 = pts[pts.length - 1]; + var p1 = pts[0]; + if (pts.length > 2 && p0.equals(p1)) { + path.closed = true; + pts.pop(); + p0 = pts[pts.length - 1]; + } + for (var j = 0, size = pts.length; j < size; j++) { + var dPos = p1.sub(p0); + p0.len = dPos.mag(); + (dPos.x || dPos.y) && dPos.normalizeSelf(); + p0.dx = dPos.x; + p0.dy = dPos.y; + p0 = p1; + p1 = pts[j + 1]; + } + } + }; + _proto._chooseBevel = function _chooseBevel(bevel, p0, p1, w) { + var x = p1.x; + var y = p1.y; + var x0, y0, x1, y1; + if (0 !== bevel) { + x0 = x + p0.dy * w; + y0 = y - p0.dx * w; + x1 = x + p1.dy * w; + y1 = y - p1.dx * w; + } else { + x0 = x1 = x + p1.dmx * w; + y0 = y1 = y + p1.dmy * w; + } + return [x0, y0, x1, y1]; + }; + _proto._buttCapStart = function _buttCapStart(p, dx, dy, w, d) { + var px = p.x - dx * d; + var py = p.y - dy * d; + var dlx = dy; + var dly = -dx; + this._vset(px + dlx * w, py + dly * w, 1); + this._vset(px - dlx * w, py - dly * w, -1); + }; + _proto._buttCapEnd = function _buttCapEnd(p, dx, dy, w, d) { + var px = p.x + dx * d; + var py = p.y + dy * d; + var dlx = dy; + var dly = -dx; + this._vset(px + dlx * w, py + dly * w, 1); + this._vset(px - dlx * w, py - dly * w, -1); + }; + _proto._roundCapStart = function _roundCapStart(p, dx, dy, w, ncap) { + var px = p.x; + var py = p.y; + var dlx = dy; + var dly = -dx; + for (var i = 0; i < ncap; i++) { + var a = i / (ncap - 1) * PI; + var ax = cos(a) * w, ay = sin(a) * w; + this._vset(px - dlx * ax - dx * ay, py - dly * ax - dy * ay, 1); + this._vset(px, py, 0); + } + this._vset(px + dlx * w, py + dly * w, 1); + this._vset(px - dlx * w, py - dly * w, -1); + }; + _proto._roundCapEnd = function _roundCapEnd(p, dx, dy, w, ncap) { + var px = p.x; + var py = p.y; + var dlx = dy; + var dly = -dx; + this._vset(px + dlx * w, py + dly * w, 1); + this._vset(px - dlx * w, py - dly * w, -1); + for (var i = 0; i < ncap; i++) { + var a = i / (ncap - 1) * PI; + var ax = cos(a) * w, ay = sin(a) * w; + this._vset(px, py, 0); + this._vset(px - dlx * ax + dx * ay, py - dly * ax + dy * ay, 1); + } + }; + _proto._roundJoin = function _roundJoin(p0, p1, lw, rw, ncap) { + var dlx0 = p0.dy; + var dly0 = -p0.dx; + var dlx1 = p1.dy; + var dly1 = -p1.dx; + var p1x = p1.x; + var p1y = p1.y; + if (0 !== (p1.flags & PointFlags.PT_LEFT)) { + var out = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, lw); + var lx0 = out[0]; + var ly0 = out[1]; + var lx1 = out[2]; + var ly1 = out[3]; + var a0 = atan2(-dly0, -dlx0); + var a1 = atan2(-dly1, -dlx1); + a1 > a0 && (a1 -= 2 * PI); + this._vset(lx0, ly0, 1); + this._vset(p1x - dlx0 * rw, p1.y - dly0 * rw, -1); + var n = clamp(ceil((a0 - a1) / PI) * ncap, 2, ncap); + for (var i = 0; i < n; i++) { + var u = i / (n - 1); + var a = a0 + u * (a1 - a0); + var rx = p1x + cos(a) * rw; + var ry = p1y + sin(a) * rw; + this._vset(p1x, p1y, 0); + this._vset(rx, ry, -1); + } + this._vset(lx1, ly1, 1); + this._vset(p1x - dlx1 * rw, p1y - dly1 * rw, -1); + } else { + var _out = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, -rw); + var rx0 = _out[0]; + var ry0 = _out[1]; + var rx1 = _out[2]; + var ry1 = _out[3]; + var _a = atan2(dly0, dlx0); + var _a2 = atan2(dly1, dlx1); + _a2 < _a && (_a2 += 2 * PI); + this._vset(p1x + dlx0 * rw, p1y + dly0 * rw, 1); + this._vset(rx0, ry0, -1); + var _n = clamp(ceil((_a2 - _a) / PI) * ncap, 2, ncap); + for (var _i4 = 0; _i4 < _n; _i4++) { + var _u = _i4 / (_n - 1); + var _a3 = _a + _u * (_a2 - _a); + var lx = p1x + cos(_a3) * lw; + var ly = p1y + sin(_a3) * lw; + this._vset(lx, ly, 1); + this._vset(p1x, p1y, 0); + } + this._vset(p1x + dlx1 * rw, p1y + dly1 * rw, 1); + this._vset(rx1, ry1, -1); + } + }; + _proto._bevelJoin = function _bevelJoin(p0, p1, lw, rw) { + var rx0, ry0, rx1, ry1; + var lx0, ly0, lx1, ly1; + var dlx0 = p0.dy; + var dly0 = -p0.dx; + var dlx1 = p1.dy; + var dly1 = -p1.dx; + if (p1.flags & PointFlags.PT_LEFT) { + var out = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, lw); + lx0 = out[0]; + ly0 = out[1]; + lx1 = out[2]; + ly1 = out[3]; + this._vset(lx0, ly0, 1); + this._vset(p1.x - dlx0 * rw, p1.y - dly0 * rw, -1); + this._vset(lx1, ly1, 1); + this._vset(p1.x - dlx1 * rw, p1.y - dly1 * rw, -1); + } else { + var _out2 = this._chooseBevel(p1.flags & PointFlags.PT_INNERBEVEL, p0, p1, -rw); + rx0 = _out2[0]; + ry0 = _out2[1]; + rx1 = _out2[2]; + ry1 = _out2[3]; + this._vset(p1.x + dlx0 * lw, p1.y + dly0 * lw, 1); + this._vset(rx0, ry0, -1); + this._vset(p1.x + dlx1 * lw, p1.y + dly1 * lw, 1); + this._vset(rx1, ry1, -1); + } + }; + _proto._vset = function _vset(x, y, distance) { + void 0 === distance && (distance = 0); + var buffer = this._buffer; + var meshbuffer = buffer.meshbuffer; + var dataOffset = buffer.vertexStart * this.getVfmtFloatCount(); + var vData = meshbuffer._vData; + var uintVData = meshbuffer._uintVData; + vData[dataOffset] = x; + vData[dataOffset + 1] = y; + uintVData[dataOffset + 2] = this._curColor; + vData[dataOffset + 3] = distance; + buffer.vertexStart++; + meshbuffer._dirty = true; + }; + return GraphicsAssembler; + })(_assembler["default"]); + exports["default"] = GraphicsAssembler; + _assembler["default"].register(cc.Graphics, GraphicsAssembler); + module.exports = exports["default"]; + }), { + "../../../../../renderer/core/input-assembler": 362, + "../../../../graphics/graphics": 202, + "../../../../graphics/types": 205, + "../../../assembler": 268, + "../../../index": 271, + "../../mesh-buffer": 308, + "./earcut": 280, + "./impl": 281 + }], + 283: [(function (require, module, exports) { + "use strict"; + cc.assemblers = {}; + require("./sprite"); + require("./mask-assembler"); + require("./graphics"); + require("./label"); + require("./motion-streak"); + }), { + "./graphics": 282, + "./label": 291, + "./mask-assembler": 292, + "./motion-streak": 293, + "./sprite": 306 + }], + 284: [(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; + subClass.__proto__ = superClass; + } + 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) { + 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; + } + l = x; + r = x + rectWidth * scale; + b = y - rectHeight * scale; + t = y; + this.appendVerts(comp, _dataOffset, l, r, b, t); + 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) { + 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": 275 + }], + 285: [(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; + subClass.__proto__ = superClass; + } + 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": 260, + "../../../../utils/label/letter-font": 277, + "./bmfont": 284 + }], + 286: [(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": 124, + "../../../../../assets/material/material-variant": 131, + "../../../../../components/CCLabel": 151, + "../../../../../components/CCLabelOutline": 152, + "../../../../../components/CCLabelShadow": 153 + }], + 287: [(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; + subClass.__proto__ = superClass; + } + 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 node = comp.node, canvasWidth = comp._ttfTexture.width, canvasHeight = comp._ttfTexture.height, 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": 153, + "../../../../utils/label/ttf": 278 + }], + 288: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../../../../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var WebglBmfontAssembler = require("../2d/bmfont"); + var vec3_temp_local = new _vec["default"](); + var vec3_temp_world = new _vec["default"](); + var WebglBmfontAssembler3D = (function (_WebglBmfontAssembler) { + _inheritsLoose(WebglBmfontAssembler3D, _WebglBmfontAssembler); + function WebglBmfontAssembler3D() { + return _WebglBmfontAssembler.apply(this, arguments) || this; + } + return WebglBmfontAssembler3D; + })(WebglBmfontAssembler); + exports["default"] = WebglBmfontAssembler3D; + cc.js.mixin(WebglBmfontAssembler3D.prototype, Assembler3D, { + updateWorldVerts: function updateWorldVerts(comp) { + var matrix = comp.node._worldMatrix; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < world.length; offset += floatsPerVert) { + _vec["default"].set(vec3_temp_local, local[offset], local[offset + 1], 0); + _vec["default"].transformMat4(vec3_temp_world, vec3_temp_local, matrix); + world[offset] = vec3_temp_world.x; + world[offset + 1] = vec3_temp_world.y; + world[offset + 2] = vec3_temp_world.z; + } + } + }); + module.exports = exports["default"]; + }), { + "../../../../../value-types/vec3": 349, + "../../../../assembler-3d": 266, + "../2d/bmfont": 284 + }], + 289: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../../../../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var WebglLetterFontAssembler = require("../2d/letter"); + var vec3_temp_local = new _vec["default"](); + var vec3_temp_world = new _vec["default"](); + var WebglLetterFontAssembler3D = (function (_WebglLetterFontAssem) { + _inheritsLoose(WebglLetterFontAssembler3D, _WebglLetterFontAssem); + function WebglLetterFontAssembler3D() { + return _WebglLetterFontAssem.apply(this, arguments) || this; + } + return WebglLetterFontAssembler3D; + })(WebglLetterFontAssembler); + exports["default"] = WebglLetterFontAssembler3D; + cc.js.mixin(WebglLetterFontAssembler3D.prototype, Assembler3D, { + updateWorldVerts: function updateWorldVerts(comp) { + var matrix = comp.node._worldMatrix; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < world.length; offset += floatsPerVert) { + _vec["default"].set(vec3_temp_local, local[offset], local[offset + 1], 0); + _vec["default"].transformMat4(vec3_temp_world, vec3_temp_local, matrix); + world[offset] = vec3_temp_world.x; + world[offset + 1] = vec3_temp_world.y; + world[offset + 2] = vec3_temp_world.z; + } + } + }); + module.exports = exports["default"]; + }), { + "../../../../../value-types/vec3": 349, + "../../../../assembler-3d": 266, + "../2d/letter": 285 + }], + 290: [(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; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var WebglTTFAssembler = require("../2d/ttf"); + var WebglTTFAssembler3D = (function (_WebglTTFAssembler) { + _inheritsLoose(WebglTTFAssembler3D, _WebglTTFAssembler); + function WebglTTFAssembler3D() { + return _WebglTTFAssembler.apply(this, arguments) || this; + } + return WebglTTFAssembler3D; + })(WebglTTFAssembler); + exports["default"] = WebglTTFAssembler3D; + cc.js.mixin(WebglTTFAssembler3D.prototype, Assembler3D); + module.exports = exports["default"]; + }), { + "../../../../assembler-3d": 266, + "../2d/ttf": 287 + }], + 291: [(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")); + 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 ctor = is3DNode ? _ttf2["default"] : _ttf["default"]; + if (label.font instanceof cc.BitmapFont) ctor = is3DNode ? _bmfont2["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 + }); + }), { + "../../../../components/CCLabel": 151, + "../../../assembler": 268, + "./2d/bmfont": 284, + "./2d/letter": 285, + "./2d/nativeTTF": 286, + "./2d/ttf": 287, + "./3d/bmfont": 288, + "./3d/letter": 289, + "./3d/ttf": 290 + }], + 292: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.MaskAssembler = void 0; + var _assembler = _interopRequireDefault(require("../../assembler")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Mask = require("../../../components/CCMask"); + var RenderFlow = require("../../render-flow"); + var SimpleSpriteAssembler = require("./sprite/2d/simple"); + var GraphicsAssembler = require("./graphics"); + var gfx = require("../../../../renderer/gfx"); + var vfmtPos = require("../vertex-format").vfmtPos; + var _maxLevel = 8; + var _maskStack = []; + function getWriteMask() { + return 1 << _maskStack.length - 1; + } + function getStencilRef() { + var result = 0; + for (var i = 0; i < _maskStack.length; ++i) result += 1 << i; + return result; + } + function applyStencil(material, func, failOp, ref, stencilMask, writeMask) { + var effect = material.effect; + var zFailOp = gfx.STENCIL_OP_KEEP, zPassOp = gfx.STENCIL_OP_KEEP; + effect.setStencil(gfx.STENCIL_ENABLE, func, ref, stencilMask, failOp, zFailOp, zPassOp, writeMask); + } + function pushMask(mask) { + _maskStack.length + 1 > _maxLevel && cc.errorID(9e3, _maxLevel); + _maskStack.push(mask); + } + function exitMask(mask, renderer) { + 0 === _maskStack.length && cc.errorID(9001); + _maskStack.pop(); + 0 === _maskStack.length ? renderer._flushMaterial(mask._exitMaterial) : enableMask(renderer); + } + function applyClearMask(mask, renderer) { + var func = gfx.DS_FUNC_NEVER; + var ref = getWriteMask(); + var stencilMask = ref; + var writeMask = ref; + var failOp = mask.inverted ? gfx.STENCIL_OP_REPLACE : gfx.STENCIL_OP_ZERO; + applyStencil(mask._clearMaterial, func, failOp, ref, stencilMask, writeMask); + var buffer = renderer.getBuffer("mesh", vfmtPos); + var offsetInfo = buffer.request(4, 6); + var indiceOffset = offsetInfo.indiceOffset, vertexOffset = offsetInfo.byteOffset >> 2, vertexId = offsetInfo.vertexOffset, vbuf = buffer._vData, ibuf = buffer._iData; + vbuf[vertexOffset++] = -1; + vbuf[vertexOffset++] = -1; + vbuf[vertexOffset++] = -1; + vbuf[vertexOffset++] = 1; + vbuf[vertexOffset++] = 1; + vbuf[vertexOffset++] = 1; + vbuf[vertexOffset++] = 1; + vbuf[vertexOffset++] = -1; + ibuf[indiceOffset++] = vertexId; + ibuf[indiceOffset++] = vertexId + 3; + ibuf[indiceOffset++] = vertexId + 1; + ibuf[indiceOffset++] = vertexId + 1; + ibuf[indiceOffset++] = vertexId + 3; + ibuf[indiceOffset++] = vertexId + 2; + renderer.node = renderer._dummyNode; + renderer.material = mask._clearMaterial; + renderer._flush(); + } + function applyAreaMask(mask, renderer) { + var func = gfx.DS_FUNC_NEVER; + var ref = getWriteMask(); + var stencilMask = ref; + var writeMask = ref; + var failOp = mask.inverted ? gfx.STENCIL_OP_ZERO : gfx.STENCIL_OP_REPLACE; + applyStencil(mask._materials[0], func, failOp, ref, stencilMask, writeMask); + renderer.material = mask._materials[0]; + if (mask._type === Mask.Type.IMAGE_STENCIL) { + renderer.node = renderer._dummyNode; + SimpleSpriteAssembler.prototype.fillBuffers.call(mask._assembler, mask, renderer); + renderer._flush(); + } else { + renderer.node = mask.node; + GraphicsAssembler.prototype.fillBuffers.call(mask._graphics._assembler, mask._graphics, renderer); + } + } + function enableMask(renderer) { + var func = gfx.DS_FUNC_EQUAL; + var failOp = gfx.STENCIL_OP_KEEP; + var ref = getStencilRef(); + var stencilMask = ref; + var writeMask = getWriteMask(); + var mask = _maskStack[_maskStack.length - 1]; + applyStencil(mask._enableMaterial, func, failOp, ref, stencilMask, writeMask); + renderer._flushMaterial(mask._enableMaterial); + } + var MaskAssembler = (function (_SimpleSpriteAssemble) { + _inheritsLoose(MaskAssembler, _SimpleSpriteAssemble); + function MaskAssembler() { + return _SimpleSpriteAssemble.apply(this, arguments) || this; + } + var _proto = MaskAssembler.prototype; + _proto.updateRenderData = function updateRenderData(mask) { + if (mask._type === Mask.Type.IMAGE_STENCIL) mask.spriteFrame ? SimpleSpriteAssembler.prototype.updateRenderData.call(this, mask) : mask.setMaterial(0, null); else { + mask._graphics.setMaterial(0, mask._materials[0]); + GraphicsAssembler.prototype.updateRenderData.call(mask._graphics._assembler, mask._graphics, mask._graphics); + } + }; + _proto.fillBuffers = function fillBuffers(mask, renderer) { + if (mask._type !== Mask.Type.IMAGE_STENCIL || mask.spriteFrame) { + pushMask(mask); + applyClearMask(mask, renderer); + applyAreaMask(mask, renderer); + enableMask(renderer); + } + mask.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + }; + _proto.postFillBuffers = function postFillBuffers(mask, renderer) { + (mask._type !== Mask.Type.IMAGE_STENCIL || mask.spriteFrame) && exitMask(mask, renderer); + mask.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + }; + return MaskAssembler; + })(SimpleSpriteAssembler); + exports.MaskAssembler = MaskAssembler; + _assembler["default"].register(Mask, MaskAssembler); + }), { + "../../../../renderer/gfx": 372, + "../../../components/CCMask": 155, + "../../assembler": 268, + "../../render-flow": 272, + "../vertex-format": 313, + "./graphics": 282, + "./sprite/2d/simple": 297 + }], + 293: [(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; + subClass.__proto__ = superClass; + } + 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 _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; + MotionStreakAssembler.register(MotionStreak, MotionStreakAssembler); + module.exports = exports["default"]; + }), { + "../../../components/CCMotionStreak": 156, + "../../assembler-2d": 265, + "../../render-flow": 272 + }], + 294: [(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; + subClass.__proto__ = superClass; + } + 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; + this.packToDynamicAtlas(sprite, frame); + if (!sprite._vertsDirty) return; + 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": 166, + "../../../../assembler-2d": 265 + }], + 295: [(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; + subClass.__proto__ = superClass; + } + 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) { + this.packToDynamicAtlas(sprite, sprite._spriteFrame); + 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; + } + } + } + }; + _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": 265 + }], + 296: [(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; + subClass.__proto__ = superClass; + } + 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; + this.packToDynamicAtlas(sprite, frame); + 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": 265 + }], + 297: [(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; + subClass.__proto__ = superClass; + } + var SimpleSpriteAssembler = (function (_Assembler2D) { + _inheritsLoose(SimpleSpriteAssembler, _Assembler2D); + function SimpleSpriteAssembler() { + return _Assembler2D.apply(this, arguments) || this; + } + var _proto = SimpleSpriteAssembler.prototype; + _proto.updateRenderData = function updateRenderData(sprite) { + this.packToDynamicAtlas(sprite, sprite._spriteFrame); + if (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": 265 + }], + 298: [(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; + subClass.__proto__ = superClass; + } + 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; + this.packToDynamicAtlas(sprite, frame); + if (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": 265 + }], + 299: [(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; + subClass.__proto__ = superClass; + } + 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; + this.packToDynamicAtlas(sprite, frame); + 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": 265 + }], + 300: [(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; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var BarFilledAssembler = require("../2d/bar-filled"); + var BarFilledAssembler3D = (function (_BarFilledAssembler) { + _inheritsLoose(BarFilledAssembler3D, _BarFilledAssembler); + function BarFilledAssembler3D() { + return _BarFilledAssembler.apply(this, arguments) || this; + } + return BarFilledAssembler3D; + })(BarFilledAssembler); + exports["default"] = BarFilledAssembler3D; + cc.js.mixin(BarFilledAssembler3D.prototype, Assembler3D); + module.exports = exports["default"]; + }), { + "../../../../assembler-3d": 266, + "../2d/bar-filled": 294 + }], + 301: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../../../../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var MeshAssembler = require("../2d/mesh"); + var vec3_temp = new _vec["default"](); + var MeshAssembler3D = (function (_MeshAssembler) { + _inheritsLoose(MeshAssembler3D, _MeshAssembler); + function MeshAssembler3D() { + return _MeshAssembler.apply(this, arguments) || this; + } + return MeshAssembler3D; + })(MeshAssembler); + exports["default"] = MeshAssembler3D; + cc.js.mixin(MeshAssembler3D.prototype, Assembler3D, { + updateWorldVerts: function updateWorldVerts(comp) { + var matrix = comp.node._worldMatrix; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var i = 0, l = local.length / 2; i < l; i++) { + _vec["default"].set(vec3_temp, local[2 * i], local[2 * i + 1], 0); + _vec["default"].transformMat4(vec3_temp, vec3_temp, matrix); + var dstOffset = floatsPerVert * i; + world[dstOffset] = vec3_temp.x; + world[dstOffset + 1] = vec3_temp.y; + world[dstOffset + 2] = vec3_temp.z; + } + } + }); + module.exports = exports["default"]; + }), { + "../../../../../value-types/vec3": 349, + "../../../../assembler-3d": 266, + "../2d/mesh": 295 + }], + 302: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../../../../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var RadialFilledAssembler = require("../2d/radial-filled"); + var vec3_temp_local = new _vec["default"](); + var vec3_temp_world = new _vec["default"](); + var RadialFilledAssembler3D = (function (_RadialFilledAssemble) { + _inheritsLoose(RadialFilledAssembler3D, _RadialFilledAssemble); + function RadialFilledAssembler3D() { + return _RadialFilledAssemble.apply(this, arguments) || this; + } + return RadialFilledAssembler3D; + })(RadialFilledAssembler); + exports["default"] = RadialFilledAssembler3D; + cc.js.mixin(RadialFilledAssembler3D.prototype, Assembler3D, { + updateWorldVerts: function updateWorldVerts(sprite) { + var matrix = sprite.node._worldMatrix; + var local = this._local; + var world = this._renderData.vDatas[0]; + var floatsPerVert = this.floatsPerVert; + for (var offset = 0; offset < world.length; offset += floatsPerVert) { + _vec["default"].set(vec3_temp_local, local[offset], local[offset + 1], 0); + _vec["default"].transformMat4(vec3_temp_world, vec3_temp_local, matrix); + world[offset] = vec3_temp_world.x; + world[offset + 1] = vec3_temp_world.y; + world[offset + 2] = vec3_temp_world.z; + } + } + }); + module.exports = exports["default"]; + }), { + "../../../../../value-types/vec3": 349, + "../../../../assembler-3d": 266, + "../2d/radial-filled": 296 + }], + 303: [(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; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var SimpleAssembler = require("../2d/simple"); + var SimpleAssembler3D = (function (_SimpleAssembler) { + _inheritsLoose(SimpleAssembler3D, _SimpleAssembler); + function SimpleAssembler3D() { + return _SimpleAssembler.apply(this, arguments) || this; + } + return SimpleAssembler3D; + })(SimpleAssembler); + exports["default"] = SimpleAssembler3D; + cc.js.mixin(SimpleAssembler3D.prototype, Assembler3D); + module.exports = exports["default"]; + }), { + "../../../../assembler-3d": 266, + "../2d/simple": 297 + }], + 304: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../../../../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var SlicedAssembler = require("../2d/sliced"); + var vec3_temp_local = new _vec["default"](); + var vec3_temp_world = new _vec["default"](); + var SlicedAssembler3D = (function (_SlicedAssembler) { + _inheritsLoose(SlicedAssembler3D, _SlicedAssembler); + function SlicedAssembler3D() { + return _SlicedAssembler.apply(this, arguments) || this; + } + return SlicedAssembler3D; + })(SlicedAssembler); + exports["default"] = SlicedAssembler3D; + cc.js.mixin(SlicedAssembler3D.prototype, Assembler3D, { + updateWorldVerts: function updateWorldVerts(sprite) { + var matrix = sprite.node._worldMatrix; + 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]; + _vec["default"].set(vec3_temp_local, localColX, localRowY, 0); + _vec["default"].transformMat4(vec3_temp_world, vec3_temp_local, matrix); + var worldIndex = (4 * row + col) * floatsPerVert; + world[worldIndex] = vec3_temp_world.x; + world[worldIndex + 1] = vec3_temp_world.y; + world[worldIndex + 2] = vec3_temp_world.z; + } + } + } + }); + module.exports = exports["default"]; + }), { + "../../../../../value-types/vec3": 349, + "../../../../assembler-3d": 266, + "../2d/sliced": 298 + }], + 305: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _vec = _interopRequireDefault(require("../../../../../value-types/vec3")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Assembler3D = require("../../../../assembler-3d"); + var TiledAssembler = require("../2d/tiled"); + var vec3_temps = []; + for (var i = 0; i < 4; i++) vec3_temps.push(new _vec["default"]()); + var TiledAssembler3D = (function (_TiledAssembler) { + _inheritsLoose(TiledAssembler3D, _TiledAssembler); + function TiledAssembler3D() { + return _TiledAssembler.apply(this, arguments) || this; + } + return TiledAssembler3D; + })(TiledAssembler); + exports["default"] = TiledAssembler3D; + cc.js.mixin(TiledAssembler3D.prototype, Assembler3D, { + updateWorldVerts: function updateWorldVerts(sprite) { + var local = this._local; + var localX = local.x, localY = local.y; + var world = this._renderData.vDatas[0]; + var row = this.row, col = this.col; + var matrix = sprite.node._worldMatrix; + var x, x1, y, y1; + 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]; + _vec["default"].set(vec3_temps[0], x, y, 0); + _vec["default"].set(vec3_temps[1], x1, y, 0); + _vec["default"].set(vec3_temps[2], x, y1, 0); + _vec["default"].set(vec3_temps[3], x1, y1, 0); + for (var _i = 0; _i < 4; _i++) { + var vec3_temp = vec3_temps[_i]; + _vec["default"].transformMat4(vec3_temp, vec3_temp, matrix); + var offset = 6 * _i; + world[vertexOffset + offset] = vec3_temp.x; + world[vertexOffset + offset + 1] = vec3_temp.y; + world[vertexOffset + offset + 2] = vec3_temp.z; + } + vertexOffset += 24; + } + } + } + }); + module.exports = exports["default"]; + }), { + "../../../../../value-types/vec3": 349, + "../../../../assembler-3d": 266, + "../2d/tiled": 299 + }], + 306: [(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")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var ctor = { + getConstructor: function getConstructor(sprite) { + var is3DNode = sprite.node.is3DNode; + var ctor = is3DNode ? _simple2["default"] : _simple["default"]; + switch (sprite.type) { + case _CCSprite.Type.SLICED: + ctor = is3DNode ? _sliced2["default"] : _sliced["default"]; + break; + + case _CCSprite.Type.TILED: + ctor = is3DNode ? _tiled2["default"] : _tiled["default"]; + break; + + case _CCSprite.Type.FILLED: + ctor = sprite._fillType === _CCSprite.FillType.RADIAL ? is3DNode ? _radialFilled2["default"] : _radialFilled["default"] : is3DNode ? _barFilled2["default"] : _barFilled["default"]; + break; + + case _CCSprite.Type.MESH: + ctor = is3DNode ? _mesh2["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"] + }; + _assembler["default"].register(cc.Sprite, ctor); + }), { + "../../../../components/CCSprite": 166, + "../../../assembler": 268, + "./2d/bar-filled": 294, + "./2d/mesh": 295, + "./2d/radial-filled": 296, + "./2d/simple": 297, + "./2d/sliced": 298, + "./2d/tiled": 299, + "./3d/bar-filled": 300, + "./3d/mesh": 301, + "./3d/radial-filled": 302, + "./3d/simple": 303, + "./3d/sliced": 304, + "./3d/tiled": 305 + }], + 307: [(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"]; + }), {}], + 308: [(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.MACOS) && 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; + }, + _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": 372 + }], + 309: [(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": 362, + "../../../renderer/memop/recycle-pool": 387, + "../../../renderer/scene/model": 394, + "../../assets/material/CCMaterial": 124, + "../../platform/id-generater": 256, + "./mesh-buffer": 308, + "./quad-buffer": 310, + "./spine-buffer": 312, + "./vertex-format": 313 + }], + 310: [(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": 308 + }], + 311: [(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": 307, + "./vertex-format": 313 + }], + 312: [(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": 308 + }], + 313: [(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 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 + }; + }), { + "../../../renderer/gfx": 372 + }], + 314: [(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": 248 + }], + 315: [(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; + }), {}], + 316: [(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": 184, + "../platform/CCObject": 245, + "../platform/id-generater": 256, + "../platform/js": 260, + "../renderer/render-flow": 272, + "./misc": 324 + }], + 317: [(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 + }; + }), {}], + 318: [(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": 372, + "../components/CCRenderComponent": 160, + "../platform/CCMacro": 244 + }], + 319: [(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": 324 + }], + 320: [(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; + }; + }), {}], + 321: [(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": 124, + "../assets/material/material-variant": 131 + }], + 322: [(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; + }), {}], + 323: [(function (require, module, exports) { + "use strict"; + require("./CCPath"); + true; + require("./profiler/CCProfiler"); + require("./find"); + require("./mutable-forward-iterator"); + }), { + "./CCPath": 314, + "./find": 320, + "./mutable-forward-iterator": 325, + "./profiler/CCProfiler": 328 + }], + 324: [(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": 260 + }], + 325: [(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; + }), {}], + 326: [(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"]; + }), {}], + 327: [(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; + } + }; + }), {}], + 328: [(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": 244, + "./perf-counter": 330 + }], + 329: [(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; + }), {}], + 330: [(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": 329 + }], + 331: [(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": 260 + }], + 332: [(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": 121 + }], + 333: [(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": 335, + "./node-unit": 336 + }], + 334: [(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; + }), {}], + 335: [(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": 334 + }], + 336: [(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": 346, + "./unit-base": 337 + }], + 337: [(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; + }), {}], + 338: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + 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; + }; + _createClass(Color, null, [{ + 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); + } + }]); + 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); + } + }]); + 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": 239, + "../utils/misc": 324, + "./value-type": 347 + }], + 339: [(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.Trs = exports.Quat = exports.Color = exports.Size = exports.Rect = exports.Mat3 = exports.Mat4 = exports.Vec4 = exports.Vec3 = exports.Vec2 = 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": 338, + "./mat3": 340, + "./mat4": 341, + "./quat": 342, + "./rect": 343, + "./size": 344, + "./trs": 345, + "./utils": 346, + "./vec2": 348, + "./vec3": 349, + "./vec4": 350 + }], + 340: [(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": 346, + "./vec3": 349 + }], + 341: [(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; + subClass.__proto__ = superClass; + } + 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": 239, + "./mat3": 340, + "./quat": 342, + "./utils": 346, + "./value-type": 347, + "./vec3": 349 + }], + 342: [(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; + subClass.__proto__ = superClass; + } + 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": 239, + "./mat3": 340, + "./utils": 346, + "./value-type": 347, + "./vec3": 349 + }], + 343: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + 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": 239, + "./size": 344, + "./value-type": 347, + "./vec2": 348 + }], + 344: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Size = (function (_ValueType) { + _inheritsLoose(Size, _ValueType); + _createClass(Size, null, [{ + key: "ZERO", + get: function get() { + return new Size(); + } + }]); + 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) + ")"; + }; + 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": 239, + "./value-type": 347 + }], + 345: [(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": 342 + }], + 346: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.equals = equals; + exports.approx = approx; + exports.clamp = clamp; + exports.clamp01 = clamp01; + exports.lerp = lerp; + exports.toRadian = toRadian; + exports.toDegree = toDegree; + exports.randomRange = randomRange; + exports.randomRangeInt = randomRangeInt; + exports.pseudoRandom = pseudoRandom; + exports.pseudoRandomRange = pseudoRandomRange; + exports.pseudoRandomRangeInt = pseudoRandomRangeInt; + exports.nextPow2 = nextPow2; + exports.repeat = repeat; + exports.pingPong = pingPong; + exports.inverseLerp = inverseLerp; + exports.sign = sign; + exports.random = exports.FLOAT_BYTES = exports.FLOAT_ARRAY_TYPE = exports.INT_MIN = exports.INT_MAX = exports.INT_BITS = exports.EPSILON = void 0; + 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); + } + }), {}], + 347: [(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": 260 + }], + 348: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + 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; + }; + _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); + } + }]); + 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); + }; + 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": 239, + "../utils/misc": 324, + "./utils": 346, + "./value-type": 347 + }], + 349: [(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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + 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; + }; + _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); + } + }]); + 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); + }; + 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": 239, + "../utils/misc": 324, + "./utils": 346, + "./value-type": 347, + "./vec2": 348 + }], + 350: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.v4 = v4; + exports["default"] = void 0; + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + 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; + }; + _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); + } + }]); + 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); + }; + 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": 239, + "./utils": 346, + "./value-type": 347 + }], + 351: [(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"); + }), {}], + 352: [(function (require, module, exports) { + "use strict"; + require("./core/CCGame"); + require("./actions"); + }), { + "./actions": 8, + "./core/CCGame": 72 + }], + 353: [(function (require, module, exports) { + "use strict"; + var zlib = require("../compression/zlib.min"); + var debug = require("../core/CCDebug"); + var PNGReader = function PNGReader(data) { + var chunkSize, colors, delayDen, delayNum, frame, i, index, key, section, ccshort, text, _i, _j, _ref; + this.data = data; + this.pos = 8; + this.palette = []; + this.imgData = []; + this.transparency = {}; + this.animation = null; + this.text = {}; + frame = null; + while (true) { + chunkSize = this.readUInt32(); + section = function () { + var _i, _results; + _results = []; + for (i = _i = 0; _i < 4; i = ++_i) _results.push(String.fromCharCode(this.data[this.pos++])); + return _results; + }.call(this).join(""); + switch (section) { + case "IHDR": + this.width = this.readUInt32(); + this.height = this.readUInt32(); + this.bits = this.data[this.pos++]; + this.colorType = this.data[this.pos++]; + this.compressionMethod = this.data[this.pos++]; + this.filterMethod = this.data[this.pos++]; + this.interlaceMethod = this.data[this.pos++]; + break; + + case "acTL": + this.animation = { + numFrames: this.readUInt32(), + numPlays: this.readUInt32() || Infinity, + frames: [] + }; + break; + + case "PLTE": + this.palette = this.read(chunkSize); + break; + + case "fcTL": + frame && this.animation.frames.push(frame); + this.pos += 4; + frame = { + width: this.readUInt32(), + height: this.readUInt32(), + xOffset: this.readUInt32(), + yOffset: this.readUInt32() + }; + delayNum = this.readUInt16(); + delayDen = this.readUInt16() || 100; + frame.delay = 1e3 * delayNum / delayDen; + frame.disposeOp = this.data[this.pos++]; + frame.blendOp = this.data[this.pos++]; + frame.data = []; + break; + + case "IDAT": + case "fdAT": + if ("fdAT" === section) { + this.pos += 4; + chunkSize -= 4; + } + data = (null != frame ? frame.data : void 0) || this.imgData; + for (i = _i = 0; 0 <= chunkSize ? _i < chunkSize : _i > chunkSize; i = 0 <= chunkSize ? ++_i : --_i) data.push(this.data[this.pos++]); + break; + + case "tRNS": + this.transparency = {}; + switch (this.colorType) { + case 3: + this.transparency.indexed = this.read(chunkSize); + ccshort = 255 - this.transparency.indexed.length; + if (ccshort > 0) for (i = _j = 0; 0 <= ccshort ? _j < ccshort : _j > ccshort; i = 0 <= ccshort ? ++_j : --_j) this.transparency.indexed.push(255); + break; + + case 0: + this.transparency.grayscale = this.read(chunkSize)[0]; + break; + + case 2: + this.transparency.rgb = this.read(chunkSize); + } + break; + + case "tEXt": + text = this.read(chunkSize); + index = text.indexOf(0); + key = String.fromCharCode.apply(String, text.slice(0, index)); + this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1)); + break; + + case "IEND": + frame && this.animation.frames.push(frame); + this.colors = function () { + switch (this.colorType) { + case 0: + case 3: + case 4: + return 1; + + case 2: + case 6: + return 3; + } + }.call(this); + this.hasAlphaChannel = 4 === (_ref = this.colorType) || 6 === _ref; + colors = this.colors + (this.hasAlphaChannel ? 1 : 0); + this.pixelBitlength = this.bits * colors; + this.colorSpace = function () { + switch (this.colors) { + case 1: + return "DeviceGray"; + + case 3: + return "DeviceRGB"; + } + }.call(this); + Uint8Array != Array && (this.imgData = new Uint8Array(this.imgData)); + return; + + default: + this.pos += chunkSize; + } + this.pos += 4; + if (this.pos > this.data.length) throw new Error(debug.getError(6017)); + } + }; + PNGReader.prototype = { + constructor: PNGReader, + read: function read(bytes) { + var i, _i, _results; + _results = []; + for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) _results.push(this.data[this.pos++]); + return _results; + }, + readUInt32: function readUInt32() { + var b1, b2, b3, b4; + b1 = this.data[this.pos++] << 24; + b2 = this.data[this.pos++] << 16; + b3 = this.data[this.pos++] << 8; + b4 = this.data[this.pos++]; + return b1 | b2 | b3 | b4; + }, + readUInt16: function readUInt16() { + var b1, b2; + b1 = this.data[this.pos++] << 8; + b2 = this.data[this.pos++]; + return b1 | b2; + }, + decodePixels: function decodePixels(data) { + var ccbyte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m; + null == data && (data = this.imgData); + if (0 === data.length) return new Uint8Array(0); + var inflate = new zlib.Inflate(data, { + index: 0, + verify: false + }); + data = inflate.decompress(); + pixelBytes = this.pixelBitlength / 8; + scanlineLength = pixelBytes * this.width; + pixels = new Uint8Array(scanlineLength * this.height); + length = data.length; + row = 0; + pos = 0; + c = 0; + while (pos < length) { + switch (data[pos++]) { + case 0: + for (i = _i = 0; _i < scanlineLength; i = _i += 1) pixels[c++] = data[pos++]; + break; + + case 1: + for (i = _j = 0; _j < scanlineLength; i = _j += 1) { + ccbyte = data[pos++]; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + pixels[c++] = (ccbyte + left) % 256; + } + break; + + case 2: + for (i = _k = 0; _k < scanlineLength; i = _k += 1) { + ccbyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + pixels[c++] = (upper + ccbyte) % 256; + } + break; + + case 3: + for (i = _l = 0; _l < scanlineLength; i = _l += 1) { + ccbyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + pixels[c++] = (ccbyte + Math.floor((left + upper) / 2)) % 256; + } + break; + + case 4: + for (i = _m = 0; _m < scanlineLength; i = _m += 1) { + ccbyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + if (0 === row) upper = upperLeft = 0; else { + upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + i % pixelBytes]; + } + p = left + upper - upperLeft; + pa = Math.abs(p - left); + pb = Math.abs(p - upper); + pc = Math.abs(p - upperLeft); + paeth = pa <= pb && pa <= pc ? left : pb <= pc ? upper : upperLeft; + pixels[c++] = (ccbyte + paeth) % 256; + } + break; + + default: + throw new Error(debug.getError(6018, data[pos - 1])); + } + row++; + } + return pixels; + }, + copyToImageData: function copyToImageData(imageData, pixels) { + var alpha, colors, data, i, input, j, k, length, palette, v, _ref; + colors = this.colors; + palette = null; + alpha = this.hasAlphaChannel; + if (this.palette.length) { + palette = null != (_ref = this._decodedPalette) ? _ref : this._decodedPalette = this.decodePalette(); + colors = 4; + alpha = true; + } + data = imageData.data || imageData; + length = data.length; + input = palette || pixels; + i = j = 0; + if (1 === colors) while (i < length) { + k = palette ? 4 * pixels[i / 4] : j; + v = input[k++]; + data[i++] = v; + data[i++] = v; + data[i++] = v; + data[i++] = alpha ? input[k++] : 255; + j = k; + } else while (i < length) { + k = palette ? 4 * pixels[i / 4] : j; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + }, + decodePalette: function decodePalette() { + var c, i, palette, pos, ret, transparency, _i, _ref, _ref1; + palette = this.palette; + transparency = this.transparency.indexed || []; + ret = new Uint8Array((transparency.length || 0) + palette.length); + pos = 0; + c = 0; + for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) { + ret[pos++] = palette[i]; + ret[pos++] = palette[i + 1]; + ret[pos++] = palette[i + 2]; + ret[pos++] = null != (_ref1 = transparency[c++]) ? _ref1 : 255; + } + return ret; + }, + render: function render(canvas) { + var ctx, data; + canvas.width = this.width; + canvas.height = this.height; + ctx = canvas.getContext("2d"); + data = ctx.createImageData(this.width, this.height); + this.copyToImageData(data, this.decodePixels()); + return ctx.putImageData(data, 0, 0); + } + }; + module.exports = PNGReader; + }), { + "../compression/zlib.min": 26, + "../core/CCDebug": 70 + }], + 354: [(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": 106, + "../core/assets/CCSpriteFrame": 118 + }], + 355: [(function (require, module, exports) { + "use strict"; + var macro = require("../core/platform/CCMacro"); + var ParticleAsset = require("./CCParticleAsset"); + var RenderComponent = require("../core/components/CCRenderComponent"); + var codec = require("../compression/ZipUtils"); + var PNGReader = require("./CCPNGReader"); + var tiffReader = require("./CCTIFFReader"); + var textureUtil = require("../core/utils/texture-util"); + var RenderFlow = require("../core/renderer/render-flow"); + var ParticleSimulator = require("./particle-simulator"); + var Material = require("../core/assets/material/CCMaterial"); + var BlendFunc = require("../core/utils/blend-func"); + function getImageFormatByData(imgData) { + if (imgData.length > 8 && 137 === imgData[0] && 80 === imgData[1] && 78 === imgData[2] && 71 === imgData[3] && 13 === imgData[4] && 10 === imgData[5] && 26 === imgData[6] && 10 === imgData[7]) return macro.ImageFormat.PNG; + if (imgData.length > 2 && (73 === imgData[0] && 73 === imgData[1] || 77 === imgData[0] && 77 === imgData[1] || 255 === imgData[0] && 216 === imgData[1])) return macro.ImageFormat.TIFF; + return macro.ImageFormat.UNKNOWN; + } + function getParticleComponents(node) { + var parent = node.parent, comp = node.getComponent(cc.ParticleSystem); + if (!parent || !comp) return node.getComponentsInChildren(cc.ParticleSystem); + return getParticleComponents(parent); + } + var EmitterMode = cc.Enum({ + GRAVITY: 0, + RADIUS: 1 + }); + var PositionType = cc.Enum({ + FREE: 0, + RELATIVE: 1, + GROUPED: 2 + }); + var properties = { + preview: { + default: true, + editorOnly: true, + notify: false, + animatable: false, + tooltip: false + }, + _custom: false, + custom: { + get: function get() { + return this._custom; + }, + set: function set(value) { + false; + if (this._custom !== value) { + this._custom = value; + this._applyFile(); + false; + } + }, + animatable: false, + tooltip: false + }, + _file: { + default: null, + type: ParticleAsset + }, + file: { + get: function get() { + return this._file; + }, + set: function set(value, force) { + if (this._file !== value || false) { + this._file = value; + if (value) { + this._applyFile(); + false; + } else this.custom = true; + } + }, + animatable: false, + type: ParticleAsset, + tooltip: false + }, + _spriteFrame: { + default: null, + type: cc.SpriteFrame + }, + spriteFrame: { + get: function get() { + return this._spriteFrame; + }, + set: function set(value, force) { + var lastSprite = this._renderSpriteFrame; + false; + if (lastSprite === value) return; + this._renderSpriteFrame = value; + value && !value._uuid || (this._spriteFrame = value); + this._applySpriteFrame(lastSprite); + false; + }, + type: cc.SpriteFrame, + tooltip: false + }, + _texture: { + default: null, + type: cc.Texture2D, + editorOnly: true + }, + texture: { + get: function get() { + return this._getTexture(); + }, + set: function set(value) { + value && cc.warnID(6017); + }, + type: cc.Texture2D, + tooltip: false, + readonly: true, + visible: false, + animatable: false + }, + particleCount: { + visible: false, + get: function get() { + return this._simulator.particles.length; + }, + readonly: true + }, + _stopped: true, + stopped: { + get: function get() { + return this._stopped; + }, + animatable: false, + visible: false + }, + playOnLoad: true, + autoRemoveOnFinish: { + default: false, + animatable: false, + tooltip: false + }, + active: { + get: function get() { + return this._simulator.active; + }, + visible: false + }, + totalParticles: 150, + duration: -1, + emissionRate: 10, + life: 1, + lifeVar: 0, + _startColor: null, + startColor: { + type: cc.Color, + get: function get() { + return this._startColor; + }, + set: function set(val) { + this._startColor.r = val.r; + this._startColor.g = val.g; + this._startColor.b = val.b; + this._startColor.a = val.a; + } + }, + _startColorVar: null, + startColorVar: { + type: cc.Color, + get: function get() { + return this._startColorVar; + }, + set: function set(val) { + this._startColorVar.r = val.r; + this._startColorVar.g = val.g; + this._startColorVar.b = val.b; + this._startColorVar.a = val.a; + } + }, + _endColor: null, + endColor: { + type: cc.Color, + get: function get() { + return this._endColor; + }, + set: function set(val) { + this._endColor.r = val.r; + this._endColor.g = val.g; + this._endColor.b = val.b; + this._endColor.a = val.a; + } + }, + _endColorVar: null, + endColorVar: { + type: cc.Color, + get: function get() { + return this._endColorVar; + }, + set: function set(val) { + this._endColorVar.r = val.r; + this._endColorVar.g = val.g; + this._endColorVar.b = val.b; + this._endColorVar.a = val.a; + } + }, + angle: 90, + angleVar: 20, + startSize: 50, + startSizeVar: 0, + endSize: 0, + endSizeVar: 0, + startSpin: 0, + startSpinVar: 0, + endSpin: 0, + endSpinVar: 0, + sourcePos: cc.Vec2.ZERO, + posVar: cc.Vec2.ZERO, + _positionType: { + default: PositionType.FREE, + formerlySerializedAs: "positionType" + }, + positionType: { + type: PositionType, + get: function get() { + return this._positionType; + }, + set: function set(val) { + this._positionType = val; + this._updateMaterial(); + } + }, + emitterMode: { + default: EmitterMode.GRAVITY, + type: EmitterMode + }, + gravity: cc.Vec2.ZERO, + speed: 180, + speedVar: 50, + tangentialAccel: 80, + tangentialAccelVar: 0, + radialAccel: 0, + radialAccelVar: 0, + rotationIsDir: false, + startRadius: 0, + startRadiusVar: 0, + endRadius: 0, + endRadiusVar: 0, + rotatePerS: 0, + rotatePerSVar: 0 + }; + var ParticleSystem = cc.Class({ + name: "cc.ParticleSystem", + extends: RenderComponent, + mixins: [BlendFunc], + editor: false, + ctor: function ctor() { + this.initProperties(); + }, + initProperties: function initProperties() { + this._previewTimer = null; + this._focused = false; + this._aspectRatio = 1; + this._simulator = new ParticleSimulator(this); + this._startColor = cc.color(255, 255, 255, 255); + this._startColorVar = cc.color(0, 0, 0, 0); + this._endColor = cc.color(255, 255, 255, 0); + this._endColorVar = cc.color(0, 0, 0, 0); + this._renderSpriteFrame = null; + }, + properties: properties, + statics: { + DURATION_INFINITY: -1, + START_SIZE_EQUAL_TO_END_SIZE: -1, + START_RADIUS_EQUAL_TO_END_RADIUS: -1, + EmitterMode: EmitterMode, + PositionType: PositionType, + _PNGReader: PNGReader, + _TIFFReader: tiffReader + }, + onFocusInEditor: false, + onLostFocusInEditor: false, + _startPreview: false, + _stopPreview: false, + _convertTextureToSpriteFrame: false, + __preload: function __preload() { + this._super(); + false; + if (this._custom && this.spriteFrame && !this._renderSpriteFrame) this._applySpriteFrame(this.spriteFrame); else if (this._file) if (this._custom) { + var missCustomTexture = !this._getTexture(); + missCustomTexture && this._applyFile(); + } else this._applyFile(); + true; + this.playOnLoad && this.resetSystem(); + false; + }, + onDestroy: function onDestroy() { + this.autoRemoveOnFinish && (this.autoRemoveOnFinish = false); + if (this._buffer) { + this._buffer.destroy(); + this._buffer = null; + } + this._simulator._uvFilled = 0; + this._super(); + }, + lateUpdate: function lateUpdate(dt) { + this._simulator.finished || this._simulator.step(dt); + }, + addParticle: function addParticle() { }, + stopSystem: function stopSystem() { + this._stopped = true; + this._simulator.stop(); + }, + resetSystem: function resetSystem() { + this._stopped = false; + this._simulator.reset(); + this.markForRender(true); + }, + isFull: function isFull() { + return this.particleCount >= this.totalParticles; + }, + setTextureWithRect: function setTextureWithRect(texture, rect) { + texture instanceof cc.Texture2D && (this.spriteFrame = new cc.SpriteFrame(texture, rect)); + }, + _applyFile: function _applyFile() { + var file = this._file; + if (file) { + var self = this; + cc.assetManager.postLoadNative(file, (function (err) { + if (err || !file._nativeAsset) { + cc.errorID(6029); + return; + } + if (!self.isValid) return; + self._plistFile = file.nativeUrl; + if (!self._custom) { + var isDiffFrame = self._spriteFrame !== file.spriteFrame; + isDiffFrame && (self.spriteFrame = file.spriteFrame); + self._initWithDictionary(file._nativeAsset); + } + self._spriteFrame ? !self._renderSpriteFrame && self._spriteFrame && self._applySpriteFrame(self.spriteFrame) : file.spriteFrame ? self.spriteFrame = file.spriteFrame : self._custom && self._initTextureWithDictionary(file._nativeAsset); + })); + } + }, + _initTextureWithDictionary: function _initTextureWithDictionary(dict) { + var imgPath = cc.path.changeBasename(this._plistFile, dict["textureFileName"] || ""); + if (dict["textureFileName"]) textureUtil.loadImage(imgPath, (function (error, texture) { + if (error) { + dict["textureFileName"] = void 0; + this._initTextureWithDictionary(dict); + } else { + cc.assetManager.assets.add(imgPath, texture); + this.spriteFrame = new cc.SpriteFrame(texture); + } + }), this); else if (dict["textureImageData"]) { + var textureData = dict["textureImageData"]; + if (!(textureData && textureData.length > 0)) return false; + var tex = cc.assetManager.assets.get(imgPath); + if (!tex) { + var buffer = codec.unzipBase64AsArray(textureData, 1); + if (!buffer) { + cc.warnID(6030, this._file.name); + return false; + } + var imageFormat = getImageFormatByData(buffer); + if (imageFormat !== macro.ImageFormat.TIFF && imageFormat !== macro.ImageFormat.PNG) { + cc.warnID(6031, this._file.name); + return false; + } + var canvasObj = document.createElement("canvas"); + if (imageFormat === macro.ImageFormat.PNG) { + var myPngObj = new PNGReader(buffer); + myPngObj.render(canvasObj); + } else tiffReader.parseTIFF(buffer, canvasObj); + tex = textureUtil.cacheImage(imgPath, canvasObj); + } + tex || cc.warnID(6032, this._file.name); + this.spriteFrame = new cc.SpriteFrame(tex); + } + return true; + }, + _initWithDictionary: function _initWithDictionary(dict) { + this.totalParticles = parseInt(dict["maxParticles"] || 0); + this.life = parseFloat(dict["particleLifespan"] || 0); + this.lifeVar = parseFloat(dict["particleLifespanVariance"] || 0); + var _tempEmissionRate = dict["emissionRate"]; + this.emissionRate = _tempEmissionRate || Math.min(this.totalParticles / this.life, Number.MAX_VALUE); + this.duration = parseFloat(dict["duration"] || 0); + this.srcBlendFactor = parseInt(dict["blendFuncSource"] || macro.SRC_ALPHA); + this.dstBlendFactor = parseInt(dict["blendFuncDestination"] || macro.ONE_MINUS_SRC_ALPHA); + var locStartColor = this._startColor; + locStartColor.r = 255 * parseFloat(dict["startColorRed"] || 0); + locStartColor.g = 255 * parseFloat(dict["startColorGreen"] || 0); + locStartColor.b = 255 * parseFloat(dict["startColorBlue"] || 0); + locStartColor.a = 255 * parseFloat(dict["startColorAlpha"] || 0); + var locStartColorVar = this._startColorVar; + locStartColorVar.r = 255 * parseFloat(dict["startColorVarianceRed"] || 0); + locStartColorVar.g = 255 * parseFloat(dict["startColorVarianceGreen"] || 0); + locStartColorVar.b = 255 * parseFloat(dict["startColorVarianceBlue"] || 0); + locStartColorVar.a = 255 * parseFloat(dict["startColorVarianceAlpha"] || 0); + var locEndColor = this._endColor; + locEndColor.r = 255 * parseFloat(dict["finishColorRed"] || 0); + locEndColor.g = 255 * parseFloat(dict["finishColorGreen"] || 0); + locEndColor.b = 255 * parseFloat(dict["finishColorBlue"] || 0); + locEndColor.a = 255 * parseFloat(dict["finishColorAlpha"] || 0); + var locEndColorVar = this._endColorVar; + locEndColorVar.r = 255 * parseFloat(dict["finishColorVarianceRed"] || 0); + locEndColorVar.g = 255 * parseFloat(dict["finishColorVarianceGreen"] || 0); + locEndColorVar.b = 255 * parseFloat(dict["finishColorVarianceBlue"] || 0); + locEndColorVar.a = 255 * parseFloat(dict["finishColorVarianceAlpha"] || 0); + this.startSize = parseFloat(dict["startParticleSize"] || 0); + this.startSizeVar = parseFloat(dict["startParticleSizeVariance"] || 0); + this.endSize = parseFloat(dict["finishParticleSize"] || 0); + this.endSizeVar = parseFloat(dict["finishParticleSizeVariance"] || 0); + this.positionType = parseFloat(void 0 !== dict["positionType"] ? dict["positionType"] : PositionType.RELATIVE); + this.sourcePos.x = 0; + this.sourcePos.y = 0; + this.posVar.x = parseFloat(dict["sourcePositionVariancex"] || 0); + this.posVar.y = parseFloat(dict["sourcePositionVariancey"] || 0); + this.angle = parseFloat(dict["angle"] || 0); + this.angleVar = parseFloat(dict["angleVariance"] || 0); + this.startSpin = parseFloat(dict["rotationStart"] || 0); + this.startSpinVar = parseFloat(dict["rotationStartVariance"] || 0); + this.endSpin = parseFloat(dict["rotationEnd"] || 0); + this.endSpinVar = parseFloat(dict["rotationEndVariance"] || 0); + this.emitterMode = parseInt(dict["emitterType"] || EmitterMode.GRAVITY); + if (this.emitterMode === EmitterMode.GRAVITY) { + this.gravity.x = parseFloat(dict["gravityx"] || 0); + this.gravity.y = parseFloat(dict["gravityy"] || 0); + this.speed = parseFloat(dict["speed"] || 0); + this.speedVar = parseFloat(dict["speedVariance"] || 0); + this.radialAccel = parseFloat(dict["radialAcceleration"] || 0); + this.radialAccelVar = parseFloat(dict["radialAccelVariance"] || 0); + this.tangentialAccel = parseFloat(dict["tangentialAcceleration"] || 0); + this.tangentialAccelVar = parseFloat(dict["tangentialAccelVariance"] || 0); + var locRotationIsDir = dict["rotationIsDir"] || ""; + if (null !== locRotationIsDir) { + locRotationIsDir = locRotationIsDir.toString().toLowerCase(); + this.rotationIsDir = "true" === locRotationIsDir || "1" === locRotationIsDir; + } else this.rotationIsDir = false; + } else { + if (this.emitterMode !== EmitterMode.RADIUS) { + cc.warnID(6009); + return false; + } + this.startRadius = parseFloat(dict["maxRadius"] || 0); + this.startRadiusVar = parseFloat(dict["maxRadiusVariance"] || 0); + this.endRadius = parseFloat(dict["minRadius"] || 0); + this.endRadiusVar = parseFloat(dict["minRadiusVariance"] || 0); + this.rotatePerS = parseFloat(dict["rotatePerSecond"] || 0); + this.rotatePerSVar = parseFloat(dict["rotatePerSecondVariance"] || 0); + } + this._initTextureWithDictionary(dict); + return true; + }, + _validateRender: function _validateRender() { + var texture = this._getTexture(); + if (!texture || !texture.loaded) { + this.disableRender(); + return; + } + this._super(); + }, + _onTextureLoaded: function _onTextureLoaded() { + this._simulator.updateUVs(true); + this._syncAspect(); + this._updateMaterial(); + this.markForRender(true); + }, + _syncAspect: function _syncAspect() { + var frameRect = this._renderSpriteFrame._rect; + this._aspectRatio = frameRect.width / frameRect.height; + }, + _applySpriteFrame: function _applySpriteFrame() { + this._renderSpriteFrame = this._renderSpriteFrame || this._spriteFrame; + this._renderSpriteFrame && (this._renderSpriteFrame.textureLoaded() ? this._onTextureLoaded() : this._renderSpriteFrame.onTextureLoaded(this._onTextureLoaded, this)); + }, + _getTexture: function _getTexture() { + return this._renderSpriteFrame && this._renderSpriteFrame.getTexture() || this._texture; + }, + _updateMaterial: function _updateMaterial() { + var material = this.getMaterial(0); + if (!material) return; + material.define("CC_USE_MODEL", this._positionType !== PositionType.FREE); + material.setProperty("texture", this._getTexture()); + BlendFunc.prototype._updateMaterial.call(this); + }, + _finishedSimulation: function _finishedSimulation() { + false; + this.resetSystem(); + this.stopSystem(); + this.disableRender(); + this.autoRemoveOnFinish && this._stopped && this.node.destroy(); + } + }); + cc.ParticleSystem = module.exports = ParticleSystem; + }), { + "../compression/ZipUtils": 23, + "../core/assets/material/CCMaterial": 124, + "../core/components/CCRenderComponent": 160, + "../core/platform/CCMacro": 244, + "../core/renderer/render-flow": 272, + "../core/utils/blend-func": 318, + "../core/utils/texture-util": 332, + "./CCPNGReader": 353, + "./CCParticleAsset": 354, + "./CCTIFFReader": 356, + "./particle-simulator": 358, + "fire-url": void 0 + }], + 356: [(function (require, module, exports) { + "use strict"; + var debug = require("../core/CCDebug"); + var tiffReader = { + _littleEndian: false, + _tiffData: null, + _fileDirectories: [], + getUint8: function getUint8(offset) { + return this._tiffData[offset]; + }, + getUint16: function getUint16(offset) { + return this._littleEndian ? this._tiffData[offset + 1] << 8 | this._tiffData[offset] : this._tiffData[offset] << 8 | this._tiffData[offset + 1]; + }, + getUint32: function getUint32(offset) { + var a = this._tiffData; + return this._littleEndian ? a[offset + 3] << 24 | a[offset + 2] << 16 | a[offset + 1] << 8 | a[offset] : a[offset] << 24 | a[offset + 1] << 16 | a[offset + 2] << 8 | a[offset + 3]; + }, + checkLittleEndian: function checkLittleEndian() { + var BOM = this.getUint16(0); + if (18761 === BOM) this.littleEndian = true; else { + if (19789 !== BOM) { + console.log(BOM); + throw TypeError(debug.getError(6019)); + } + this.littleEndian = false; + } + return this.littleEndian; + }, + hasTowel: function hasTowel() { + if (42 !== this.getUint16(2)) throw RangeError(debug.getError(6020)); + return true; + }, + getFieldTypeName: function getFieldTypeName(fieldType) { + var typeNames = this.fieldTypeNames; + if (fieldType in typeNames) return typeNames[fieldType]; + return null; + }, + getFieldTagName: function getFieldTagName(fieldTag) { + var tagNames = this.fieldTagNames; + if (fieldTag in tagNames) return tagNames[fieldTag]; + cc.logID(6021, fieldTag); + return "Tag" + fieldTag; + }, + getFieldTypeLength: function getFieldTypeLength(fieldTypeName) { + if (-1 !== ["BYTE", "ASCII", "SBYTE", "UNDEFINED"].indexOf(fieldTypeName)) return 1; + if (-1 !== ["SHORT", "SSHORT"].indexOf(fieldTypeName)) return 2; + if (-1 !== ["LONG", "SLONG", "FLOAT"].indexOf(fieldTypeName)) return 4; + if (-1 !== ["RATIONAL", "SRATIONAL", "DOUBLE"].indexOf(fieldTypeName)) return 8; + return null; + }, + getFieldValues: function getFieldValues(fieldTagName, fieldTypeName, typeCount, valueOffset) { + var fieldValues = []; + var fieldTypeLength = this.getFieldTypeLength(fieldTypeName); + var fieldValueSize = fieldTypeLength * typeCount; + if (fieldValueSize <= 4) false === this.littleEndian ? fieldValues.push(valueOffset >>> 8 * (4 - fieldTypeLength)) : fieldValues.push(valueOffset); else for (var i = 0; i < typeCount; i++) { + var indexOffset = fieldTypeLength * i; + if (fieldTypeLength >= 8) if (-1 !== ["RATIONAL", "SRATIONAL"].indexOf(fieldTypeName)) { + fieldValues.push(this.getUint32(valueOffset + indexOffset)); + fieldValues.push(this.getUint32(valueOffset + indexOffset + 4)); + } else cc.logID(8e3); else fieldValues.push(this.getBytes(fieldTypeLength, valueOffset + indexOffset)); + } + "ASCII" === fieldTypeName && fieldValues.forEach((function (e, i, a) { + a[i] = String.fromCharCode(e); + })); + return fieldValues; + }, + getBytes: function getBytes(numBytes, offset) { + if (numBytes <= 0) cc.logID(8001); else { + if (numBytes <= 1) return this.getUint8(offset); + if (numBytes <= 2) return this.getUint16(offset); + if (numBytes <= 3) return this.getUint32(offset) >>> 8; + if (numBytes <= 4) return this.getUint32(offset); + cc.logID(8002); + } + }, + getBits: function getBits(numBits, byteOffset, bitOffset) { + bitOffset = bitOffset || 0; + var extraBytes = Math.floor(bitOffset / 8); + var newByteOffset = byteOffset + extraBytes; + var totalBits = bitOffset + numBits; + var shiftRight = 32 - numBits; + var shiftLeft, rawBits; + if (totalBits <= 0) cc.logID(6023); else if (totalBits <= 8) { + shiftLeft = 24 + bitOffset; + rawBits = this.getUint8(newByteOffset); + } else if (totalBits <= 16) { + shiftLeft = 16 + bitOffset; + rawBits = this.getUint16(newByteOffset); + } else if (totalBits <= 32) { + shiftLeft = bitOffset; + rawBits = this.getUint32(newByteOffset); + } else cc.logID(6022); + return { + bits: rawBits << shiftLeft >>> shiftRight, + byteOffset: newByteOffset + Math.floor(totalBits / 8), + bitOffset: totalBits % 8 + }; + }, + parseFileDirectory: function parseFileDirectory(byteOffset) { + var numDirEntries = this.getUint16(byteOffset); + var tiffFields = []; + for (var i = byteOffset + 2, entryCount = 0; entryCount < numDirEntries; i += 12, + entryCount++) { + var fieldTag = this.getUint16(i); + var fieldType = this.getUint16(i + 2); + var typeCount = this.getUint32(i + 4); + var valueOffset = this.getUint32(i + 8); + var fieldTagName = this.getFieldTagName(fieldTag); + var fieldTypeName = this.getFieldTypeName(fieldType); + var fieldValues = this.getFieldValues(fieldTagName, fieldTypeName, typeCount, valueOffset); + tiffFields[fieldTagName] = { + type: fieldTypeName, + values: fieldValues + }; + } + this._fileDirectories.push(tiffFields); + var nextIFDByteOffset = this.getUint32(i); + 0 !== nextIFDByteOffset && this.parseFileDirectory(nextIFDByteOffset); + }, + clampColorSample: function clampColorSample(colorSample, bitsPerSample) { + var multiplier = Math.pow(2, 8 - bitsPerSample); + return Math.floor(colorSample * multiplier + (multiplier - 1)); + }, + parseTIFF: function parseTIFF(tiffData, canvas) { + canvas = canvas || document.createElement("canvas"); + this._tiffData = tiffData; + this.canvas = canvas; + this.checkLittleEndian(); + if (!this.hasTowel()) return; + var firstIFDByteOffset = this.getUint32(4); + this._fileDirectories.length = 0; + this.parseFileDirectory(firstIFDByteOffset); + var fileDirectory = this._fileDirectories[0]; + var imageWidth = fileDirectory["ImageWidth"].values[0]; + var imageLength = fileDirectory["ImageLength"].values[0]; + this.canvas.width = imageWidth; + this.canvas.height = imageLength; + var strips = []; + var compression = fileDirectory["Compression"] ? fileDirectory["Compression"].values[0] : 1; + var samplesPerPixel = fileDirectory["SamplesPerPixel"].values[0]; + var sampleProperties = []; + var bitsPerPixel = 0; + var hasBytesPerPixel = false; + fileDirectory["BitsPerSample"].values.forEach((function (bitsPerSample, i, bitsPerSampleValues) { + sampleProperties[i] = { + bitsPerSample: bitsPerSample, + hasBytesPerSample: false, + bytesPerSample: void 0 + }; + if (bitsPerSample % 8 === 0) { + sampleProperties[i].hasBytesPerSample = true; + sampleProperties[i].bytesPerSample = bitsPerSample / 8; + } + bitsPerPixel += bitsPerSample; + }), this); + if (bitsPerPixel % 8 === 0) { + hasBytesPerPixel = true; + var bytesPerPixel = bitsPerPixel / 8; + } + var stripOffsetValues = fileDirectory["StripOffsets"].values; + var numStripOffsetValues = stripOffsetValues.length; + if (fileDirectory["StripByteCounts"]) var stripByteCountValues = fileDirectory["StripByteCounts"].values; else { + cc.logID(8003); + if (1 !== numStripOffsetValues) throw Error(debug.getError(6024)); + var stripByteCountValues = [Math.ceil(imageWidth * imageLength * bitsPerPixel / 8)]; + } + for (var i = 0; i < numStripOffsetValues; i++) { + var stripOffset = stripOffsetValues[i]; + strips[i] = []; + var stripByteCount = stripByteCountValues[i]; + for (var byteOffset = 0, bitOffset = 0, jIncrement = 1, getHeader = true, pixel = [], numBytes = 0, sample = 0, currentSample = 0; byteOffset < stripByteCount; byteOffset += jIncrement) switch (compression) { + case 1: + for (var m = 0, pixel = []; m < samplesPerPixel; m++) { + if (!sampleProperties[m].hasBytesPerSample) { + var sampleInfo = this.getBits(sampleProperties[m].bitsPerSample, stripOffset + byteOffset, bitOffset); + pixel.push(sampleInfo.bits); + byteOffset = sampleInfo.byteOffset - stripOffset; + bitOffset = sampleInfo.bitOffset; + throw RangeError(debug.getError(6025)); + } + var sampleOffset = sampleProperties[m].bytesPerSample * m; + pixel.push(this.getBytes(sampleProperties[m].bytesPerSample, stripOffset + byteOffset + sampleOffset)); + } + strips[i].push(pixel); + if (!hasBytesPerPixel) { + jIncrement = 0; + throw RangeError(debug.getError(6026)); + } + jIncrement = bytesPerPixel; + break; + + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + break; + + case 32773: + if (getHeader) { + getHeader = false; + var blockLength = 1; + var iterations = 1; + var header = this.getInt8(stripOffset + byteOffset); + header >= 0 && header <= 127 ? blockLength = header + 1 : header >= -127 && header <= -1 ? iterations = 1 - header : getHeader = true; + } else { + var currentByte = this.getUint8(stripOffset + byteOffset); + for (var m = 0; m < iterations; m++) { + if (!sampleProperties[sample].hasBytesPerSample) throw RangeError(debug.getError(6025)); + currentSample = currentSample << 8 * numBytes | currentByte; + numBytes++; + if (numBytes === sampleProperties[sample].bytesPerSample) { + pixel.push(currentSample); + currentSample = numBytes = 0; + sample++; + } + if (sample === samplesPerPixel) { + strips[i].push(pixel); + pixel = []; + sample = 0; + } + } + blockLength--; + 0 === blockLength && (getHeader = true); + } + jIncrement = 1; + } + } + if (canvas.getContext) { + var ctx = this.canvas.getContext("2d"); + ctx.fillStyle = "rgba(255, 255, 255, 0)"; + var rowsPerStrip = fileDirectory["RowsPerStrip"] ? fileDirectory["RowsPerStrip"].values[0] : imageLength; + var numStrips = strips.length; + var imageLengthModRowsPerStrip = imageLength % rowsPerStrip; + var rowsInLastStrip = 0 === imageLengthModRowsPerStrip ? rowsPerStrip : imageLengthModRowsPerStrip; + var numRowsInStrip = rowsPerStrip; + var numRowsInPreviousStrip = 0; + var photometricInterpretation = fileDirectory["PhotometricInterpretation"].values[0]; + var extraSamplesValues = []; + var numExtraSamples = 0; + if (fileDirectory["ExtraSamples"]) { + extraSamplesValues = fileDirectory["ExtraSamples"].values; + numExtraSamples = extraSamplesValues.length; + } + if (fileDirectory["ColorMap"]) { + var colorMapValues = fileDirectory["ColorMap"].values; + var colorMapSampleSize = Math.pow(2, sampleProperties[0].bitsPerSample); + } + for (var i = 0; i < numStrips; i++) { + i + 1 === numStrips && (numRowsInStrip = rowsInLastStrip); + var numPixels = strips[i].length; + var yPadding = numRowsInPreviousStrip * i; + for (var y = 0, j = 0; y < numRowsInStrip, j < numPixels; y++) for (var x = 0; x < imageWidth; x++, + j++) { + var pixelSamples = strips[i][j]; + var red = 0; + var green = 0; + var blue = 0; + var opacity = 1; + if (numExtraSamples > 0) for (var k = 0; k < numExtraSamples; k++) if (1 === extraSamplesValues[k] || 2 === extraSamplesValues[k]) { + opacity = pixelSamples[3 + k] / 256; + break; + } + switch (photometricInterpretation) { + case 0: + if (sampleProperties[0].hasBytesPerSample) var invertValue = Math.pow(16, 2 * sampleProperties[0].bytesPerSample); + pixelSamples.forEach((function (sample, index, samples) { + samples[index] = invertValue - sample; + })); + + case 1: + red = green = blue = this.clampColorSample(pixelSamples[0], sampleProperties[0].bitsPerSample); + break; + + case 2: + red = this.clampColorSample(pixelSamples[0], sampleProperties[0].bitsPerSample); + green = this.clampColorSample(pixelSamples[1], sampleProperties[1].bitsPerSample); + blue = this.clampColorSample(pixelSamples[2], sampleProperties[2].bitsPerSample); + break; + + case 3: + if (void 0 === colorMapValues) throw Error(debug.getError(6027)); + var colorMapIndex = pixelSamples[0]; + red = this.clampColorSample(colorMapValues[colorMapIndex], 16); + green = this.clampColorSample(colorMapValues[colorMapSampleSize + colorMapIndex], 16); + blue = this.clampColorSample(colorMapValues[2 * colorMapSampleSize + colorMapIndex], 16); + break; + + default: + throw RangeError(debug.getError(6028, photometricInterpretation)); + } + ctx.fillStyle = "rgba(" + red + ", " + green + ", " + blue + ", " + opacity + ")"; + ctx.fillRect(x, yPadding + y, 1, 1); + } + numRowsInPreviousStrip = numRowsInStrip; + } + } + return this.canvas; + }, + fieldTagNames: { + 315: "Artist", + 258: "BitsPerSample", + 265: "CellLength", + 264: "CellWidth", + 320: "ColorMap", + 259: "Compression", + 33432: "Copyright", + 306: "DateTime", + 338: "ExtraSamples", + 266: "FillOrder", + 289: "FreeByteCounts", + 288: "FreeOffsets", + 291: "GrayResponseCurve", + 290: "GrayResponseUnit", + 316: "HostComputer", + 270: "ImageDescription", + 257: "ImageLength", + 256: "ImageWidth", + 271: "Make", + 281: "MaxSampleValue", + 280: "MinSampleValue", + 272: "Model", + 254: "NewSubfileType", + 274: "Orientation", + 262: "PhotometricInterpretation", + 284: "PlanarConfiguration", + 296: "ResolutionUnit", + 278: "RowsPerStrip", + 277: "SamplesPerPixel", + 305: "Software", + 279: "StripByteCounts", + 273: "StripOffsets", + 255: "SubfileType", + 263: "Threshholding", + 282: "XResolution", + 283: "YResolution", + 326: "BadFaxLines", + 327: "CleanFaxData", + 343: "ClipPath", + 328: "ConsecutiveBadFaxLines", + 433: "Decode", + 434: "DefaultImageColor", + 269: "DocumentName", + 336: "DotRange", + 321: "HalftoneHints", + 346: "Indexed", + 347: "JPEGTables", + 285: "PageName", + 297: "PageNumber", + 317: "Predictor", + 319: "PrimaryChromaticities", + 532: "ReferenceBlackWhite", + 339: "SampleFormat", + 559: "StripRowCounts", + 330: "SubIFDs", + 292: "T4Options", + 293: "T6Options", + 325: "TileByteCounts", + 323: "TileLength", + 324: "TileOffsets", + 322: "TileWidth", + 301: "TransferFunction", + 318: "WhitePoint", + 344: "XClipPathUnits", + 286: "XPosition", + 529: "YCbCrCoefficients", + 531: "YCbCrPositioning", + 530: "YCbCrSubSampling", + 345: "YClipPathUnits", + 287: "YPosition", + 37378: "ApertureValue", + 40961: "ColorSpace", + 36868: "DateTimeDigitized", + 36867: "DateTimeOriginal", + 34665: "Exif IFD", + 36864: "ExifVersion", + 33434: "ExposureTime", + 41728: "FileSource", + 37385: "Flash", + 40960: "FlashpixVersion", + 33437: "FNumber", + 42016: "ImageUniqueID", + 37384: "LightSource", + 37500: "MakerNote", + 37377: "ShutterSpeedValue", + 37510: "UserComment", + 33723: "IPTC", + 34675: "ICC Profile", + 700: "XMP", + 42112: "GDAL_METADATA", + 42113: "GDAL_NODATA", + 34377: "Photoshop" + }, + fieldTypeNames: { + 1: "BYTE", + 2: "ASCII", + 3: "SHORT", + 4: "LONG", + 5: "RATIONAL", + 6: "SBYTE", + 7: "UNDEFINED", + 8: "SSHORT", + 9: "SLONG", + 10: "SRATIONAL", + 11: "FLOAT", + 12: "DOUBLE" + } + }; + module.exports = tiffReader; + }), { + "../core/CCDebug": 70 + }], + 357: [(function (require, module, exports) { + "use strict"; + require("./CCParticleAsset"); + require("./CCParticleSystem"); + require("./particle-simulator"); + require("./particle-system-assembler"); + }), { + "./CCParticleAsset": 354, + "./CCParticleSystem": 355, + "./particle-simulator": 358, + "./particle-system-assembler": 359 + }], + 358: [(function (require, module, exports) { + "use strict"; + var js = require("../core/platform/js"); + var misc = require("../core/utils/misc"); + var ZERO_VEC2 = cc.v2(0, 0); + var _pos = cc.v2(); + var _tpa = cc.v2(); + var _tpb = cc.v2(); + var _tpc = cc.v2(); + var Particle = function Particle() { + this.pos = cc.v2(0, 0); + this.startPos = cc.v2(0, 0); + this.color = cc.color(0, 0, 0, 255); + this.deltaColor = { + r: 0, + g: 0, + b: 0, + a: 255 + }; + this.preciseColor = { + r: 0, + g: 0, + b: 0, + a: 255 + }; + this.size = 0; + this.deltaSize = 0; + this.rotation = 0; + this.deltaRotation = 0; + this.timeToLive = 0; + this.drawPos = cc.v2(0, 0); + this.aspectRatio = 1; + this.dir = cc.v2(0, 0); + this.radialAccel = 0; + this.tangentialAccel = 0; + this.angle = 0; + this.degreesPerSecond = 0; + this.radius = 0; + this.deltaRadius = 0; + }; + var pool = new js.Pool(function (par) { + par.pos.set(ZERO_VEC2); + par.startPos.set(ZERO_VEC2); + par.color._val = 4278190080; + par.deltaColor.r = par.deltaColor.g = par.deltaColor.b = 0; + par.deltaColor.a = 255; + par.size = 0; + par.deltaSize = 0; + par.rotation = 0; + par.deltaRotation = 0; + par.timeToLive = 0; + par.drawPos.set(ZERO_VEC2); + par.aspectRatio = 1; + par.dir.set(ZERO_VEC2); + par.radialAccel = 0; + par.tangentialAccel = 0; + par.angle = 0; + par.degreesPerSecond = 0; + par.radius = 0; + par.deltaRadius = 0; + }, 1024); + pool.get = function () { + return this._get() || new Particle(); + }; + var Simulator = function Simulator(system) { + this.sys = system; + this.particles = []; + this.active = false; + this.readyToPlay = true; + this.finished = false; + this.elapsed = 0; + this.emitCounter = 0; + this._uvFilled = 0; + this._worldRotation = 0; + }; + Simulator.prototype.stop = function () { + this.active = false; + this.readyToPlay = false; + this.elapsed = this.sys.duration; + this.emitCounter = 0; + }; + Simulator.prototype.reset = function () { + this.active = true; + this.readyToPlay = true; + this.elapsed = 0; + this.emitCounter = 0; + this.finished = false; + var particles = this.particles; + for (var id = 0; id < particles.length; ++id) pool.put(particles[id]); + particles.length = 0; + }; + Simulator.prototype.emitParticle = function (pos) { + var psys = this.sys; + var clampf = misc.clampf; + var particle = pool.get(); + this.particles.push(particle); + particle.timeToLive = psys.life + psys.lifeVar * (Math.random() - .5) * 2; + var timeToLive = particle.timeToLive = Math.max(0, particle.timeToLive); + particle.pos.x = psys.sourcePos.x + psys.posVar.x * (Math.random() - .5) * 2; + particle.pos.y = psys.sourcePos.y + psys.posVar.y * (Math.random() - .5) * 2; + var sr, sg, sb, sa; + var startColor = psys._startColor, startColorVar = psys._startColorVar; + var endColor = psys._endColor, endColorVar = psys._endColorVar; + particle.color.r = sr = clampf(startColor.r + startColorVar.r * (Math.random() - .5) * 2, 0, 255); + particle.color.g = sg = clampf(startColor.g + startColorVar.g * (Math.random() - .5) * 2, 0, 255); + particle.color.b = sb = clampf(startColor.b + startColorVar.b * (Math.random() - .5) * 2, 0, 255); + particle.color.a = sa = clampf(startColor.a + startColorVar.a * (Math.random() - .5) * 2, 0, 255); + var color = particle.color; + var preciseColor = particle.preciseColor; + preciseColor.r = color.r; + preciseColor.g = color.g; + preciseColor.b = color.b; + preciseColor.a = color.a; + particle.deltaColor.r = (clampf(endColor.r + endColorVar.r * (Math.random() - .5) * 2, 0, 255) - sr) / timeToLive; + particle.deltaColor.g = (clampf(endColor.g + endColorVar.g * (Math.random() - .5) * 2, 0, 255) - sg) / timeToLive; + particle.deltaColor.b = (clampf(endColor.b + endColorVar.b * (Math.random() - .5) * 2, 0, 255) - sb) / timeToLive; + particle.deltaColor.a = (clampf(endColor.a + endColorVar.a * (Math.random() - .5) * 2, 0, 255) - sa) / timeToLive; + var startS = psys.startSize + psys.startSizeVar * (Math.random() - .5) * 2; + startS = Math.max(0, startS); + particle.size = startS; + if (psys.endSize === cc.ParticleSystem.START_SIZE_EQUAL_TO_END_SIZE) particle.deltaSize = 0; else { + var endS = psys.endSize + psys.endSizeVar * (Math.random() - .5) * 2; + endS = Math.max(0, endS); + particle.deltaSize = (endS - startS) / timeToLive; + } + var startA = psys.startSpin + psys.startSpinVar * (Math.random() - .5) * 2; + var endA = psys.endSpin + psys.endSpinVar * (Math.random() - .5) * 2; + particle.rotation = startA; + particle.deltaRotation = (endA - startA) / timeToLive; + particle.startPos.x = pos.x; + particle.startPos.y = pos.y; + particle.aspectRatio = psys._aspectRatio || 1; + var a = misc.degreesToRadians(psys.angle + this._worldRotation + psys.angleVar * (Math.random() - .5) * 2); + if (psys.emitterMode === cc.ParticleSystem.EmitterMode.GRAVITY) { + var s = psys.speed + psys.speedVar * (Math.random() - .5) * 2; + particle.dir.x = Math.cos(a); + particle.dir.y = Math.sin(a); + particle.dir.mulSelf(s); + particle.radialAccel = psys.radialAccel + psys.radialAccelVar * (Math.random() - .5) * 2; + particle.tangentialAccel = psys.tangentialAccel + psys.tangentialAccelVar * (Math.random() - .5) * 2; + psys.rotationIsDir && (particle.rotation = -misc.radiansToDegrees(Math.atan2(particle.dir.y, particle.dir.x))); + } else { + var startRadius = psys.startRadius + psys.startRadiusVar * (Math.random() - .5) * 2; + var endRadius = psys.endRadius + psys.endRadiusVar * (Math.random() - .5) * 2; + particle.radius = startRadius; + particle.deltaRadius = psys.endRadius === cc.ParticleSystem.START_RADIUS_EQUAL_TO_END_RADIUS ? 0 : (endRadius - startRadius) / timeToLive; + particle.angle = a; + particle.degreesPerSecond = misc.degreesToRadians(psys.rotatePerS + psys.rotatePerSVar * (Math.random() - .5) * 2); + } + }; + function getWorldRotation(node) { + var rotation = 0; + var tempNode = node; + while (tempNode) { + rotation += tempNode.angle; + tempNode = tempNode.parent; + } + return rotation; + } + Simulator.prototype.updateUVs = function (force) { + var assembler = this.sys._assembler; + if (!assembler) return; + var buffer = assembler.getBuffer(); + if (buffer && this.sys._renderSpriteFrame) { + var FLOAT_PER_PARTICLE = 4 * assembler._vfmt._bytes / 4; + var vbuf = buffer._vData; + var uv = this.sys._renderSpriteFrame.uv; + var start = force ? 0 : this._uvFilled; + var particleCount = this.particles.length; + for (var i = start; i < particleCount; i++) { + var offset = i * FLOAT_PER_PARTICLE; + vbuf[offset + 2] = uv[0]; + vbuf[offset + 3] = uv[1]; + vbuf[offset + 7] = uv[2]; + vbuf[offset + 8] = uv[3]; + vbuf[offset + 12] = uv[4]; + vbuf[offset + 13] = uv[5]; + vbuf[offset + 17] = uv[6]; + vbuf[offset + 18] = uv[7]; + } + this._uvFilled = particleCount; + } + }; + Simulator.prototype.updateParticleBuffer = function (particle, pos, buffer, offset) { + var vbuf = buffer._vData; + var uintbuf = buffer._uintVData; + var x = pos.x, y = pos.y; + var width = particle.size; + var height = width; + var aspectRatio = particle.aspectRatio; + aspectRatio > 1 ? height = width / aspectRatio : width = height * aspectRatio; + var halfWidth = width / 2; + var halfHeight = height / 2; + if (particle.rotation) { + var x1 = -halfWidth, y1 = -halfHeight; + var x2 = halfWidth, y2 = halfHeight; + var rad = -misc.degreesToRadians(particle.rotation); + var cr = Math.cos(rad), sr = Math.sin(rad); + vbuf[offset] = x1 * cr - y1 * sr + x; + vbuf[offset + 1] = x1 * sr + y1 * cr + y; + vbuf[offset + 5] = x2 * cr - y1 * sr + x; + vbuf[offset + 6] = x2 * sr + y1 * cr + y; + vbuf[offset + 10] = x1 * cr - y2 * sr + x; + vbuf[offset + 11] = x1 * sr + y2 * cr + y; + vbuf[offset + 15] = x2 * cr - y2 * sr + x; + vbuf[offset + 16] = x2 * sr + y2 * cr + y; + } else { + vbuf[offset] = x - halfWidth; + vbuf[offset + 1] = y - halfHeight; + vbuf[offset + 5] = x + halfWidth; + vbuf[offset + 6] = y - halfHeight; + vbuf[offset + 10] = x - halfWidth; + vbuf[offset + 11] = y + halfHeight; + vbuf[offset + 15] = x + halfWidth; + vbuf[offset + 16] = y + halfHeight; + } + uintbuf[offset + 4] = particle.color._val; + uintbuf[offset + 9] = particle.color._val; + uintbuf[offset + 14] = particle.color._val; + uintbuf[offset + 19] = particle.color._val; + }; + Simulator.prototype.step = function (dt) { + dt = dt > cc.director._maxParticleDeltaTime ? cc.director._maxParticleDeltaTime : dt; + var psys = this.sys; + var node = psys.node; + var particles = this.particles; + var FLOAT_PER_PARTICLE = 4 * this.sys._assembler._vfmt._bytes / 4; + var PositionType = cc.ParticleSystem.PositionType; + node._updateWorldMatrix(); + if (psys.positionType === PositionType.FREE) { + this._worldRotation = getWorldRotation(node); + var m = node._worldMatrix.m; + _pos.x = m[12]; + _pos.y = m[13]; + } else if (psys.positionType === PositionType.RELATIVE) { + this._worldRotation = node.angle; + _pos.x = node.x; + _pos.y = node.y; + } else this._worldRotation = 0; + if (this.active && psys.emissionRate) { + var rate = 1 / psys.emissionRate; + particles.length < psys.totalParticles && (this.emitCounter += dt); + while (particles.length < psys.totalParticles && this.emitCounter > rate) { + this.emitParticle(_pos); + this.emitCounter -= rate; + } + this.elapsed += dt; + -1 !== psys.duration && psys.duration < this.elapsed && psys.stopSystem(); + } + var buffer = psys._assembler.getBuffer(); + var particleCount = particles.length; + buffer.reset(); + buffer.request(4 * particleCount, 6 * particleCount); + particleCount > this._uvFilled && this.updateUVs(); + var particleIdx = 0; + while (particleIdx < particles.length) { + _tpa.x = _tpa.y = _tpb.x = _tpb.y = _tpc.x = _tpc.y = 0; + var particle = particles[particleIdx]; + particle.timeToLive -= dt; + if (particle.timeToLive > 0) { + if (psys.emitterMode === cc.ParticleSystem.EmitterMode.GRAVITY) { + var tmp = _tpc, radial = _tpa, tangential = _tpb; + if (particle.pos.x || particle.pos.y) { + radial.set(particle.pos); + radial.normalizeSelf(); + } + tangential.set(radial); + radial.mulSelf(particle.radialAccel); + var newy = tangential.x; + tangential.x = -tangential.y; + tangential.y = newy; + tangential.mulSelf(particle.tangentialAccel); + tmp.set(radial); + tmp.addSelf(tangential); + tmp.addSelf(psys.gravity); + tmp.mulSelf(dt); + particle.dir.addSelf(tmp); + tmp.set(particle.dir); + tmp.mulSelf(dt); + particle.pos.addSelf(tmp); + } else { + particle.angle += particle.degreesPerSecond * dt; + particle.radius += particle.deltaRadius * dt; + particle.pos.x = -Math.cos(particle.angle) * particle.radius; + particle.pos.y = -Math.sin(particle.angle) * particle.radius; + } + var preciseColor = particle.preciseColor; + var deltaColor = particle.deltaColor; + preciseColor.r += deltaColor.r * dt; + preciseColor.g += deltaColor.g * dt; + preciseColor.b += deltaColor.b * dt; + preciseColor.a += deltaColor.a * dt; + var color = particle.color; + color.r = preciseColor.r; + color.g = preciseColor.g; + color.b = preciseColor.b; + color.a = preciseColor.a; + particle.size += particle.deltaSize * dt; + particle.size < 0 && (particle.size = 0); + particle.rotation += particle.deltaRotation * dt; + var newPos = _tpa; + newPos.set(particle.pos); + psys.positionType !== PositionType.GROUPED && newPos.addSelf(particle.startPos); + var offset = FLOAT_PER_PARTICLE * particleIdx; + this.updateParticleBuffer(particle, newPos, buffer, offset); + ++particleIdx; + } else { + var deadParticle = particles[particleIdx]; + particleIdx !== particles.length - 1 && (particles[particleIdx] = particles[particles.length - 1]); + pool.put(deadParticle); + particles.length--; + } + } + psys._assembler._ia._count = 6 * particles.length; + if (particles.length > 0) buffer.uploadData(); else if (!this.active && !this.readyToPlay) { + this.finished = true; + psys._finishedSimulation(); + } + }; + module.exports = Simulator; + }), { + "../core/platform/js": 260, + "../core/utils/misc": 324 + }], + 359: [(function (require, module, exports) { + "use strict"; + var _assembler = _interopRequireDefault(require("../core/renderer/assembler")); + var _inputAssembler = _interopRequireDefault(require("../renderer/core/input-assembler")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var ParticleSystem = require("./CCParticleSystem"); + var renderer = require("../core/renderer/"); + var QuadBuffer = require("../core/renderer/webgl/quad-buffer"); + var vfmtPosUvColor = require("../core/renderer/webgl/vertex-format").vfmtPosUvColor; + var ParticleAssembler = (function (_Assembler) { + _inheritsLoose(ParticleAssembler, _Assembler); + function ParticleAssembler(comp) { + var _this; + _this = _Assembler.call(this, comp) || this; + _this._buffer = null; + _this._ia = null; + _this._vfmt = vfmtPosUvColor; + return _this; + } + var _proto = ParticleAssembler.prototype; + _proto.getBuffer = function getBuffer() { + if (!this._buffer) { + this._buffer = new QuadBuffer(renderer._handle, vfmtPosUvColor); + this._ia = new _inputAssembler["default"](); + this._ia._vertexBuffer = this._buffer._vb; + this._ia._indexBuffer = this._buffer._ib; + this._ia._start = 0; + this._ia._count = 0; + } + return this._buffer; + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + if (!this._ia) return; + var PositionType = cc.ParticleSystem.PositionType; + comp.positionType === PositionType.RELATIVE ? renderer.node = comp.node.parent : renderer.node = comp.node; + renderer.material = comp._materials[0]; + renderer._flushIA(this._ia); + }; + return ParticleAssembler; + })(_assembler["default"]); + _assembler["default"].register(ParticleSystem, ParticleAssembler); + module.exports = ParticleAssembler; + }), { + "../core/renderer/": 271, + "../core/renderer/assembler": 268, + "../core/renderer/webgl/quad-buffer": 310, + "../core/renderer/webgl/vertex-format": 313, + "../renderer/core/input-assembler": 362, + "./CCParticleSystem": 355 + }], + 360: [(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; + }), {}], + 361: [(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": 339, + "../enums": 367, + "../gfx": 372, + "../memop": 384, + "./program-lib": 364, + "./view": 366 + }], + 362: [(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); + 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": 372 + }], + 363: [(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": 347, + "../enums": 367, + "../gfx": 372 + }], + 364: [(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": 372 + }], + 365: [(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); + 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"]; + }), {}], + 366: [(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": 339, + "../enums": 367 + }], + 367: [(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": 360 + }], + 368: [(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); + 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 () { + _createClass(Device, [{ + key: "caps", + get: function get() { + return this._caps; + } + }]); + 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(); + }; + return Device; + })(); + exports["default"] = Device; + module.exports = exports["default"]; + }), { + "./enums": 369, + "./state": 376, + "./texture-2d": 377, + "./texture-cube": 378 + }], + 369: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.attrTypeBytes = attrTypeBytes; + exports.glFilter = glFilter; + exports.glTextureFmt = glTextureFmt; + exports.enums = void 0; + 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_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; + } + }), {}], + 370: [(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"]; + }), {}], + 371: [(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); + 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": 369 + }], + 372: [(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": 368, + "./enums": 369, + "./frame-buffer": 370, + "./index-buffer": 371, + "./program": 374, + "./render-buffer": 375, + "./texture": 379, + "./texture-2d": 377, + "./texture-cube": 378, + "./vertex-buffer": 380, + "./vertex-format": 381 + }], + 373: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.isPow2 = isPow2; + function isPow2(v) { + return !(v & v - 1) && !!v; + } + }), {}], + 374: [(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); + return Constructor; + } + var _genID = 0; + function _parseError(out, type, errorLog) { + 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"]; + }), {}], + 375: [(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"]; + }), {}], + 376: [(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": 369 + }], + 377: [(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; + subClass.__proto__ = superClass; + } + 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": 369, + "./misc": 373, + "./texture": 379 + }], + 378: [(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; + subClass.__proto__ = superClass; + } + 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": 369, + "./misc": 373, + "./texture": 379 + }], + 379: [(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": 369 + }], + 380: [(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); + 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": 369 + }], + 381: [(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": 390, + "./enums": 369 + }], + 382: [(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"]; + }), {}], + 383: [(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); + 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": 388 + }], + 384: [(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": 382, + "./fixed-array": 383, + "./linked-array": 385, + "./pool": 386, + "./recycle-pool": 387, + "./typed-array-pool": 389 + }], + 385: [(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); + 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": 386 + }], + 386: [(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"]; + }), {}], + 387: [(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); + 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": 388 + }], + 388: [(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"]; + }), {}], + 389: [(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"]; + }), {}], + 390: [(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"]; + }), {}], + 391: [(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; + subClass.__proto__ = superClass; + } + 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": 339, + "../core/base-renderer": 361, + "../enums": 367, + "../memop": 384 + }], + 392: [(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); + 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": 194, + "../../core/value-types": 339, + "../enums": 367 + }], + 393: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _valueTypes = require("../../core/value-types"); + var _gfx = _interopRequireDefault(require("../gfx")); + 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); + return Constructor; + } + var _forward = cc.v3(0, 0, -1); + var _m4_tmp = cc.mat4(); + var _m3_tmp = _valueTypes.Mat3.create(); + var _transformedLightDirection = cc.v3(0, 0, 0); + function _computeSpotLightViewProjMatrix(light, outView, outProj) { + light._node.getWorldRT(outView); + _valueTypes.Mat4.invert(outView, outView); + _valueTypes.Mat4.perspective(outProj, light._spotAngle * light._spotAngleScale, 1, light._shadowMinDepth, light._shadowMaxDepth); + } + function _computeDirectionalLightViewProjMatrix(light, outView, outProj) { + light._node.getWorldRT(outView); + _valueTypes.Mat4.invert(outView, outView); + var halfSize = light._shadowFrustumSize / 2; + _valueTypes.Mat4.ortho(outProj, -halfSize, halfSize, -halfSize, halfSize, light._shadowMinDepth, light._shadowMaxDepth); + } + function _computePointLightViewProjMatrix(light, outView, outProj) { + light._node.getWorldRT(outView); + _valueTypes.Mat4.invert(outView, outView); + _valueTypes.Mat4.perspective(outProj, (0, _valueTypes.toRadian)(179), 1, light._shadowMinDepth, light._shadowMaxDepth); + } + var Light = (function () { + function Light() { + this._poolID = -1; + this._node = null; + this._type = _enums["default"].LIGHT_DIRECTIONAL; + this._color = new _valueTypes.Vec3(1, 1, 1); + this._intensity = 1; + this._range = 1; + this._spotAngle = (0, _valueTypes.toRadian)(60); + this._spotExp = 1; + this._directionUniform = new Float32Array(3); + this._positionUniform = new Float32Array(3); + this._colorUniform = new Float32Array([this._color.x * this._intensity, this._color.y * this._intensity, this._color.z * this._intensity]); + this._spotUniform = new Float32Array([Math.cos(.5 * this._spotAngle), this._spotExp]); + this._shadowType = _enums["default"].SHADOW_NONE; + this._shadowFrameBuffer = null; + this._shadowMap = null; + this._shadowMapDirty = false; + this._shadowDepthBuffer = null; + this._shadowResolution = 1024; + this._shadowBias = 5e-4; + this._shadowDarkness = 1; + this._shadowMinDepth = 1; + this._shadowMaxDepth = 1e3; + this._frustumEdgeFalloff = 0; + this._viewProjMatrix = cc.mat4(); + this._spotAngleScale = 1; + this._shadowFrustumSize = 50; + } + var _proto = Light.prototype; + _proto.getNode = function getNode() { + return this._node; + }; + _proto.setNode = function setNode(node) { + this._node = node; + }; + _proto.setColor = function setColor(r, g, b) { + _valueTypes.Vec3.set(this._color, r, g, b); + this._colorUniform[0] = r * this._intensity; + this._colorUniform[1] = g * this._intensity; + this._colorUniform[2] = b * this._intensity; + }; + _proto.setIntensity = function setIntensity(val) { + this._intensity = val; + this._colorUniform[0] = val * this._color.x; + this._colorUniform[1] = val * this._color.y; + this._colorUniform[2] = val * this._color.z; + }; + _proto.setType = function setType(type) { + this._type = type; + }; + _proto.setSpotAngle = function setSpotAngle(val) { + this._spotAngle = val; + this._spotUniform[0] = Math.cos(.5 * this._spotAngle); + }; + _proto.setSpotExp = function setSpotExp(val) { + this._spotExp = val; + this._spotUniform[1] = val; + }; + _proto.setRange = function setRange(val) { + this._range = val; + }; + _proto.setShadowType = function setShadowType(type) { + this._shadowType === _enums["default"].SHADOW_NONE && type !== _enums["default"].SHADOW_NONE && (this._shadowMapDirty = true); + this._shadowType = type; + }; + _proto.setShadowResolution = function setShadowResolution(val) { + this._shadowResolution !== val && (this._shadowMapDirty = true); + this._shadowResolution = val; + }; + _proto.setShadowBias = function setShadowBias(val) { + this._shadowBias = val; + }; + _proto.setShadowDarkness = function setShadowDarkness(val) { + this._shadowDarkness = val; + }; + _proto.setShadowMinDepth = function setShadowMinDepth(val) { + this._shadowMinDepth = val; + }; + _proto.setShadowMaxDepth = function setShadowMaxDepth(val) { + this._shadowMaxDepth = val; + }; + _proto.setFrustumEdgeFalloff = function setFrustumEdgeFalloff(val) { + this._frustumEdgeFalloff = val; + }; + _proto.setShadowFrustumSize = function setShadowFrustumSize(val) { + this._shadowFrustumSize = val; + }; + _proto.extractView = function extractView(out, stages) { + out._shadowLight = this; + out._priority = -1; + out._rect.x = 0; + out._rect.y = 0; + out._rect.w = this._shadowResolution; + out._rect.h = this._shadowResolution; + _valueTypes.Vec3.set(out._color, 1, 1, 1); + out._depth = 1; + out._stencil = 1; + out._clearFlags = _enums["default"].CLEAR_COLOR | _enums["default"].CLEAR_DEPTH; + out._stages = stages; + out._framebuffer = this._shadowFrameBuffer; + switch (this._type) { + case _enums["default"].LIGHT_SPOT: + _computeSpotLightViewProjMatrix(this, out._matView, out._matProj); + break; + + case _enums["default"].LIGHT_DIRECTIONAL: + _computeDirectionalLightViewProjMatrix(this, out._matView, out._matProj); + break; + + case _enums["default"].LIGHT_POINT: + _computePointLightViewProjMatrix(this, out._matView, out._matProj); + break; + + case _enums["default"].LIGHT_AMBIENT: + break; + + default: + console.warn("shadow of this light type is not supported"); + } + _valueTypes.Mat4.mul(out._matViewProj, out._matProj, out._matView); + this._viewProjMatrix = out._matViewProj; + _valueTypes.Mat4.invert(out._matInvViewProj, out._matViewProj); + out._cullingMask = 4294967295; + }; + _proto._updateLightPositionAndDirection = function _updateLightPositionAndDirection() { + this._node.getWorldMatrix(_m4_tmp); + _valueTypes.Mat3.fromMat4(_m3_tmp, _m4_tmp); + _valueTypes.Vec3.transformMat3(_transformedLightDirection, _forward, _m3_tmp); + _valueTypes.Vec3.toArray(this._directionUniform, _transformedLightDirection); + var pos = this._positionUniform; + var m = _m4_tmp.m; + pos[0] = m[12]; + pos[1] = m[13]; + pos[2] = m[14]; + }; + _proto._generateShadowMap = function _generateShadowMap(device) { + this._shadowMap = new _gfx["default"].Texture2D(device, { + width: this._shadowResolution, + height: this._shadowResolution, + format: _gfx["default"].TEXTURE_FMT_RGBA8, + wrapS: _gfx["default"].WRAP_CLAMP, + wrapT: _gfx["default"].WRAP_CLAMP + }); + this._shadowDepthBuffer = new _gfx["default"].RenderBuffer(device, _gfx["default"].RB_FMT_D16, this._shadowResolution, this._shadowResolution); + this._shadowFrameBuffer = new _gfx["default"].FrameBuffer(device, this._shadowResolution, this._shadowResolution, { + colors: [this._shadowMap], + depth: this._shadowDepthBuffer + }); + }; + _proto._destroyShadowMap = function _destroyShadowMap() { + if (this._shadowMap) { + this._shadowMap.destroy(); + this._shadowDepthBuffer.destroy(); + this._shadowFrameBuffer.destroy(); + this._shadowMap = null; + this._shadowDepthBuffer = null; + this._shadowFrameBuffer = null; + } + }; + _proto.update = function update(device) { + this._updateLightPositionAndDirection(); + if (this._shadowType === _enums["default"].SHADOW_NONE) this._destroyShadowMap(); else if (this._shadowMapDirty) { + this._destroyShadowMap(); + this._generateShadowMap(device); + this._shadowMapDirty = false; + } + }; + _createClass(Light, [{ + key: "color", + get: function get() { + return this._color; + } + }, { + key: "intensity", + get: function get() { + return this._intensity; + } + }, { + key: "type", + get: function get() { + return this._type; + } + }, { + key: "spotAngle", + get: function get() { + return this._spotAngle; + } + }, { + key: "spotExp", + get: function get() { + return this._spotExp; + } + }, { + key: "range", + get: function get() { + return this._range; + } + }, { + key: "shadowType", + get: function get() { + return this._shadowType; + } + }, { + key: "shadowMap", + get: function get() { + return this._shadowMap; + } + }, { + key: "viewProjMatrix", + get: function get() { + return this._viewProjMatrix; + } + }, { + key: "shadowResolution", + get: function get() { + return this._shadowResolution; + } + }, { + key: "shadowBias", + get: function get() { + return this._shadowBias; + } + }, { + key: "shadowDarkness", + get: function get() { + return this._shadowDarkness; + } + }, { + key: "shadowMinDepth", + get: function get() { + if (this._type === _enums["default"].LIGHT_DIRECTIONAL) return 1; + return this._shadowMinDepth; + } + }, { + key: "shadowMaxDepth", + get: function get() { + if (this._type === _enums["default"].LIGHT_DIRECTIONAL) return 1; + return this._shadowMaxDepth; + } + }, { + key: "frustumEdgeFalloff", + get: function get() { + return this._frustumEdgeFalloff; + } + }, { + key: "shadowFrustumSize", + get: function get() { + return this._shadowFrustumSize; + } + }]); + return Light; + })(); + exports["default"] = Light; + module.exports = exports["default"]; + }), { + "../../core/value-types": 339, + "../enums": 367, + "../gfx": 372 + }], + 394: [(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"]; + }), {}], + 395: [(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": 384 + }], + 396: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.getInspectorProps = getInspectorProps; + exports.getClassName = exports.getInstanceCtor = exports.getInstanceType = exports.enums2default = exports.ctor2enums = 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": 121, + "../core/value-types": 339, + "./enums": 367, + "./gfx/texture-2d": 377 + }], + 397: [(function (require, module, exports) { + "use strict"; + var codec = require("../compression/ZipUtils"); + var zlib = require("../compression/zlib.min"); + var js = require("../core/platform/js"); + require("../core/platform/CCSAXParser"); + function uint8ArrayToUint32Array(uint8Arr) { + if (uint8Arr.length % 4 !== 0) return null; + var arrLen = uint8Arr.length / 4; + var retArr = window.Uint32Array ? new Uint32Array(arrLen) : []; + for (var i = 0; i < arrLen; i++) { + var offset = 4 * i; + retArr[i] = uint8Arr[offset] + 256 * uint8Arr[offset + 1] + 65536 * uint8Arr[offset + 2] + uint8Arr[offset + 3] * (1 << 24); + } + return retArr; + } + cc.TMXLayerInfo = function () { + this.properties = {}; + this.name = ""; + this._layerSize = null; + this._tiles = []; + this.visible = true; + this._opacity = 0; + this.ownTiles = true; + this._minGID = 1e5; + this._maxGID = 0; + this.offset = cc.v2(0, 0); + }; + cc.TMXLayerInfo.prototype = { + constructor: cc.TMXLayerInfo, + getProperties: function getProperties() { + return this.properties; + }, + setProperties: function setProperties(value) { + this.properties = value; + } + }; + cc.TMXImageLayerInfo = function () { + this.name = ""; + this.visible = true; + this.width = 0; + this.height = 0; + this.offset = cc.v2(0, 0); + this._opacity = 0; + this._trans = new cc.Color(255, 255, 255, 255); + this.sourceImage = null; + }; + cc.TMXObjectGroupInfo = function () { + this.properties = {}; + this.name = ""; + this._objects = []; + this.visible = true; + this._opacity = 0; + this._color = new cc.Color(255, 255, 255, 255); + this.offset = cc.v2(0, 0); + this._draworder = "topdown"; + }; + cc.TMXObjectGroupInfo.prototype = { + constructor: cc.TMXObjectGroupInfo, + getProperties: function getProperties() { + return this.properties; + }, + setProperties: function setProperties(value) { + this.properties = value; + } + }; + cc.TMXTilesetInfo = function () { + this.name = ""; + this.firstGid = 0; + this.spacing = 0; + this.margin = 0; + this.sourceImage = null; + this.imageSize = cc.size(0, 0); + this.tileOffset = cc.v2(0, 0); + this._tileSize = cc.size(0, 0); + }; + cc.TMXTilesetInfo.prototype = { + constructor: cc.TMXTilesetInfo, + rectForGID: function rectForGID(gid, result) { + var rect = result || cc.rect(0, 0, 0, 0); + rect.width = this._tileSize.width; + rect.height = this._tileSize.height; + gid &= cc.TiledMap.TileFlag.FLIPPED_MASK; + gid -= parseInt(this.firstGid, 10); + var max_x = parseInt((this.imageSize.width - 2 * this.margin + this.spacing) / (this._tileSize.width + this.spacing), 10); + rect.x = parseInt(gid % max_x * (this._tileSize.width + this.spacing) + this.margin, 10); + rect.y = parseInt(parseInt(gid / max_x, 10) * (this._tileSize.height + this.spacing) + this.margin, 10); + return rect; + } + }; + function strToHAlign(value) { + var hAlign = cc.Label.HorizontalAlign; + switch (value) { + case "center": + return hAlign.CENTER; + + case "right": + return hAlign.RIGHT; + + default: + return hAlign.LEFT; + } + } + function strToVAlign(value) { + var vAlign = cc.Label.VerticalAlign; + switch (value) { + case "center": + return vAlign.CENTER; + + case "bottom": + return vAlign.BOTTOM; + + default: + return vAlign.TOP; + } + } + function strToColor(value) { + if (!value) return cc.color(0, 0, 0, 255); + value = -1 !== value.indexOf("#") ? value.substring(1) : value; + if (8 === value.length) { + var a = parseInt(value.substr(0, 2), 16) || 255; + var r = parseInt(value.substr(2, 2), 16) || 0; + var g = parseInt(value.substr(4, 2), 16) || 0; + var b = parseInt(value.substr(6, 2), 16) || 0; + return cc.color(r, g, b, a); + } + var _r = parseInt(value.substr(0, 2), 16) || 0; + var _g = parseInt(value.substr(2, 2), 16) || 0; + var _b = parseInt(value.substr(4, 2), 16) || 0; + return cc.color(_r, _g, _b, 255); + } + function getPropertyList(node, map) { + var res = []; + var properties = node.getElementsByTagName("properties"); + for (var i = 0; i < properties.length; ++i) { + var property = properties[i].getElementsByTagName("property"); + for (var j = 0; j < property.length; ++j) res.push(property[j]); + } + map = map || {}; + for (var _i = 0; _i < res.length; _i++) { + var element = res[_i]; + var name = element.getAttribute("name"); + var type = element.getAttribute("type") || "string"; + var value = element.getAttribute("value"); + "int" === type ? value = parseInt(value) : "float" === type ? value = parseFloat(value) : "bool" === type ? value = "true" === value : "color" === type && (value = strToColor(value)); + map[name] = value; + } + return map; + } + cc.TMXMapInfo = function (tmxFile, tsxMap, textures, textureSizes, imageLayerTextures) { + this.properties = []; + this.orientation = null; + this.parentElement = null; + this.parentGID = null; + this.layerAttrs = 0; + this.storingCharacters = false; + this.currentString = null; + this.renderOrder = cc.TiledMap.RenderOrder.RightDown; + this._supportVersion = [1, 2, 0]; + this._parser = new cc.SAXParser(); + this._objectGroups = []; + this._allChildren = []; + this._mapSize = cc.size(0, 0); + this._tileSize = cc.size(0, 0); + this._layers = []; + this._tilesets = []; + this._imageLayers = []; + this._tileProperties = {}; + this._tileAnimations = {}; + this._tsxMap = null; + this._textures = null; + this._staggerAxis = null; + this._staggerIndex = null; + this._hexSideLength = 0; + this._imageLayerTextures = null; + this.initWithXML(tmxFile, tsxMap, textures, textureSizes, imageLayerTextures); + }; + cc.TMXMapInfo.prototype = { + constructor: cc.TMXMapInfo, + getOrientation: function getOrientation() { + return this.orientation; + }, + setOrientation: function setOrientation(value) { + this.orientation = value; + }, + getStaggerAxis: function getStaggerAxis() { + return this._staggerAxis; + }, + setStaggerAxis: function setStaggerAxis(value) { + this._staggerAxis = value; + }, + getStaggerIndex: function getStaggerIndex() { + return this._staggerIndex; + }, + setStaggerIndex: function setStaggerIndex(value) { + this._staggerIndex = value; + }, + getHexSideLength: function getHexSideLength() { + return this._hexSideLength; + }, + setHexSideLength: function setHexSideLength(value) { + this._hexSideLength = value; + }, + getMapSize: function getMapSize() { + return cc.size(this._mapSize.width, this._mapSize.height); + }, + setMapSize: function setMapSize(value) { + this._mapSize.width = value.width; + this._mapSize.height = value.height; + }, + _getMapWidth: function _getMapWidth() { + return this._mapSize.width; + }, + _setMapWidth: function _setMapWidth(width) { + this._mapSize.width = width; + }, + _getMapHeight: function _getMapHeight() { + return this._mapSize.height; + }, + _setMapHeight: function _setMapHeight(height) { + this._mapSize.height = height; + }, + getTileSize: function getTileSize() { + return cc.size(this._tileSize.width, this._tileSize.height); + }, + setTileSize: function setTileSize(value) { + this._tileSize.width = value.width; + this._tileSize.height = value.height; + }, + _getTileWidth: function _getTileWidth() { + return this._tileSize.width; + }, + _setTileWidth: function _setTileWidth(width) { + this._tileSize.width = width; + }, + _getTileHeight: function _getTileHeight() { + return this._tileSize.height; + }, + _setTileHeight: function _setTileHeight(height) { + this._tileSize.height = height; + }, + getLayers: function getLayers() { + return this._layers; + }, + setLayers: function setLayers(value) { + this._allChildren.push(value); + this._layers.push(value); + }, + getImageLayers: function getImageLayers() { + return this._imageLayers; + }, + setImageLayers: function setImageLayers(value) { + this._allChildren.push(value); + this._imageLayers.push(value); + }, + getTilesets: function getTilesets() { + return this._tilesets; + }, + setTilesets: function setTilesets(value) { + this._tilesets.push(value); + }, + getObjectGroups: function getObjectGroups() { + return this._objectGroups; + }, + setObjectGroups: function setObjectGroups(value) { + this._allChildren.push(value); + this._objectGroups.push(value); + }, + getAllChildren: function getAllChildren() { + return this._allChildren; + }, + getParentElement: function getParentElement() { + return this.parentElement; + }, + setParentElement: function setParentElement(value) { + this.parentElement = value; + }, + getParentGID: function getParentGID() { + return this.parentGID; + }, + setParentGID: function setParentGID(value) { + this.parentGID = value; + }, + getLayerAttribs: function getLayerAttribs() { + return this.layerAttrs; + }, + setLayerAttribs: function setLayerAttribs(value) { + this.layerAttrs = value; + }, + getStoringCharacters: function getStoringCharacters() { + return this.storingCharacters; + }, + setStoringCharacters: function setStoringCharacters(value) { + this.storingCharacters = value; + }, + getProperties: function getProperties() { + return this.properties; + }, + setProperties: function setProperties(value) { + this.properties = value; + }, + initWithXML: function initWithXML(tmxString, tsxMap, textures, textureSizes, imageLayerTextures) { + this._tilesets.length = 0; + this._layers.length = 0; + this._imageLayers.length = 0; + this._tsxMap = tsxMap; + this._textures = textures; + this._imageLayerTextures = imageLayerTextures; + this._textureSizes = textureSizes; + this._objectGroups.length = 0; + this._allChildren.length = 0; + this.properties.length = 0; + this._tileProperties = {}; + this._tileAnimations = {}; + this.currentString = ""; + this.storingCharacters = false; + this.layerAttrs = cc.TMXLayerInfo.ATTRIB_NONE; + this.parentElement = cc.TiledMap.NONE; + return this.parseXMLString(tmxString); + }, + parseXMLString: function parseXMLString(xmlStr, tilesetFirstGid) { + var mapXML = this._parser._parseXML(xmlStr); + var i; + var map = mapXML.documentElement; + var orientationStr = map.getAttribute("orientation"); + var staggerAxisStr = map.getAttribute("staggeraxis"); + var staggerIndexStr = map.getAttribute("staggerindex"); + var hexSideLengthStr = map.getAttribute("hexsidelength"); + var renderorderStr = map.getAttribute("renderorder"); + var version = map.getAttribute("version") || "1.0.0"; + if ("map" === map.nodeName) { + var versionArr = version.split("."); + var supportVersion = this._supportVersion; + for (var _i2 = 0; _i2 < supportVersion.length; _i2++) { + var v = parseInt(versionArr[_i2]) || 0; + var sv = supportVersion[_i2]; + if (sv < v) { + cc.logID(7216, version); + break; + } + } + "orthogonal" === orientationStr ? this.orientation = cc.TiledMap.Orientation.ORTHO : "isometric" === orientationStr ? this.orientation = cc.TiledMap.Orientation.ISO : "hexagonal" === orientationStr ? this.orientation = cc.TiledMap.Orientation.HEX : null !== orientationStr && cc.logID(7217, orientationStr); + this.renderOrder = "right-up" === renderorderStr ? cc.TiledMap.RenderOrder.RightUp : "left-up" === renderorderStr ? cc.TiledMap.RenderOrder.LeftUp : "left-down" === renderorderStr ? cc.TiledMap.RenderOrder.LeftDown : cc.TiledMap.RenderOrder.RightDown; + "x" === staggerAxisStr ? this.setStaggerAxis(cc.TiledMap.StaggerAxis.STAGGERAXIS_X) : "y" === staggerAxisStr && this.setStaggerAxis(cc.TiledMap.StaggerAxis.STAGGERAXIS_Y); + "odd" === staggerIndexStr ? this.setStaggerIndex(cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD) : "even" === staggerIndexStr && this.setStaggerIndex(cc.TiledMap.StaggerIndex.STAGGERINDEX_EVEN); + hexSideLengthStr && this.setHexSideLength(parseFloat(hexSideLengthStr)); + var mapSize = cc.size(0, 0); + mapSize.width = parseFloat(map.getAttribute("width")); + mapSize.height = parseFloat(map.getAttribute("height")); + this.setMapSize(mapSize); + mapSize = cc.size(0, 0); + mapSize.width = parseFloat(map.getAttribute("tilewidth")); + mapSize.height = parseFloat(map.getAttribute("tileheight")); + this.setTileSize(mapSize); + this.properties = getPropertyList(map); + } + var tilesets = map.getElementsByTagName("tileset"); + if ("map" !== map.nodeName) { + tilesets = []; + tilesets.push(map); + } + for (i = 0; i < tilesets.length; i++) { + var selTileset = tilesets[i]; + var tsxName = selTileset.getAttribute("source"); + if (tsxName) { + var currentFirstGID = parseInt(selTileset.getAttribute("firstgid")); + var tsxXmlString = this._tsxMap[tsxName]; + tsxXmlString && this.parseXMLString(tsxXmlString, currentFirstGID); + } else { + var images = selTileset.getElementsByTagName("image"); + var multiTextures = images.length > 1; + var image = images[0]; + var firstImageName = image.getAttribute("source"); + firstImageName = firstImageName.replace(/\\/g, "/"); + var tiles = selTileset.getElementsByTagName("tile"); + var tileCount = tiles && tiles.length || 1; + var tile = null; + var tilesetName = selTileset.getAttribute("name") || ""; + var tilesetSpacing = parseInt(selTileset.getAttribute("spacing")) || 0; + var tilesetMargin = parseInt(selTileset.getAttribute("margin")) || 0; + var fgid = parseInt(tilesetFirstGid); + fgid || (fgid = parseInt(selTileset.getAttribute("firstgid")) || 0); + var tilesetSize = cc.size(0, 0); + tilesetSize.width = parseFloat(selTileset.getAttribute("tilewidth")); + tilesetSize.height = parseFloat(selTileset.getAttribute("tileheight")); + var offset = selTileset.getElementsByTagName("tileoffset")[0]; + var tileOffset = cc.v2(0, 0); + if (offset) { + tileOffset.x = parseFloat(offset.getAttribute("x")); + tileOffset.y = parseFloat(offset.getAttribute("y")); + } + var tileset = null; + for (var tileIdx = 0; tileIdx < tileCount; tileIdx++) { + if (!tileset || multiTextures) { + tileset = new cc.TMXTilesetInfo(); + tileset.name = tilesetName; + tileset.firstGid = fgid; + tileset.spacing = tilesetSpacing; + tileset.margin = tilesetMargin; + tileset._tileSize = tilesetSize; + tileset.tileOffset = tileOffset; + tileset.sourceImage = this._textures[firstImageName]; + tileset.imageSize = this._textureSizes[firstImageName] || tileset.imageSize; + tileset.sourceImage || cc.errorID(7221, firstImageName); + this.setTilesets(tileset); + } + tile = tiles && tiles[tileIdx]; + if (!tile) continue; + this.parentGID = parseInt(fgid) + parseInt(tile.getAttribute("id") || 0); + var tileImages = tile.getElementsByTagName("image"); + if (tileImages && tileImages.length > 0) { + image = tileImages[0]; + var imageName = image.getAttribute("source"); + imageName = imageName.replace(/\\/g, "/"); + tileset.sourceImage = this._textures[imageName]; + tileset.sourceImage || cc.errorID(7221, imageName); + var tileSize = cc.size(0, 0); + tileSize.width = parseFloat(image.getAttribute("width")); + tileSize.height = parseFloat(image.getAttribute("height")); + tileset._tileSize = tileSize; + tileset.firstGid = this.parentGID; + } + this._tileProperties[this.parentGID] = getPropertyList(tile); + var animations = tile.getElementsByTagName("animation"); + if (animations && animations.length > 0) { + var animation = animations[0]; + var framesData = animation.getElementsByTagName("frame"); + var animationProp = { + frames: [], + dt: 0, + frameIdx: 0 + }; + this._tileAnimations[this.parentGID] = animationProp; + var frames = animationProp.frames; + for (var frameIdx = 0; frameIdx < framesData.length; frameIdx++) { + var frame = framesData[frameIdx]; + var tileid = parseInt(fgid) + parseInt(frame.getAttribute("tileid")); + var duration = parseFloat(frame.getAttribute("duration")); + frames.push({ + tileid: tileid, + duration: duration / 1e3, + grid: null + }); + } + } + } + } + } + var childNodes = map.childNodes; + for (i = 0; i < childNodes.length; i++) { + var childNode = childNodes[i]; + if (this._shouldIgnoreNode(childNode)) continue; + if ("imagelayer" === childNode.nodeName) { + var imageLayer = this._parseImageLayer(childNode); + imageLayer && this.setImageLayers(imageLayer); + } + if ("layer" === childNode.nodeName) { + var layer = this._parseLayer(childNode); + this.setLayers(layer); + } + if ("objectgroup" === childNode.nodeName) { + var objectGroup = this._parseObjectGroup(childNode); + this.setObjectGroups(objectGroup); + } + } + return map; + }, + _shouldIgnoreNode: function _shouldIgnoreNode(node) { + return 3 === node.nodeType || 8 === node.nodeType || 4 === node.nodeType; + }, + _parseImageLayer: function _parseImageLayer(selLayer) { + var datas = selLayer.getElementsByTagName("image"); + if (!datas || 0 == datas.length) return null; + var imageLayer = new cc.TMXImageLayerInfo(); + imageLayer.name = selLayer.getAttribute("name"); + imageLayer.offset.x = parseFloat(selLayer.getAttribute("offsetx")) || 0; + imageLayer.offset.y = parseFloat(selLayer.getAttribute("offsety")) || 0; + var visible = selLayer.getAttribute("visible"); + imageLayer.visible = !("0" === visible); + var opacity = selLayer.getAttribute("opacity") || 1; + imageLayer.opacity = parseInt(255 * parseFloat(opacity)) || 255; + var data = datas[0]; + var source = data.getAttribute("source"); + imageLayer.sourceImage = this._imageLayerTextures[source]; + imageLayer.width = parseInt(data.getAttribute("width")) || 0; + imageLayer.height = parseInt(data.getAttribute("height")) || 0; + imageLayer.trans = strToColor(data.getAttribute("trans")); + if (!imageLayer.sourceImage) { + cc.errorID(7221, source); + return null; + } + return imageLayer; + }, + _parseLayer: function _parseLayer(selLayer) { + var data = selLayer.getElementsByTagName("data")[0]; + var layer = new cc.TMXLayerInfo(); + layer.name = selLayer.getAttribute("name"); + var layerSize = cc.size(0, 0); + layerSize.width = parseFloat(selLayer.getAttribute("width")); + layerSize.height = parseFloat(selLayer.getAttribute("height")); + layer._layerSize = layerSize; + var visible = selLayer.getAttribute("visible"); + layer.visible = !("0" === visible); + var opacity = selLayer.getAttribute("opacity") || 1; + layer._opacity = opacity ? parseInt(255 * parseFloat(opacity)) : 255; + layer.offset = cc.v2(parseFloat(selLayer.getAttribute("offsetx")) || 0, parseFloat(selLayer.getAttribute("offsety")) || 0); + var nodeValue = ""; + for (var j = 0; j < data.childNodes.length; j++) nodeValue += data.childNodes[j].nodeValue; + nodeValue = nodeValue.trim(); + var compression = data.getAttribute("compression"); + var encoding = data.getAttribute("encoding"); + if (compression && "gzip" !== compression && "zlib" !== compression) { + cc.logID(7218); + return null; + } + var tiles; + switch (compression) { + case "gzip": + tiles = codec.unzipBase64AsArray(nodeValue, 4); + break; + + case "zlib": + var inflator = new zlib.Inflate(codec.Base64.decodeAsArray(nodeValue, 1)); + tiles = uint8ArrayToUint32Array(inflator.decompress()); + break; + + case null: + case "": + if ("base64" === encoding) tiles = codec.Base64.decodeAsArray(nodeValue, 4); else if ("csv" === encoding) { + tiles = []; + var csvTiles = nodeValue.split(","); + for (var csvIdx = 0; csvIdx < csvTiles.length; csvIdx++) tiles.push(parseInt(csvTiles[csvIdx])); + } else { + var selDataTiles = data.getElementsByTagName("tile"); + tiles = []; + for (var xmlIdx = 0; xmlIdx < selDataTiles.length; xmlIdx++) tiles.push(parseInt(selDataTiles[xmlIdx].getAttribute("gid"))); + } + break; + + default: + this.layerAttrs === cc.TMXLayerInfo.ATTRIB_NONE && cc.logID(7219); + } + tiles && (layer._tiles = new Uint32Array(tiles)); + layer.properties = getPropertyList(selLayer); + return layer; + }, + _parseObjectGroup: function _parseObjectGroup(selGroup) { + var objectGroup = new cc.TMXObjectGroupInfo(); + objectGroup.name = selGroup.getAttribute("name") || ""; + objectGroup.offset = cc.v2(parseFloat(selGroup.getAttribute("offsetx")), parseFloat(selGroup.getAttribute("offsety"))); + var opacity = selGroup.getAttribute("opacity") || 1; + objectGroup._opacity = opacity ? parseInt(255 * parseFloat(opacity)) : 255; + var visible = selGroup.getAttribute("visible"); + visible && 0 === parseInt(visible) && (objectGroup.visible = false); + var color = selGroup.getAttribute("color"); + color && objectGroup._color.fromHEX(color); + var draworder = selGroup.getAttribute("draworder"); + draworder && (objectGroup._draworder = draworder); + objectGroup.setProperties(getPropertyList(selGroup)); + var objects = selGroup.getElementsByTagName("object"); + if (objects) { + for (var j = 0; j < objects.length; j++) { + var selObj = objects[j]; + var objectProp = {}; + objectProp["id"] = selObj.getAttribute("id") || j; + objectProp["name"] = selObj.getAttribute("name") || ""; + objectProp["width"] = parseFloat(selObj.getAttribute("width")) || 0; + objectProp["height"] = parseFloat(selObj.getAttribute("height")) || 0; + objectProp["x"] = parseFloat(selObj.getAttribute("x")) || 0; + objectProp["y"] = parseFloat(selObj.getAttribute("y")) || 0; + objectProp["rotation"] = parseFloat(selObj.getAttribute("rotation")) || 0; + getPropertyList(selObj, objectProp); + var visibleAttr = selObj.getAttribute("visible"); + objectProp["visible"] = !(visibleAttr && 0 === parseInt(visibleAttr)); + var texts = selObj.getElementsByTagName("text"); + if (texts && texts.length > 0) { + var text = texts[0]; + objectProp["type"] = cc.TiledMap.TMXObjectType.TEXT; + objectProp["wrap"] = "1" == text.getAttribute("wrap"); + objectProp["color"] = strToColor(text.getAttribute("color")); + objectProp["halign"] = strToHAlign(text.getAttribute("halign")); + objectProp["valign"] = strToVAlign(text.getAttribute("valign")); + objectProp["pixelsize"] = parseInt(text.getAttribute("pixelsize")) || 16; + objectProp["text"] = text.childNodes[0].nodeValue; + } + var gid = selObj.getAttribute("gid"); + if (gid) { + objectProp["gid"] = parseInt(gid); + objectProp["type"] = cc.TiledMap.TMXObjectType.IMAGE; + } + var ellipse = selObj.getElementsByTagName("ellipse"); + ellipse && ellipse.length > 0 && (objectProp["type"] = cc.TiledMap.TMXObjectType.ELLIPSE); + var polygonProps = selObj.getElementsByTagName("polygon"); + if (polygonProps && polygonProps.length > 0) { + objectProp["type"] = cc.TiledMap.TMXObjectType.POLYGON; + var selPgPointStr = polygonProps[0].getAttribute("points"); + selPgPointStr && (objectProp["points"] = this._parsePointsString(selPgPointStr)); + } + var polylineProps = selObj.getElementsByTagName("polyline"); + if (polylineProps && polylineProps.length > 0) { + objectProp["type"] = cc.TiledMap.TMXObjectType.POLYLINE; + var selPlPointStr = polylineProps[0].getAttribute("points"); + selPlPointStr && (objectProp["polylinePoints"] = this._parsePointsString(selPlPointStr)); + } + objectProp["type"] || (objectProp["type"] = cc.TiledMap.TMXObjectType.RECT); + objectGroup._objects.push(objectProp); + } + "index" !== draworder && objectGroup._objects.sort((function (a, b) { + return a.y - b.y; + })); + } + return objectGroup; + }, + _parsePointsString: function _parsePointsString(pointsString) { + if (!pointsString) return null; + var points = []; + var pointsStr = pointsString.split(" "); + for (var i = 0; i < pointsStr.length; i++) { + var selPointStr = pointsStr[i].split(","); + points.push({ + x: parseFloat(selPointStr[0]), + y: parseFloat(selPointStr[1]) + }); + } + return points; + }, + setTileAnimations: function setTileAnimations(animations) { + this._tileAnimations = animations; + }, + getTileAnimations: function getTileAnimations() { + return this._tileAnimations; + }, + getTileProperties: function getTileProperties() { + return this._tileProperties; + }, + setTileProperties: function setTileProperties(tileProperties) { + this._tileProperties = tileProperties; + }, + getCurrentString: function getCurrentString() { + return this.currentString; + }, + setCurrentString: function setCurrentString(currentString) { + this.currentString = currentString; + } + }; + var _p = cc.TMXMapInfo.prototype; + js.getset(_p, "mapWidth", _p._getMapWidth, _p._setMapWidth); + js.getset(_p, "mapHeight", _p._getMapHeight, _p._setMapHeight); + js.getset(_p, "tileWidth", _p._getTileWidth, _p._setTileWidth); + js.getset(_p, "tileHeight", _p._getTileHeight, _p._setTileHeight); + cc.TMXLayerInfo.ATTRIB_NONE = 1; + cc.TMXLayerInfo.ATTRIB_BASE64 = 2; + cc.TMXLayerInfo.ATTRIB_GZIP = 4; + cc.TMXLayerInfo.ATTRIB_ZLIB = 8; + }), { + "../compression/ZipUtils": 23, + "../compression/zlib.min": 26, + "../core/platform/CCSAXParser": 246, + "../core/platform/js": 260 + }], + 398: [(function (require, module, exports) { + "use strict"; + var _valueTypes = require("../core/value-types"); + var _materialVariant = _interopRequireDefault(require("../core/assets/material/material-variant")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var RenderComponent = require("../core/components/CCRenderComponent"); + var Material = require("../core/assets/material/CCMaterial"); + var RenderFlow = require("../core/renderer/render-flow"); + var _mat4_temp = cc.mat4(); + var _vec2_temp = cc.v2(); + var _vec2_temp2 = cc.v2(); + var _vec2_temp3 = cc.v2(); + var _tempRowCol = { + row: 0, + col: 0 + }; + var TiledUserNodeData = cc.Class({ + name: "cc.TiledUserNodeData", + extends: cc.Component, + ctor: function ctor() { + this._index = -1; + this._row = -1; + this._col = -1; + this._tiledLayer = null; + } + }); + var TiledLayer = cc.Class({ + name: "cc.TiledLayer", + extends: RenderComponent, + editor: { + inspector: "packages://inspector/inspectors/comps/tiled-layer.js" + }, + ctor: function ctor() { + this._userNodeGrid = {}; + this._userNodeMap = {}; + this._userNodeDirty = false; + this._tiledTiles = []; + this._tilesetIndexArr = []; + this._tilesetIndexToArrIndex = {}; + this._texIdToMatIndex = {}; + this._viewPort = { + x: -1, + y: -1, + width: -1, + height: -1 + }; + this._cullingRect = { + leftDown: { + row: -1, + col: -1 + }, + rightTop: { + row: -1, + col: -1 + } + }; + this._cullingDirty = true; + this._rightTop = { + row: -1, + col: -1 + }; + this._layerInfo = null; + this._mapInfo = null; + this._topOffset = 0; + this._downOffset = 0; + this._leftOffset = 0; + this._rightOffset = 0; + this._tiles = []; + this._vertices = []; + this._verticesDirty = true; + this._layerName = ""; + this._layerOrientation = null; + this._texGrids = null; + this._textures = null; + this._tilesets = null; + this._leftDownToCenterX = 0; + this._leftDownToCenterY = 0; + this._hasTiledNodeGrid = false; + this._hasAniGrid = false; + this._animations = null; + this._enableCulling = cc.macro.ENABLE_TILEDMAP_CULLING; + }, + _hasTiledNode: function _hasTiledNode() { + return this._hasTiledNodeGrid; + }, + _hasAnimation: function _hasAnimation() { + return this._hasAniGrid; + }, + enableCulling: function enableCulling(value) { + if (this._enableCulling != value) { + this._enableCulling = value; + this._cullingDirty = true; + } + }, + addUserNode: function addUserNode(node) { + var dataComp = node.getComponent(TiledUserNodeData); + if (dataComp) { + cc.warn("CCTiledLayer:addUserNode node has been added"); + return false; + } + dataComp = node.addComponent(TiledUserNodeData); + node.parent = this.node; + node._renderFlag |= RenderFlow.FLAG_BREAK_FLOW; + this._userNodeMap[node._id] = dataComp; + dataComp._row = -1; + dataComp._col = -1; + dataComp._tiledLayer = this; + this._nodeLocalPosToLayerPos(node, _vec2_temp); + this._positionToRowCol(_vec2_temp.x, _vec2_temp.y, _tempRowCol); + this._addUserNodeToGrid(dataComp, _tempRowCol); + this._updateCullingOffsetByUserNode(node); + node.on(cc.Node.EventType.POSITION_CHANGED, this._userNodePosChange, dataComp); + node.on(cc.Node.EventType.SIZE_CHANGED, this._userNodeSizeChange, dataComp); + return true; + }, + removeUserNode: function removeUserNode(node) { + var dataComp = node.getComponent(TiledUserNodeData); + if (!dataComp) { + cc.warn("CCTiledLayer:removeUserNode node is not exist"); + return false; + } + node.off(cc.Node.EventType.POSITION_CHANGED, this._userNodePosChange, dataComp); + node.off(cc.Node.EventType.SIZE_CHANGED, this._userNodeSizeChange, dataComp); + this._removeUserNodeFromGrid(dataComp); + delete this._userNodeMap[node._id]; + node._removeComponent(dataComp); + dataComp.destroy(); + node.removeFromParent(true); + node._renderFlag &= ~RenderFlow.FLAG_BREAK_FLOW; + return true; + }, + destroyUserNode: function destroyUserNode(node) { + this.removeUserNode(node); + node.destroy(); + }, + _nodeLocalPosToLayerPos: function _nodeLocalPosToLayerPos(nodePos, out) { + out.x = nodePos.x + this._leftDownToCenterX; + out.y = nodePos.y + this._leftDownToCenterY; + }, + _getNodesByRowCol: function _getNodesByRowCol(row, col) { + var rowData = this._userNodeGrid[row]; + if (!rowData) return null; + return rowData[col]; + }, + _getNodesCountByRow: function _getNodesCountByRow(row) { + var rowData = this._userNodeGrid[row]; + if (!rowData) return 0; + return rowData.count; + }, + _updateAllUserNode: function _updateAllUserNode() { + this._userNodeGrid = {}; + for (var dataId in this._userNodeMap) { + var dataComp = this._userNodeMap[dataId]; + this._nodeLocalPosToLayerPos(dataComp.node, _vec2_temp); + this._positionToRowCol(_vec2_temp.x, _vec2_temp.y, _tempRowCol); + this._addUserNodeToGrid(dataComp, _tempRowCol); + this._updateCullingOffsetByUserNode(dataComp.node); + } + }, + _updateCullingOffsetByUserNode: function _updateCullingOffsetByUserNode(node) { + this._topOffset < node.height && (this._topOffset = node.height); + this._downOffset < node.height && (this._downOffset = node.height); + this._leftOffset < node.width && (this._leftOffset = node.width); + this._rightOffset < node.width && (this._rightOffset = node.width); + }, + _userNodeSizeChange: function _userNodeSizeChange() { + var dataComp = this; + var node = dataComp.node; + var self = dataComp._tiledLayer; + self._updateCullingOffsetByUserNode(node); + }, + _userNodePosChange: function _userNodePosChange() { + var dataComp = this; + var node = dataComp.node; + var self = dataComp._tiledLayer; + self._nodeLocalPosToLayerPos(node, _vec2_temp); + self._positionToRowCol(_vec2_temp.x, _vec2_temp.y, _tempRowCol); + self._limitInLayer(_tempRowCol); + if (_tempRowCol.row === dataComp._row && _tempRowCol.col === dataComp._col) return; + self._removeUserNodeFromGrid(dataComp); + self._addUserNodeToGrid(dataComp, _tempRowCol); + }, + _removeUserNodeFromGrid: function _removeUserNodeFromGrid(dataComp) { + var row = dataComp._row; + var col = dataComp._col; + var index = dataComp._index; + var rowData = this._userNodeGrid[row]; + var colData = rowData && rowData[col]; + if (colData) { + rowData.count--; + colData.count--; + colData.list[index] = null; + if (colData.count <= 0) { + colData.list.length = 0; + colData.count = 0; + } + } + dataComp._row = -1; + dataComp._col = -1; + dataComp._index = -1; + this._userNodeDirty = true; + }, + _limitInLayer: function _limitInLayer(rowCol) { + var row = rowCol.row; + var col = rowCol.col; + row < 0 && (rowCol.row = 0); + row > this._rightTop.row && (rowCol.row = this._rightTop.row); + col < 0 && (rowCol.col = 0); + col > this._rightTop.col && (rowCol.col = this._rightTop.col); + }, + _addUserNodeToGrid: function _addUserNodeToGrid(dataComp, tempRowCol) { + var row = tempRowCol.row; + var col = tempRowCol.col; + var rowData = this._userNodeGrid[row] = this._userNodeGrid[row] || { + count: 0 + }; + var colData = rowData[col] = rowData[col] || { + count: 0, + list: [] + }; + dataComp._row = row; + dataComp._col = col; + dataComp._index = colData.list.length; + rowData.count++; + colData.count++; + colData.list.push(dataComp); + this._userNodeDirty = true; + }, + _isUserNodeDirty: function _isUserNodeDirty() { + return this._userNodeDirty; + }, + _setUserNodeDirty: function _setUserNodeDirty(value) { + this._userNodeDirty = value; + }, + onEnable: function onEnable() { + this._super(); + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this); + this._activateMaterial(); + }, + onDisable: function onDisable() { + this._super(); + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this); + }, + _syncAnchorPoint: function _syncAnchorPoint() { + var node = this.node; + this._leftDownToCenterX = node.width * node.anchorX * node.scaleX; + this._leftDownToCenterY = node.height * node.anchorY * node.scaleY; + this._cullingDirty = true; + }, + onDestroy: function onDestroy() { + this._super(); + if (this._buffer) { + this._buffer.destroy(); + this._buffer = null; + } + this._renderDataList = null; + }, + getLayerName: function getLayerName() { + return this._layerName; + }, + setLayerName: function setLayerName(layerName) { + this._layerName = layerName; + }, + getProperty: function getProperty(propertyName) { + return this._properties[propertyName]; + }, + getPositionAt: function getPositionAt(pos, y) { + var x; + if (void 0 !== y) { + x = Math.floor(pos); + y = Math.floor(y); + } else { + x = Math.floor(pos.x); + y = Math.floor(pos.y); + } + var ret; + switch (this._layerOrientation) { + case cc.TiledMap.Orientation.ORTHO: + ret = this._positionForOrthoAt(x, y); + break; + + case cc.TiledMap.Orientation.ISO: + ret = this._positionForIsoAt(x, y); + break; + + case cc.TiledMap.Orientation.HEX: + ret = this._positionForHexAt(x, y); + } + return ret; + }, + _isInvalidPosition: function _isInvalidPosition(x, y) { + if (x && "object" === typeof x) { + var pos = x; + y = pos.y; + x = pos.x; + } + return x >= this._layerSize.width || y >= this._layerSize.height || x < 0 || y < 0; + }, + _positionForIsoAt: function _positionForIsoAt(x, y) { + var offsetX = 0, offsetY = 0; + var index = Math.floor(x) + Math.floor(y) * this._layerSize.width; + var gidAndFlags = this._tiles[index]; + if (gidAndFlags) { + var gid = (gidAndFlags & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0; + var tileset = this._texGrids[gid].tileset; + var offset = tileset.tileOffset; + offsetX = offset.x; + offsetY = offset.y; + } + return cc.v2(.5 * this._mapTileSize.width * (this._layerSize.height + x - y - 1) + offsetX, .5 * this._mapTileSize.height * (this._layerSize.width - x + this._layerSize.height - y - 2) - offsetY); + }, + _positionForOrthoAt: function _positionForOrthoAt(x, y) { + var offsetX = 0, offsetY = 0; + var index = Math.floor(x) + Math.floor(y) * this._layerSize.width; + var gidAndFlags = this._tiles[index]; + if (gidAndFlags) { + var gid = (gidAndFlags & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0; + var tileset = this._texGrids[gid].tileset; + var offset = tileset.tileOffset; + offsetX = offset.x; + offsetY = offset.y; + } + return cc.v2(x * this._mapTileSize.width + offsetX, (this._layerSize.height - y - 1) * this._mapTileSize.height - offsetY); + }, + _positionForHexAt: function _positionForHexAt(col, row) { + var tileWidth = this._mapTileSize.width; + var tileHeight = this._mapTileSize.height; + var rows = this._layerSize.height; + var index = Math.floor(col) + Math.floor(row) * this._layerSize.width; + var gid = this._tiles[index]; + var offset; + offset = this._texGrids[gid] ? this._texGrids[gid].tileset.tileOffset : { + x: 0, + y: 0 + }; + var odd_even = this._staggerIndex === cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD ? 1 : -1; + var x = 0, y = 0; + var diffX = 0; + var diffY = 0; + switch (this._staggerAxis) { + case cc.TiledMap.StaggerAxis.STAGGERAXIS_Y: + diffX = 0; + row % 2 === 1 && (diffX = tileWidth / 2 * odd_even); + x = col * tileWidth + diffX + offset.x; + y = (rows - row - 1) * (tileHeight - (tileHeight - this._hexSideLength) / 2) - offset.y; + break; + + case cc.TiledMap.StaggerAxis.STAGGERAXIS_X: + diffY = 0; + col % 2 === 1 && (diffY = tileHeight / 2 * -odd_even); + x = col * (tileWidth - (tileWidth - this._hexSideLength) / 2) + offset.x; + y = (rows - row - 1) * tileHeight + diffY - offset.y; + } + return cc.v2(x, y); + }, + setTilesGIDAt: function setTilesGIDAt(gids, beginCol, beginRow, totalCols) { + if (!gids || 0 === gids.length || totalCols <= 0) return; + beginRow < 0 && (beginRow = 0); + beginCol < 0 && (beginCol = 0); + var gidsIdx = 0; + var endCol = beginCol + totalCols; + for (var row = beginRow; ; row++) for (var col = beginCol; col < endCol; col++) { + if (gidsIdx >= gids.length) return; + this._updateTileForGID(gids[gidsIdx], col, row); + gidsIdx++; + } + }, + setTileGIDAt: function setTileGIDAt(gid, posOrX, flagsOrY, flags) { + if (void 0 === posOrX) throw new Error("cc.TiledLayer.setTileGIDAt(): pos should be non-null"); + var pos; + if (void 0 === flags && posOrX instanceof cc.Vec2) { + pos = posOrX; + flags = flagsOrY; + } else { + _vec2_temp3.x = posOrX; + _vec2_temp3.y = flagsOrY; + pos = _vec2_temp3; + } + var ugid = gid & cc.TiledMap.TileFlag.FLIPPED_MASK; + pos.x = Math.floor(pos.x); + pos.y = Math.floor(pos.y); + if (this._isInvalidPosition(pos)) throw new Error("cc.TiledLayer.setTileGIDAt(): invalid position"); + if (!this._tiles || !this._tilesets || 0 == this._tilesets.length) { + cc.logID(7238); + return; + } + if (0 !== ugid && ugid < this._tilesets[0].firstGid) { + cc.logID(7239, gid); + return; + } + flags = flags || 0; + this._updateTileForGID((gid | flags) >>> 0, pos.x, pos.y); + }, + _updateTileForGID: function _updateTileForGID(gidAndFlags, x, y) { + var idx = 0 | x + y * this._layerSize.width; + if (idx >= this._tiles.length) return; + var oldGIDAndFlags = this._tiles[idx]; + if (gidAndFlags === oldGIDAndFlags) return; + var gid = (gidAndFlags & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0; + var grid = this._texGrids[gid]; + var tilesetIdx = grid && grid.texId; + if (grid) { + this._tiles[idx] = gidAndFlags; + this._updateVertex(x, y); + this._buildMaterial(tilesetIdx); + } else this._tiles[idx] = 0; + this._cullingDirty = true; + }, + getTiles: function getTiles() { + return this._tiles; + }, + getTileGIDAt: function getTileGIDAt(pos, y) { + if (void 0 === pos) throw new Error("cc.TiledLayer.getTileGIDAt(): pos should be non-null"); + var x = pos; + if (void 0 === y) { + x = pos.x; + y = pos.y; + } + if (this._isInvalidPosition(x, y)) throw new Error("cc.TiledLayer.getTileGIDAt(): invalid position"); + if (!this._tiles) { + cc.logID(7237); + return null; + } + var index = Math.floor(x) + Math.floor(y) * this._layerSize.width; + var tile = this._tiles[index]; + return (tile & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0; + }, + getTileFlagsAt: function getTileFlagsAt(pos, y) { + if (!pos) throw new Error("TiledLayer.getTileFlagsAt: pos should be non-null"); + void 0 !== y && (pos = cc.v2(pos, y)); + if (this._isInvalidPosition(pos)) throw new Error("TiledLayer.getTileFlagsAt: invalid position"); + if (!this._tiles) { + cc.logID(7240); + return null; + } + var idx = Math.floor(pos.x) + Math.floor(pos.y) * this._layerSize.width; + var tile = this._tiles[idx]; + return (tile & cc.TiledMap.TileFlag.FLIPPED_ALL) >>> 0; + }, + _setCullingDirty: function _setCullingDirty(value) { + this._cullingDirty = value; + }, + _isCullingDirty: function _isCullingDirty() { + return this._cullingDirty; + }, + _updateViewPort: function _updateViewPort(x, y, width, height) { + if (this._viewPort.width === width && this._viewPort.height === height && this._viewPort.x === x && this._viewPort.y === y) return; + this._viewPort.x = x; + this._viewPort.y = y; + this._viewPort.width = width; + this._viewPort.height = height; + var reserveLine = 1; + this._layerOrientation === cc.TiledMap.Orientation.ISO && (reserveLine = 2); + var vpx = this._viewPort.x - this._offset.x + this._leftDownToCenterX; + var vpy = this._viewPort.y - this._offset.y + this._leftDownToCenterY; + var leftDownX = vpx - this._leftOffset; + var leftDownY = vpy - this._downOffset; + var rightTopX = vpx + width + this._rightOffset; + var rightTopY = vpy + height + this._topOffset; + var leftDown = this._cullingRect.leftDown; + var rightTop = this._cullingRect.rightTop; + leftDownX < 0 && (leftDownX = 0); + leftDownY < 0 && (leftDownY = 0); + this._positionToRowCol(leftDownX, leftDownY, _tempRowCol); + _tempRowCol.row -= reserveLine; + _tempRowCol.col -= reserveLine; + _tempRowCol.row = _tempRowCol.row > 0 ? _tempRowCol.row : 0; + _tempRowCol.col = _tempRowCol.col > 0 ? _tempRowCol.col : 0; + if (_tempRowCol.row !== leftDown.row || _tempRowCol.col !== leftDown.col) { + leftDown.row = _tempRowCol.row; + leftDown.col = _tempRowCol.col; + this._cullingDirty = true; + } + if (rightTopX < 0 || rightTopY < 0) { + _tempRowCol.row = -1; + _tempRowCol.col = -1; + } else { + this._positionToRowCol(rightTopX, rightTopY, _tempRowCol); + _tempRowCol.row++; + _tempRowCol.col++; + } + _tempRowCol.row > this._rightTop.row && (_tempRowCol.row = this._rightTop.row); + _tempRowCol.col > this._rightTop.col && (_tempRowCol.col = this._rightTop.col); + if (_tempRowCol.row !== rightTop.row || _tempRowCol.col !== rightTop.col) { + rightTop.row = _tempRowCol.row; + rightTop.col = _tempRowCol.col; + this._cullingDirty = true; + } + }, + _positionToRowCol: function _positionToRowCol(x, y, result) { + var TiledMap = cc.TiledMap; + var Orientation = TiledMap.Orientation; + var StaggerAxis = TiledMap.StaggerAxis; + var maptw = this._mapTileSize.width, mapth = this._mapTileSize.height, maptw2 = .5 * maptw, mapth2 = .5 * mapth; + var row = 0, col = 0, diffX2 = 0, diffY2 = 0, axis = this._staggerAxis; + var cols = this._layerSize.width; + switch (this._layerOrientation) { + case Orientation.ORTHO: + col = Math.floor(x / maptw); + row = Math.floor(y / mapth); + break; + + case Orientation.ISO: + col = Math.floor(x / maptw2); + row = Math.floor(y / mapth2); + break; + + case Orientation.HEX: + if (axis === StaggerAxis.STAGGERAXIS_Y) { + row = Math.floor(y / (mapth - this._diffY1)); + diffX2 = row % 2 === 1 ? maptw2 * this._odd_even : 0; + col = Math.floor((x - diffX2) / maptw); + } else { + col = Math.floor(x / (maptw - this._diffX1)); + diffY2 = col % 2 === 1 ? mapth2 * -this._odd_even : 0; + row = Math.floor((y - diffY2) / mapth); + } + } + result.row = row; + result.col = col; + return result; + }, + _updateCulling: function _updateCulling() { + false; + if (this._enableCulling) { + this.node._updateWorldMatrix(); + _valueTypes.Mat4.invert(_mat4_temp, this.node._worldMatrix); + var rect = cc.visibleRect; + var camera = cc.Camera.findCamera(this.node); + if (camera) { + _vec2_temp.x = 0; + _vec2_temp.y = 0; + _vec2_temp2.x = _vec2_temp.x + rect.width; + _vec2_temp2.y = _vec2_temp.y + rect.height; + camera.getScreenToWorldPoint(_vec2_temp, _vec2_temp); + camera.getScreenToWorldPoint(_vec2_temp2, _vec2_temp2); + _valueTypes.Vec2.transformMat4(_vec2_temp, _vec2_temp, _mat4_temp); + _valueTypes.Vec2.transformMat4(_vec2_temp2, _vec2_temp2, _mat4_temp); + this._updateViewPort(_vec2_temp.x, _vec2_temp.y, _vec2_temp2.x - _vec2_temp.x, _vec2_temp2.y - _vec2_temp.y); + } + } + }, + getLayerOrientation: function getLayerOrientation() { + return this._layerOrientation; + }, + getProperties: function getProperties() { + return this._properties; + }, + _updateVertex: function _updateVertex(col, row) { + var TiledMap = cc.TiledMap; + var TileFlag = TiledMap.TileFlag; + var FLIPPED_MASK = TileFlag.FLIPPED_MASK; + var StaggerAxis = TiledMap.StaggerAxis; + var Orientation = TiledMap.Orientation; + var vertices = this._vertices; + var layerOrientation = this._layerOrientation, tiles = this._tiles; + if (!tiles) return; + var rightTop = this._rightTop; + var maptw = this._mapTileSize.width, mapth = this._mapTileSize.height, maptw2 = .5 * maptw, mapth2 = .5 * mapth, rows = this._layerSize.height, cols = this._layerSize.width, grids = this._texGrids; + var gid, grid, left, bottom, axis, diffX1, diffY1, odd_even, diffX2, diffY2; + if (layerOrientation === Orientation.HEX) { + axis = this._staggerAxis; + diffX1 = this._diffX1; + diffY1 = this._diffY1; + odd_even = this._odd_even; + } + var cullingCol = 0, cullingRow = 0; + var tileOffset = null, gridGID = 0; + var topBorder = 0, downBorder = 0, leftBorder = 0, rightBorder = 0; + var index = row * cols + col; + gid = tiles[index]; + gridGID = (gid & FLIPPED_MASK) >>> 0; + grid = grids[gridGID]; + if (!grid) return; + this._animations[gridGID] && (this._hasAniGrid = this._hasAniGrid || true); + switch (layerOrientation) { + case Orientation.ORTHO: + cullingCol = col; + cullingRow = rows - row - 1; + left = cullingCol * maptw; + bottom = cullingRow * mapth; + break; + + case Orientation.ISO: + cullingCol = rows + col - row - 1; + cullingRow = rows + cols - col - row - 2; + left = maptw2 * cullingCol; + bottom = mapth2 * cullingRow; + break; + + case Orientation.HEX: + diffX2 = axis === StaggerAxis.STAGGERAXIS_Y && row % 2 === 1 ? maptw2 * odd_even : 0; + diffY2 = axis === StaggerAxis.STAGGERAXIS_X && col % 2 === 1 ? mapth2 * -odd_even : 0; + left = col * (maptw - diffX1) + diffX2; + bottom = (rows - row - 1) * (mapth - diffY1) + diffY2; + cullingCol = col; + cullingRow = rows - row - 1; + } + var rowData = vertices[cullingRow] = vertices[cullingRow] || { + minCol: 0, + maxCol: 0 + }; + var colData = rowData[cullingCol] = rowData[cullingCol] || {}; + rowData.minCol > cullingCol && (rowData.minCol = cullingCol); + rowData.maxCol < cullingCol && (rowData.maxCol = cullingCol); + rightTop.row < cullingRow && (rightTop.row = cullingRow); + rightTop.col < cullingCol && (rightTop.col = cullingCol); + tileOffset = grid.tileset.tileOffset; + left += this._offset.x + tileOffset.x; + bottom += this._offset.y - tileOffset.y; + topBorder = -tileOffset.y + grid.tileset._tileSize.height - mapth; + topBorder = topBorder < 0 ? 0 : topBorder; + downBorder = tileOffset.y < 0 ? 0 : tileOffset.y; + leftBorder = -tileOffset.x < 0 ? 0 : -tileOffset.x; + rightBorder = tileOffset.x + grid.tileset._tileSize.width - maptw; + rightBorder = rightBorder < 0 ? 0 : rightBorder; + this._rightOffset < leftBorder && (this._rightOffset = leftBorder); + this._leftOffset < rightBorder && (this._leftOffset = rightBorder); + this._topOffset < downBorder && (this._topOffset = downBorder); + this._downOffset < topBorder && (this._downOffset = topBorder); + colData.left = left; + colData.bottom = bottom; + colData.index = index; + this._cullingDirty = true; + }, + _updateVertices: function _updateVertices() { + var vertices = this._vertices; + vertices.length = 0; + var tiles = this._tiles; + if (!tiles) return; + var rightTop = this._rightTop; + rightTop.row = -1; + rightTop.col = -1; + var rows = this._layerSize.height, cols = this._layerSize.width; + this._topOffset = 0; + this._downOffset = 0; + this._leftOffset = 0; + this._rightOffset = 0; + this._hasAniGrid = false; + for (var row = 0; row < rows; ++row) for (var col = 0; col < cols; ++col) this._updateVertex(col, row); + this._verticesDirty = false; + }, + getTiledTileAt: function getTiledTileAt(x, y, forceCreate) { + if (this._isInvalidPosition(x, y)) throw new Error("TiledLayer.getTiledTileAt: invalid position"); + if (!this._tiles) { + cc.logID(7236); + return null; + } + var index = Math.floor(x) + Math.floor(y) * this._layerSize.width; + var tile = this._tiledTiles[index]; + if (!tile && forceCreate) { + var node = new cc.Node(); + tile = node.addComponent(cc.TiledTile); + tile._x = x; + tile._y = y; + tile._layer = this; + tile._updateInfo(); + node.parent = this.node; + return tile; + } + return tile; + }, + setTiledTileAt: function setTiledTileAt(x, y, tiledTile) { + if (this._isInvalidPosition(x, y)) throw new Error("TiledLayer.setTiledTileAt: invalid position"); + if (!this._tiles) { + cc.logID(7236); + return null; + } + var index = Math.floor(x) + Math.floor(y) * this._layerSize.width; + this._tiledTiles[index] = tiledTile; + this._cullingDirty = true; + this._hasTiledNodeGrid = !!tiledTile || this._tiledTiles.some((function (tiledNode, index) { + return !!tiledNode; + })); + return tiledTile; + }, + getTexture: function getTexture(index) { + index = index || 0; + if (this._textures && index >= 0 && this._textures.length > index) return this._textures[index]; + return null; + }, + getTextures: function getTextures() { + return this._textures; + }, + setTexture: function setTexture(texture) { + this.setTextures([texture]); + }, + setTextures: function setTextures(textures) { + this._textures = textures; + this._activateMaterial(); + }, + getLayerSize: function getLayerSize() { + return this._layerSize; + }, + getMapTileSize: function getMapTileSize() { + return this._mapTileSize; + }, + getTileSet: function getTileSet(index) { + index = index || 0; + if (this._tilesets && index >= 0 && this._tilesets.length > index) return this._tilesets[index]; + return null; + }, + getTileSets: function getTileSets() { + return this._tilesets; + }, + setTileSet: function setTileSet(tileset) { + this.setTileSets([tileset]); + }, + setTileSets: function setTileSets(tilesets) { + this._tilesets = tilesets; + var textures = this._textures = []; + var texGrids = this._texGrids = []; + for (var i = 0; i < tilesets.length; i++) { + var tileset = tilesets[i]; + tileset && (textures[i] = tileset.sourceImage); + } + cc.TiledMap.loadAllTextures(textures, function () { + for (var _i = 0, l = tilesets.length; _i < l; ++_i) { + var tilesetInfo = tilesets[_i]; + if (!tilesetInfo) continue; + cc.TiledMap.fillTextureGrids(tilesetInfo, texGrids, _i); + } + this._prepareToRender(); + }.bind(this)); + }, + _traverseAllGrid: function _traverseAllGrid() { + var tiles = this._tiles; + var texGrids = this._texGrids; + var tilesetIndexArr = this._tilesetIndexArr; + var tilesetIndexToArrIndex = this._tilesetIndexToArrIndex = {}; + var TiledMap = cc.TiledMap; + var TileFlag = TiledMap.TileFlag; + var FLIPPED_MASK = TileFlag.FLIPPED_MASK; + tilesetIndexArr.length = 0; + for (var i = 0; i < tiles.length; i++) { + var gid = tiles[i]; + if (0 === gid) continue; + gid = (gid & FLIPPED_MASK) >>> 0; + var grid = texGrids[gid]; + if (!grid) { + cc.error("CCTiledLayer:_traverseAllGrid grid is null, gid is:", gid); + continue; + } + var tilesetIdx = grid.texId; + if (void 0 !== tilesetIndexToArrIndex[tilesetIdx]) continue; + tilesetIndexToArrIndex[tilesetIdx] = tilesetIndexArr.length; + tilesetIndexArr.push(tilesetIdx); + } + }, + _init: function _init(layerInfo, mapInfo, tilesets, textures, texGrids) { + this._cullingDirty = true; + this._layerInfo = layerInfo; + this._mapInfo = mapInfo; + var size = layerInfo._layerSize; + this._layerName = layerInfo.name; + this._tiles = layerInfo._tiles; + this._properties = layerInfo.properties; + this._layerSize = size; + this._minGID = layerInfo._minGID; + this._maxGID = layerInfo._maxGID; + this._opacity = layerInfo._opacity; + this._renderOrder = mapInfo.renderOrder; + this._staggerAxis = mapInfo.getStaggerAxis(); + this._staggerIndex = mapInfo.getStaggerIndex(); + this._hexSideLength = mapInfo.getHexSideLength(); + this._animations = mapInfo.getTileAnimations(); + this._tilesets = tilesets; + this._textures = textures; + this._texGrids = texGrids; + this._layerOrientation = mapInfo.orientation; + this._mapTileSize = mapInfo.getTileSize(); + var maptw = this._mapTileSize.width; + var mapth = this._mapTileSize.height; + var layerW = this._layerSize.width; + var layerH = this._layerSize.height; + if (this._layerOrientation === cc.TiledMap.Orientation.HEX) { + var TiledMap = cc.TiledMap; + var StaggerAxis = TiledMap.StaggerAxis; + var StaggerIndex = TiledMap.StaggerIndex; + var width = 0, height = 0; + this._odd_even = this._staggerIndex === StaggerIndex.STAGGERINDEX_ODD ? 1 : -1; + if (this._staggerAxis === StaggerAxis.STAGGERAXIS_X) { + this._diffX1 = (maptw - this._hexSideLength) / 2; + this._diffY1 = 0; + height = mapth * (layerH + .5); + width = (maptw + this._hexSideLength) * Math.floor(layerW / 2) + maptw * (layerW % 2); + } else { + this._diffX1 = 0; + this._diffY1 = (mapth - this._hexSideLength) / 2; + width = maptw * (layerW + .5); + height = (mapth + this._hexSideLength) * Math.floor(layerH / 2) + mapth * (layerH % 2); + } + this.node.setContentSize(width, height); + } else if (this._layerOrientation === cc.TiledMap.Orientation.ISO) { + var wh = layerW + layerH; + this.node.setContentSize(.5 * maptw * wh, .5 * mapth * wh); + } else this.node.setContentSize(layerW * maptw, layerH * mapth); + this._offset = cc.v2(layerInfo.offset.x, -layerInfo.offset.y); + this._useAutomaticVertexZ = false; + this._vertexZvalue = 0; + this._syncAnchorPoint(); + this._prepareToRender(); + }, + _prepareToRender: function _prepareToRender() { + this._updateVertices(); + this._traverseAllGrid(); + this._updateAllUserNode(); + this._activateMaterial(); + }, + _buildMaterial: function _buildMaterial(tilesetIdx) { + var texIdMatIdx = this._texIdToMatIndex; + if (void 0 !== texIdMatIdx[tilesetIdx]) return null; + var tilesetIndexArr = this._tilesetIndexArr; + var tilesetIndexToArrIndex = this._tilesetIndexToArrIndex; + var index = tilesetIndexToArrIndex[tilesetIdx]; + if (void 0 === index) { + tilesetIndexToArrIndex[tilesetIdx] = index = tilesetIndexArr.length; + tilesetIndexArr.push(tilesetIdx); + } + var texture = this._textures[tilesetIdx]; + var material = this._materials[index]; + material || (material = Material.getBuiltinMaterial("2d-sprite")); + material = _materialVariant["default"].create(material, this); + material.define("CC_USE_MODEL", true); + material.setProperty("texture", texture); + this._materials[index] = material; + texIdMatIdx[tilesetIdx] = index; + return material; + }, + _activateMaterial: function _activateMaterial() { + var tilesetIndexArr = this._tilesetIndexArr; + if (0 === tilesetIndexArr.length) { + this.disableRender(); + return; + } + var matLen = tilesetIndexArr.length; + for (var i = 0; i < matLen; i++) this._buildMaterial(tilesetIndexArr[i]); + this._materials.length = matLen; + this.markForRender(true); + } + }); + cc.TiledLayer = module.exports = TiledLayer; + }), { + "../core/assets/material/CCMaterial": 124, + "../core/assets/material/material-variant": 131, + "../core/components/CCRenderComponent": 160, + "../core/renderer/render-flow": 272, + "../core/value-types": 339 + }], + 399: [(function (require, module, exports) { + "use strict"; + require("./CCTMXXMLParser"); + require("./CCTiledMapAsset"); + require("./CCTiledLayer"); + require("./CCTiledTile"); + require("./CCTiledObjectGroup"); + var Orientation = cc.Enum({ + ORTHO: 0, + HEX: 1, + ISO: 2 + }); + var Property = cc.Enum({ + NONE: 0, + MAP: 1, + LAYER: 2, + OBJECTGROUP: 3, + OBJECT: 4, + TILE: 5 + }); + var TileFlag = cc.Enum({ + HORIZONTAL: 2147483648, + VERTICAL: 1073741824, + DIAGONAL: 536870912, + FLIPPED_ALL: 4026531840, + FLIPPED_MASK: 268435455 + }); + var StaggerAxis = cc.Enum({ + STAGGERAXIS_X: 0, + STAGGERAXIS_Y: 1 + }); + var StaggerIndex = cc.Enum({ + STAGGERINDEX_ODD: 0, + STAGGERINDEX_EVEN: 1 + }); + var RenderOrder = cc.Enum({ + RightDown: 0, + RightUp: 1, + LeftDown: 2, + LeftUp: 3 + }); + var TMXObjectType = cc.Enum({ + RECT: 0, + ELLIPSE: 1, + POLYGON: 2, + POLYLINE: 3, + IMAGE: 4, + TEXT: 5 + }); + var TiledMap = cc.Class({ + name: "cc.TiledMap", + extends: cc.Component, + editor: false, + ctor: function ctor() { + this._texGrids = []; + this._textures = []; + this._tilesets = []; + this._animations = []; + this._imageLayers = []; + this._layers = []; + this._groups = []; + this._images = []; + this._properties = []; + this._tileProperties = []; + this._mapSize = cc.size(0, 0); + this._tileSize = cc.size(0, 0); + }, + statics: { + Orientation: Orientation, + Property: Property, + TileFlag: TileFlag, + StaggerAxis: StaggerAxis, + StaggerIndex: StaggerIndex, + TMXObjectType: TMXObjectType, + RenderOrder: RenderOrder + }, + properties: { + _tmxFile: { + default: null, + type: cc.TiledMapAsset + }, + tmxAsset: { + get: function get() { + return this._tmxFile; + }, + set: function set(value, force) { + if (this._tmxFile !== value || false) { + this._tmxFile = value; + this._applyFile(); + } + }, + type: cc.TiledMapAsset + } + }, + getMapSize: function getMapSize() { + return this._mapSize; + }, + getTileSize: function getTileSize() { + return this._tileSize; + }, + getMapOrientation: function getMapOrientation() { + return this._mapOrientation; + }, + getObjectGroups: function getObjectGroups() { + return this._groups; + }, + getObjectGroup: function getObjectGroup(groupName) { + var groups = this._groups; + for (var i = 0, l = groups.length; i < l; i++) { + var group = groups[i]; + if (group && group.getGroupName() === groupName) return group; + } + return null; + }, + enableCulling: function enableCulling(value) { + var layers = this._layers; + for (var i = 0; i < layers.length; ++i) layers[i].enableCulling(value); + }, + getProperties: function getProperties() { + return this._properties; + }, + getLayers: function getLayers() { + return this._layers; + }, + getLayer: function getLayer(layerName) { + var layers = this._layers; + for (var i = 0, l = layers.length; i < l; i++) { + var layer = layers[i]; + if (layer && layer.getLayerName() === layerName) return layer; + } + return null; + }, + _changeLayer: function _changeLayer(layerName, replaceLayer) { + var layers = this._layers; + for (var i = 0, l = layers.length; i < l; i++) { + var layer = layers[i]; + if (layer && layer.getLayerName() === layerName) { + layers[i] = replaceLayer; + return; + } + } + }, + getProperty: function getProperty(propertyName) { + return this._properties[propertyName.toString()]; + }, + getPropertiesForGID: function getPropertiesForGID(GID) { + return this._tileProperties[GID]; + }, + __preload: function __preload() { + this._tmxFile && this._applyFile(); + }, + onEnable: function onEnable() { + this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this); + }, + onDisable: function onDisable() { + this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this); + }, + _applyFile: function _applyFile() { + var file = this._tmxFile; + if (file) { + var texValues = file.textures; + var texKeys = file.textureNames; + var texSizes = file.textureSizes; + var textures = {}; + var textureSizes = {}; + for (var i = 0; i < texValues.length; ++i) { + var texName = texKeys[i]; + textures[texName] = texValues[i]; + textureSizes[texName] = texSizes[i]; + } + var imageLayerTextures = {}; + texValues = file.imageLayerTextures; + texKeys = file.imageLayerTextureNames; + for (var _i = 0; _i < texValues.length; ++_i) imageLayerTextures[texKeys[_i]] = texValues[_i]; + var tsxFileNames = file.tsxFileNames; + var tsxFiles = file.tsxFiles; + var tsxMap = {}; + for (var _i2 = 0; _i2 < tsxFileNames.length; ++_i2) tsxFileNames[_i2].length > 0 && (tsxMap[tsxFileNames[_i2]] = tsxFiles[_i2].text); + var mapInfo = new cc.TMXMapInfo(file.tmxXmlStr, tsxMap, textures, textureSizes, imageLayerTextures); + var tilesets = mapInfo.getTilesets(); + tilesets && 0 !== tilesets.length || cc.logID(7241); + this._buildWithMapInfo(mapInfo); + } else this._releaseMapInfo(); + }, + _releaseMapInfo: function _releaseMapInfo() { + var layers = this._layers; + for (var i = 0, l = layers.length; i < l; i++) { + layers[i].node.removeFromParent(true); + layers[i].node.destroy(); + } + layers.length = 0; + var groups = this._groups; + for (var _i3 = 0, _l = groups.length; _i3 < _l; _i3++) { + groups[_i3].node.removeFromParent(true); + groups[_i3].node.destroy(); + } + groups.length = 0; + var images = this._images; + for (var _i4 = 0, _l2 = images.length; _i4 < _l2; _i4++) { + images[_i4].removeFromParent(true); + images[_i4].destroy(); + } + images.length = 0; + }, + _syncAnchorPoint: function _syncAnchorPoint() { + var anchor = this.node.getAnchorPoint(); + var leftTopX = this.node.width * anchor.x; + var leftTopY = this.node.height * (1 - anchor.y); + var i, l; + for (i = 0, l = this._layers.length; i < l; i++) { + var layerInfo = this._layers[i]; + var layerNode = layerInfo.node; + layerNode.setAnchorPoint(anchor); + } + for (i = 0, l = this._groups.length; i < l; i++) { + var groupInfo = this._groups[i]; + var groupNode = groupInfo.node; + groupNode.anchorX = .5; + groupNode.anchorY = .5; + groupNode.x = groupInfo._offset.x - leftTopX + groupNode.width * groupNode.anchorX; + groupNode.y = groupInfo._offset.y + leftTopY - groupNode.height * groupNode.anchorY; + } + for (i = 0, l = this._images.length; i < l; i++) { + var image = this._images[i]; + image.anchorX = .5; + image.anchorY = .5; + image.x = image._offset.x - leftTopX + image.width * image.anchorX; + image.y = image._offset.y + leftTopY - image.height * image.anchorY; + } + }, + _fillAniGrids: function _fillAniGrids(texGrids, animations) { + for (var i in animations) { + var animation = animations[i]; + if (!animation) continue; + var frames = animation.frames; + for (var j = 0; j < frames.length; j++) { + var frame = frames[j]; + frame.grid = texGrids[frame.tileid]; + } + } + }, + _buildLayerAndGroup: function _buildLayerAndGroup() { + var tilesets = this._tilesets; + var texGrids = this._texGrids; + var animations = this._animations; + texGrids.length = 0; + for (var i = 0, l = tilesets.length; i < l; ++i) { + var tilesetInfo = tilesets[i]; + if (!tilesetInfo) continue; + cc.TiledMap.fillTextureGrids(tilesetInfo, texGrids, i); + } + this._fillAniGrids(texGrids, animations); + var layers = this._layers; + var groups = this._groups; + var images = this._images; + var oldNodeNames = {}; + for (var _i5 = 0, n = layers.length; _i5 < n; _i5++) oldNodeNames[layers[_i5].node._name] = true; + for (var _i6 = 0, _n = groups.length; _i6 < _n; _i6++) oldNodeNames[groups[_i6].node._name] = true; + for (var _i7 = 0, _n2 = images.length; _i7 < _n2; _i7++) oldNodeNames[images[_i7]._name] = true; + layers = this._layers = []; + groups = this._groups = []; + images = this._images = []; + var mapInfo = this._mapInfo; + var node = this.node; + var layerInfos = mapInfo.getAllChildren(); + var textures = this._textures; + var maxWidth = 0; + var maxHeight = 0; + if (layerInfos && layerInfos.length > 0) for (var _i8 = 0, len = layerInfos.length; _i8 < len; _i8++) { + var layerInfo = layerInfos[_i8]; + var name = layerInfo.name; + var child = this.node.getChildByName(name); + oldNodeNames[name] = false; + if (!child) { + child = new cc.Node(); + child.name = name; + node.addChild(child); + } + child.setSiblingIndex(_i8); + child.active = layerInfo.visible; + if (layerInfo instanceof cc.TMXLayerInfo) { + var layer = child.getComponent(cc.TiledLayer); + layer || (layer = child.addComponent(cc.TiledLayer)); + layer._init(layerInfo, mapInfo, tilesets, textures, texGrids); + layerInfo.ownTiles = false; + layers.push(layer); + } else if (layerInfo instanceof cc.TMXObjectGroupInfo) { + var group = child.getComponent(cc.TiledObjectGroup); + group || (group = child.addComponent(cc.TiledObjectGroup)); + group._init(layerInfo, mapInfo, texGrids); + groups.push(group); + } else if (layerInfo instanceof cc.TMXImageLayerInfo) { + var texture = layerInfo.sourceImage; + child.opacity = layerInfo.opacity; + child.layerInfo = layerInfo; + child._offset = cc.v2(layerInfo.offset.x, -layerInfo.offset.y); + var image = child.getComponent(cc.Sprite); + image || (image = child.addComponent(cc.Sprite)); + var spf = image.spriteFrame || new cc.SpriteFrame(); + spf.setTexture(texture); + image.spriteFrame = spf; + child.width = texture.width; + child.height = texture.height; + images.push(child); + } + maxWidth = Math.max(maxWidth, child.width); + maxHeight = Math.max(maxHeight, child.height); + } + var children = node.children; + for (var _i9 = 0, _n3 = children.length; _i9 < _n3; _i9++) { + var c = children[_i9]; + oldNodeNames[c._name] && c.destroy(); + } + this.node.width = maxWidth; + this.node.height = maxHeight; + this._syncAnchorPoint(); + }, + _buildWithMapInfo: function _buildWithMapInfo(mapInfo) { + this._mapInfo = mapInfo; + this._mapSize = mapInfo.getMapSize(); + this._tileSize = mapInfo.getTileSize(); + this._mapOrientation = mapInfo.orientation; + this._properties = mapInfo.properties; + this._tileProperties = mapInfo.getTileProperties(); + this._imageLayers = mapInfo.getImageLayers(); + this._animations = mapInfo.getTileAnimations(); + this._tilesets = mapInfo.getTilesets(); + var tilesets = this._tilesets; + this._textures.length = 0; + var totalTextures = []; + for (var i = 0, l = tilesets.length; i < l; ++i) { + var tilesetInfo = tilesets[i]; + if (!tilesetInfo || !tilesetInfo.sourceImage) continue; + this._textures[i] = tilesetInfo.sourceImage; + totalTextures.push(tilesetInfo.sourceImage); + } + for (var _i10 = 0; _i10 < this._imageLayers.length; _i10++) { + var imageLayer = this._imageLayers[_i10]; + if (!imageLayer || !imageLayer.sourceImage) continue; + totalTextures.push(imageLayer.sourceImage); + } + cc.TiledMap.loadAllTextures(totalTextures, function () { + this._buildLayerAndGroup(); + }.bind(this)); + }, + update: function update(dt) { + var animations = this._animations; + var texGrids = this._texGrids; + for (var aniGID in animations) { + var animation = animations[aniGID]; + var frames = animation.frames; + var frame = frames[animation.frameIdx]; + animation.dt += dt; + if (frame.duration < animation.dt) { + animation.dt = 0; + animation.frameIdx++; + animation.frameIdx >= frames.length && (animation.frameIdx = 0); + frame = frames[animation.frameIdx]; + } + texGrids[aniGID] = frame.grid; + } + } + }); + cc.TiledMap = module.exports = TiledMap; + cc.TiledMap.loadAllTextures = function (textures, loadedCallback) { + var totalNum = textures.length; + if (0 === totalNum) { + loadedCallback(); + return; + } + var curNum = 0; + var itemCallback = function itemCallback() { + curNum++; + curNum >= totalNum && loadedCallback(); + }; + for (var i = 0; i < totalNum; i++) { + var tex = textures[i]; + tex.loaded ? itemCallback() : tex.once("load", (function () { + itemCallback(); + })); + } + }; + cc.TiledMap.fillTextureGrids = function (tileset, texGrids, texId) { + var tex = tileset.sourceImage; + if (!tileset.imageSize.width || !tileset.imageSize.height) { + tileset.imageSize.width = tex.width; + tileset.imageSize.height = tex.height; + } + var tw = tileset._tileSize.width, th = tileset._tileSize.height, imageW = tex.width, imageH = tex.height, spacing = tileset.spacing, margin = tileset.margin, cols = Math.floor((imageW - 2 * margin + spacing) / (tw + spacing)), rows = Math.floor((imageH - 2 * margin + spacing) / (th + spacing)), count = rows * cols, gid = tileset.firstGid, grid = null, override = !!texGrids[gid], texelCorrect = cc.macro.FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX ? .5 : 0; + count <= 0 && (count = 1); + var maxGid = tileset.firstGid + count; + for (; gid < maxGid; ++gid) { + override && !texGrids[gid] && (override = false); + if (!override && texGrids[gid]) break; + grid = { + texId: texId, + tileset: tileset, + x: 0, + y: 0, + width: tw, + height: th, + t: 0, + l: 0, + r: 0, + b: 0, + gid: gid + }; + tileset.rectForGID(gid, grid); + grid.x += texelCorrect; + grid.y += texelCorrect; + grid.width -= 2 * texelCorrect; + grid.height -= 2 * texelCorrect; + grid.t = grid.y / imageH; + grid.l = grid.x / imageW; + grid.r = (grid.x + grid.width) / imageW; + grid.b = (grid.y + grid.height) / imageH; + texGrids[gid] = grid; + } + }; + cc.js.obsolete(cc.TiledMap.prototype, "cc.TiledMap.tmxFile", "tmxAsset", true); + cc.js.get(cc.TiledMap.prototype, "mapLoaded", (function () { + cc.errorID(7203); + return []; + }), false); + }), { + "./CCTMXXMLParser": 397, + "./CCTiledLayer": 398, + "./CCTiledMapAsset": 400, + "./CCTiledObjectGroup": 402, + "./CCTiledTile": 403 + }], + 400: [(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; + }), {}], + 401: [(function (require, module, exports) { + "use strict"; + var _inputAssembler = _interopRequireDefault(require("../renderer/core/input-assembler")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + var TiledMapRenderDataList = cc.Class({ + name: "cc.TiledMapRenderDataList", + ctor: function ctor() { + this._dataList = []; + this._offset = 0; + }, + _pushRenderData: function _pushRenderData() { + var renderData = {}; + renderData.ia = new _inputAssembler["default"](); + renderData.nodesRenderList = []; + this._dataList.push(renderData); + }, + popRenderData: function popRenderData(buffer) { + this._offset >= this._dataList.length && this._pushRenderData(); + var renderData = this._dataList[this._offset]; + renderData.nodesRenderList.length = 0; + var ia = renderData.ia; + ia._vertexBuffer = buffer._vb; + ia._indexBuffer = buffer._ib; + ia._start = buffer.indiceOffset; + ia._count = 0; + this._offset++; + return renderData; + }, + pushNodesList: function pushNodesList(renderData, nodesList) { + renderData.nodesRenderList.push(nodesList); + }, + reset: function reset() { + this._offset = 0; + } + }); + cc.TiledMapRenderDataList = module.exports = TiledMapRenderDataList; + }), { + "../renderer/core/input-assembler": 362 + }], + 402: [(function (require, module, exports) { + "use strict"; + var TiledObjectGroup = cc.Class({ + name: "cc.TiledObjectGroup", + extends: cc.Component, + getPositionOffset: function getPositionOffset() { + return this._positionOffset; + }, + getProperties: function getProperties() { + this._properties; + }, + getGroupName: function getGroupName() { + return this._groupName; + }, + getProperty: function getProperty(propertyName) { + return this._properties[propertyName.toString()]; + }, + getObject: function getObject(objectName) { + for (var i = 0, len = this._objects.length; i < len; i++) { + var obj = this._objects[i]; + if (obj && obj.name === objectName) return obj; + } + return null; + }, + getObjects: function getObjects() { + return this._objects; + }, + _init: function _init(groupInfo, mapInfo, texGrids) { + var TiledMap = cc.TiledMap; + var TMXObjectType = TiledMap.TMXObjectType; + var Orientation = TiledMap.Orientation; + var StaggerAxis = TiledMap.StaggerAxis; + var TileFlag = TiledMap.TileFlag; + var FLIPPED_MASK = TileFlag.FLIPPED_MASK; + var FLAG_HORIZONTAL = TileFlag.HORIZONTAL; + var FLAG_VERTICAL = TileFlag.VERTICAL; + this._groupName = groupInfo.name; + this._positionOffset = groupInfo.offset; + this._mapInfo = mapInfo; + this._properties = groupInfo.getProperties(); + this._offset = cc.v2(groupInfo.offset.x, -groupInfo.offset.y); + this._opacity = groupInfo._opacity; + var mapSize = mapInfo._mapSize; + var tileSize = mapInfo._tileSize; + var width = 0, height = 0; + if (mapInfo.orientation === Orientation.HEX) if (mapInfo.getStaggerAxis() === StaggerAxis.STAGGERAXIS_X) { + height = tileSize.height * (mapSize.height + .5); + width = (tileSize.width + mapInfo.getHexSideLength()) * Math.floor(mapSize.width / 2) + tileSize.width * (mapSize.width % 2); + } else { + width = tileSize.width * (mapSize.width + .5); + height = (tileSize.height + mapInfo.getHexSideLength()) * Math.floor(mapSize.height / 2) + tileSize.height * (mapSize.height % 2); + } else if (mapInfo.orientation === Orientation.ISO) { + var wh = mapSize.width + mapSize.height; + width = .5 * tileSize.width * wh; + height = .5 * tileSize.height * wh; + } else { + width = mapSize.width * tileSize.width; + height = mapSize.height * tileSize.height; + } + this.node.setContentSize(width, height); + var leftTopX = width * this.node.anchorX; + var leftTopY = height * (1 - this.node.anchorY); + var objects = groupInfo._objects; + var aliveNodes = {}; + for (var i = 0, l = objects.length; i < l; i++) { + var object = objects[i]; + var objType = object.type; + object.offset = cc.v2(object.x, object.y); + var points = object.points || object.polylinePoints; + if (points) for (var pi = 0; pi < points.length; pi++) points[pi].y *= -1; + if (Orientation.ISO !== mapInfo.orientation) object.y = height - object.y; else { + var posIdxX = object.x / tileSize.height; + var posIdxY = object.y / tileSize.height; + object.x = .5 * tileSize.width * (mapSize.height + posIdxX - posIdxY); + object.y = .5 * tileSize.height * (mapSize.width + mapSize.height - posIdxX - posIdxY); + } + if (objType === TMXObjectType.TEXT) { + var textName = "text" + object.id; + aliveNodes[textName] = true; + var textNode = this.node.getChildByName(textName); + textNode || (textNode = new cc.Node()); + textNode.active = object.visible; + textNode.anchorX = 0; + textNode.anchorY = 1; + textNode.angle = -object.rotation; + textNode.x = object.x - leftTopX; + textNode.y = object.y - leftTopY; + textNode.name = textName; + textNode.parent = this.node; + textNode.color = object.color; + textNode.opacity = this._opacity; + textNode.setSiblingIndex(i); + var label = textNode.getComponent(cc.Label); + label || (label = textNode.addComponent(cc.Label)); + label.overflow = cc.Label.Overflow.SHRINK; + label.lineHeight = object.height; + label.string = object.text; + label.horizontalAlign = object.halign; + label.verticalAlign = object.valign; + label.fontSize = object.pixelsize; + textNode.width = object.width; + textNode.height = object.height; + } + if (objType === TMXObjectType.IMAGE) { + var gid = object.gid; + var grid = texGrids[(gid & FLIPPED_MASK) >>> 0]; + if (!grid) continue; + var tileset = grid.tileset; + var imgName = "img" + object.id; + aliveNodes[imgName] = true; + var imgNode = this.node.getChildByName(imgName); + var imgWidth = object.width || grid.width; + var imgHeight = object.height || grid.height; + var tileOffsetX = tileset.tileOffset.x; + var tileOffsetY = tileset.tileOffset.y; + if (imgNode instanceof cc.PrivateNode) { + imgNode.removeFromParent(); + imgNode.destroy(); + imgNode = null; + } + imgNode || (imgNode = new cc.Node()); + if (Orientation.ISO == mapInfo.orientation) { + imgNode.anchorX = .5 + tileOffsetX / imgWidth; + imgNode.anchorY = tileOffsetY / imgHeight; + } else { + imgNode.anchorX = tileOffsetX / imgWidth; + imgNode.anchorY = tileOffsetY / imgHeight; + } + imgNode.active = object.visible; + imgNode.angle = -object.rotation; + imgNode.x = object.x - leftTopX; + imgNode.y = object.y - leftTopY; + imgNode.name = imgName; + imgNode.parent = this.node; + imgNode.opacity = this._opacity; + imgNode.setSiblingIndex(i); + var sp = imgNode.getComponent(cc.Sprite); + sp || (sp = imgNode.addComponent(cc.Sprite)); + var spf = sp.spriteFrame; + spf || (spf = new cc.SpriteFrame()); + (gid & FLAG_HORIZONTAL) >>> 0 ? spf.setFlipX(true) : spf.setFlipX(false); + (gid & FLAG_VERTICAL) >>> 0 ? spf.setFlipY(true) : spf.setFlipY(false); + spf.setTexture(grid.tileset.sourceImage, cc.rect(grid)); + sp.spriteFrame = spf; + sp.setVertsDirty(); + imgNode.width = imgWidth; + imgNode.height = imgHeight; + } + } + this._objects = objects; + var children = this.node.children; + var uselessExp = /^(?:img|text)\d+$/; + for (var _i = 0, n = children.length; _i < n; _i++) { + var c = children[_i]; + var cName = c._name; + var isUseless = uselessExp.test(cName); + isUseless && !aliveNodes[cName] && c.destroy(); + } + } + }); + cc.TiledObjectGroup = module.exports = TiledObjectGroup; + }), {}], + 403: [(function (require, module, exports) { + "use strict"; + var TiledTile = cc.Class({ + name: "cc.TiledTile", + extends: cc.Component, + editor: false, + ctor: function ctor() { + this._layer = null; + }, + properties: { + _x: 0, + _y: 0, + x: { + get: function get() { + return this._x; + }, + set: function set(value) { + if (value === this._x) return; + if (this._layer && this._layer._isInvalidPosition(value, this._y)) { + cc.warn("Invalid x, the valid value is between [%s] ~ [%s]", 0, this._layer._layerSize.width); + return; + } + this._resetTile(); + this._x = value; + this._updateInfo(); + }, + type: cc.Integer + }, + y: { + get: function get() { + return this._y; + }, + set: function set(value) { + if (value === this._y) return; + if (this._layer && this._layer._isInvalidPosition(this._x, value)) { + cc.warn("Invalid y, the valid value is between [%s] ~ [%s]", 0, this._layer._layerSize.height); + return; + } + this._resetTile(); + this._y = value; + this._updateInfo(); + }, + type: cc.Integer + }, + gid: { + get: function get() { + if (this._layer) return this._layer.getTileGIDAt(this._x, this._y); + return 0; + }, + set: function set(value) { + this._layer && this._layer.setTileGIDAt(value, this._x, this._y); + }, + type: cc.Integer + } + }, + onEnable: function onEnable() { + var parent = this.node.parent; + this._layer = parent.getComponent(cc.TiledLayer); + this._resetTile(); + this._updateInfo(); + }, + onDisable: function onDisable() { + this._resetTile(); + }, + _resetTile: function _resetTile() { + this._layer && this._layer.getTiledTileAt(this._x, this._y) === this && this._layer.setTiledTileAt(this._x, this._y, null); + }, + _updateInfo: function _updateInfo() { + if (!this._layer) return; + var x = this._x, y = this._y; + if (this._layer.getTiledTileAt(x, y)) { + cc.warn("There is already a TiledTile at [%s, %s]", x, y); + return; + } + this.node.setPosition(this._layer.getPositionAt(x, y)); + this._layer.setTiledTileAt(x, y, this); + } + }); + cc.TiledTile = module.exports = TiledTile; + }), {}], + 404: [(function (require, module, exports) { + "use strict"; + require("./CCTiledMap"); + require("./CCTiledMapRenderDataList"); + require("./tiledmap-buffer"); + require("./tmx-layer-assembler"); + }), { + "./CCTiledMap": 399, + "./CCTiledMapRenderDataList": 401, + "./tiledmap-buffer": 405, + "./tmx-layer-assembler": 406 + }], + 405: [(function (require, module, exports) { + "use strict"; + var TiledMapBuffer = cc.Class({ + name: "cc.TiledMapBuffer", + extends: require("../core/renderer/webgl/quad-buffer"), + _updateOffset: function _updateOffset() { + 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.indiceStart = this.indiceOffset; + this.byteOffset = this.byteOffset + vertexCount * this._vertexBytes; + this._dirty = true; + } + }); + cc.TiledMapBuffer = module.exports = TiledMapBuffer; + }), { + "../core/renderer/webgl/quad-buffer": 310 + }], + 406: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("../core/renderer/assembler")); + var _valueTypes = require("../core/value-types"); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var TiledLayer = require("./CCTiledLayer"); + var TiledMap = require("./CCTiledMap"); + var TileFlag = TiledMap.TileFlag; + var FLIPPED_MASK = TileFlag.FLIPPED_MASK; + var renderer = require("../core/renderer/"); + var vfmtPosUvColor = require("../core/renderer/webgl/vertex-format").vfmtPosUvColor; + var MaxGridsLimit = parseInt(10922.5); + var RenderOrder = TiledMap.RenderOrder; + var RenderFlow = require("../core/renderer/render-flow"); + var _mat4_temp = cc.mat4(); + var _vec3_temp = cc.v3(); + var _leftDown = { + row: 0, + col: 0 + }; + var _uva = { + x: 0, + y: 0 + }; + var _uvb = { + x: 0, + y: 0 + }; + var _uvc = { + x: 0, + y: 0 + }; + var _uvd = { + x: 0, + y: 0 + }; + var _renderData = null, _ia = null, _fillGrids = 0, _vfOffset = 0, _moveX = 0, _moveY = 0, _layerMat = null, _renderer = null, _renderDataList = null, _buffer = null, _curMaterial = null, _comp = null, _vbuf = null, _uintbuf = null; + function _visitUserNode(userNode) { + false; + userNode._updateLocalMatrix(); + _valueTypes.Mat4.mul(userNode._worldMatrix, _layerMat, userNode._matrix); + userNode._renderFlag &= ~(RenderFlow.FLAG_TRANSFORM | RenderFlow.FLAG_BREAK_FLOW); + RenderFlow.visitRootNode(userNode); + userNode._renderFlag |= RenderFlow.FLAG_BREAK_FLOW; + } + function _flush() { + if (0 === _ia._count) return; + _renderer.material = _renderData.material; + _renderer.node = _comp.node; + _renderer._flushIA(_renderData.ia); + var needSwitchBuffer = _fillGrids >= MaxGridsLimit; + if (needSwitchBuffer) { + _buffer.uploadData(); + _buffer.switchBuffer(); + _vbuf = _buffer._vData; + _uintbuf = _buffer._uintVData; + _renderData = _renderDataList.popRenderData(_buffer); + _ia = _renderData.ia; + _vfOffset = 0; + _fillGrids = 0; + } else { + _renderData = _renderDataList.popRenderData(_buffer); + _ia = _renderData.ia; + } + _renderData.material = _curMaterial; + } + function _renderNodes(nodeRow, nodeCol) { + var nodesInfo = _comp._getNodesByRowCol(nodeRow, nodeCol); + if (!nodesInfo || 0 == nodesInfo.count) return; + var nodesList = nodesInfo.list; + var newIdx = 0, oldIdx = 0; + _flush(); + _renderer.worldMatDirty++; + for (; newIdx < nodesInfo.count;) { + var dataComp = nodesList[oldIdx]; + oldIdx++; + if (!dataComp) continue; + _visitUserNode(dataComp.node); + if (newIdx !== oldIdx) { + nodesList[newIdx] = dataComp; + dataComp._index = newIdx; + } + newIdx++; + } + nodesList.length = newIdx; + _renderer.worldMatDirty--; + _renderDataList.pushNodesList(_renderData, nodesList); + _renderer._flush(); + _renderer.node = _comp.node; + } + function _flipTexture(inGrid, gid) { + _uva.x = inGrid.l; + _uva.y = inGrid.t; + _uvb.x = inGrid.r; + _uvb.y = inGrid.t; + _uvc.x = inGrid.l; + _uvc.y = inGrid.b; + _uvd.x = inGrid.r; + _uvd.y = inGrid.b; + var tempVal = null; + if ((gid & TileFlag.DIAGONAL) >>> 0) { + tempVal = _uvb; + _uvb = _uvc; + _uvc = tempVal; + } + if ((gid & TileFlag.HORIZONTAL) >>> 0) { + tempVal = _uva; + _uva = _uvb; + _uvb = tempVal; + tempVal = _uvc; + _uvc = _uvd; + _uvd = tempVal; + } + if ((gid & TileFlag.VERTICAL) >>> 0) { + tempVal = _uva; + _uva = _uvc; + _uvc = tempVal; + tempVal = _uvb; + _uvb = _uvd; + _uvd = tempVal; + } + } + var TmxAssembler = (function (_Assembler) { + _inheritsLoose(TmxAssembler, _Assembler); + function TmxAssembler() { + return _Assembler.apply(this, arguments) || this; + } + var _proto = TmxAssembler.prototype; + _proto.updateRenderData = function updateRenderData(comp) { + if (!comp._renderDataList) { + comp._buffer = new cc.TiledMapBuffer(renderer._handle, vfmtPosUvColor); + comp._renderDataList = new cc.TiledMapRenderDataList(); + } + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + var vertices = comp._vertices; + if (0 === vertices.length) return; + comp._updateCulling(); + var layerNode = comp.node; + _moveX = comp._leftDownToCenterX; + _moveY = comp._leftDownToCenterY; + _layerMat = layerNode._worldMatrix; + _renderer = renderer; + _comp = comp; + _renderDataList = comp._renderDataList; + _buffer = comp._buffer; + if (comp._isCullingDirty() || comp._isUserNodeDirty() || comp._hasAnimation() || comp._hasTiledNode()) { + _buffer.reset(); + var leftDown, rightTop; + if (comp._enableCulling) { + var cullingRect = comp._cullingRect; + leftDown = cullingRect.leftDown; + rightTop = cullingRect.rightTop; + } else { + leftDown = _leftDown; + rightTop = comp._rightTop; + } + var maxRows = rightTop.row - leftDown.row + 1; + var maxCols = rightTop.col - leftDown.col + 1; + var maxGrids = maxRows * maxCols; + maxGrids > MaxGridsLimit && (maxGrids = MaxGridsLimit); + _buffer.request(4 * maxGrids, 6 * maxGrids); + switch (comp._renderOrder) { + case RenderOrder.RightDown: + this.traverseGrids(leftDown, rightTop, -1, 1); + break; + + case RenderOrder.LeftDown: + this.traverseGrids(leftDown, rightTop, -1, -1); + break; + + case RenderOrder.RightUp: + this.traverseGrids(leftDown, rightTop, 1, 1); + break; + + case RenderOrder.LeftUp: + this.traverseGrids(leftDown, rightTop, 1, -1); + } + comp._setCullingDirty(false); + comp._setUserNodeDirty(false); + } else { + true; + var renderData = null; + var nodesRenderList = null; + var nodesList = null; + for (var i = 0; i < _renderDataList._offset; i++) { + renderData = _renderDataList._dataList[i]; + nodesRenderList = renderData.nodesRenderList; + if (nodesRenderList.length > 0) { + renderer.worldMatDirty++; + for (var j = 0; j < nodesRenderList.length; j++) { + nodesList = nodesRenderList[j]; + if (!nodesList) continue; + for (var idx = 0; idx < nodesList.length; idx++) { + var dataComp = nodesList[idx]; + if (!dataComp) continue; + _visitUserNode(dataComp.node); + } + } + renderer.worldMatDirty--; + renderer._flush(); + } + if (renderData.ia._count > 0) { + renderer.material = renderData.material; + renderer.node = layerNode; + renderer._flushIA(renderData.ia); + } + } + } + _renderData = null; + _ia = null; + _layerMat = null; + _renderer = null; + _renderDataList = null; + _buffer = null; + _curMaterial = null; + _comp = null; + _vbuf = null; + _uintbuf = null; + }; + _proto.traverseGrids = function traverseGrids(leftDown, rightTop, rowMoveDir, colMoveDir) { + _renderDataList.reset(); + if (rightTop.row < 0 || rightTop.col < 0) return; + _renderData = _renderDataList.popRenderData(_buffer); + _ia = _renderData.ia; + _vbuf = _buffer._vData; + _uintbuf = _buffer._uintVData; + _fillGrids = 0; + _vfOffset = 0; + _curMaterial = null; + var layerNode = _comp.node; + var pOpacity = layerNode.parent ? layerNode.parent._opacity / 255 : 1; + var opacity = pOpacity * layerNode._opacity; + layerNode._color._fastSetA(opacity); + var color = layerNode._color._val; + var tiledTiles = _comp._tiledTiles; + var texGrids = _comp._texGrids; + var tiles = _comp._tiles; + var texIdToMatIdx = _comp._texIdToMatIndex; + var mats = _comp._materials; + var vertices = _comp._vertices; + var rowData, col, cols, row, rows, colData, tileSize, grid = null, gid = 0; + var left = 0, bottom = 0, right = 0, top = 0; + var tiledNode = null, curTexIdx = -1, matIdx; + var colNodesCount = 0, checkColRange = true; + if (-1 == rowMoveDir) { + row = rightTop.row; + rows = leftDown.row; + } else { + row = leftDown.row; + rows = rightTop.row; + } + for (; (rows - row) * rowMoveDir >= 0; row += rowMoveDir) { + rowData = vertices[row]; + colNodesCount = _comp._getNodesCountByRow(row); + checkColRange = 0 == colNodesCount && void 0 != rowData; + if (1 == colMoveDir) { + col = checkColRange && leftDown.col < rowData.minCol ? rowData.minCol : leftDown.col; + cols = checkColRange && rightTop.col > rowData.maxCol ? rowData.maxCol : rightTop.col; + } else { + col = checkColRange && rightTop.col > rowData.maxCol ? rowData.maxCol : rightTop.col; + cols = checkColRange && leftDown.col < rowData.minCol ? rowData.minCol : leftDown.col; + } + for (; (cols - col) * colMoveDir >= 0; col += colMoveDir) { + colData = rowData && rowData[col]; + if (!colData) { + colNodesCount > 0 && _renderNodes(row, col); + continue; + } + gid = tiles[colData.index]; + grid = texGrids[(gid & FLIPPED_MASK) >>> 0]; + if (!grid) continue; + if (curTexIdx !== grid.texId) { + -1 !== curTexIdx && _flush(); + curTexIdx = grid.texId; + matIdx = texIdToMatIdx[curTexIdx]; + _curMaterial = mats[matIdx]; + _renderData.material = _curMaterial; + } + if (!_curMaterial) continue; + left = colData.left - _moveX; + bottom = colData.bottom - _moveY; + tileSize = grid.tileset._tileSize; + right = left + tileSize.width; + top = bottom + tileSize.height; + tiledNode = tiledTiles[colData.index]; + if (tiledNode) { + if (tiledNode.node.active) { + tiledNode.node._color._fastSetA(tiledNode.node._opacity * opacity / 255); + this.fillByTiledNode(tiledNode.node, _vbuf, _uintbuf, left, right, top, bottom); + } + } else { + _vbuf[_vfOffset] = left; + _vbuf[_vfOffset + 1] = top; + _uintbuf[_vfOffset + 4] = color; + _vbuf[_vfOffset + 5] = left; + _vbuf[_vfOffset + 6] = bottom; + _uintbuf[_vfOffset + 9] = color; + _vbuf[_vfOffset + 10] = right; + _vbuf[_vfOffset + 11] = top; + _uintbuf[_vfOffset + 14] = color; + _vbuf[_vfOffset + 15] = right; + _vbuf[_vfOffset + 16] = bottom; + _uintbuf[_vfOffset + 19] = color; + } + _flipTexture(grid, gid); + _vbuf[_vfOffset + 2] = _uva.x; + _vbuf[_vfOffset + 3] = _uva.y; + _vbuf[_vfOffset + 7] = _uvc.x; + _vbuf[_vfOffset + 8] = _uvc.y; + _vbuf[_vfOffset + 12] = _uvb.x; + _vbuf[_vfOffset + 13] = _uvb.y; + _vbuf[_vfOffset + 17] = _uvd.x; + _vbuf[_vfOffset + 18] = _uvd.y; + _vfOffset += 20; + _buffer.adjust(4, 6); + _ia._count += 6; + _fillGrids++; + colNodesCount > 0 && _renderNodes(row, col); + _fillGrids >= MaxGridsLimit && _flush(); + } + } + _buffer.uploadData(); + if (_ia._count > 0) { + _renderer.material = _renderData.material; + _renderer.node = _comp.node; + _renderer._flushIA(_renderData.ia); + } + }; + _proto.fillByTiledNode = function fillByTiledNode(tiledNode, vbuf, uintbuf, left, right, top, bottom) { + tiledNode._updateLocalMatrix(); + _valueTypes.Mat4.copy(_mat4_temp, tiledNode._matrix); + _valueTypes.Vec3.set(_vec3_temp, -(left + _moveX), -(bottom + _moveY), 0); + _valueTypes.Mat4.transform(_mat4_temp, _mat4_temp, _vec3_temp); + var m = _mat4_temp.m; + var a = m[0]; + var b = m[1]; + var c = m[4]; + var d = m[5]; + var tx = m[12]; + var ty = m[13]; + var color = tiledNode._color._val; + vbuf[_vfOffset] = left * a + top * c + tx; + vbuf[_vfOffset + 1] = left * b + top * d + ty; + uintbuf[_vfOffset + 4] = color; + vbuf[_vfOffset + 5] = left * a + bottom * c + tx; + vbuf[_vfOffset + 6] = left * b + bottom * d + ty; + uintbuf[_vfOffset + 9] = color; + vbuf[_vfOffset + 10] = right * a + top * c + tx; + vbuf[_vfOffset + 11] = right * b + top * d + ty; + uintbuf[_vfOffset + 14] = color; + vbuf[_vfOffset + 15] = right * a + bottom * c + tx; + vbuf[_vfOffset + 16] = right * b + bottom * d + ty; + uintbuf[_vfOffset + 19] = color; + }; + return TmxAssembler; + })(_assembler["default"]); + exports["default"] = TmxAssembler; + _assembler["default"].register(TiledLayer, TmxAssembler); + module.exports = exports["default"]; + }), { + "../core/renderer/": 271, + "../core/renderer/assembler": 268, + "../core/renderer/render-flow": 272, + "../core/renderer/webgl/vertex-format": 313, + "../core/value-types": 339, + "./CCTiledLayer": 398, + "./CCTiledMap": 399 + }], + 407: [(function (require, module, exports) { + "use strict"; + var VideoPlayerImpl = require("./video-player-impl"); + var EventType = VideoPlayerImpl.EventType; + var ResourceType = cc.Enum({ + REMOTE: 0, + LOCAL: 1 + }); + var VideoPlayer = cc.Class({ + name: "cc.VideoPlayer", + extends: cc.Component, + editor: false, + properties: { + _resourceType: ResourceType.REMOTE, + resourceType: { + tooltip: false, + type: ResourceType, + set: function set(value) { + this._resourceType = value; + this._updateVideoSource(); + }, + get: function get() { + return this._resourceType; + } + }, + _remoteURL: "", + remoteURL: { + tooltip: false, + type: cc.String, + set: function set(url) { + this._remoteURL = url; + this._updateVideoSource(); + }, + get: function get() { + return this._remoteURL; + } + }, + _clip: { + default: null, + type: cc.Asset + }, + clip: { + tooltip: false, + get: function get() { + return this._clip; + }, + set: function set(value) { + this._clip = value; + this._updateVideoSource(); + }, + type: cc.Asset + }, + currentTime: { + tooltip: false, + type: cc.Float, + set: function set(time) { + this._impl && this._impl.seekTo(time); + }, + get: function get() { + if (this._impl) { + if (this._currentStatus === EventType.NONE || this._currentStatus === EventType.STOPPED || this._currentStatus === EventType.META_LOADED || this._currentStatus === EventType.READY_TO_PLAY) return 0; + if (this._currentStatus === EventType.COMPLETED) return this._impl.duration(); + return this._impl.currentTime(); + } + return -1; + } + }, + _volume: 1, + volume: { + get: function get() { + return this._volume; + }, + set: function set(value) { + this._volume = value; + this.isPlaying() && !this._mute && this._syncVolume(); + }, + range: [0, 1], + type: cc.Float, + tooltip: false + }, + _mute: false, + mute: { + get: function get() { + return this._mute; + }, + set: function set(value) { + this._mute = value; + this._syncVolume(); + }, + tooltip: false + }, + keepAspectRatio: { + tooltip: false, + default: true, + type: cc.Boolean, + notify: function notify() { + this._impl && this._impl.setKeepAspectRatioEnabled(this.keepAspectRatio); + } + }, + _isFullscreen: { + default: false, + formerlySerializedAs: "_N$isFullscreen" + }, + isFullscreen: { + get: function get() { + true; + this._isFullscreen = this._impl && this._impl.isFullScreenEnabled(); + return this._isFullscreen; + }, + set: function set(enable) { + this._isFullscreen = enable; + true; + this._impl && this._impl.setFullScreenEnabled(enable); + }, + animatable: false, + tooltip: false + }, + _stayOnBottom: false, + stayOnBottom: { + get: function get() { + return this._stayOnBottom; + }, + set: function set(enable) { + this._stayOnBottom = enable; + this._impl && this._impl.setStayOnBottom(enable); + }, + animatable: false, + tooltip: false + }, + videoPlayerEvent: { + default: [], + type: cc.Component.EventHandler + } + }, + statics: { + EventType: EventType, + ResourceType: ResourceType, + Impl: VideoPlayerImpl + }, + ctor: function ctor() { + this._impl = new VideoPlayerImpl(); + this._currentStatus = EventType.NONE; + }, + _syncVolume: function _syncVolume() { + var impl = this._impl; + if (impl) { + var volume = this._mute ? 0 : this._volume; + impl.setVolume(volume); + } + }, + _updateVideoSource: function _updateVideoSource() { + var url = ""; + this.resourceType === ResourceType.REMOTE ? url = this.remoteURL : this._clip && (url = this._clip.nativeUrl); + this._impl.setURL(url, this._mute || 0 === this._volume); + this._impl.setKeepAspectRatioEnabled(this.keepAspectRatio); + }, + onLoad: function onLoad() { + var impl = this._impl; + if (impl) { + impl.createDomElementIfNeeded(this._mute || 0 === this._volume); + impl.setStayOnBottom(this._stayOnBottom); + this._updateVideoSource(); + true; + impl.seekTo(this.currentTime); + impl.setFullScreenEnabled(this._isFullscreen); + this.pause(); + impl.setEventListener(EventType.PLAYING, this.onPlaying.bind(this)); + impl.setEventListener(EventType.PAUSED, this.onPasued.bind(this)); + impl.setEventListener(EventType.STOPPED, this.onStopped.bind(this)); + impl.setEventListener(EventType.COMPLETED, this.onCompleted.bind(this)); + impl.setEventListener(EventType.META_LOADED, this.onMetaLoaded.bind(this)); + impl.setEventListener(EventType.CLICKED, this.onClicked.bind(this)); + impl.setEventListener(EventType.READY_TO_PLAY, this.onReadyToPlay.bind(this)); + } + }, + onRestore: function onRestore() { + this._impl || (this._impl = new VideoPlayerImpl()); + }, + onEnable: function onEnable() { + this._impl && this._impl.enable(); + }, + onDisable: function onDisable() { + this._impl && this._impl.disable(); + }, + onDestroy: function onDestroy() { + if (this._impl) { + this._impl.destroy(); + this._impl = null; + } + }, + update: function update(dt) { + this._impl && this._impl.updateMatrix(this.node); + }, + onReadyToPlay: function onReadyToPlay() { + this._currentStatus = EventType.READY_TO_PLAY; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.READY_TO_PLAY); + this.node.emit("ready-to-play", this); + }, + onMetaLoaded: function onMetaLoaded() { + this._currentStatus = EventType.META_LOADED; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.META_LOADED); + this.node.emit("meta-loaded", this); + }, + onClicked: function onClicked() { + this._currentStatus = EventType.CLICKED; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.CLICKED); + this.node.emit("clicked", this); + }, + onPlaying: function onPlaying() { + this._currentStatus = EventType.PLAYING; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.PLAYING); + this.node.emit("playing", this); + }, + onPasued: function onPasued() { + this._currentStatus = EventType.PAUSED; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.PAUSED); + this.node.emit("paused", this); + }, + onStopped: function onStopped() { + this._currentStatus = EventType.STOPPED; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.STOPPED); + this.node.emit("stopped", this); + }, + onCompleted: function onCompleted() { + this._currentStatus = EventType.COMPLETED; + cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, EventType.COMPLETED); + this.node.emit("completed", this); + }, + play: function play() { + if (this._impl) { + this._syncVolume(); + this._impl.play(); + } + }, + resume: function resume() { + if (this._impl) { + this._syncVolume(); + this._impl.resume(); + } + }, + pause: function pause() { + this._impl && this._impl.pause(); + }, + stop: function stop() { + this._impl && this._impl.stop(); + }, + getDuration: function getDuration() { + if (this._impl) return this._impl.duration(); + return -1; + }, + isPlaying: function isPlaying() { + if (this._impl) return this._impl.isPlaying(); + return false; + } + }); + cc.VideoPlayer = module.exports = VideoPlayer; + }), { + "./video-player-impl": 408 + }], + 408: [(function (require, module, exports) { + "use strict"; + var utils = require("../core/platform/utils"); + var sys = require("../core/platform/CCSys"); + var macro = require("../core/platform/CCMacro"); + var READY_STATE = { + HAVE_NOTHING: 0, + HAVE_METADATA: 1, + HAVE_CURRENT_DATA: 2, + HAVE_FUTURE_DATA: 3, + HAVE_ENOUGH_DATA: 4 + }; + var _mat4_temp = cc.mat4(); + var VideoPlayerImpl = cc.Class({ + name: "VideoPlayerImpl", + ctor: function ctor() { + this._EventList = {}; + this._video = null; + this._url = ""; + this._waitingFullscreen = false; + this._fullScreenEnabled = false; + this._stayOnBottom = false; + this._loadedmeta = false; + this._loaded = false; + this._visible = false; + this._playing = false; + this._ignorePause = false; + this._forceUpdate = false; + this._m00 = 0; + this._m01 = 0; + this._m04 = 0; + this._m05 = 0; + this._m12 = 0; + this._m13 = 0; + this._w = 0; + this._h = 0; + this.__eventListeners = {}; + }, + _bindEvent: function _bindEvent() { + var video = this._video, self = this; + var cbs = this.__eventListeners; + cbs.loadedmetadata = function () { + self._loadedmeta = true; + self._forceUpdate = true; + if (self._waitingFullscreen) { + self._waitingFullscreen = false; + self._toggleFullscreen(true); + } + self._dispatchEvent(VideoPlayerImpl.EventType.META_LOADED); + }; + cbs.ended = function () { + if (self._video !== video) return; + self._playing = false; + self._dispatchEvent(VideoPlayerImpl.EventType.COMPLETED); + }; + cbs.play = function () { + if (self._video !== video) return; + self._playing = true; + self._updateVisibility(); + self._dispatchEvent(VideoPlayerImpl.EventType.PLAYING); + }; + cbs.pause = function () { + if (self._video !== video) return; + self._playing = false; + self._ignorePause || self._dispatchEvent(VideoPlayerImpl.EventType.PAUSED); + }; + cbs.click = function () { + self._dispatchEvent(VideoPlayerImpl.EventType.CLICKED); + }; + video.addEventListener("loadedmetadata", cbs.loadedmetadata); + video.addEventListener("ended", cbs.ended); + video.addEventListener("play", cbs.play); + video.addEventListener("pause", cbs.pause); + video.addEventListener("click", cbs.click); + function onCanPlay() { + if (self._loaded || self._playing) return; + var video = self._video; + if (video.readyState === READY_STATE.HAVE_ENOUGH_DATA || video.readyState === READY_STATE.HAVE_METADATA) { + video.currentTime = 0; + self._loaded = true; + self._forceUpdate = true; + self._dispatchEvent(VideoPlayerImpl.EventType.READY_TO_PLAY); + self._updateVisibility(); + } + } + cbs.onCanPlay = onCanPlay; + video.addEventListener("canplay", cbs.onCanPlay); + video.addEventListener("canplaythrough", cbs.onCanPlay); + video.addEventListener("suspend", cbs.onCanPlay); + }, + _updateVisibility: function _updateVisibility() { + var video = this._video; + if (!video) return; + if (this._visible) video.style.visibility = "visible"; else { + video.style.visibility = "hidden"; + video.pause(); + this._playing = false; + } + }, + _updateSize: function _updateSize(width, height) { + var video = this._video; + if (!video) return; + video.style.width = width + "px"; + video.style.height = height + "px"; + }, + _createDom: function _createDom(muted) { + var video = document.createElement("video"); + video.style.position = "absolute"; + video.style.bottom = "0px"; + video.style.left = "0px"; + video.style["z-index"] = this._stayOnBottom ? macro.MIN_ZINDEX : 0; + video.className = "cocosVideo"; + video.setAttribute("preload", "auto"); + video.setAttribute("webkit-playsinline", ""); + video.setAttribute("x5-playsinline", ""); + video.setAttribute("playsinline", ""); + muted && video.setAttribute("muted", ""); + this._video = video; + cc.game.container.appendChild(video); + }, + createDomElementIfNeeded: function createDomElementIfNeeded(muted) { + this._video || this._createDom(muted); + }, + removeDom: function removeDom() { + var video = this._video; + if (video) { + var hasChild = utils.contains(cc.game.container, video); + hasChild && cc.game.container.removeChild(video); + var cbs = this.__eventListeners; + video.removeEventListener("loadedmetadata", cbs.loadedmetadata); + video.removeEventListener("ended", cbs.ended); + video.removeEventListener("play", cbs.play); + video.removeEventListener("pause", cbs.pause); + video.removeEventListener("click", cbs.click); + video.removeEventListener("canplay", cbs.onCanPlay); + video.removeEventListener("canplaythrough", cbs.onCanPlay); + video.removeEventListener("suspend", cbs.onCanPlay); + cbs.loadedmetadata = null; + cbs.ended = null; + cbs.play = null; + cbs.pause = null; + cbs.click = null; + cbs.onCanPlay = null; + } + this._video = null; + this._url = ""; + }, + setURL: function setURL(path, muted) { + var source, extname; + if (this._url === path) return; + this.removeDom(); + this._url = path; + this.createDomElementIfNeeded(muted); + this._bindEvent(); + var video = this._video; + video.style["visibility"] = "hidden"; + this._loaded = false; + this._playing = false; + this._loadedmeta = false; + source = document.createElement("source"); + source.src = path; + video.appendChild(source); + extname = cc.path.extname(path); + var polyfill = VideoPlayerImpl._polyfill; + for (var i = 0; i < polyfill.canPlayType.length; i++) if (extname !== polyfill.canPlayType[i]) { + source = document.createElement("source"); + source.src = path.replace(extname, polyfill.canPlayType[i]); + video.appendChild(source); + } + }, + getURL: function getURL() { + return this._url; + }, + play: function play() { + var video = this._video; + if (!video || !this._visible || this._playing) return; + video.play(); + }, + pause: function pause() { + var video = this._video; + if (!this._playing || !video) return; + video.pause(); + }, + resume: function resume() { + this.play(); + }, + stop: function stop() { + var video = this._video; + if (!video || !this._visible) return; + this._ignorePause = true; + video.currentTime = 0; + video.pause(); + setTimeout(function () { + this._dispatchEvent(VideoPlayerImpl.EventType.STOPPED); + this._ignorePause = false; + }.bind(this), 0); + }, + setVolume: function setVolume(volume) { + var video = this._video; + video && (video.volume = volume); + }, + seekTo: function seekTo(time) { + var video = this._video; + if (!video) return; + if (this._loaded) video.currentTime = time; else { + var cb = function cb() { + video.currentTime = time; + video.removeEventListener(VideoPlayerImpl._polyfill.event, cb); + }; + video.addEventListener(VideoPlayerImpl._polyfill.event, cb); + } + }, + isPlaying: function isPlaying() { + return this._playing; + }, + duration: function duration() { + var video = this._video; + var duration = -1; + if (!video) return duration; + duration = video.duration; + duration <= 0 && cc.logID(7702); + return duration; + }, + currentTime: function currentTime() { + var video = this._video; + if (!video) return -1; + return video.currentTime; + }, + setKeepAspectRatioEnabled: function setKeepAspectRatioEnabled() { + false; + cc.logID(7700); + }, + isKeepAspectRatioEnabled: function isKeepAspectRatioEnabled() { + return true; + }, + _toggleFullscreen: function _toggleFullscreen(enable) { + var self = this, video = this._video; + if (!video) return; + function handleFullscreenChange(event) { + var fullscreenElement = sys.browserType === sys.BROWSER_TYPE_IE ? document.msFullscreenElement : document.fullscreenElement; + self._fullScreenEnabled = fullscreenElement === video; + } + function handleFullScreenError(event) { + self._fullScreenEnabled = false; + } + if (enable) { + sys.browserType === sys.BROWSER_TYPE_IE && (video.style["transform"] = ""); + cc.screen.requestFullScreen(video, handleFullscreenChange, handleFullScreenError); + } else cc.screen.fullScreen() && cc.screen.exitFullScreen(video); + }, + setStayOnBottom: function setStayOnBottom(enabled) { + this._stayOnBottom = enabled; + if (!this._video) return; + this._video.style["z-index"] = enabled ? macro.MIN_ZINDEX : 0; + }, + setFullScreenEnabled: function setFullScreenEnabled(enable) { + !this._loadedmeta && enable ? this._waitingFullscreen = true : this._toggleFullscreen(enable); + }, + isFullScreenEnabled: function isFullScreenEnabled() { + return this._fullScreenEnabled; + }, + setEventListener: function setEventListener(event, callback) { + this._EventList[event] = callback; + }, + removeEventListener: function removeEventListener(event) { + this._EventList[event] = null; + }, + _dispatchEvent: function _dispatchEvent(event) { + var callback = this._EventList[event]; + callback && callback.call(this, this, this._video.src); + }, + onPlayEvent: function onPlayEvent() { + var callback = this._EventList[VideoPlayerImpl.EventType.PLAYING]; + callback.call(this, this, this._video.src); + }, + enable: function enable() { + var list = VideoPlayerImpl.elements; + -1 === list.indexOf(this) && list.push(this); + this.setVisible(true); + }, + disable: function disable() { + var list = VideoPlayerImpl.elements; + var index = list.indexOf(this); + -1 !== index && list.splice(index, 1); + this.setVisible(false); + }, + destroy: function destroy() { + this.disable(); + this.removeDom(); + }, + setVisible: function setVisible(visible) { + if (this._visible !== visible) { + this._visible = !!visible; + this._updateVisibility(); + } + }, + updateMatrix: function updateMatrix(node) { + if (!this._video || !this._visible || this._fullScreenEnabled) return; + node.getWorldMatrix(_mat4_temp); + var renderCamera = cc.Camera._findRendererCamera(node); + renderCamera && renderCamera.worldMatrixToScreen(_mat4_temp, _mat4_temp, cc.game.canvas.width, cc.game.canvas.height); + var _mat4_tempm = _mat4_temp.m; + if (!this._forceUpdate && this._m00 === _mat4_tempm[0] && this._m01 === _mat4_tempm[1] && this._m04 === _mat4_tempm[4] && this._m05 === _mat4_tempm[5] && this._m12 === _mat4_tempm[12] && this._m13 === _mat4_tempm[13] && this._w === node._contentSize.width && this._h === node._contentSize.height) return; + this._m00 = _mat4_tempm[0]; + this._m01 = _mat4_tempm[1]; + this._m04 = _mat4_tempm[4]; + this._m05 = _mat4_tempm[5]; + this._m12 = _mat4_tempm[12]; + this._m13 = _mat4_tempm[13]; + this._w = node._contentSize.width; + this._h = node._contentSize.height; + var dpr = cc.view._devicePixelRatio; + var scaleX = 1 / dpr; + var scaleY = 1 / dpr; + var container = cc.game.container; + var a = _mat4_tempm[0] * scaleX, b = _mat4_tempm[1], c = _mat4_tempm[4], d = _mat4_tempm[5] * scaleY; + var offsetX = container && container.style.paddingLeft ? parseInt(container.style.paddingLeft) : 0; + var offsetY = container && container.style.paddingBottom ? parseInt(container.style.paddingBottom) : 0; + var w, h; + if (VideoPlayerImpl._polyfill.zoomInvalid) { + this._updateSize(this._w * a, this._h * d); + a = 1; + d = 1; + w = this._w * scaleX; + h = this._h * scaleY; + } else { + w = this._w * scaleX; + h = this._h * scaleY; + this._updateSize(this._w, this._h); + } + var appx = w * _mat4_tempm[0] * node._anchorPoint.x; + var appy = h * _mat4_tempm[5] * node._anchorPoint.y; + var tx = _mat4_tempm[12] * scaleX - appx + offsetX, ty = _mat4_tempm[13] * scaleY - appy + offsetY; + var matrix = "matrix(" + a + "," + -b + "," + -c + "," + d + "," + tx + "," + -ty + ")"; + this._video.style["transform"] = matrix; + this._video.style["-webkit-transform"] = matrix; + this._video.style["transform-origin"] = "0px 100% 0px"; + this._video.style["-webkit-transform-origin"] = "0px 100% 0px"; + sys.browserType !== sys.BROWSER_TYPE_IE && (this._forceUpdate = false); + } + }); + VideoPlayerImpl.EventType = { + NONE: -1, + PLAYING: 0, + PAUSED: 1, + STOPPED: 2, + COMPLETED: 3, + META_LOADED: 4, + CLICKED: 5, + READY_TO_PLAY: 6 + }; + VideoPlayerImpl.elements = []; + VideoPlayerImpl.pauseElements = []; + cc.game.on(cc.game.EVENT_HIDE, (function () { + var list = VideoPlayerImpl.elements; + for (var element, i = 0; i < list.length; i++) { + element = list[i]; + if (element.isPlaying()) { + element.pause(); + VideoPlayerImpl.pauseElements.push(element); + } + } + })); + cc.game.on(cc.game.EVENT_SHOW, (function () { + var list = VideoPlayerImpl.pauseElements; + var element = list.pop(); + while (element) { + element.play(); + element = list.pop(); + } + })); + VideoPlayerImpl._polyfill = { + devicePixelRatio: false, + event: "canplay", + canPlayType: [] + }; + var dom = document.createElement("video"); + if (dom.canPlayType) { + if (dom.canPlayType("video/ogg")) { + VideoPlayerImpl._polyfill.canPlayType.push(".ogg"); + VideoPlayerImpl._polyfill.canPlayType.push(".ogv"); + } + dom.canPlayType("video/mp4") && VideoPlayerImpl._polyfill.canPlayType.push(".mp4"); + dom.canPlayType("video/webm") && VideoPlayerImpl._polyfill.canPlayType.push(".webm"); + } + sys.OS_ANDROID !== sys.os || sys.browserType !== sys.BROWSER_TYPE_SOUGOU && sys.browserType !== sys.BROWSER_TYPE_360 || (VideoPlayerImpl._polyfill.zoomInvalid = true); + var style = document.createElement("style"); + style.innerHTML = ".cocosVideo:-moz-full-screen{transform:matrix(1,0,0,1,0,0) !important;}.cocosVideo:full-screen{transform:matrix(1,0,0,1,0,0) !important;}.cocosVideo:-webkit-full-screen{transform:matrix(1,0,0,1,0,0) !important;}"; + document.head.appendChild(style); + module.exports = VideoPlayerImpl; + }), { + "../core/platform/CCMacro": 244, + "../core/platform/CCSys": 248, + "../core/platform/utils": 263 + }], + 409: [(function (require, module, exports) { + "use strict"; + var WebViewImpl = require("./webview-impl"); + var EventType = WebViewImpl.EventType; + function emptyCallback() { } + var WebView = cc.Class({ + name: "cc.WebView", + extends: cc.Component, + editor: false, + properties: { + _url: "", + url: { + type: cc.String, + tooltip: false, + get: function get() { + return this._url; + }, + set: function set(url) { + this._url = url; + var impl = this._impl; + impl && impl.loadURL(url); + } + }, + webviewEvents: { + default: [], + type: cc.Component.EventHandler + } + }, + statics: { + EventType: EventType, + Impl: WebViewImpl + }, + ctor: function ctor() { + this._impl = new WebView.Impl(); + }, + onRestore: function onRestore() { + this._impl || (this._impl = new WebView.Impl()); + }, + onEnable: function onEnable() { + var impl = this._impl; + impl.createDomElementIfNeeded(this.node.width, this.node.height); + true; + impl.setEventListener(EventType.LOADED, this._onWebViewLoaded.bind(this)); + impl.setEventListener(EventType.LOADING, this._onWebViewLoading.bind(this)); + impl.setEventListener(EventType.ERROR, this._onWebViewLoadError.bind(this)); + impl.loadURL(this._url); + impl.setVisible(true); + }, + onDisable: function onDisable() { + var impl = this._impl; + impl.setVisible(false); + true; + impl.setEventListener(EventType.LOADED, emptyCallback); + impl.setEventListener(EventType.LOADING, emptyCallback); + impl.setEventListener(EventType.ERROR, emptyCallback); + }, + onDestroy: function onDestroy() { + if (this._impl) { + this._impl.destroy(); + this._impl = null; + } + }, + update: function update(dt) { + this._impl && this._impl.updateMatrix(this.node); + }, + _onWebViewLoaded: function _onWebViewLoaded() { + cc.Component.EventHandler.emitEvents(this.webviewEvents, this, EventType.LOADED); + this.node.emit("loaded", this); + }, + _onWebViewLoading: function _onWebViewLoading() { + cc.Component.EventHandler.emitEvents(this.webviewEvents, this, EventType.LOADING); + this.node.emit("loading", this); + return true; + }, + _onWebViewLoadError: function _onWebViewLoadError() { + cc.Component.EventHandler.emitEvents(this.webviewEvents, this, EventType.ERROR); + this.node.emit("error", this); + }, + setJavascriptInterfaceScheme: function setJavascriptInterfaceScheme(scheme) { + this._impl && this._impl.setJavascriptInterfaceScheme(scheme); + }, + setOnJSCallback: function setOnJSCallback(callback) { + this._impl && this._impl.setOnJSCallback(callback); + }, + evaluateJS: function evaluateJS(str) { + this._impl && this._impl.evaluateJS(str); + } + }); + cc.WebView = module.exports = WebView; + }), { + "./webview-impl": 410 + }], + 410: [(function (require, module, exports) { + "use strict"; + var utils = require("../core/platform/utils"); + var sys = require("../core/platform/CCSys"); + var _mat4_temp = cc.mat4(); + var WebViewImpl = cc.Class({ + name: "WebViewImpl", + ctor: function ctor() { + this._EventList = {}; + this._visible = false; + this._parent = null; + this._div = null; + this._iframe = null; + this._listener = null; + this._forceUpdate = false; + this._m00 = 0; + this._m01 = 0; + this._m04 = 0; + this._m05 = 0; + this._m12 = 0; + this._m13 = 0; + this._w = 0; + this._h = 0; + this.__eventListeners = {}; + }, + _updateVisibility: function _updateVisibility() { + if (!this._div) return; + var div = this._div; + this._visible ? div.style.visibility = "visible" : div.style.visibility = "hidden"; + }, + _updateSize: function _updateSize(w, h) { + var div = this._div; + if (div) { + div.style.width = w + "px"; + div.style.height = h + "px"; + } + }, + _initEvent: function _initEvent() { + var iframe = this._iframe; + if (iframe) { + var cbs = this.__eventListeners, self = this; + cbs.load = function () { + self._forceUpdate = true; + self._dispatchEvent(WebViewImpl.EventType.LOADED); + }; + cbs.error = function () { + self._dispatchEvent(WebViewImpl.EventType.ERROR); + }; + iframe.addEventListener("load", cbs.load); + iframe.addEventListener("error", cbs.error); + } + }, + _initStyle: function _initStyle() { + if (!this._div) return; + var div = this._div; + div.style.position = "absolute"; + div.style.bottom = "0px"; + div.style.left = "0px"; + }, + _setOpacity: function _setOpacity(opacity) { + var iframe = this._iframe; + iframe && iframe.style && (iframe.style.opacity = opacity / 255); + }, + _createDom: function _createDom(w, h) { + if (WebViewImpl._polyfill.enableDiv) { + this._div = document.createElement("div"); + this._div.style["-webkit-overflow"] = "auto"; + this._div.style["-webkit-overflow-scrolling"] = "touch"; + this._iframe = document.createElement("iframe"); + this._div.appendChild(this._iframe); + this._iframe.style.width = "100%"; + this._iframe.style.height = "100%"; + } else this._div = this._iframe = document.createElement("iframe"); + WebViewImpl._polyfill.enableBG && (this._div.style["background"] = "#FFF"); + this._div.style.height = h + "px"; + this._div.style.width = w + "px"; + this._div.style.overflow = "scroll"; + this._iframe.style.border = "none"; + cc.game.container.appendChild(this._div); + this._updateVisibility(); + }, + _createNativeControl: function _createNativeControl(w, h) { + this._createDom(w, h); + this._initStyle(); + this._initEvent(); + }, + createDomElementIfNeeded: function (w, h) { + this._div ? this._updateSize(w, h) : this._createNativeControl(w, h); + }, + removeDom: function removeDom() { + var div = this._div; + if (div) { + var hasChild = utils.contains(cc.game.container, div); + hasChild && cc.game.container.removeChild(div); + this._div = null; + } + var iframe = this._iframe; + if (iframe) { + var cbs = this.__eventListeners; + iframe.removeEventListener("load", cbs.load); + iframe.removeEventListener("error", cbs.error); + cbs.load = null; + cbs.error = null; + this._iframe = null; + } + }, + setOnJSCallback: function setOnJSCallback(callback) { }, + setJavascriptInterfaceScheme: function setJavascriptInterfaceScheme(scheme) { }, + loadData: function loadData(data, MIMEType, encoding, baseURL) { }, + loadHTMLString: function loadHTMLString(string, baseURL) { }, + loadURL: function (url) { + var iframe = this._iframe; + if (iframe) { + iframe.src = url; + var self = this; + var cb = function cb() { + self._loaded = true; + self._updateVisibility(); + iframe.removeEventListener("load", cb); + }; + iframe.addEventListener("load", cb); + this._dispatchEvent(WebViewImpl.EventType.LOADING); + } + }, + stopLoading: function stopLoading() { + cc.logID(7800); + }, + reload: function reload() { + var iframe = this._iframe; + if (iframe) { + var win = iframe.contentWindow; + win && win.location && win.location.reload(); + } + }, + canGoBack: function canGoBack() { + cc.logID(7801); + return true; + }, + canGoForward: function canGoForward() { + cc.logID(7802); + return true; + }, + goBack: function goBack() { + try { + if (WebViewImpl._polyfill.closeHistory) return cc.logID(7803); + var iframe = this._iframe; + if (iframe) { + var win = iframe.contentWindow; + win && win.location && win.history.back.call(win); + } + } catch (err) { + cc.log(err); + } + }, + goForward: function goForward() { + try { + if (WebViewImpl._polyfill.closeHistory) return cc.logID(7804); + var iframe = this._iframe; + if (iframe) { + var win = iframe.contentWindow; + win && win.location && win.history.forward.call(win); + } + } catch (err) { + cc.log(err); + } + }, + evaluateJS: function evaluateJS(str) { + var iframe = this._iframe; + if (iframe) { + var win = iframe.contentWindow; + try { + win.eval(str); + this._dispatchEvent(WebViewImpl.EventType.JS_EVALUATED); + } catch (err) { + console.error(err); + } + } + }, + setScalesPageToFit: function setScalesPageToFit() { + cc.logID(7805); + }, + setEventListener: function setEventListener(event, callback) { + this._EventList[event] = callback; + }, + removeEventListener: function removeEventListener(event) { + this._EventList[event] = null; + }, + _dispatchEvent: function _dispatchEvent(event) { + var callback = this._EventList[event]; + callback && callback.call(this, this, this._iframe.src); + }, + _createRenderCmd: function _createRenderCmd() { + return new WebViewImpl.RenderCmd(this); + }, + destroy: function destroy() { + this.removeDom(); + }, + setVisible: function setVisible(visible) { + if (this._visible !== visible) { + this._visible = !!visible; + this._updateVisibility(); + } + }, + updateMatrix: function updateMatrix(node) { + if (!this._div || !this._visible) return; + node.getWorldMatrix(_mat4_temp); + var renderCamera = cc.Camera._findRendererCamera(node); + renderCamera && renderCamera.worldMatrixToScreen(_mat4_temp, _mat4_temp, cc.game.canvas.width, cc.game.canvas.height); + var _mat4_tempm = _mat4_temp.m; + if (!this._forceUpdate && this._m00 === _mat4_tempm[0] && this._m01 === _mat4_tempm[1] && this._m04 === _mat4_tempm[4] && this._m05 === _mat4_tempm[5] && this._m12 === _mat4_tempm[12] && this._m13 === _mat4_tempm[13] && this._w === node._contentSize.width && this._h === node._contentSize.height) return; + this._m00 = _mat4_tempm[0]; + this._m01 = _mat4_tempm[1]; + this._m04 = _mat4_tempm[4]; + this._m05 = _mat4_tempm[5]; + this._m12 = _mat4_tempm[12]; + this._m13 = _mat4_tempm[13]; + this._w = node._contentSize.width; + this._h = node._contentSize.height; + var dpr = cc.view._devicePixelRatio; + var scaleX = 1 / dpr; + var scaleY = 1 / dpr; + var container = cc.game.container; + var a = _mat4_tempm[0] * scaleX, b = _mat4_tempm[1], c = _mat4_tempm[4], d = _mat4_tempm[5] * scaleY; + var offsetX = container && container.style.paddingLeft ? parseInt(container.style.paddingLeft) : 0; + var offsetY = container && container.style.paddingBottom ? parseInt(container.style.paddingBottom) : 0; + this._updateSize(this._w, this._h); + var w = this._w * scaleX; + var h = this._h * scaleY; + var appx = w * _mat4_tempm[0] * node._anchorPoint.x; + var appy = h * _mat4_tempm[5] * node._anchorPoint.y; + var tx = _mat4_tempm[12] * scaleX - appx + offsetX, ty = _mat4_tempm[13] * scaleY - appy + offsetY; + var matrix = "matrix(" + a + "," + -b + "," + -c + "," + d + "," + tx + "," + -ty + ")"; + this._div.style["transform"] = matrix; + this._div.style["-webkit-transform"] = matrix; + this._div.style["transform-origin"] = "0px 100% 0px"; + this._div.style["-webkit-transform-origin"] = "0px 100% 0px"; + this._setOpacity(node.opacity); + this._forceUpdate = false; + } + }); + WebViewImpl.EventType = { + LOADING: 0, + LOADED: 1, + ERROR: 2, + JS_EVALUATED: 3 + }; + var polyfill = WebViewImpl._polyfill = { + devicePixelRatio: false, + enableDiv: false + }; + sys.os === sys.OS_IOS && (polyfill.enableDiv = true); + sys.isMobile ? sys.browserType === sys.BROWSER_TYPE_FIREFOX && (polyfill.enableBG = true) : sys.browserType === sys.BROWSER_TYPE_IE && (polyfill.closeHistory = true); + module.exports = WebViewImpl; + }), { + "../core/platform/CCSys": 248, + "../core/platform/utils": 263 + }], + 411: [(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": 206, + "./cocos2d/core/components/CCStudioComponent": 167, + "./cocos2d/deprecated": 351, + "./cocos2d/particle": 357, + "./cocos2d/particle/CCParticleAsset": 354, + "./cocos2d/tilemap": 404, + "./cocos2d/tilemap/CCTiledMapAsset": 400, + "./cocos2d/videoplayer/CCVideoPlayer": 407, + "./cocos2d/webview/CCWebView": 409, + "./extensions/ccpool/CCNodePool": 412, + "./extensions/dragonbones": 422, + "./extensions/spine": 427 + }], + 412: [(function (require, module, exports) { + "use strict"; + cc.NodePool = function (poolHandlerComp) { + this.poolHandlerComp = poolHandlerComp; + this._pool = []; + }; + cc.NodePool.prototype = { + constructor: cc.NodePool, + size: function size() { + return this._pool.length; + }, + clear: function clear() { + var count = this._pool.length; + for (var i = 0; i < count; ++i) this._pool[i].destroy(); + this._pool.length = 0; + }, + put: function put(obj) { + if (obj && -1 === this._pool.indexOf(obj)) { + obj.removeFromParent(false); + var handler = this.poolHandlerComp ? obj.getComponent(this.poolHandlerComp) : null; + handler && handler.unuse && handler.unuse(); + this._pool.push(obj); + } + }, + get: function get() { + var last = this._pool.length - 1; + if (last < 0) return null; + var obj = this._pool[last]; + this._pool.length = last; + var handler = this.poolHandlerComp ? obj.getComponent(this.poolHandlerComp) : null; + handler && handler.reuse && handler.reuse.apply(handler, arguments); + return obj; + } + }; + module.exports = cc.NodePool; + }), {}], + 413: [(function (require, module, exports) { + "use strict"; + 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 _preColor = null; + var _x, _y; + 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.isCompleted = false; + this._frameIdx = -1; + this._armatureInfo = null; + this._animationName = null; + this._tempSegments = null; + this._tempColors = null; + this._tempBoneInfos = null; + }, + init: function init(armatureInfo, animationName) { + this._inited = true; + this._armatureInfo = armatureInfo; + this._animationName = animationName; + }, + 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(); + }, + begin: function begin() { + if (!this._invalid) return; + var armatureInfo = this._armatureInfo; + var curAnimationCache = armatureInfo.curAnimationCache; + curAnimationCache && curAnimationCache != this && (this._privateMode ? curAnimationCache.invalidAllFrame() : curAnimationCache.updateToFrame()); + var armature = armatureInfo.armature; + var animation = armature.animation; + animation.play(this._animationName, 1); + armatureInfo.curAnimationCache = this; + this._invalid = false; + this._frameIdx = -1; + this.totalTime = 0; + this.isCompleted = false; + }, + end: function end() { + if (!this._needToUpdate()) { + this._armatureInfo.curAnimationCache = null; + this.frames.length = this._frameIdx + 1; + this.isCompleted = true; + } + }, + _needToUpdate: function _needToUpdate(toFrameIdx) { + var armatureInfo = this._armatureInfo; + var armature = armatureInfo.armature; + var animation = armature.animation; + return !animation.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 armatureInfo = this._armatureInfo; + var armature = armatureInfo.armature; + do { + armature.advanceTime(FrameTime); + this._frameIdx++; + this._updateFrame(armature, 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(armature, index) { + _vfOffset = 0; + _boneInfoOffset = 0; + _indexOffset = 0; + _vertexOffset = 0; + _preTexUrl = null; + _preBlendMode = null; + _segVCount = 0; + _segICount = 0; + _segOffset = 0; + _colorOffset = 0; + _preColor = 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._traverseArmature(armature, 1); + _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 = 5 * _segVCount; + 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++]; + } + 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; + }, + _traverseArmature: function _traverseArmature(armature, parentOpacity) { + var colors = this._tempColors; + var segments = this._tempSegments; + var boneInfos = this._tempBoneInfos; + var gVertices = _vertices; + var gIndices = _indices; + var slotVertices, slotIndices; + var slots = armature._slots, slot, slotMatrix, slotMatrixm, slotColor, colorVal; + var texture; + var preSegOffset, preSegInfo; + var bones = armature._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] = { + globalTransformMatrix: new dragonBones.Matrix() + }); + var boneMat = bone.globalTransformMatrix; + var cacheBoneMat = boneInfo.globalTransformMatrix; + cacheBoneMat.copyFrom(boneMat); + } + for (var _i2 = 0, _l = slots.length; _i2 < _l; _i2++) { + slot = slots[_i2]; + if (!slot._visible || !slot._displayData) continue; + slot.updateWorldMatrix(); + slotColor = slot._color; + if (slot.childArmature) { + this._traverseArmature(slot.childArmature, parentOpacity * slotColor.a / 255); + continue; + } + texture = slot.getTexture(); + if (!texture) continue; + if (_preTexUrl !== texture.nativeUrl || _preBlendMode !== slot._blendMode) { + _preTexUrl = texture.nativeUrl; + _preBlendMode = slot._blendMode; + preSegOffset = _segOffset - 1; + if (preSegOffset >= 0) if (_segICount > 0) { + preSegInfo = segments[preSegOffset]; + preSegInfo.indexCount = _segICount; + preSegInfo.vertexCount = _segVCount; + preSegInfo.vfCount = 5 * _segVCount; + } else _segOffset--; + segments[_segOffset] = { + tex: texture, + blendMode: slot._blendMode, + indexCount: 0, + vertexCount: 0, + vfCount: 0 + }; + _segOffset++; + _segICount = 0; + _segVCount = 0; + } + colorVal = (slotColor.a * parentOpacity << 24 >>> 0) + (slotColor.b << 16) + (slotColor.g << 8) + slotColor.r; + if (_preColor !== colorVal) { + _preColor = colorVal; + _colorOffset > 0 && (colors[_colorOffset - 1].vfOffset = _vfOffset); + colors[_colorOffset++] = { + r: slotColor.r, + g: slotColor.g, + b: slotColor.b, + a: slotColor.a * parentOpacity, + vfOffset: 0 + }; + } + slotVertices = slot._localVertices; + slotIndices = slot._indices; + slotMatrix = slot._worldMatrix; + slotMatrixm = slotMatrix.m; + for (var j = 0, vl = slotVertices.length; j < vl;) { + _x = slotVertices[j++]; + _y = slotVertices[j++]; + gVertices[_vfOffset++] = _x * slotMatrixm[0] + _y * slotMatrixm[4] + slotMatrixm[12]; + gVertices[_vfOffset++] = _x * slotMatrixm[1] + _y * slotMatrixm[5] + slotMatrixm[13]; + gVertices[_vfOffset++] = slotVertices[j++]; + gVertices[_vfOffset++] = slotVertices[j++]; + gVertices[_vfOffset++] = colorVal; + } + for (var ii = 0, il = slotIndices.length; ii < il; ii++) gIndices[_indexOffset++] = _segVCount + slotIndices[ii]; + _vertexOffset = _vfOffset / 5; + _segICount += slotIndices.length; + _segVCount += slotVertices.length / 4; + } + } + }); + var ArmatureCache = cc.Class({ + ctor: function ctor() { + this._privateMode = false; + this._animationPool = {}; + this._armatureCache = {}; + }, + enablePrivateMode: function enablePrivateMode() { + this._privateMode = true; + }, + dispose: function dispose() { + for (var key in this._armatureCache) { + var armatureInfo = this._armatureCache[key]; + if (armatureInfo) { + var armature = armatureInfo.armature; + armature && armature.dispose(); + } + } + this._armatureCache = null; + this._animationPool = null; + }, + _removeArmature: function _removeArmature(armatureKey) { + var armatureInfo = this._armatureCache[armatureKey]; + var animationsCache = armatureInfo.animationsCache; + for (var aniKey in animationsCache) { + var animationCache = animationsCache[aniKey]; + if (!animationCache) continue; + this._animationPool[armatureKey + "#" + aniKey] = animationCache; + animationCache.clear(); + } + var armature = armatureInfo.armature; + armature && armature.dispose(); + delete this._armatureCache[armatureKey]; + }, + resetArmature: function resetArmature(uuid) { + for (var armatureKey in this._armatureCache) { + if (-1 == armatureKey.indexOf(uuid)) continue; + this._removeArmature(armatureKey); + } + }, + getArmatureCache: function getArmatureCache(armatureName, armatureKey, atlasUUID) { + var armatureInfo = this._armatureCache[armatureKey]; + var armature; + if (armatureInfo) armature = armatureInfo.armature; else { + var factory = dragonBones.CCFactory.getInstance(); + var proxy = factory.buildArmatureDisplay(armatureName, armatureKey, "", atlasUUID); + if (!proxy || !proxy._armature) return; + armature = proxy._armature; + if (!ArmatureCache.canCache(armature)) { + armature.dispose(); + return; + } + this._armatureCache[armatureKey] = { + armature: armature, + animationsCache: {}, + curAnimationCache: null + }; + } + return armature; + }, + getAnimationCache: function getAnimationCache(armatureKey, animationName) { + var armatureInfo = this._armatureCache[armatureKey]; + if (!armatureInfo) return null; + var animationsCache = armatureInfo.animationsCache; + return animationsCache[animationName]; + }, + initAnimationCache: function initAnimationCache(armatureKey, animationName) { + if (!animationName) return null; + var armatureInfo = this._armatureCache[armatureKey]; + var armature = armatureInfo && armatureInfo.armature; + if (!armature) return null; + var animation = armature.animation; + var hasAni = animation.hasAnimation(animationName); + if (!hasAni) return null; + var animationsCache = armatureInfo.animationsCache; + var animationCache = animationsCache[animationName]; + if (!animationCache) { + var poolKey = armatureKey + "#" + animationName; + animationCache = this._animationPool[poolKey]; + if (animationCache) delete this._animationPool[poolKey]; else { + animationCache = new AnimationCache(); + animationCache._privateMode = this._privateMode; + } + animationCache.init(armatureInfo, animationName); + animationsCache[animationName] = animationCache; + } + return animationCache; + }, + invalidAnimationCache: function invalidAnimationCache(armatureKey) { + var armatureInfo = this._armatureCache[armatureKey]; + var armature = armatureInfo && armatureInfo.armature; + if (!armature) return null; + var animationsCache = armatureInfo.animationsCache; + for (var aniKey in animationsCache) { + var animationCache = animationsCache[aniKey]; + animationCache.invalidAllFrame(); + } + }, + updateAnimationCache: function updateAnimationCache(armatureKey, animationName) { + if (animationName) { + var animationCache = this.initAnimationCache(armatureKey, animationName); + if (!animationCache) return; + animationCache.updateAllFrame(); + } else { + var armatureInfo = this._armatureCache[armatureKey]; + var armature = armatureInfo && armatureInfo.armature; + if (!armature) return null; + var animationsCache = armatureInfo.animationsCache; + for (var aniKey in animationsCache) { + var _animationCache = animationsCache[aniKey]; + _animationCache.updateAllFrame(); + } + } + } + }); + ArmatureCache.FrameTime = FrameTime; + ArmatureCache.sharedCache = new ArmatureCache(); + ArmatureCache.canCache = function (armature) { + var slots = armature._slots; + for (var i = 0, l = slots.length; i < l; i++) { + var slot = slots[i]; + if (slot.childArmature) return false; + } + return true; + }, module.exports = ArmatureCache; + }), {}], + 414: [(function (require, module, exports) { + "use strict"; + var RenderComponent = require("../../cocos2d/core/components/CCRenderComponent"); + var EventTarget = require("../../cocos2d/core/event/event-target"); + var Graphics = require("../../cocos2d/core/graphics/graphics"); + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var FLAG_POST_RENDER = RenderFlow.FLAG_POST_RENDER; + var ArmatureCache = require("./ArmatureCache"); + var AttachUtil = require("./AttachUtil"); + var DefaultArmaturesEnum = cc.Enum({ + default: -1 + }); + var DefaultAnimsEnum = cc.Enum({ + "": 0 + }); + var DefaultCacheMode = cc.Enum({ + REALTIME: 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)); + } + var ArmatureDisplay = cc.Class({ + name: "dragonBones.ArmatureDisplay", + extends: RenderComponent, + editor: false, + statics: { + AnimationCacheMode: AnimationCacheMode + }, + properties: { + _factory: { + default: null, + type: dragonBones.CCFactory, + serializable: false + }, + dragonAsset: { + default: null, + type: dragonBones.DragonBonesAsset, + notify: function notify() { + this._refresh(); + false; + }, + tooltip: false + }, + dragonAtlasAsset: { + default: null, + type: dragonBones.DragonBonesAtlasAsset, + notify: function notify() { + this._parseDragonAtlasAsset(); + this._refresh(); + }, + tooltip: false + }, + _armatureName: "", + armatureName: { + get: function get() { + return this._armatureName; + }, + set: function set(value) { + this._armatureName = value; + var animNames = this.getAnimationNames(this._armatureName); + if (!this.animationName || animNames.indexOf(this.animationName) < 0) { + false; + this.animationName = ""; + } + this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature); + this._refresh(); + this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature); + }, + visible: false + }, + _animationName: "", + animationName: { + get: function get() { + return this._animationName; + }, + set: function set(value) { + this._animationName = value; + }, + visible: false + }, + _defaultArmatureIndex: { + default: 0, + notify: function notify() { + var armatureName = ""; + if (this.dragonAsset) { + var armaturesEnum; + this.dragonAsset && (armaturesEnum = this.dragonAsset.getArmatureEnum()); + if (!armaturesEnum) return cc.errorID(7400, this.name); + armatureName = armaturesEnum[this._defaultArmatureIndex]; + } + void 0 !== armatureName ? this.armatureName = armatureName : cc.errorID(7401, this.name); + }, + type: DefaultArmaturesEnum, + visible: true, + editorOnly: true, + animatable: false, + displayName: "Armature", + tooltip: false + }, + _animationIndex: { + default: 0, + notify: function notify() { + if (0 === this._animationIndex) { + this.animationName = ""; + return; + } + var animsEnum; + this.dragonAsset && (animsEnum = this.dragonAsset.getAnimsEnum(this.armatureName)); + if (!animsEnum) return; + var animName = animsEnum[this._animationIndex]; + void 0 !== animName ? this.playAnimation(animName, this.playTimes) : cc.errorID(7402, this.name); + }, + type: DefaultAnimsEnum, + visible: true, + editorOnly: true, + animatable: false, + displayName: "Animation", + tooltip: false + }, + _preCacheMode: -1, + _cacheMode: AnimationCacheMode.REALTIME, + _defaultCacheMode: { + default: 0, + type: AnimationCacheMode, + notify: function notify() { + if (this._defaultCacheMode !== AnimationCacheMode.REALTIME && this._armature && !ArmatureCache.canCache(this._armature)) { + this._defaultCacheMode = AnimationCacheMode.REALTIME; + cc.warn("Animation cache mode doesn't support skeletal nesting"); + return; + } + this.setAnimationCacheMode(this._defaultCacheMode); + }, + editorOnly: true, + visible: true, + animatable: false, + displayName: "Animation Cache Mode", + tooltip: false + }, + timeScale: { + default: 1, + notify: function notify() { + this._armature && !this.isAnimationCached() && (this._armature.animation.timeScale = this.timeScale); + }, + tooltip: false + }, + playTimes: { + default: -1, + tooltip: false + }, + premultipliedAlpha: { + default: false, + tooltip: false + }, + debugBones: { + default: false, + notify: function notify() { + this._updateDebugDraw(); + }, + tooltip: false + }, + enableBatch: { + default: false, + notify: function notify() { + this._updateBatch(); + }, + tooltip: false + }, + _armatureKey: "", + _accTime: 0, + _playCount: 0, + _frameCache: null, + _curFrame: null, + _playing: false, + _armatureCache: null + }, + ctor: function ctor() { + this._eventTarget = new EventTarget(); + this._materialCache = {}; + this._inited = false; + this.attachUtil = new AttachUtil(); + this._factory = dragonBones.CCFactory.getInstance(); + }, + onLoad: function onLoad() { + var children = this.node.children; + for (var i = 0, n = children.length; i < n; i++) { + var child = children[i]; + var pos = child._name && child._name.search("CHILD_ARMATURE-"); + 0 === pos && child.destroy(); + } + }, + _updateBatch: function _updateBatch() { + var baseMaterial = this.getMaterial(0); + baseMaterial && baseMaterial.define("CC_USE_MODEL", !this.enableBatch); + this._materialCache = {}; + }, + _updateMaterial: function _updateMaterial() { + var baseMaterial = this.getMaterial(0); + if (baseMaterial) { + baseMaterial.define("CC_USE_MODEL", !this.enableBatch); + baseMaterial.define("USE_TEXTURE", true); + 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); + } + 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; + }, + _validateRender: function _validateRender() { + var texture = this.dragonAtlasAsset && this.dragonAtlasAsset.texture; + if (!texture || !texture.loaded) { + this.disableRender(); + return; + } + this._super(); + }, + __preload: function __preload() { + this._init(); + }, + _init: function _init() { + if (this._inited) return; + this._inited = true; + this._resetAssembler(); + this._activateMaterial(); + this._parseDragonAtlasAsset(); + this._refresh(); + 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._updateDebugDraw(); + }, + getArmatureKey: function getArmatureKey() { + return this._armatureKey; + }, + setAnimationCacheMode: function setAnimationCacheMode(cacheMode) { + if (this._preCacheMode !== cacheMode) { + this._cacheMode = cacheMode; + this._buildArmature(); + this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature); + } + }, + isAnimationCached: function isAnimationCached() { + false; + return this._cacheMode !== AnimationCacheMode.REALTIME; + }, + onEnable: function onEnable() { + this._super(); + this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature); + }, + onDisable: function onDisable() { + this._super(); + this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature); + }, + _emitCacheCompleteEvent: function _emitCacheCompleteEvent() { + this._eventTarget.emit(dragonBones.EventObject.LOOP_COMPLETE); + this._eventTarget.emit(dragonBones.EventObject.COMPLETE); + }, + update: function update(dt) { + if (!this.isAnimationCached()) return; + if (!this._frameCache) return; + var frameCache = this._frameCache; + if (!frameCache.isInited()) return; + var frames = frameCache.frames; + if (!this._playing) { + if (frameCache.isInvalid()) { + frameCache.updateToFrame(); + this._curFrame = frames[frames.length - 1]; + } + return; + } + var frameTime = ArmatureCache.FrameTime; + 0 == this._accTime && 0 == this._playCount && this._eventTarget.emit(dragonBones.EventObject.START); + var globalTimeScale = dragonBones.timeScale; + this._accTime += dt * this.timeScale * globalTimeScale; + 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._playing = false; + this._playCount = 0; + this._emitCacheCompleteEvent(); + return; + } + this._accTime = 0; + frameIdx = 0; + this._emitCacheCompleteEvent(); + } + this._curFrame = frames[frameIdx]; + }, + onDestroy: function onDestroy() { + this._super(); + this._inited = false; + true; + if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) { + this._armatureCache.dispose(); + this._armatureCache = null; + this._armature = null; + } else if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) { + this._armatureCache = null; + this._armature = null; + } else if (this._armature) { + this._armature.dispose(); + this._armature = null; + } + }, + _updateDebugDraw: function _updateDebugDraw() { + if (this.debugBones) { + if (!this._debugDraw) { + 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._debugDraw = debugDraw; + } + this._debugDraw.node.parent = this.node; + } else this._debugDraw && (this._debugDraw.node.parent = null); + }, + _buildArmature: function _buildArmature() { + if (!this.dragonAsset || !this.dragonAtlasAsset || !this.armatureName) return; + if (this._armature) { + true; + this._preCacheMode === AnimationCacheMode.PRIVATE_CACHE ? this._armatureCache.dispose() : this._preCacheMode === AnimationCacheMode.REALTIME && this._armature.dispose(); + this._armatureCache = null; + this._armature = null; + this._displayProxy = null; + this._frameCache = null; + this._curFrame = null; + this._playing = false; + this._preCacheMode = null; + } + true; + if (this._cacheMode === AnimationCacheMode.SHARED_CACHE) this._armatureCache = ArmatureCache.sharedCache; else if (this._cacheMode === AnimationCacheMode.PRIVATE_CACHE) { + this._armatureCache = new ArmatureCache(); + this._armatureCache.enablePrivateMode(); + } + var atlasUUID = this.dragonAtlasAsset._uuid; + this._armatureKey = this.dragonAsset.init(this._factory, atlasUUID); + if (this.isAnimationCached()) { + this._armature = this._armatureCache.getArmatureCache(this.armatureName, this._armatureKey, atlasUUID); + this._armature || (this._cacheMode = AnimationCacheMode.REALTIME); + } + this._preCacheMode = this._cacheMode; + if (false, this._cacheMode === AnimationCacheMode.REALTIME) { + this._displayProxy = this._factory.buildArmatureDisplay(this.armatureName, this._armatureKey, "", atlasUUID); + if (!this._displayProxy) return; + this._displayProxy._ccNode = this.node; + this._displayProxy.setEventTarget(this._eventTarget); + this._armature = this._displayProxy._armature; + this._armature.animation.timeScale = this.timeScale; + } + this._cacheMode !== AnimationCacheMode.REALTIME && this.debugBones && cc.warn("Debug bones is invalid in cached mode"); + if (this._armature) { + var armatureData = this._armature.armatureData; + var aabb = armatureData.aabb; + this.node.setContentSize(aabb.width, aabb.height); + } + this._updateBatch(); + this.attachUtil.init(this); + this.attachUtil._associateAttachedNode(); + this.animationName && this.playAnimation(this.animationName, this.playTimes); + this.markForRender(true); + }, + _parseDragonAtlasAsset: function _parseDragonAtlasAsset() { + this.dragonAtlasAsset && this.dragonAtlasAsset.init(this._factory); + }, + _refresh: function _refresh() { + this._buildArmature(); + false; + }, + _updateCacheModeEnum: false, + _updateAnimEnum: false, + _updateArmatureEnum: false, + playAnimation: function playAnimation(animName, playTimes) { + this.playTimes = void 0 === playTimes ? -1 : playTimes; + this.animationName = animName; + if (this.isAnimationCached()) { + var cache = this._armatureCache.getAnimationCache(this._armatureKey, animName); + cache || (cache = this._armatureCache.initAnimationCache(this._armatureKey, animName)); + if (cache) { + this._accTime = 0; + this._playCount = 0; + this._frameCache = cache; + this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo(); + this._frameCache.updateToFrame(0); + this._playing = true; + this._curFrame = this._frameCache.frames[0]; + } + } else if (this._armature) return this._armature.animation.play(animName, this.playTimes); + }, + updateAnimationCache: function updateAnimationCache(animName) { + if (!this.isAnimationCached()) return; + this._armatureCache.updateAnimationCache(this._armatureKey, animName); + }, + invalidAnimationCache: function invalidAnimationCache() { + if (!this.isAnimationCached()) return; + this._armatureCache.invalidAnimationCache(this._armatureKey); + }, + getArmatureNames: function getArmatureNames() { + var dragonBonesData = this._factory.getDragonBonesData(this._armatureKey); + return dragonBonesData && dragonBonesData.armatureNames || []; + }, + getAnimationNames: function getAnimationNames(armatureName) { + var ret = []; + var dragonBonesData = this._factory.getDragonBonesData(this._armatureKey); + if (dragonBonesData) { + var armatureData = dragonBonesData.getArmature(armatureName); + if (armatureData) for (var animName in armatureData.animations) armatureData.animations.hasOwnProperty(animName) && ret.push(animName); + } + return ret; + }, + on: function on(eventType, listener, target) { + this.addEventListener(eventType, listener, target); + }, + off: function off(eventType, listener, target) { + this.removeEventListener(eventType, listener, target); + }, + once: function once(eventType, listener, target) { + this._eventTarget.once(eventType, listener, target); + }, + addEventListener: function addEventListener(eventType, listener, target) { + this._eventTarget.on(eventType, listener, target); + }, + removeEventListener: function removeEventListener(eventType, listener, target) { + this._eventTarget.off(eventType, listener, target); + }, + buildArmature: function buildArmature(armatureName, node) { + return this._factory.createArmatureNode(this, armatureName, node); + }, + armature: function armature() { + return this._armature; + } + }); + module.exports = dragonBones.ArmatureDisplay = ArmatureDisplay; + }), { + "../../cocos2d/core/components/CCRenderComponent": 160, + "../../cocos2d/core/event/event-target": 186, + "../../cocos2d/core/graphics/graphics": 202, + "../../cocos2d/core/renderer/render-flow": 272, + "./ArmatureCache": 413, + "./AttachUtil": 415 + }], + 415: [(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: "dragonBones.AttachUtil", + ctor: function ctor() { + this._inited = false; + this._armature = null; + this._armatureNode = null; + this._armatureDisplay = null; + this._attachedRootNode = null; + this._attachedNodeArray = []; + this._boneIndexToNode = {}; + }, + init: function init(armatureDisplay) { + this._inited = true; + this._armature = armatureDisplay._armature; + this._armatureNode = armatureDisplay.node; + this._armatureDisplay = armatureDisplay; + }, + reset: function reset() { + this._inited = false; + this._armature = null; + this._armatureNode = null; + this._armatureDisplay = null; + }, + _prepareAttachNode: function _prepareAttachNode() { + var armature = this._armature; + if (!armature) return; + var rootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME); + if (!rootNode || !rootNode.isValid) { + rootNode = new cc.Node(ATTACHED_ROOT_NAME); + limitNode(rootNode); + this._armatureNode.addChild(rootNode); + } + var isCached = this._armatureDisplay.isAnimationCached(); + isCached && this._armatureDisplay._frameCache && this._armatureDisplay._frameCache.enableCacheAttachedInfo(); + this._attachedRootNode = rootNode; + return rootNode; + }, + _buildBoneAttachedNode: function _buildBoneAttachedNode(bone, boneIndex) { + var boneNodeName = ATTACHED_PRE_NAME + bone.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 boneIndex = 0; + var res = []; + var attachedTraverse = function (armature) { + if (!armature) return; + var bones = armature.getBones(), bone; + for (var i = 0, l = bones.length; i < l; i++) { + bone = bones[i]; + bone._boneIndex = boneIndex++; + boneName === bone.name && res.push(bone); + } + var slots = armature.getSlots(), slot; + for (var _i = 0, _l = slots.length; _i < _l; _i++) { + slot = slots[_i]; + slot.childArmature && attachedTraverse(slot.childArmature); + } + }.bind(this); + attachedTraverse(this._armature); + var buildBoneTree = function (bone) { + if (!bone) return; + var boneNode = this._getNodeByBoneIndex(bone._boneIndex); + if (boneNode) return boneNode; + boneNode = this._buildBoneAttachedNode(bone, bone._boneIndex); + var subArmatureParentBone = null; + if (bone.armature.parent) { + var parentSlot = bone.armature.parent; + subArmatureParentBone = parentSlot.parent; + } + var parentBoneNode = buildBoneTree(bone.parent || subArmatureParentBone) || rootNode; + boneNode.parent = parentBoneNode; + bone.parent ? boneNode._rootNode = parentBoneNode._rootNode : boneNode._rootNode = parentBoneNode; + return boneNode; + }.bind(this); + for (var i = 0, n = res.length; i < n; i++) { + var targetNode = buildBoneTree(res[i]); + targetNode && 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._armatureNode.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 boneIndex = 0; + var attachedTraverse = function (armature) { + if (!armature) return; + var subArmatureParentNode = rootNode; + if (armature.parent) { + var parentSlot = armature.parent; + var parentBone = parentSlot.parent; + subArmatureParentNode = parentBone._attachedNode; + } + var bones = armature.getBones(), bone; + for (var i = 0, l = bones.length; i < l; i++) { + var curBoneIndex = boneIndex++; + bone = bones[i]; + bone._attachedNode = null; + var parentNode = null; + parentNode = bone.parent ? bone.parent._attachedNode : subArmatureParentNode; + if (parentNode) { + var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + bone.name); + if (boneNode && boneNode.isValid) this._buildBoneRelation(boneNode, bone, curBoneIndex); else { + boneNode = this._buildBoneAttachedNode(bone, curBoneIndex); + parentNode.addChild(boneNode); + } + boneNode._rootNode = subArmatureParentNode; + bone._attachedNode = boneNode; + } + } + var slots = armature.getSlots(), slot; + for (var _i2 = 0, _l2 = slots.length; _i2 < _l2; _i2++) { + slot = slots[_i2]; + slot.childArmature && attachedTraverse(slot.childArmature); + } + }.bind(this); + attachedTraverse(this._armature); + return rootNode; + }, + _hasAttachedNode: function _hasAttachedNode() { + if (!this._inited) return false; + var attachedRootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME); + return !!attachedRootNode; + }, + _associateAttachedNode: function _associateAttachedNode() { + if (!this._inited) return; + var rootNode = this._armatureNode.getChildByName(ATTACHED_ROOT_NAME); + if (!rootNode || !rootNode.isValid) return; + this._attachedRootNode = rootNode; + this._boneIndexToNode = {}; + var nodeArray = this._attachedNodeArray; + nodeArray.length = 0; + var armature = this._armature; + if (!armature) return; + limitNode(rootNode); + true; + var isCached = this._armatureDisplay.isAnimationCached(); + isCached && this._armatureDisplay._frameCache && this._armatureDisplay._frameCache.enableCacheAttachedInfo(); + var boneIndex = 0; + var attachedTraverse = function (armature) { + if (!armature) return; + var subArmatureParentNode = rootNode; + if (armature.parent) { + var parentSlot = armature.parent; + var parentBone = parentSlot.parent; + subArmatureParentNode = parentBone._attachedNode; + } + var bones = armature.getBones(), bone; + for (var i = 0, l = bones.length; i < l; i++) { + var curBoneIndex = boneIndex++; + bone = bones[i]; + bone._attachedNode = null; + var parentNode = null; + parentNode = bone.parent ? bone.parent._attachedNode : subArmatureParentNode; + if (parentNode) { + var boneNode = parentNode.getChildByName(ATTACHED_PRE_NAME + bone.name); + if (boneNode && boneNode.isValid) { + this._buildBoneRelation(boneNode, bone, curBoneIndex); + boneNode._rootNode = subArmatureParentNode; + bone._attachedNode = boneNode; + } + } + } + var slots = armature.getSlots(), slot; + for (var _i3 = 0, _l3 = slots.length; _i3 < _l3; _i3++) { + slot = slots[_i3]; + slot.childArmature && attachedTraverse(slot.childArmature); + } + }.bind(this); + attachedTraverse(armature); + }, + _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._armatureNode._worldMatrix; + _mat["default"].copy(rootNode._worldMatrix, rootMatrix); + rootNode._renderFlag &= ~FLAG_TRANSFORM; + var boneInfos = null; + var isCached = this._armatureDisplay.isAnimationCached(); + if (isCached) { + boneInfos = this._armatureDisplay._curFrame && this._armatureDisplay._curFrame.boneInfos; + if (!boneInfos) return; + } + var mulMat = this._armatureNode._mulMat; + var matrixHandle = function matrixHandle(nodeMat, parentMat, boneMat) { + var tm = _tempMat4.m; + tm[0] = boneMat.a; + tm[1] = boneMat.b; + tm[4] = -boneMat.c; + tm[5] = -boneMat.d; + tm[12] = boneMat.tx; + tm[13] = boneMat.ty; + 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 = isCached ? boneInfos[boneNode._boneIndex] : boneNode._bone; + if (!bone || bone._isInPool) { + boneNode.removeFromParent(true); + boneNode.destroy(); + nodeArray[i] = null; + nodeArrayDirty = true; + continue; + } + matrixHandle(boneNode._worldMatrix, boneNode._rootNode._worldMatrix, bone.globalTransformMatrix); + boneNode._renderFlag &= ~FLAG_TRANSFORM; + } + nodeArrayDirty && this._rebuildNodeArray(); + } + }); + module.exports = dragonBones.AttachUtil = AttachUtil; + }), { + "../../cocos2d/core/renderer/render-flow": 272, + "../../cocos2d/core/value-types/mat4": 341 + }], + 416: [(function (require, module, exports) { + "use strict"; + var EventTarget = require("../../cocos2d/core/event/event-target"); + dragonBones.CCArmatureDisplay = cc.Class({ + name: "dragonBones.CCArmatureDisplay", + properties: { + node: { + get: function get() { + return this; + } + } + }, + ctor: function ctor() { + this._eventTarget = new EventTarget(); + }, + setEventTarget: function setEventTarget(eventTarget) { + this._eventTarget = eventTarget; + }, + getRootDisplay: function getRootDisplay() { + var parentSlot = this._armature._parent; + if (!parentSlot) return this; + var slot; + while (parentSlot) { + slot = parentSlot; + parentSlot = parentSlot._armature._parent; + } + return slot._armature.getDisplay(); + }, + convertToRootSpace: function convertToRootSpace(pos) { + var slot = this._armature._parent; + if (!slot) return pos; + slot.updateWorldMatrix(); + var worldMatrix = slot._worldMatrix; + var worldMatrixm = worldMatrix.m; + var newPos = cc.v2(0, 0); + newPos.x = pos.x * worldMatrixm[0] + pos.y * worldMatrixm[4] + worldMatrixm[12]; + newPos.y = pos.x * worldMatrixm[1] + pos.y * worldMatrixm[5] + worldMatrixm[13]; + return newPos; + }, + convertToWorldSpace: function convertToWorldSpace(point) { + var newPos = this.convertToRootSpace(point); + var ccNode = this.getRootNode(); + var finalPos = ccNode.convertToWorldSpaceAR(newPos); + return finalPos; + }, + getRootNode: function getRootNode() { + var rootDisplay = this.getRootDisplay(); + return rootDisplay && rootDisplay._ccNode; + }, + dbInit: function dbInit(armature) { + this._armature = armature; + }, + dbClear: function dbClear() { + this._armature = null; + }, + dbUpdate: function dbUpdate() { }, + advanceTimeBySelf: function advanceTimeBySelf(on) { + this.shouldAdvanced = !!on; + }, + hasDBEventListener: function hasDBEventListener(type) { + return this._eventTarget.hasEventListener(type); + }, + addDBEventListener: function addDBEventListener(type, listener, target) { + this._eventTarget.on(type, listener, target); + }, + removeDBEventListener: function removeDBEventListener(type, listener, target) { + this._eventTarget.off(type, listener, target); + }, + dispatchDBEvent: function dispatchDBEvent(type, eventObject) { + this._eventTarget.emit(type, eventObject); + } + }); + }), { + "../../cocos2d/core/event/event-target": 186 + }], + 417: [(function (require, module, exports) { + "use strict"; + var BaseObject = dragonBones.BaseObject, BaseFactory = dragonBones.BaseFactory; + var CCFactory = dragonBones.CCFactory = cc.Class({ + name: "dragonBones.CCFactory", + extends: BaseFactory, + statics: { + _factory: null, + getInstance: function getInstance() { + CCFactory._factory || (CCFactory._factory = new CCFactory()); + return CCFactory._factory; + } + }, + ctor: function ctor() { + var eventManager = new dragonBones.CCArmatureDisplay(); + this._dragonBones = new dragonBones.DragonBones(eventManager); + if ((true, true) && cc.director._scheduler) { + cc.game.on(cc.game.EVENT_RESTART, this.initUpdate, this); + this.initUpdate(); + } + }, + initUpdate: function initUpdate(dt) { + cc.director._scheduler.enableForTarget(this); + cc.director._scheduler.scheduleUpdate(this, cc.Scheduler.PRIORITY_SYSTEM, false); + }, + update: function update(dt) { + this._dragonBones.advanceTime(dt); + }, + getDragonBonesDataByRawData: function getDragonBonesDataByRawData(rawData) { + var dataParser = rawData instanceof ArrayBuffer ? BaseFactory._binaryParser : this._dataParser; + return dataParser.parseDragonBonesData(rawData, 1); + }, + buildArmatureDisplay: function buildArmatureDisplay(armatureName, dragonBonesName, skinName, textureAtlasName) { + var armature = this.buildArmature(armatureName, dragonBonesName, skinName, textureAtlasName); + return armature && armature._display; + }, + createArmatureNode: function createArmatureNode(comp, armatureName, node) { + node = node || new cc.Node(); + var display = node.getComponent(dragonBones.ArmatureDisplay); + display || (display = node.addComponent(dragonBones.ArmatureDisplay)); + node.name = armatureName; + display._armatureName = armatureName; + display._N$dragonAsset = comp.dragonAsset; + display._N$dragonAtlasAsset = comp.dragonAtlasAsset; + display._init(); + return display; + }, + _buildTextureAtlasData: function _buildTextureAtlasData(textureAtlasData, textureAtlas) { + textureAtlasData ? textureAtlasData.renderTexture = textureAtlas : textureAtlasData = BaseObject.borrowObject(dragonBones.CCTextureAtlasData); + return textureAtlasData; + }, + _sortSlots: function _sortSlots() { + var slots = this._slots; + var sortedSlots = []; + for (var i = 0, l = slots.length; i < l; i++) { + var slot = slots[i]; + var zOrder = slot._zOrder; + var inserted = false; + for (var j = sortedSlots.length - 1; j >= 0; j--) if (zOrder >= sortedSlots[j]._zOrder) { + sortedSlots.splice(j + 1, 0, slot); + inserted = true; + break; + } + inserted || sortedSlots.splice(0, 0, slot); + } + this._slots = sortedSlots; + }, + _buildArmature: function _buildArmature(dataPackage) { + var armature = BaseObject.borrowObject(dragonBones.Armature); + armature._skinData = dataPackage.skin; + armature._animation = BaseObject.borrowObject(dragonBones.Animation); + armature._animation._armature = armature; + armature._animation.animations = dataPackage.armature.animations; + armature._isChildArmature = false; + var display = new dragonBones.CCArmatureDisplay(); + armature.init(dataPackage.armature, display, display, this._dragonBones); + return armature; + }, + _buildSlot: function _buildSlot(dataPackage, slotData, displays) { + var slot = BaseObject.borrowObject(dragonBones.CCSlot); + var display = slot; + slot.init(slotData, displays, display, display); + return slot; + }, + getDragonBonesDataByUUID: function getDragonBonesDataByUUID(uuid) { + for (var name in this._dragonBonesDataMap) if (-1 != name.indexOf(uuid)) return this._dragonBonesDataMap[name]; + return null; + }, + removeDragonBonesDataByUUID: function removeDragonBonesDataByUUID(uuid, disposeData) { + void 0 === disposeData && (disposeData = true); + for (var name in this._dragonBonesDataMap) { + if (-1 === name.indexOf(uuid)) continue; + disposeData && this._dragonBones.bufferObject(this._dragonBonesDataMap[name]); + delete this._dragonBonesDataMap[name]; + } + } + }); + }), {}], + 418: [(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 BinaryOffset = dragonBones.BinaryOffset; + var BoneType = dragonBones.BoneType; + dragonBones.CCSlot = cc.Class({ + name: "dragonBones.CCSlot", + extends: dragonBones.Slot, + ctor: function ctor() { + this._localVertices = []; + this._indices = []; + this._matrix = cc.mat4(); + this._worldMatrix = cc.mat4(); + this._worldMatrixDirty = true; + this._visible = false; + this._color = cc.color(); + }, + _onClear: function _onClear() { + this._super(); + this._localVertices.length = 0; + this._indices.length = 0; + _mat["default"].identity(this._matrix); + _mat["default"].identity(this._worldMatrix); + this._worldMatrixDirty = true; + this._color = cc.color(); + this._visible = false; + }, + statics: { + toString: function toString() { + return "[class dragonBones.CCSlot]"; + } + }, + _onUpdateDisplay: function _onUpdateDisplay() { }, + _initDisplay: function _initDisplay(value) { }, + _addDisplay: function _addDisplay() { + this._visible = true; + }, + _replaceDisplay: function _replaceDisplay(value) { }, + _removeDisplay: function _removeDisplay() { + this._visible = false; + }, + _disposeDisplay: function _disposeDisplay(object) { }, + _updateVisible: function _updateVisible() { + this._visible = this.parent._visible; + }, + _updateZOrder: function _updateZOrder() { }, + _updateBlendMode: function _updateBlendMode() { + if (this._childArmature) { + var childSlots = this._childArmature.getSlots(); + for (var i = 0, l = childSlots.length; i < l; i++) { + var slot = childSlots[i]; + slot._blendMode = this._blendMode; + slot._updateBlendMode(); + } + } + }, + _updateColor: function _updateColor() { + var c = this._color; + c.r = 255 * this._colorTransform.redMultiplier; + c.g = 255 * this._colorTransform.greenMultiplier; + c.b = 255 * this._colorTransform.blueMultiplier; + c.a = 255 * this._colorTransform.alphaMultiplier; + }, + getTexture: function getTexture() { + return this._textureData && this._textureData.spriteFrame && this._textureData.spriteFrame.getTexture(); + }, + _updateFrame: function _updateFrame() { + this._indices.length = 0; + var indices = this._indices, localVertices = this._localVertices; + var indexOffset = 0, vfOffset = 0; + var currentTextureData = this._textureData; + if (!this._display || this._displayIndex < 0 || !currentTextureData || !currentTextureData.spriteFrame) return; + var texture = currentTextureData.spriteFrame.getTexture(); + var textureAtlasWidth = texture.width; + var textureAtlasHeight = texture.height; + var region = currentTextureData.region; + var currentVerticesData = null !== this._deformVertices && this._display === this._meshDisplay ? this._deformVertices.verticesData : null; + if (currentVerticesData) { + var data = currentVerticesData.data; + var intArray = data.intArray; + var floatArray = data.floatArray; + var vertexCount = intArray[currentVerticesData.offset + BinaryOffset.MeshVertexCount]; + var triangleCount = intArray[currentVerticesData.offset + BinaryOffset.MeshTriangleCount]; + var vertexOffset = intArray[currentVerticesData.offset + BinaryOffset.MeshFloatOffset]; + vertexOffset < 0 && (vertexOffset += 65536); + var uvOffset = vertexOffset + 2 * vertexCount; + var scale = this._armature._armatureData.scale; + for (var i = 0, l = 2 * vertexCount; i < l; i += 2) { + localVertices[vfOffset++] = floatArray[vertexOffset + i] * scale; + localVertices[vfOffset++] = -floatArray[vertexOffset + i + 1] * scale; + if (currentVerticesData.rotated) { + localVertices[vfOffset++] = (region.x + (1 - floatArray[uvOffset + i]) * region.width) / textureAtlasWidth; + localVertices[vfOffset++] = (region.y + floatArray[uvOffset + i + 1] * region.height) / textureAtlasHeight; + } else { + localVertices[vfOffset++] = (region.x + floatArray[uvOffset + i] * region.width) / textureAtlasWidth; + localVertices[vfOffset++] = (region.y + floatArray[uvOffset + i + 1] * region.height) / textureAtlasHeight; + } + } + for (var _i = 0; _i < 3 * triangleCount; ++_i) indices[indexOffset++] = intArray[currentVerticesData.offset + BinaryOffset.MeshVertexIndices + _i]; + localVertices.length = vfOffset; + indices.length = indexOffset; + var isSkinned = !!currentVerticesData.weight; + isSkinned && this._identityTransform(); + } else { + var _l = region.x / textureAtlasWidth; + var b = (region.y + region.height) / textureAtlasHeight; + var r = (region.x + region.width) / textureAtlasWidth; + var t = region.y / textureAtlasHeight; + localVertices[vfOffset++] = 0; + localVertices[vfOffset++] = 0; + localVertices[vfOffset++] = _l; + localVertices[vfOffset++] = b; + localVertices[vfOffset++] = region.width; + localVertices[vfOffset++] = 0; + localVertices[vfOffset++] = r; + localVertices[vfOffset++] = b; + localVertices[vfOffset++] = 0; + localVertices[vfOffset++] = region.height; + localVertices[vfOffset++] = _l; + localVertices[vfOffset++] = t; + localVertices[vfOffset++] = region.width; + localVertices[vfOffset++] = region.height; + localVertices[vfOffset++] = r; + localVertices[vfOffset++] = t; + indices[0] = 0; + indices[1] = 1; + indices[2] = 2; + indices[3] = 1; + indices[4] = 3; + indices[5] = 2; + localVertices.length = vfOffset; + indices.length = 6; + } + this._visibleDirty = true; + this._blendModeDirty = true; + this._colorDirty = true; + }, + _updateMesh: function _updateMesh() { + var scale = this._armature._armatureData.scale; + var deformVertices = this._deformVertices.vertices; + var bones = this._deformVertices.bones; + var verticesData = this._deformVertices.verticesData; + var weightData = verticesData.weight; + var hasDeform = deformVertices.length > 0 && verticesData.inheritDeform; + var localVertices = this._localVertices; + if (weightData) { + var data = verticesData.data; + var intArray = data.intArray; + var floatArray = data.floatArray; + var vertexCount = intArray[verticesData.offset + BinaryOffset.MeshVertexCount]; + var weightFloatOffset = intArray[weightData.offset + BinaryOffset.WeigthFloatOffset]; + weightFloatOffset < 0 && (weightFloatOffset += 65536); + for (var i = 0, iB = weightData.offset + BinaryOffset.WeigthBoneIndices + bones.length, iV = weightFloatOffset, iF = 0, lvi = 0; i < vertexCount; i++, + lvi += 4) { + var boneCount = intArray[iB++]; + var xG = 0, yG = 0; + for (var j = 0; j < boneCount; ++j) { + var boneIndex = intArray[iB++]; + var bone = bones[boneIndex]; + if (null !== bone) { + var matrix = bone.globalTransformMatrix; + var weight = floatArray[iV++]; + var xL = floatArray[iV++] * scale; + var yL = floatArray[iV++] * scale; + if (hasDeform) { + xL += deformVertices[iF++]; + yL += deformVertices[iF++]; + } + xG += (matrix.a * xL + matrix.c * yL + matrix.tx) * weight; + yG += (matrix.b * xL + matrix.d * yL + matrix.ty) * weight; + } + } + localVertices[lvi] = xG; + localVertices[lvi + 1] = -yG; + } + } else if (hasDeform) { + var isSurface = this._parent._boneData.type !== BoneType.Bone; + var _data = verticesData.data; + var _intArray = _data.intArray; + var _floatArray = _data.floatArray; + var _vertexCount = _intArray[verticesData.offset + BinaryOffset.MeshVertexCount]; + var vertexOffset = _intArray[verticesData.offset + BinaryOffset.MeshFloatOffset]; + vertexOffset < 0 && (vertexOffset += 65536); + for (var _i2 = 0, l = _vertexCount, _lvi = 0; _i2 < l; _i2++, _lvi += 4) { + var x = _floatArray[vertexOffset + 2 * _i2] * scale + deformVertices[2 * _i2]; + var y = _floatArray[vertexOffset + 2 * _i2 + 1] * scale + deformVertices[2 * _i2 + 1]; + if (isSurface) { + var _matrix = this._parent._getGlobalTransformMatrix(x, y); + localVertices[_lvi] = _matrix.a * x + _matrix.c * y + _matrix.tx; + localVertices[_lvi + 1] = -_matrix.b * x + _matrix.d * y + _matrix.ty; + } else { + localVertices[_lvi] = x; + localVertices[_lvi + 1] = -y; + } + } + } + weightData && this._identityTransform(); + }, + _identityTransform: function _identityTransform() { + var m = this._matrix.m; + m[0] = 1; + m[1] = 0; + m[4] = -0; + m[5] = -1; + m[12] = 0; + m[13] = 0; + this._worldMatrixDirty = true; + }, + _updateTransform: function _updateTransform() { + var t = this._matrix; + var tm = t.m; + tm[0] = this.globalTransformMatrix.a; + tm[1] = this.globalTransformMatrix.b; + tm[4] = -this.globalTransformMatrix.c; + tm[5] = -this.globalTransformMatrix.d; + if (this._childArmature) { + tm[12] = this.globalTransformMatrix.tx; + tm[13] = this.globalTransformMatrix.ty; + } else { + tm[12] = this.globalTransformMatrix.tx - (this.globalTransformMatrix.a * this._pivotX - this.globalTransformMatrix.c * this._pivotY); + tm[13] = this.globalTransformMatrix.ty - (this.globalTransformMatrix.b * this._pivotX - this.globalTransformMatrix.d * this._pivotY); + } + this._worldMatrixDirty = true; + }, + updateWorldMatrix: function updateWorldMatrix() { + if (!this._armature) return; + var parentSlot = this._armature._parent; + parentSlot && parentSlot.updateWorldMatrix(); + if (this._worldMatrixDirty) { + this.calculWorldMatrix(); + var childArmature = this.childArmature; + if (!childArmature) return; + var slots = childArmature.getSlots(); + for (var i = 0, n = slots.length; i < n; i++) { + var slot = slots[i]; + slot && (slot._worldMatrixDirty = true); + } + } + }, + _mulMat: function _mulMat(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; + } + }, + calculWorldMatrix: function calculWorldMatrix() { + var parent = this._armature._parent; + parent ? this._mulMat(this._worldMatrix, parent._worldMatrix, this._matrix) : _mat["default"].copy(this._worldMatrix, this._matrix); + this._worldMatrixDirty = false; + } + }); + }), { + "../../cocos2d/core/value-types/mat4": 341 + }], + 419: [(function (require, module, exports) { + "use strict"; + dragonBones.CCTextureAtlasData = cc.Class({ + extends: dragonBones.TextureAtlasData, + name: "dragonBones.CCTextureAtlasData", + properties: { + _renderTexture: { + default: null, + serializable: false + }, + renderTexture: { + get: function get() { + return this._renderTexture; + }, + set: function set(value) { + this._renderTexture = value; + if (value) for (var k in this.textures) { + var textureData = this.textures[k]; + if (!textureData.spriteFrame) { + var rect = null; + rect = textureData.rotated ? cc.rect(textureData.region.x, textureData.region.y, textureData.region.height, textureData.region.width) : cc.rect(textureData.region.x, textureData.region.y, textureData.region.width, textureData.region.height); + var offset = cc.v2(0, 0); + var size = cc.size(rect.width, rect.height); + textureData.spriteFrame = new cc.SpriteFrame(); + textureData.spriteFrame.setTexture(value, rect, false, offset, size); + } + } else for (var _k in this.textures) { + var _textureData = this.textures[_k]; + _textureData.spriteFrame = null; + } + } + } + }, + statics: { + toString: function toString() { + return "[class dragonBones.CCTextureAtlasData]"; + } + }, + _onClear: function _onClear() { + dragonBones.TextureAtlasData.prototype._onClear.call(this); + this.renderTexture = null; + }, + createTexture: function createTexture() { + return dragonBones.BaseObject.borrowObject(dragonBones.CCTextureData); + } + }); + dragonBones.CCTextureData = cc.Class({ + extends: dragonBones.TextureData, + name: "dragonBones.CCTextureData", + properties: { + spriteFrame: { + default: null, + serializable: false + } + }, + statics: { + toString: function toString() { + return "[class dragonBones.CCTextureData]"; + } + }, + _onClear: function _onClear() { + dragonBones.TextureData.prototype._onClear.call(this); + this.spriteFrame = null; + } + }); + }), {}], + 420: [(function (require, module, exports) { + "use strict"; + var ArmatureCache = (true, require("./ArmatureCache").sharedCache); + var DragonBonesAsset = cc.Class({ + name: "dragonBones.DragonBonesAsset", + extends: cc.Asset, + ctor: function ctor() { + this.reset(); + }, + properties: { + _dragonBonesJson: "", + dragonBonesJson: { + get: function get() { + return this._dragonBonesJson; + }, + set: function set(value) { + this._dragonBonesJson = value; + this._dragonBonesJsonData = JSON.parse(value); + this.reset(); + } + }, + _nativeAsset: { + get: function get() { + return this._buffer; + }, + set: function set(bin) { + this._buffer = bin.buffer || bin; + this.reset(); + }, + override: true + } + }, + statics: { + preventDeferredLoadDependents: true + }, + createNode: false, + reset: function reset() { + this._clear(); + false; + }, + init: function init(factory, atlasUUID) { + false; + this._factory = factory; + !this._dragonBonesJsonData && this.dragonBonesJson && (this._dragonBonesJsonData = JSON.parse(this.dragonBonesJson)); + var rawData = null; + rawData = this._dragonBonesJsonData ? this._dragonBonesJsonData : this._nativeAsset; + if (!this._uuid) { + var dbData = this._factory.getDragonBonesDataByRawData(rawData); + dbData ? this._uuid = dbData.name : cc.warn("dragonbones name is empty"); + } + var armatureKey = this._uuid + "#" + atlasUUID; + var dragonBonesData = this._factory.getDragonBonesData(armatureKey); + if (dragonBonesData) return armatureKey; + this._factory.parseDragonBonesData(rawData, armatureKey); + return armatureKey; + }, + getArmatureEnum: false, + getAnimsEnum: false, + _clear: function _clear() { + if (this._factory) { + ArmatureCache.resetArmature(this._uuid); + this._factory.removeDragonBonesDataByUUID(this._uuid, true); + } + }, + destroy: function destroy() { + this._clear(); + this._super(); + } + }); + dragonBones.DragonBonesAsset = module.exports = DragonBonesAsset; + }), { + "./ArmatureCache": 413 + }], + 421: [(function (require, module, exports) { + "use strict"; + var ArmatureCache = (true, require("./ArmatureCache").sharedCache); + var DragonBonesAtlasAsset = cc.Class({ + name: "dragonBones.DragonBonesAtlasAsset", + extends: cc.Asset, + ctor: function ctor() { + this._clear(); + }, + properties: { + _atlasJson: "", + atlasJson: { + get: function get() { + return this._atlasJson; + }, + set: function set(value) { + this._atlasJson = value; + this._atlasJsonData = JSON.parse(this.atlasJson); + this._clear(); + } + }, + _texture: { + default: null, + type: cc.Texture2D, + formerlySerializedAs: "texture" + }, + texture: { + get: function get() { + return this._texture; + }, + set: function set(value) { + this._texture = value; + this._clear(); + } + }, + _textureAtlasData: null + }, + statics: { + preventDeferredLoadDependents: true + }, + createNode: false, + init: function init(factory) { + this._factory = factory; + this._atlasJsonData || (this._atlasJsonData = JSON.parse(this.atlasJson)); + var atlasJsonObj = this._atlasJsonData; + this._uuid = this._uuid || atlasJsonObj.name; + this._textureAtlasData ? factory.addTextureAtlasData(this._textureAtlasData, this._uuid) : this._textureAtlasData = factory.parseTextureAtlasData(atlasJsonObj, this.texture, this._uuid); + }, + _clear: function _clear() { + false; + if (this._factory) { + ArmatureCache.resetArmature(this._uuid); + this._factory.removeTextureAtlasData(this._uuid, true); + this._factory.removeDragonBonesDataByUUID(this._uuid, true); + } + this._textureAtlasData = null; + }, + destroy: function destroy() { + this._clear(); + this._super(); + } + }); + dragonBones.DragonBonesAtlasAsset = module.exports = DragonBonesAtlasAsset; + }), { + "./ArmatureCache": 413 + }], + 422: [(function (require, module, exports) { + "use strict"; + var _global = "undefined" === typeof window ? global : window; + true; + _global.dragonBones = require("./lib/dragonBones"); + if (void 0 !== _global.dragonBones) { + dragonBones._timeScale = 1; + Object.defineProperty(dragonBones, "timeScale", { + get: function get() { + return this._timeScale; + }, + set: function set(value) { + this._timeScale = value; + var factory = this.CCFactory.getInstance(); + factory._dragonBones.clock.timeScale = value; + }, + configurable: true + }); + dragonBones.DisplayType = { + Image: 0, + Armature: 1, + Mesh: 2 + }; + dragonBones.ArmatureType = { + Armature: 0, + MovieClip: 1, + Stage: 2 + }; + dragonBones.ExtensionType = { + FFD: 0, + AdjustColor: 10, + BevelFilter: 11, + BlurFilter: 12, + DropShadowFilter: 13, + GlowFilter: 14, + GradientBevelFilter: 15, + GradientGlowFilter: 16 + }; + dragonBones.EventType = { + Frame: 0, + Sound: 1 + }; + dragonBones.ActionType = { + Play: 0, + Stop: 1, + GotoAndPlay: 2, + GotoAndStop: 3, + FadeIn: 4, + FadeOut: 5 + }; + dragonBones.AnimationFadeOutMode = { + None: 0, + SameLayer: 1, + SameGroup: 2, + SameLayerAndGroup: 3, + All: 4 + }; + dragonBones.BinaryOffset = { + WeigthBoneCount: 0, + WeigthFloatOffset: 1, + WeigthBoneIndices: 2, + MeshVertexCount: 0, + MeshTriangleCount: 1, + MeshFloatOffset: 2, + MeshWeightOffset: 3, + MeshVertexIndices: 4, + TimelineScale: 0, + TimelineOffset: 1, + TimelineKeyFrameCount: 2, + TimelineFrameValueCount: 3, + TimelineFrameValueOffset: 4, + TimelineFrameOffset: 5, + FramePosition: 0, + FrameTweenType: 1, + FrameTweenEasingOrCurveSampleCount: 2, + FrameCurveSamples: 3, + DeformMeshOffset: 0, + DeformCount: 1, + DeformValueCount: 2, + DeformValueOffset: 3, + DeformFloatOffset: 4 + }; + dragonBones.BoneType = { + Bone: 0, + Surface: 1 + }; + true; + true; + require("./CCFactory"); + require("./CCSlot"); + require("./CCTextureData"); + require("./CCArmatureDisplay"); + require("./ArmatureCache"); + require("./DragonBonesAsset"); + require("./DragonBonesAtlasAsset"); + require("./ArmatureDisplay"); + require("./webgl-assembler"); + } + }), { + "./ArmatureCache": 413, + "./ArmatureDisplay": 414, + "./CCArmatureDisplay": 416, + "./CCFactory": 417, + "./CCSlot": 418, + "./CCTextureData": 419, + "./DragonBonesAsset": 420, + "./DragonBonesAtlasAsset": 421, + "./lib/dragonBones": 423, + "./webgl-assembler": 424 + }], + 423: [(function (require, module, exports) { + "use strict"; + var __extends = (void 0, (function () { + 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]); + }; + return function (d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })()); + var dragonBones; + (function (dragonBones) { })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var DragonBones = (function () { + function DragonBones(eventManager) { + this._clock = new dragonBones.WorldClock(); + this._events = []; + this._objects = []; + this._eventManager = null; + this._eventManager = eventManager; + console.info("DragonBones: " + DragonBones.VERSION + "\nWebsite: http://dragonbones.com/\nSource and Demo: https://github.com/DragonBones/"); + } + DragonBones.prototype.advanceTime = function (passedTime) { + if (this._objects.length > 0) { + for (var _i = 0, _a = this._objects; _i < _a.length; _i++) { + var object = _a[_i]; + object.returnToPool(); + } + this._objects.length = 0; + } + this._clock.advanceTime(passedTime); + if (this._events.length > 0) { + for (var i = 0; i < this._events.length; ++i) { + var eventObject = this._events[i]; + var armature = eventObject.armature; + if (null !== armature._armatureData) { + armature.eventDispatcher.dispatchDBEvent(eventObject.type, eventObject); + eventObject.type === dragonBones.EventObject.SOUND_EVENT && this._eventManager.dispatchDBEvent(eventObject.type, eventObject); + } + this.bufferObject(eventObject); + } + this._events.length = 0; + } + }; + DragonBones.prototype.bufferEvent = function (value) { + this._events.indexOf(value) < 0 && this._events.push(value); + }; + DragonBones.prototype.bufferObject = function (object) { + this._objects.indexOf(object) < 0 && this._objects.push(object); + }; + Object.defineProperty(DragonBones.prototype, "clock", { + get: function get() { + return this._clock; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DragonBones.prototype, "eventManager", { + get: function get() { + return this._eventManager; + }, + enumerable: true, + configurable: true + }); + DragonBones.VERSION = "5.6.300"; + DragonBones.yDown = false; + DragonBones.debug = false; + DragonBones.debugDraw = false; + DragonBones.webAssembly = false; + return DragonBones; + })(); + dragonBones.DragonBones = DragonBones; + })(dragonBones || (dragonBones = {})); + console.warn || (console.warn = function () { }); + console.assert || (console.assert = function () { }); + Date.now || (Date.now = function now() { + return new Date().getTime(); + }); + var __extends = function __extends(t, e) { + function r() { + this.constructor = t; + } + for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]); + r.prototype = e.prototype, t.prototype = new r(); + }; + var dragonBones; + (function (dragonBones) { + var BaseObject = (function () { + function BaseObject() { + this.hashCode = BaseObject._hashCode++; + this._isInPool = false; + } + BaseObject._returnObject = function (object) { + var classType = String(object.constructor); + var maxCount = classType in BaseObject._maxCountMap ? BaseObject._maxCountMap[classType] : BaseObject._defaultMaxCount; + var pool = BaseObject._poolsMap[classType] = BaseObject._poolsMap[classType] || []; + if (pool.length < maxCount) if (object._isInPool) console.warn("The object is already in the pool."); else { + object._isInPool = true; + pool.push(object); + } + }; + BaseObject.toString = function () { + throw new Error(); + }; + BaseObject.setMaxCount = function (objectConstructor, maxCount) { + (maxCount < 0 || maxCount !== maxCount) && (maxCount = 0); + if (null !== objectConstructor) { + var classType = String(objectConstructor); + var pool = classType in BaseObject._poolsMap ? BaseObject._poolsMap[classType] : null; + null !== pool && pool.length > maxCount && (pool.length = maxCount); + BaseObject._maxCountMap[classType] = maxCount; + } else { + BaseObject._defaultMaxCount = maxCount; + for (var classType in BaseObject._poolsMap) { + var pool = BaseObject._poolsMap[classType]; + pool.length > maxCount && (pool.length = maxCount); + classType in BaseObject._maxCountMap && (BaseObject._maxCountMap[classType] = maxCount); + } + } + }; + BaseObject.clearPool = function (objectConstructor) { + void 0 === objectConstructor && (objectConstructor = null); + if (null !== objectConstructor) { + var classType = String(objectConstructor); + var pool = classType in BaseObject._poolsMap ? BaseObject._poolsMap[classType] : null; + null !== pool && pool.length > 0 && (pool.length = 0); + } else for (var k in BaseObject._poolsMap) { + var pool = BaseObject._poolsMap[k]; + pool.length = 0; + } + }; + BaseObject.borrowObject = function (objectConstructor) { + var classType = String(objectConstructor); + var pool = classType in BaseObject._poolsMap ? BaseObject._poolsMap[classType] : null; + if (null !== pool && pool.length > 0) { + var object_1 = pool.pop(); + object_1._isInPool = false; + return object_1; + } + var object = new objectConstructor(); + object._onClear(); + return object; + }; + BaseObject.prototype.returnToPool = function () { + this._onClear(); + BaseObject._returnObject(this); + }; + BaseObject._hashCode = 0; + BaseObject._defaultMaxCount = 3e3; + BaseObject._maxCountMap = {}; + BaseObject._poolsMap = {}; + return BaseObject; + })(); + dragonBones.BaseObject = BaseObject; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Matrix = (function () { + function Matrix(a, b, c, d, tx, ty) { + void 0 === a && (a = 1); + void 0 === b && (b = 0); + void 0 === c && (c = 0); + void 0 === d && (d = 1); + void 0 === tx && (tx = 0); + void 0 === ty && (ty = 0); + this.a = a; + this.b = b; + this.c = c; + this.d = d; + this.tx = tx; + this.ty = ty; + } + Matrix.prototype.toString = function () { + return "[object dragonBones.Matrix] a:" + this.a + " b:" + this.b + " c:" + this.c + " d:" + this.d + " tx:" + this.tx + " ty:" + this.ty; + }; + Matrix.prototype.copyFrom = function (value) { + this.a = value.a; + this.b = value.b; + this.c = value.c; + this.d = value.d; + this.tx = value.tx; + this.ty = value.ty; + return this; + }; + Matrix.prototype.copyFromArray = function (value, offset) { + void 0 === offset && (offset = 0); + this.a = value[offset]; + this.b = value[offset + 1]; + this.c = value[offset + 2]; + this.d = value[offset + 3]; + this.tx = value[offset + 4]; + this.ty = value[offset + 5]; + return this; + }; + Matrix.prototype.identity = function () { + this.a = this.d = 1; + this.b = this.c = 0; + this.tx = this.ty = 0; + return this; + }; + Matrix.prototype.concat = function (value) { + var aA = this.a * value.a; + var bA = 0; + var cA = 0; + var dA = this.d * value.d; + var txA = this.tx * value.a + value.tx; + var tyA = this.ty * value.d + value.ty; + if (0 !== this.b || 0 !== this.c) { + aA += this.b * value.c; + bA += this.b * value.d; + cA += this.c * value.a; + dA += this.c * value.b; + } + if (0 !== value.b || 0 !== value.c) { + bA += this.a * value.b; + cA += this.d * value.c; + txA += this.ty * value.c; + tyA += this.tx * value.b; + } + this.a = aA; + this.b = bA; + this.c = cA; + this.d = dA; + this.tx = txA; + this.ty = tyA; + return this; + }; + Matrix.prototype.invert = function () { + var aA = this.a; + var bA = this.b; + var cA = this.c; + var dA = this.d; + var txA = this.tx; + var tyA = this.ty; + if (0 === bA && 0 === cA) { + this.b = this.c = 0; + if (0 === aA || 0 === dA) this.a = this.b = this.tx = this.ty = 0; else { + aA = this.a = 1 / aA; + dA = this.d = 1 / dA; + this.tx = -aA * txA; + this.ty = -dA * tyA; + } + return this; + } + var determinant = aA * dA - bA * cA; + if (0 === determinant) { + this.a = this.d = 1; + this.b = this.c = 0; + this.tx = this.ty = 0; + return this; + } + determinant = 1 / determinant; + var k = this.a = dA * determinant; + bA = this.b = -bA * determinant; + cA = this.c = -cA * determinant; + dA = this.d = aA * determinant; + this.tx = -(k * txA + cA * tyA); + this.ty = -(bA * txA + dA * tyA); + return this; + }; + Matrix.prototype.transformPoint = function (x, y, result, delta) { + void 0 === delta && (delta = false); + result.x = this.a * x + this.c * y; + result.y = this.b * x + this.d * y; + if (!delta) { + result.x += this.tx; + result.y += this.ty; + } + }; + Matrix.prototype.transformRectangle = function (rectangle, delta) { + void 0 === delta && (delta = false); + var a = this.a; + var b = this.b; + var c = this.c; + var d = this.d; + var tx = delta ? 0 : this.tx; + var ty = delta ? 0 : this.ty; + var x = rectangle.x; + var y = rectangle.y; + var xMax = x + rectangle.width; + var yMax = y + rectangle.height; + var x0 = a * x + c * y + tx; + var y0 = b * x + d * y + ty; + var x1 = a * xMax + c * y + tx; + var y1 = b * xMax + d * y + ty; + var x2 = a * xMax + c * yMax + tx; + var y2 = b * xMax + d * yMax + ty; + var x3 = a * x + c * yMax + tx; + var y3 = b * x + d * yMax + ty; + var tmp = 0; + if (x0 > x1) { + tmp = x0; + x0 = x1; + x1 = tmp; + } + if (x2 > x3) { + tmp = x2; + x2 = x3; + x3 = tmp; + } + rectangle.x = Math.floor(x0 < x2 ? x0 : x2); + rectangle.width = Math.ceil((x1 > x3 ? x1 : x3) - rectangle.x); + if (y0 > y1) { + tmp = y0; + y0 = y1; + y1 = tmp; + } + if (y2 > y3) { + tmp = y2; + y2 = y3; + y3 = tmp; + } + rectangle.y = Math.floor(y0 < y2 ? y0 : y2); + rectangle.height = Math.ceil((y1 > y3 ? y1 : y3) - rectangle.y); + }; + return Matrix; + })(); + dragonBones.Matrix = Matrix; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Transform = (function () { + function Transform(x, y, skew, rotation, scaleX, scaleY) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === skew && (skew = 0); + void 0 === rotation && (rotation = 0); + void 0 === scaleX && (scaleX = 1); + void 0 === scaleY && (scaleY = 1); + this.x = x; + this.y = y; + this.skew = skew; + this.rotation = rotation; + this.scaleX = scaleX; + this.scaleY = scaleY; + } + Transform.normalizeRadian = function (value) { + value = (value + Math.PI) % (2 * Math.PI); + value += value > 0 ? -Math.PI : Math.PI; + return value; + }; + Transform.prototype.toString = function () { + return "[object dragonBones.Transform] x:" + this.x + " y:" + this.y + " skewX:" + 180 * this.skew / Math.PI + " skewY:" + 180 * this.rotation / Math.PI + " scaleX:" + this.scaleX + " scaleY:" + this.scaleY; + }; + Transform.prototype.copyFrom = function (value) { + this.x = value.x; + this.y = value.y; + this.skew = value.skew; + this.rotation = value.rotation; + this.scaleX = value.scaleX; + this.scaleY = value.scaleY; + return this; + }; + Transform.prototype.identity = function () { + this.x = this.y = 0; + this.skew = this.rotation = 0; + this.scaleX = this.scaleY = 1; + return this; + }; + Transform.prototype.add = function (value) { + this.x += value.x; + this.y += value.y; + this.skew += value.skew; + this.rotation += value.rotation; + this.scaleX *= value.scaleX; + this.scaleY *= value.scaleY; + return this; + }; + Transform.prototype.minus = function (value) { + this.x -= value.x; + this.y -= value.y; + this.skew -= value.skew; + this.rotation -= value.rotation; + this.scaleX /= value.scaleX; + this.scaleY /= value.scaleY; + return this; + }; + Transform.prototype.fromMatrix = function (matrix) { + var backupScaleX = this.scaleX, backupScaleY = this.scaleY; + var PI_Q = Transform.PI_Q; + this.x = matrix.tx; + this.y = matrix.ty; + this.rotation = Math.atan(matrix.b / matrix.a); + var skewX = Math.atan(-matrix.c / matrix.d); + this.scaleX = this.rotation > -PI_Q && this.rotation < PI_Q ? matrix.a / Math.cos(this.rotation) : matrix.b / Math.sin(this.rotation); + this.scaleY = skewX > -PI_Q && skewX < PI_Q ? matrix.d / Math.cos(skewX) : -matrix.c / Math.sin(skewX); + if (backupScaleX >= 0 && this.scaleX < 0) { + this.scaleX = -this.scaleX; + this.rotation = this.rotation - Math.PI; + } + if (backupScaleY >= 0 && this.scaleY < 0) { + this.scaleY = -this.scaleY; + skewX -= Math.PI; + } + this.skew = skewX - this.rotation; + return this; + }; + Transform.prototype.toMatrix = function (matrix) { + if (0 === this.rotation) { + matrix.a = 1; + matrix.b = 0; + } else { + matrix.a = Math.cos(this.rotation); + matrix.b = Math.sin(this.rotation); + } + if (0 === this.skew) { + matrix.c = -matrix.b; + matrix.d = matrix.a; + } else { + matrix.c = -Math.sin(this.skew + this.rotation); + matrix.d = Math.cos(this.skew + this.rotation); + } + if (1 !== this.scaleX) { + matrix.a *= this.scaleX; + matrix.b *= this.scaleX; + } + if (1 !== this.scaleY) { + matrix.c *= this.scaleY; + matrix.d *= this.scaleY; + } + matrix.tx = this.x; + matrix.ty = this.y; + return this; + }; + Transform.PI = Math.PI; + Transform.PI_D = 2 * Math.PI; + Transform.PI_H = Math.PI / 2; + Transform.PI_Q = Math.PI / 4; + Transform.RAD_DEG = 180 / Math.PI; + Transform.DEG_RAD = Math.PI / 180; + return Transform; + })(); + dragonBones.Transform = Transform; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var ColorTransform = (function () { + function ColorTransform(alphaMultiplier, redMultiplier, greenMultiplier, blueMultiplier, alphaOffset, redOffset, greenOffset, blueOffset) { + void 0 === alphaMultiplier && (alphaMultiplier = 1); + void 0 === redMultiplier && (redMultiplier = 1); + void 0 === greenMultiplier && (greenMultiplier = 1); + void 0 === blueMultiplier && (blueMultiplier = 1); + void 0 === alphaOffset && (alphaOffset = 0); + void 0 === redOffset && (redOffset = 0); + void 0 === greenOffset && (greenOffset = 0); + void 0 === blueOffset && (blueOffset = 0); + this.alphaMultiplier = alphaMultiplier; + this.redMultiplier = redMultiplier; + this.greenMultiplier = greenMultiplier; + this.blueMultiplier = blueMultiplier; + this.alphaOffset = alphaOffset; + this.redOffset = redOffset; + this.greenOffset = greenOffset; + this.blueOffset = blueOffset; + } + ColorTransform.prototype.copyFrom = function (value) { + this.alphaMultiplier = value.alphaMultiplier; + this.redMultiplier = value.redMultiplier; + this.greenMultiplier = value.greenMultiplier; + this.blueMultiplier = value.blueMultiplier; + this.alphaOffset = value.alphaOffset; + this.redOffset = value.redOffset; + this.greenOffset = value.greenOffset; + this.blueOffset = value.blueOffset; + }; + ColorTransform.prototype.identity = function () { + this.alphaMultiplier = this.redMultiplier = this.greenMultiplier = this.blueMultiplier = 1; + this.alphaOffset = this.redOffset = this.greenOffset = this.blueOffset = 0; + }; + return ColorTransform; + })(); + dragonBones.ColorTransform = ColorTransform; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Point = (function () { + function Point(x, y) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + this.x = x; + this.y = y; + } + Point.prototype.copyFrom = function (value) { + this.x = value.x; + this.y = value.y; + }; + Point.prototype.clear = function () { + this.x = this.y = 0; + }; + return Point; + })(); + dragonBones.Point = Point; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Rectangle = (function () { + function Rectangle(x, y, width, height) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === width && (width = 0); + void 0 === height && (height = 0); + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + Rectangle.prototype.copyFrom = function (value) { + this.x = value.x; + this.y = value.y; + this.width = value.width; + this.height = value.height; + }; + Rectangle.prototype.clear = function () { + this.x = this.y = 0; + this.width = this.height = 0; + }; + return Rectangle; + })(); + dragonBones.Rectangle = Rectangle; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var UserData = (function (_super) { + __extends(UserData, _super); + function UserData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.ints = []; + _this.floats = []; + _this.strings = []; + return _this; + } + UserData.toString = function () { + return "[class dragonBones.UserData]"; + }; + UserData.prototype._onClear = function () { + this.ints.length = 0; + this.floats.length = 0; + this.strings.length = 0; + }; + UserData.prototype.addInt = function (value) { + this.ints.push(value); + }; + UserData.prototype.addFloat = function (value) { + this.floats.push(value); + }; + UserData.prototype.addString = function (value) { + this.strings.push(value); + }; + UserData.prototype.getInt = function (index) { + void 0 === index && (index = 0); + return index >= 0 && index < this.ints.length ? this.ints[index] : 0; + }; + UserData.prototype.getFloat = function (index) { + void 0 === index && (index = 0); + return index >= 0 && index < this.floats.length ? this.floats[index] : 0; + }; + UserData.prototype.getString = function (index) { + void 0 === index && (index = 0); + return index >= 0 && index < this.strings.length ? this.strings[index] : ""; + }; + return UserData; + })(dragonBones.BaseObject); + dragonBones.UserData = UserData; + var ActionData = (function (_super) { + __extends(ActionData, _super); + function ActionData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.data = null; + return _this; + } + ActionData.toString = function () { + return "[class dragonBones.ActionData]"; + }; + ActionData.prototype._onClear = function () { + null !== this.data && this.data.returnToPool(); + this.type = 0; + this.name = ""; + this.bone = null; + this.slot = null; + this.data = null; + }; + return ActionData; + })(dragonBones.BaseObject); + dragonBones.ActionData = ActionData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var DragonBonesData = (function (_super) { + __extends(DragonBonesData, _super); + function DragonBonesData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.frameIndices = []; + _this.cachedFrames = []; + _this.armatureNames = []; + _this.armatures = {}; + _this.userData = null; + return _this; + } + DragonBonesData.toString = function () { + return "[class dragonBones.DragonBonesData]"; + }; + DragonBonesData.prototype._onClear = function () { + for (var k in this.armatures) { + this.armatures[k].returnToPool(); + delete this.armatures[k]; + } + null !== this.userData && this.userData.returnToPool(); + this.autoSearch = false; + this.frameRate = 0; + this.version = ""; + this.name = ""; + this.stage = null; + this.frameIndices.length = 0; + this.cachedFrames.length = 0; + this.armatureNames.length = 0; + this.binary = null; + this.intArray = null; + this.floatArray = null; + this.frameIntArray = null; + this.frameFloatArray = null; + this.frameArray = null; + this.timelineArray = null; + this.userData = null; + }; + DragonBonesData.prototype.addArmature = function (value) { + if (value.name in this.armatures) { + console.warn("Same armature: " + value.name); + return; + } + value.parent = this; + this.armatures[value.name] = value; + this.armatureNames.push(value.name); + }; + DragonBonesData.prototype.getArmature = function (armatureName) { + return armatureName in this.armatures ? this.armatures[armatureName] : null; + }; + DragonBonesData.prototype.dispose = function () { + console.warn("\u5df2\u5e9f\u5f03"); + this.returnToPool(); + }; + return DragonBonesData; + })(dragonBones.BaseObject); + dragonBones.DragonBonesData = DragonBonesData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var ArmatureData = (function (_super) { + __extends(ArmatureData, _super); + function ArmatureData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.aabb = new dragonBones.Rectangle(); + _this.animationNames = []; + _this.sortedBones = []; + _this.sortedSlots = []; + _this.defaultActions = []; + _this.actions = []; + _this.bones = {}; + _this.slots = {}; + _this.constraints = {}; + _this.skins = {}; + _this.animations = {}; + _this.canvas = null; + _this.userData = null; + return _this; + } + ArmatureData.toString = function () { + return "[class dragonBones.ArmatureData]"; + }; + ArmatureData.prototype._onClear = function () { + for (var _i = 0, _a = this.defaultActions; _i < _a.length; _i++) { + var action = _a[_i]; + action.returnToPool(); + } + for (var _b = 0, _c = this.actions; _b < _c.length; _b++) { + var action = _c[_b]; + action.returnToPool(); + } + for (var k in this.bones) { + this.bones[k].returnToPool(); + delete this.bones[k]; + } + for (var k in this.slots) { + this.slots[k].returnToPool(); + delete this.slots[k]; + } + for (var k in this.constraints) { + this.constraints[k].returnToPool(); + delete this.constraints[k]; + } + for (var k in this.skins) { + this.skins[k].returnToPool(); + delete this.skins[k]; + } + for (var k in this.animations) { + this.animations[k].returnToPool(); + delete this.animations[k]; + } + null !== this.canvas && this.canvas.returnToPool(); + null !== this.userData && this.userData.returnToPool(); + this.type = 0; + this.frameRate = 0; + this.cacheFrameRate = 0; + this.scale = 1; + this.name = ""; + this.aabb.clear(); + this.animationNames.length = 0; + this.sortedBones.length = 0; + this.sortedSlots.length = 0; + this.defaultActions.length = 0; + this.actions.length = 0; + this.defaultSkin = null; + this.defaultAnimation = null; + this.canvas = null; + this.userData = null; + this.parent = null; + }; + ArmatureData.prototype.sortBones = function () { + var total = this.sortedBones.length; + if (total <= 0) return; + var sortHelper = this.sortedBones.concat(); + var index = 0; + var count = 0; + this.sortedBones.length = 0; + while (count < total) { + var bone = sortHelper[index++]; + index >= total && (index = 0); + if (this.sortedBones.indexOf(bone) >= 0) continue; + var flag = false; + for (var k in this.constraints) { + var constraint = this.constraints[k]; + if (constraint.root === bone && this.sortedBones.indexOf(constraint.target) < 0) { + flag = true; + break; + } + } + if (flag) continue; + if (null !== bone.parent && this.sortedBones.indexOf(bone.parent) < 0) continue; + this.sortedBones.push(bone); + count++; + } + }; + ArmatureData.prototype.cacheFrames = function (frameRate) { + if (this.cacheFrameRate > 0) return; + this.cacheFrameRate = frameRate; + for (var k in this.animations) this.animations[k].cacheFrames(this.cacheFrameRate); + }; + ArmatureData.prototype.setCacheFrame = function (globalTransformMatrix, transform) { + var dataArray = this.parent.cachedFrames; + var arrayOffset = dataArray.length; + dataArray.length += 10; + dataArray[arrayOffset] = globalTransformMatrix.a; + dataArray[arrayOffset + 1] = globalTransformMatrix.b; + dataArray[arrayOffset + 2] = globalTransformMatrix.c; + dataArray[arrayOffset + 3] = globalTransformMatrix.d; + dataArray[arrayOffset + 4] = globalTransformMatrix.tx; + dataArray[arrayOffset + 5] = globalTransformMatrix.ty; + dataArray[arrayOffset + 6] = transform.rotation; + dataArray[arrayOffset + 7] = transform.skew; + dataArray[arrayOffset + 8] = transform.scaleX; + dataArray[arrayOffset + 9] = transform.scaleY; + return arrayOffset; + }; + ArmatureData.prototype.getCacheFrame = function (globalTransformMatrix, transform, arrayOffset) { + var dataArray = this.parent.cachedFrames; + globalTransformMatrix.a = dataArray[arrayOffset]; + globalTransformMatrix.b = dataArray[arrayOffset + 1]; + globalTransformMatrix.c = dataArray[arrayOffset + 2]; + globalTransformMatrix.d = dataArray[arrayOffset + 3]; + globalTransformMatrix.tx = dataArray[arrayOffset + 4]; + globalTransformMatrix.ty = dataArray[arrayOffset + 5]; + transform.rotation = dataArray[arrayOffset + 6]; + transform.skew = dataArray[arrayOffset + 7]; + transform.scaleX = dataArray[arrayOffset + 8]; + transform.scaleY = dataArray[arrayOffset + 9]; + transform.x = globalTransformMatrix.tx; + transform.y = globalTransformMatrix.ty; + }; + ArmatureData.prototype.addBone = function (value) { + if (value.name in this.bones) { + console.warn("Same bone: " + value.name); + return; + } + this.bones[value.name] = value; + this.sortedBones.push(value); + }; + ArmatureData.prototype.addSlot = function (value) { + if (value.name in this.slots) { + console.warn("Same slot: " + value.name); + return; + } + this.slots[value.name] = value; + this.sortedSlots.push(value); + }; + ArmatureData.prototype.addConstraint = function (value) { + if (value.name in this.constraints) { + console.warn("Same constraint: " + value.name); + return; + } + this.constraints[value.name] = value; + }; + ArmatureData.prototype.addSkin = function (value) { + if (value.name in this.skins) { + console.warn("Same skin: " + value.name); + return; + } + value.parent = this; + this.skins[value.name] = value; + null === this.defaultSkin && (this.defaultSkin = value); + "default" === value.name && (this.defaultSkin = value); + }; + ArmatureData.prototype.addAnimation = function (value) { + if (value.name in this.animations) { + console.warn("Same animation: " + value.name); + return; + } + value.parent = this; + this.animations[value.name] = value; + this.animationNames.push(value.name); + null === this.defaultAnimation && (this.defaultAnimation = value); + }; + ArmatureData.prototype.addAction = function (value, isDefault) { + isDefault ? this.defaultActions.push(value) : this.actions.push(value); + }; + ArmatureData.prototype.getBone = function (boneName) { + return boneName in this.bones ? this.bones[boneName] : null; + }; + ArmatureData.prototype.getSlot = function (slotName) { + return slotName in this.slots ? this.slots[slotName] : null; + }; + ArmatureData.prototype.getConstraint = function (constraintName) { + return constraintName in this.constraints ? this.constraints[constraintName] : null; + }; + ArmatureData.prototype.getSkin = function (skinName) { + return skinName in this.skins ? this.skins[skinName] : null; + }; + ArmatureData.prototype.getMesh = function (skinName, slotName, meshName) { + var skin = this.getSkin(skinName); + if (null === skin) return null; + return skin.getDisplay(slotName, meshName); + }; + ArmatureData.prototype.getAnimation = function (animationName) { + return animationName in this.animations ? this.animations[animationName] : null; + }; + return ArmatureData; + })(dragonBones.BaseObject); + dragonBones.ArmatureData = ArmatureData; + var BoneData = (function (_super) { + __extends(BoneData, _super); + function BoneData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.transform = new dragonBones.Transform(); + _this.userData = null; + return _this; + } + BoneData.toString = function () { + return "[class dragonBones.BoneData]"; + }; + BoneData.prototype._onClear = function () { + null !== this.userData && this.userData.returnToPool(); + this.inheritTranslation = false; + this.inheritRotation = false; + this.inheritScale = false; + this.inheritReflection = false; + this.type = 0; + this.length = 0; + this.name = ""; + this.transform.identity(); + this.userData = null; + this.parent = null; + }; + return BoneData; + })(dragonBones.BaseObject); + dragonBones.BoneData = BoneData; + var SurfaceData = (function (_super) { + __extends(SurfaceData, _super); + function SurfaceData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.vertices = []; + return _this; + } + SurfaceData.toString = function () { + return "[class dragonBones.SurfaceData]"; + }; + SurfaceData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 1; + this.segmentX = 0; + this.segmentY = 0; + this.vertices.length = 0; + }; + return SurfaceData; + })(BoneData); + dragonBones.SurfaceData = SurfaceData; + var SlotData = (function (_super) { + __extends(SlotData, _super); + function SlotData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.color = null; + _this.userData = null; + return _this; + } + SlotData.createColor = function () { + return new dragonBones.ColorTransform(); + }; + SlotData.toString = function () { + return "[class dragonBones.SlotData]"; + }; + SlotData.prototype._onClear = function () { + null !== this.userData && this.userData.returnToPool(); + this.blendMode = 0; + this.displayIndex = 0; + this.zOrder = 0; + this.name = ""; + this.color = null; + this.userData = null; + this.parent = null; + }; + SlotData.DEFAULT_COLOR = new dragonBones.ColorTransform(); + return SlotData; + })(dragonBones.BaseObject); + dragonBones.SlotData = SlotData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var ConstraintData = (function (_super) { + __extends(ConstraintData, _super); + function ConstraintData() { + return null !== _super && _super.apply(this, arguments) || this; + } + ConstraintData.prototype._onClear = function () { + this.order = 0; + this.name = ""; + this.type = 0; + this.target = null; + this.root = null; + this.bone = null; + }; + return ConstraintData; + })(dragonBones.BaseObject); + dragonBones.ConstraintData = ConstraintData; + var IKConstraintData = (function (_super) { + __extends(IKConstraintData, _super); + function IKConstraintData() { + return null !== _super && _super.apply(this, arguments) || this; + } + IKConstraintData.toString = function () { + return "[class dragonBones.IKConstraintData]"; + }; + IKConstraintData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.scaleEnabled = false; + this.bendPositive = false; + this.weight = 1; + }; + return IKConstraintData; + })(ConstraintData); + dragonBones.IKConstraintData = IKConstraintData; + var PathConstraintData = (function (_super) { + __extends(PathConstraintData, _super); + function PathConstraintData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.bones = []; + return _this; + } + PathConstraintData.toString = function () { + return "[class dragonBones.PathConstraintData]"; + }; + PathConstraintData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.pathSlot = null; + this.pathDisplayData = null; + this.bones.length = 0; + this.positionMode = 0; + this.spacingMode = 1; + this.rotateMode = 1; + this.position = 0; + this.spacing = 0; + this.rotateOffset = 0; + this.rotateMix = 0; + this.translateMix = 0; + }; + PathConstraintData.prototype.AddBone = function (value) { + this.bones.push(value); + }; + return PathConstraintData; + })(ConstraintData); + dragonBones.PathConstraintData = PathConstraintData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var CanvasData = (function (_super) { + __extends(CanvasData, _super); + function CanvasData() { + return null !== _super && _super.apply(this, arguments) || this; + } + CanvasData.toString = function () { + return "[class dragonBones.CanvasData]"; + }; + CanvasData.prototype._onClear = function () { + this.hasBackground = false; + this.color = 0; + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + }; + return CanvasData; + })(dragonBones.BaseObject); + dragonBones.CanvasData = CanvasData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var SkinData = (function (_super) { + __extends(SkinData, _super); + function SkinData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.displays = {}; + return _this; + } + SkinData.toString = function () { + return "[class dragonBones.SkinData]"; + }; + SkinData.prototype._onClear = function () { + for (var k in this.displays) { + var slotDisplays = this.displays[k]; + for (var _i = 0, slotDisplays_1 = slotDisplays; _i < slotDisplays_1.length; _i++) { + var display = slotDisplays_1[_i]; + null !== display && display.returnToPool(); + } + delete this.displays[k]; + } + this.name = ""; + this.parent = null; + }; + SkinData.prototype.addDisplay = function (slotName, value) { + slotName in this.displays || (this.displays[slotName] = []); + null !== value && (value.parent = this); + var slotDisplays = this.displays[slotName]; + slotDisplays.push(value); + }; + SkinData.prototype.getDisplay = function (slotName, displayName) { + var slotDisplays = this.getDisplays(slotName); + if (null !== slotDisplays) for (var _i = 0, slotDisplays_2 = slotDisplays; _i < slotDisplays_2.length; _i++) { + var display = slotDisplays_2[_i]; + if (null !== display && display.name === displayName) return display; + } + return null; + }; + SkinData.prototype.getDisplays = function (slotName) { + if (!(slotName in this.displays)) return null; + return this.displays[slotName]; + }; + return SkinData; + })(dragonBones.BaseObject); + dragonBones.SkinData = SkinData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var VerticesData = (function () { + function VerticesData() { + this.weight = null; + } + VerticesData.prototype.clear = function () { + this.isShared || null === this.weight || this.weight.returnToPool(); + this.isShared = false; + this.inheritDeform = false; + this.offset = 0; + this.data = null; + this.weight = null; + }; + VerticesData.prototype.shareFrom = function (value) { + this.isShared = true; + this.offset = value.offset; + this.weight = value.weight; + }; + return VerticesData; + })(); + dragonBones.VerticesData = VerticesData; + var DisplayData = (function (_super) { + __extends(DisplayData, _super); + function DisplayData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.transform = new dragonBones.Transform(); + return _this; + } + DisplayData.prototype._onClear = function () { + this.name = ""; + this.path = ""; + this.transform.identity(); + this.parent = null; + }; + return DisplayData; + })(dragonBones.BaseObject); + dragonBones.DisplayData = DisplayData; + var ImageDisplayData = (function (_super) { + __extends(ImageDisplayData, _super); + function ImageDisplayData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.pivot = new dragonBones.Point(); + return _this; + } + ImageDisplayData.toString = function () { + return "[class dragonBones.ImageDisplayData]"; + }; + ImageDisplayData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 0; + this.pivot.clear(); + this.texture = null; + }; + return ImageDisplayData; + })(DisplayData); + dragonBones.ImageDisplayData = ImageDisplayData; + var ArmatureDisplayData = (function (_super) { + __extends(ArmatureDisplayData, _super); + function ArmatureDisplayData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.actions = []; + return _this; + } + ArmatureDisplayData.toString = function () { + return "[class dragonBones.ArmatureDisplayData]"; + }; + ArmatureDisplayData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + for (var _i = 0, _a = this.actions; _i < _a.length; _i++) { + var action = _a[_i]; + action.returnToPool(); + } + this.type = 1; + this.inheritAnimation = false; + this.actions.length = 0; + this.armature = null; + }; + ArmatureDisplayData.prototype.addAction = function (value) { + this.actions.push(value); + }; + return ArmatureDisplayData; + })(DisplayData); + dragonBones.ArmatureDisplayData = ArmatureDisplayData; + var MeshDisplayData = (function (_super) { + __extends(MeshDisplayData, _super); + function MeshDisplayData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.vertices = new VerticesData(); + return _this; + } + MeshDisplayData.toString = function () { + return "[class dragonBones.MeshDisplayData]"; + }; + MeshDisplayData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 2; + this.vertices.clear(); + this.texture = null; + }; + return MeshDisplayData; + })(DisplayData); + dragonBones.MeshDisplayData = MeshDisplayData; + var BoundingBoxDisplayData = (function (_super) { + __extends(BoundingBoxDisplayData, _super); + function BoundingBoxDisplayData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.boundingBox = null; + return _this; + } + BoundingBoxDisplayData.toString = function () { + return "[class dragonBones.BoundingBoxDisplayData]"; + }; + BoundingBoxDisplayData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + null !== this.boundingBox && this.boundingBox.returnToPool(); + this.type = 3; + this.boundingBox = null; + }; + return BoundingBoxDisplayData; + })(DisplayData); + dragonBones.BoundingBoxDisplayData = BoundingBoxDisplayData; + var PathDisplayData = (function (_super) { + __extends(PathDisplayData, _super); + function PathDisplayData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.vertices = new VerticesData(); + _this.curveLengths = []; + return _this; + } + PathDisplayData.toString = function () { + return "[class dragonBones.PathDisplayData]"; + }; + PathDisplayData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 4; + this.closed = false; + this.constantSpeed = false; + this.vertices.clear(); + this.curveLengths.length = 0; + }; + return PathDisplayData; + })(DisplayData); + dragonBones.PathDisplayData = PathDisplayData; + var WeightData = (function (_super) { + __extends(WeightData, _super); + function WeightData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.bones = []; + return _this; + } + WeightData.toString = function () { + return "[class dragonBones.WeightData]"; + }; + WeightData.prototype._onClear = function () { + this.count = 0; + this.offset = 0; + this.bones.length = 0; + }; + WeightData.prototype.addBone = function (value) { + this.bones.push(value); + }; + return WeightData; + })(dragonBones.BaseObject); + dragonBones.WeightData = WeightData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var BoundingBoxData = (function (_super) { + __extends(BoundingBoxData, _super); + function BoundingBoxData() { + return null !== _super && _super.apply(this, arguments) || this; + } + BoundingBoxData.prototype._onClear = function () { + this.color = 0; + this.width = 0; + this.height = 0; + }; + return BoundingBoxData; + })(dragonBones.BaseObject); + dragonBones.BoundingBoxData = BoundingBoxData; + var RectangleBoundingBoxData = (function (_super) { + __extends(RectangleBoundingBoxData, _super); + function RectangleBoundingBoxData() { + return null !== _super && _super.apply(this, arguments) || this; + } + RectangleBoundingBoxData.toString = function () { + return "[class dragonBones.RectangleBoundingBoxData]"; + }; + RectangleBoundingBoxData._computeOutCode = function (x, y, xMin, yMin, xMax, yMax) { + var code = 0; + x < xMin ? code |= 1 : x > xMax && (code |= 2); + y < yMin ? code |= 4 : y > yMax && (code |= 8); + return code; + }; + RectangleBoundingBoxData.rectangleIntersectsSegment = function (xA, yA, xB, yB, xMin, yMin, xMax, yMax, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + var inSideA = xA > xMin && xA < xMax && yA > yMin && yA < yMax; + var inSideB = xB > xMin && xB < xMax && yB > yMin && yB < yMax; + if (inSideA && inSideB) return -1; + var intersectionCount = 0; + var outcode0 = RectangleBoundingBoxData._computeOutCode(xA, yA, xMin, yMin, xMax, yMax); + var outcode1 = RectangleBoundingBoxData._computeOutCode(xB, yB, xMin, yMin, xMax, yMax); + while (true) { + if (0 === (outcode0 | outcode1)) { + intersectionCount = 2; + break; + } + if (0 !== (outcode0 & outcode1)) break; + var x = 0; + var y = 0; + var normalRadian = 0; + var outcodeOut = 0 !== outcode0 ? outcode0 : outcode1; + if (0 !== (4 & outcodeOut)) { + x = xA + (xB - xA) * (yMin - yA) / (yB - yA); + y = yMin; + null !== normalRadians && (normalRadian = .5 * -Math.PI); + } else if (0 !== (8 & outcodeOut)) { + x = xA + (xB - xA) * (yMax - yA) / (yB - yA); + y = yMax; + null !== normalRadians && (normalRadian = .5 * Math.PI); + } else if (0 !== (2 & outcodeOut)) { + y = yA + (yB - yA) * (xMax - xA) / (xB - xA); + x = xMax; + null !== normalRadians && (normalRadian = 0); + } else if (0 !== (1 & outcodeOut)) { + y = yA + (yB - yA) * (xMin - xA) / (xB - xA); + x = xMin; + null !== normalRadians && (normalRadian = Math.PI); + } + if (outcodeOut === outcode0) { + xA = x; + yA = y; + outcode0 = RectangleBoundingBoxData._computeOutCode(xA, yA, xMin, yMin, xMax, yMax); + null !== normalRadians && (normalRadians.x = normalRadian); + } else { + xB = x; + yB = y; + outcode1 = RectangleBoundingBoxData._computeOutCode(xB, yB, xMin, yMin, xMax, yMax); + null !== normalRadians && (normalRadians.y = normalRadian); + } + } + if (intersectionCount) if (inSideA) { + intersectionCount = 2; + if (null !== intersectionPointA) { + intersectionPointA.x = xB; + intersectionPointA.y = yB; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xB; + intersectionPointB.y = xB; + } + null !== normalRadians && (normalRadians.x = normalRadians.y + Math.PI); + } else if (inSideB) { + intersectionCount = 1; + if (null !== intersectionPointA) { + intersectionPointA.x = xA; + intersectionPointA.y = yA; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xA; + intersectionPointB.y = yA; + } + null !== normalRadians && (normalRadians.y = normalRadians.x + Math.PI); + } else { + intersectionCount = 3; + if (null !== intersectionPointA) { + intersectionPointA.x = xA; + intersectionPointA.y = yA; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xB; + intersectionPointB.y = yB; + } + } + return intersectionCount; + }; + RectangleBoundingBoxData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 0; + }; + RectangleBoundingBoxData.prototype.containsPoint = function (pX, pY) { + var widthH = .5 * this.width; + if (pX >= -widthH && pX <= widthH) { + var heightH = .5 * this.height; + if (pY >= -heightH && pY <= heightH) return true; + } + return false; + }; + RectangleBoundingBoxData.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + var widthH = .5 * this.width; + var heightH = .5 * this.height; + var intersectionCount = RectangleBoundingBoxData.rectangleIntersectsSegment(xA, yA, xB, yB, -widthH, -heightH, widthH, heightH, intersectionPointA, intersectionPointB, normalRadians); + return intersectionCount; + }; + return RectangleBoundingBoxData; + })(BoundingBoxData); + dragonBones.RectangleBoundingBoxData = RectangleBoundingBoxData; + var EllipseBoundingBoxData = (function (_super) { + __extends(EllipseBoundingBoxData, _super); + function EllipseBoundingBoxData() { + return null !== _super && _super.apply(this, arguments) || this; + } + EllipseBoundingBoxData.toString = function () { + return "[class dragonBones.EllipseData]"; + }; + EllipseBoundingBoxData.ellipseIntersectsSegment = function (xA, yA, xB, yB, xC, yC, widthH, heightH, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + var d = widthH / heightH; + var dd = d * d; + yA *= d; + yB *= d; + var dX = xB - xA; + var dY = yB - yA; + var lAB = Math.sqrt(dX * dX + dY * dY); + var xD = dX / lAB; + var yD = dY / lAB; + var a = (xC - xA) * xD + (yC - yA) * yD; + var aa = a * a; + var ee = xA * xA + yA * yA; + var rr = widthH * widthH; + var dR = rr - ee + aa; + var intersectionCount = 0; + if (dR >= 0) { + var dT = Math.sqrt(dR); + var sA = a - dT; + var sB = a + dT; + var inSideA = sA < 0 ? -1 : sA <= lAB ? 0 : 1; + var inSideB = sB < 0 ? -1 : sB <= lAB ? 0 : 1; + var sideAB = inSideA * inSideB; + if (sideAB < 0) return -1; + if (0 === sideAB) if (-1 === inSideA) { + intersectionCount = 2; + xB = xA + sB * xD; + yB = (yA + sB * yD) / d; + if (null !== intersectionPointA) { + intersectionPointA.x = xB; + intersectionPointA.y = yB; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xB; + intersectionPointB.y = yB; + } + if (null !== normalRadians) { + normalRadians.x = Math.atan2(yB / rr * dd, xB / rr); + normalRadians.y = normalRadians.x + Math.PI; + } + } else if (1 === inSideB) { + intersectionCount = 1; + xA += sA * xD; + yA = (yA + sA * yD) / d; + if (null !== intersectionPointA) { + intersectionPointA.x = xA; + intersectionPointA.y = yA; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xA; + intersectionPointB.y = yA; + } + if (null !== normalRadians) { + normalRadians.x = Math.atan2(yA / rr * dd, xA / rr); + normalRadians.y = normalRadians.x + Math.PI; + } + } else { + intersectionCount = 3; + if (null !== intersectionPointA) { + intersectionPointA.x = xA + sA * xD; + intersectionPointA.y = (yA + sA * yD) / d; + null !== normalRadians && (normalRadians.x = Math.atan2(intersectionPointA.y / rr * dd, intersectionPointA.x / rr)); + } + if (null !== intersectionPointB) { + intersectionPointB.x = xA + sB * xD; + intersectionPointB.y = (yA + sB * yD) / d; + null !== normalRadians && (normalRadians.y = Math.atan2(intersectionPointB.y / rr * dd, intersectionPointB.x / rr)); + } + } + } + return intersectionCount; + }; + EllipseBoundingBoxData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 1; + }; + EllipseBoundingBoxData.prototype.containsPoint = function (pX, pY) { + var widthH = .5 * this.width; + if (pX >= -widthH && pX <= widthH) { + var heightH = .5 * this.height; + if (pY >= -heightH && pY <= heightH) { + pY *= widthH / heightH; + return Math.sqrt(pX * pX + pY * pY) <= widthH; + } + } + return false; + }; + EllipseBoundingBoxData.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + var intersectionCount = EllipseBoundingBoxData.ellipseIntersectsSegment(xA, yA, xB, yB, 0, 0, .5 * this.width, .5 * this.height, intersectionPointA, intersectionPointB, normalRadians); + return intersectionCount; + }; + return EllipseBoundingBoxData; + })(BoundingBoxData); + dragonBones.EllipseBoundingBoxData = EllipseBoundingBoxData; + var PolygonBoundingBoxData = (function (_super) { + __extends(PolygonBoundingBoxData, _super); + function PolygonBoundingBoxData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.vertices = []; + return _this; + } + PolygonBoundingBoxData.toString = function () { + return "[class dragonBones.PolygonBoundingBoxData]"; + }; + PolygonBoundingBoxData.polygonIntersectsSegment = function (xA, yA, xB, yB, vertices, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + xA === xB && (xA = xB + 1e-6); + yA === yB && (yA = yB + 1e-6); + var count = vertices.length; + var dXAB = xA - xB; + var dYAB = yA - yB; + var llAB = xA * yB - yA * xB; + var intersectionCount = 0; + var xC = vertices[count - 2]; + var yC = vertices[count - 1]; + var dMin = 0; + var dMax = 0; + var xMin = 0; + var yMin = 0; + var xMax = 0; + var yMax = 0; + for (var i = 0; i < count; i += 2) { + var xD = vertices[i]; + var yD = vertices[i + 1]; + xC === xD && (xC = xD + 1e-4); + yC === yD && (yC = yD + 1e-4); + var dXCD = xC - xD; + var dYCD = yC - yD; + var llCD = xC * yD - yC * xD; + var ll = dXAB * dYCD - dYAB * dXCD; + var x = (llAB * dXCD - dXAB * llCD) / ll; + if ((x >= xC && x <= xD || x >= xD && x <= xC) && (0 === dXAB || x >= xA && x <= xB || x >= xB && x <= xA)) { + var y = (llAB * dYCD - dYAB * llCD) / ll; + if ((y >= yC && y <= yD || y >= yD && y <= yC) && (0 === dYAB || y >= yA && y <= yB || y >= yB && y <= yA)) { + if (null === intersectionPointB) { + xMin = x; + yMin = y; + xMax = x; + yMax = y; + intersectionCount++; + if (null !== normalRadians) { + normalRadians.x = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI; + normalRadians.y = normalRadians.x; + } + break; + } + var d = x - xA; + d < 0 && (d = -d); + if (0 === intersectionCount) { + dMin = d; + dMax = d; + xMin = x; + yMin = y; + xMax = x; + yMax = y; + if (null !== normalRadians) { + normalRadians.x = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI; + normalRadians.y = normalRadians.x; + } + } else { + if (d < dMin) { + dMin = d; + xMin = x; + yMin = y; + null !== normalRadians && (normalRadians.x = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI); + } + if (d > dMax) { + dMax = d; + xMax = x; + yMax = y; + null !== normalRadians && (normalRadians.y = Math.atan2(yD - yC, xD - xC) - .5 * Math.PI); + } + } + intersectionCount++; + } + } + xC = xD; + yC = yD; + } + if (1 === intersectionCount) { + if (null !== intersectionPointA) { + intersectionPointA.x = xMin; + intersectionPointA.y = yMin; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xMin; + intersectionPointB.y = yMin; + } + null !== normalRadians && (normalRadians.y = normalRadians.x + Math.PI); + } else if (intersectionCount > 1) { + intersectionCount++; + if (null !== intersectionPointA) { + intersectionPointA.x = xMin; + intersectionPointA.y = yMin; + } + if (null !== intersectionPointB) { + intersectionPointB.x = xMax; + intersectionPointB.y = yMax; + } + } + return intersectionCount; + }; + PolygonBoundingBoxData.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.type = 2; + this.x = 0; + this.y = 0; + this.vertices.length = 0; + }; + PolygonBoundingBoxData.prototype.containsPoint = function (pX, pY) { + var isInSide = false; + if (pX >= this.x && pX <= this.width && pY >= this.y && pY <= this.height) for (var i = 0, l = this.vertices.length, iP = l - 2; i < l; i += 2) { + var yA = this.vertices[iP + 1]; + var yB = this.vertices[i + 1]; + if (yB < pY && yA >= pY || yA < pY && yB >= pY) { + var xA = this.vertices[iP]; + var xB = this.vertices[i]; + (pY - yB) * (xA - xB) / (yA - yB) + xB < pX && (isInSide = !isInSide); + } + iP = i; + } + return isInSide; + }; + PolygonBoundingBoxData.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + var intersectionCount = 0; + 0 !== RectangleBoundingBoxData.rectangleIntersectsSegment(xA, yA, xB, yB, this.x, this.y, this.x + this.width, this.y + this.height, null, null, null) && (intersectionCount = PolygonBoundingBoxData.polygonIntersectsSegment(xA, yA, xB, yB, this.vertices, intersectionPointA, intersectionPointB, normalRadians)); + return intersectionCount; + }; + return PolygonBoundingBoxData; + })(BoundingBoxData); + dragonBones.PolygonBoundingBoxData = PolygonBoundingBoxData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var AnimationData = (function (_super) { + __extends(AnimationData, _super); + function AnimationData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.cachedFrames = []; + _this.boneTimelines = {}; + _this.surfaceTimelines = {}; + _this.slotTimelines = {}; + _this.constraintTimelines = {}; + _this.animationTimelines = {}; + _this.boneCachedFrameIndices = {}; + _this.slotCachedFrameIndices = {}; + _this.actionTimeline = null; + _this.zOrderTimeline = null; + return _this; + } + AnimationData.toString = function () { + return "[class dragonBones.AnimationData]"; + }; + AnimationData.prototype._onClear = function () { + for (var k in this.boneTimelines) { + for (var _i = 0, _a = this.boneTimelines[k]; _i < _a.length; _i++) { + var timeline = _a[_i]; + timeline.returnToPool(); + } + delete this.boneTimelines[k]; + } + for (var k in this.surfaceTimelines) { + for (var _b = 0, _c = this.surfaceTimelines[k]; _b < _c.length; _b++) { + var timeline = _c[_b]; + timeline.returnToPool(); + } + delete this.surfaceTimelines[k]; + } + for (var k in this.slotTimelines) { + for (var _d = 0, _e = this.slotTimelines[k]; _d < _e.length; _d++) { + var timeline = _e[_d]; + timeline.returnToPool(); + } + delete this.slotTimelines[k]; + } + for (var k in this.constraintTimelines) { + for (var _f = 0, _g = this.constraintTimelines[k]; _f < _g.length; _f++) { + var timeline = _g[_f]; + timeline.returnToPool(); + } + delete this.constraintTimelines[k]; + } + for (var k in this.animationTimelines) { + for (var _h = 0, _j = this.animationTimelines[k]; _h < _j.length; _h++) { + var timeline = _j[_h]; + timeline.returnToPool(); + } + delete this.animationTimelines[k]; + } + for (var k in this.boneCachedFrameIndices) delete this.boneCachedFrameIndices[k]; + for (var k in this.slotCachedFrameIndices) delete this.slotCachedFrameIndices[k]; + null !== this.actionTimeline && this.actionTimeline.returnToPool(); + null !== this.zOrderTimeline && this.zOrderTimeline.returnToPool(); + this.frameIntOffset = 0; + this.frameFloatOffset = 0; + this.frameOffset = 0; + this.frameCount = 0; + this.playTimes = 0; + this.duration = 0; + this.scale = 1; + this.fadeInTime = 0; + this.cacheFrameRate = 0; + this.name = ""; + this.cachedFrames.length = 0; + this.actionTimeline = null; + this.zOrderTimeline = null; + this.parent = null; + }; + AnimationData.prototype.cacheFrames = function (frameRate) { + if (this.cacheFrameRate > 0) return; + this.cacheFrameRate = Math.max(Math.ceil(frameRate * this.scale), 1); + var cacheFrameCount = Math.ceil(this.cacheFrameRate * this.duration) + 1; + this.cachedFrames.length = cacheFrameCount; + for (var i = 0, l = this.cacheFrames.length; i < l; ++i) this.cachedFrames[i] = false; + for (var _i = 0, _a = this.parent.sortedBones; _i < _a.length; _i++) { + var bone = _a[_i]; + var indices = new Array(cacheFrameCount); + for (var i = 0, l = indices.length; i < l; ++i) indices[i] = -1; + this.boneCachedFrameIndices[bone.name] = indices; + } + for (var _b = 0, _c = this.parent.sortedSlots; _b < _c.length; _b++) { + var slot = _c[_b]; + var indices = new Array(cacheFrameCount); + for (var i = 0, l = indices.length; i < l; ++i) indices[i] = -1; + this.slotCachedFrameIndices[slot.name] = indices; + } + }; + AnimationData.prototype.addBoneTimeline = function (bone, timeline) { + var timelines = bone.name in this.boneTimelines ? this.boneTimelines[bone.name] : this.boneTimelines[bone.name] = []; + timelines.indexOf(timeline) < 0 && timelines.push(timeline); + }; + AnimationData.prototype.addSurfaceTimeline = function (surface, timeline) { + var timelines = surface.name in this.surfaceTimelines ? this.surfaceTimelines[surface.name] : this.surfaceTimelines[surface.name] = []; + timelines.indexOf(timeline) < 0 && timelines.push(timeline); + }; + AnimationData.prototype.addSlotTimeline = function (slot, timeline) { + var timelines = slot.name in this.slotTimelines ? this.slotTimelines[slot.name] : this.slotTimelines[slot.name] = []; + timelines.indexOf(timeline) < 0 && timelines.push(timeline); + }; + AnimationData.prototype.addConstraintTimeline = function (constraint, timeline) { + var timelines = constraint.name in this.constraintTimelines ? this.constraintTimelines[constraint.name] : this.constraintTimelines[constraint.name] = []; + timelines.indexOf(timeline) < 0 && timelines.push(timeline); + }; + AnimationData.prototype.addAnimationTimeline = function (timelineName, timeline) { + var timelines = timelineName in this.animationTimelines ? this.animationTimelines[timelineName] : this.animationTimelines[timelineName] = []; + timelines.indexOf(timeline) < 0 && timelines.push(timeline); + }; + AnimationData.prototype.getBoneTimelines = function (timelineName) { + return timelineName in this.boneTimelines ? this.boneTimelines[timelineName] : null; + }; + AnimationData.prototype.getSurfaceTimelines = function (timelineName) { + return timelineName in this.surfaceTimelines ? this.surfaceTimelines[timelineName] : null; + }; + AnimationData.prototype.getSlotTimelines = function (timelineName) { + return timelineName in this.slotTimelines ? this.slotTimelines[timelineName] : null; + }; + AnimationData.prototype.getConstraintTimelines = function (timelineName) { + return timelineName in this.constraintTimelines ? this.constraintTimelines[timelineName] : null; + }; + AnimationData.prototype.getAnimationTimelines = function (timelineName) { + return timelineName in this.animationTimelines ? this.animationTimelines[timelineName] : null; + }; + AnimationData.prototype.getBoneCachedFrameIndices = function (boneName) { + return boneName in this.boneCachedFrameIndices ? this.boneCachedFrameIndices[boneName] : null; + }; + AnimationData.prototype.getSlotCachedFrameIndices = function (slotName) { + return slotName in this.slotCachedFrameIndices ? this.slotCachedFrameIndices[slotName] : null; + }; + return AnimationData; + })(dragonBones.BaseObject); + dragonBones.AnimationData = AnimationData; + var TimelineData = (function (_super) { + __extends(TimelineData, _super); + function TimelineData() { + return null !== _super && _super.apply(this, arguments) || this; + } + TimelineData.toString = function () { + return "[class dragonBones.TimelineData]"; + }; + TimelineData.prototype._onClear = function () { + this.type = 10; + this.offset = 0; + this.frameIndicesOffset = -1; + }; + return TimelineData; + })(dragonBones.BaseObject); + dragonBones.TimelineData = TimelineData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var AnimationConfig = (function (_super) { + __extends(AnimationConfig, _super); + function AnimationConfig() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.boneMask = []; + return _this; + } + AnimationConfig.toString = function () { + return "[class dragonBones.AnimationConfig]"; + }; + AnimationConfig.prototype._onClear = function () { + this.pauseFadeOut = true; + this.fadeOutMode = 4; + this.fadeOutTweenType = 1; + this.fadeOutTime = -1; + this.actionEnabled = true; + this.additiveBlending = false; + this.displayControl = true; + this.pauseFadeIn = true; + this.resetToPose = true; + this.fadeInTweenType = 1; + this.playTimes = -1; + this.layer = 0; + this.position = 0; + this.duration = -1; + this.timeScale = -100; + this.weight = 1; + this.fadeInTime = -1; + this.autoFadeOutTime = -1; + this.name = ""; + this.animation = ""; + this.group = ""; + this.boneMask.length = 0; + }; + AnimationConfig.prototype.clear = function () { + this._onClear(); + }; + AnimationConfig.prototype.copyFrom = function (value) { + this.pauseFadeOut = value.pauseFadeOut; + this.fadeOutMode = value.fadeOutMode; + this.autoFadeOutTime = value.autoFadeOutTime; + this.fadeOutTweenType = value.fadeOutTweenType; + this.actionEnabled = value.actionEnabled; + this.additiveBlending = value.additiveBlending; + this.displayControl = value.displayControl; + this.pauseFadeIn = value.pauseFadeIn; + this.resetToPose = value.resetToPose; + this.playTimes = value.playTimes; + this.layer = value.layer; + this.position = value.position; + this.duration = value.duration; + this.timeScale = value.timeScale; + this.fadeInTime = value.fadeInTime; + this.fadeOutTime = value.fadeOutTime; + this.fadeInTweenType = value.fadeInTweenType; + this.weight = value.weight; + this.name = value.name; + this.animation = value.animation; + this.group = value.group; + this.boneMask.length = value.boneMask.length; + for (var i = 0, l = this.boneMask.length; i < l; ++i) this.boneMask[i] = value.boneMask[i]; + }; + AnimationConfig.prototype.containsBoneMask = function (boneName) { + return 0 === this.boneMask.length || this.boneMask.indexOf(boneName) >= 0; + }; + AnimationConfig.prototype.addBoneMask = function (armature, boneName, recursive) { + void 0 === recursive && (recursive = true); + var currentBone = armature.getBone(boneName); + if (null === currentBone) return; + this.boneMask.indexOf(boneName) < 0 && this.boneMask.push(boneName); + if (recursive) for (var _i = 0, _a = armature.getBones(); _i < _a.length; _i++) { + var bone = _a[_i]; + this.boneMask.indexOf(bone.name) < 0 && currentBone.contains(bone) && this.boneMask.push(bone.name); + } + }; + AnimationConfig.prototype.removeBoneMask = function (armature, boneName, recursive) { + void 0 === recursive && (recursive = true); + var index = this.boneMask.indexOf(boneName); + index >= 0 && this.boneMask.splice(index, 1); + if (recursive) { + var currentBone = armature.getBone(boneName); + if (null !== currentBone) if (this.boneMask.length > 0) for (var _i = 0, _a = armature.getBones(); _i < _a.length; _i++) { + var bone = _a[_i]; + var index_1 = this.boneMask.indexOf(bone.name); + index_1 >= 0 && currentBone.contains(bone) && this.boneMask.splice(index_1, 1); + } else for (var _b = 0, _c = armature.getBones(); _b < _c.length; _b++) { + var bone = _c[_b]; + if (bone === currentBone) continue; + currentBone.contains(bone) || this.boneMask.push(bone.name); + } + } + }; + return AnimationConfig; + })(dragonBones.BaseObject); + dragonBones.AnimationConfig = AnimationConfig; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var TextureAtlasData = (function (_super) { + __extends(TextureAtlasData, _super); + function TextureAtlasData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.textures = {}; + return _this; + } + TextureAtlasData.prototype._onClear = function () { + for (var k in this.textures) { + this.textures[k].returnToPool(); + delete this.textures[k]; + } + this.autoSearch = false; + this.width = 0; + this.height = 0; + this.scale = 1; + this.name = ""; + this.imagePath = ""; + }; + TextureAtlasData.prototype.copyFrom = function (value) { + this.autoSearch = value.autoSearch; + this.scale = value.scale; + this.width = value.width; + this.height = value.height; + this.name = value.name; + this.imagePath = value.imagePath; + for (var k in this.textures) { + this.textures[k].returnToPool(); + delete this.textures[k]; + } + for (var k in value.textures) { + var texture = this.createTexture(); + texture.copyFrom(value.textures[k]); + this.textures[k] = texture; + } + }; + TextureAtlasData.prototype.addTexture = function (value) { + if (value.name in this.textures) { + console.warn("Same texture: " + value.name); + return; + } + value.parent = this; + this.textures[value.name] = value; + }; + TextureAtlasData.prototype.getTexture = function (textureName) { + return textureName in this.textures ? this.textures[textureName] : null; + }; + return TextureAtlasData; + })(dragonBones.BaseObject); + dragonBones.TextureAtlasData = TextureAtlasData; + var TextureData = (function (_super) { + __extends(TextureData, _super); + function TextureData() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.region = new dragonBones.Rectangle(); + _this.frame = null; + return _this; + } + TextureData.createRectangle = function () { + return new dragonBones.Rectangle(); + }; + TextureData.prototype._onClear = function () { + this.rotated = false; + this.name = ""; + this.region.clear(); + this.parent = null; + this.frame = null; + }; + TextureData.prototype.copyFrom = function (value) { + this.rotated = value.rotated; + this.name = value.name; + this.region.copyFrom(value.region); + this.parent = value.parent; + null === this.frame && null !== value.frame ? this.frame = TextureData.createRectangle() : null !== this.frame && null === value.frame && (this.frame = null); + null !== this.frame && null !== value.frame && this.frame.copyFrom(value.frame); + }; + return TextureData; + })(dragonBones.BaseObject); + dragonBones.TextureData = TextureData; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var DeformVertices = (function (_super) { + __extends(DeformVertices, _super); + function DeformVertices() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.vertices = []; + _this.bones = []; + return _this; + } + DeformVertices.toString = function () { + return "[class dragonBones.DeformVertices]"; + }; + DeformVertices.prototype._onClear = function () { + this.verticesDirty = false; + this.vertices.length = 0; + this.bones.length = 0; + this.verticesData = null; + }; + DeformVertices.prototype.init = function (verticesDataValue, armature) { + this.verticesData = verticesDataValue; + if (null !== this.verticesData) { + var vertexCount = 0; + vertexCount = null !== this.verticesData.weight ? 2 * this.verticesData.weight.count : 2 * this.verticesData.data.intArray[this.verticesData.offset + 0]; + this.verticesDirty = true; + this.vertices.length = vertexCount; + this.bones.length = 0; + for (var i = 0, l = this.vertices.length; i < l; ++i) this.vertices[i] = 0; + if (null !== this.verticesData.weight) for (var i = 0, l = this.verticesData.weight.bones.length; i < l; ++i) { + var bone = armature.getBone(this.verticesData.weight.bones[i].name); + this.bones.push(bone); + } + } else { + this.verticesDirty = false; + this.vertices.length = 0; + this.bones.length = 0; + this.verticesData = null; + } + }; + DeformVertices.prototype.isBonesUpdate = function () { + for (var _i = 0, _a = this.bones; _i < _a.length; _i++) { + var bone = _a[_i]; + if (null !== bone && bone._childrenTransformDirty) return true; + } + return false; + }; + return DeformVertices; + })(dragonBones.BaseObject); + dragonBones.DeformVertices = DeformVertices; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones_1) { + var Armature = (function (_super) { + __extends(Armature, _super); + function Armature() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._bones = []; + _this._slots = []; + _this._constraints = []; + _this._actions = []; + _this._animation = null; + _this._proxy = null; + _this._replaceTextureAtlasData = null; + _this._clock = null; + return _this; + } + Armature.toString = function () { + return "[class dragonBones.Armature]"; + }; + Armature._onSortSlots = function (a, b) { + return a._zOrder > b._zOrder ? 1 : -1; + }; + Armature.prototype._onClear = function () { + null !== this._clock && this._clock.remove(this); + for (var _i = 0, _a = this._bones; _i < _a.length; _i++) { + var bone = _a[_i]; + bone.returnToPool(); + } + for (var _b = 0, _c = this._slots; _b < _c.length; _b++) { + var slot = _c[_b]; + slot.returnToPool(); + } + for (var _d = 0, _e = this._constraints; _d < _e.length; _d++) { + var constraint = _e[_d]; + constraint.returnToPool(); + } + for (var _f = 0, _g = this._actions; _f < _g.length; _f++) { + var action = _g[_f]; + action.returnToPool(); + } + null !== this._animation && this._animation.returnToPool(); + null !== this._proxy && this._proxy.dbClear(); + null !== this._replaceTextureAtlasData && this._replaceTextureAtlasData.returnToPool(); + this.inheritAnimation = true; + this.userData = null; + this._lockUpdate = false; + this._slotsDirty = true; + this._zOrderDirty = false; + this._flipX = false; + this._flipY = false; + this._cacheFrameIndex = -1; + this._bones.length = 0; + this._slots.length = 0; + this._constraints.length = 0; + this._actions.length = 0; + this._armatureData = null; + this._animation = null; + this._proxy = null; + this._display = null; + this._replaceTextureAtlasData = null; + this._replacedTexture = null; + this._dragonBones = null; + this._clock = null; + this._parent = null; + }; + Armature.prototype._sortZOrder = function (slotIndices, offset) { + var slotDatas = this._armatureData.sortedSlots; + var isOriginal = null === slotIndices; + if (this._zOrderDirty || !isOriginal) { + for (var i = 0, l = slotDatas.length; i < l; ++i) { + var slotIndex = isOriginal ? i : slotIndices[offset + i]; + if (slotIndex < 0 || slotIndex >= l) continue; + var slotData = slotDatas[slotIndex]; + var slot = this.getSlot(slotData.name); + null !== slot && slot._setZorder(i); + } + this._slotsDirty = true; + this._zOrderDirty = !isOriginal; + } + }; + Armature.prototype._addBone = function (value) { + this._bones.indexOf(value) < 0 && this._bones.push(value); + }; + Armature.prototype._addSlot = function (value) { + this._slots.indexOf(value) < 0 && this._slots.push(value); + }; + Armature.prototype._addConstraint = function (value) { + this._constraints.indexOf(value) < 0 && this._constraints.push(value); + }; + Armature.prototype._bufferAction = function (action, append) { + this._actions.indexOf(action) < 0 && (append ? this._actions.push(action) : this._actions.unshift(action)); + }; + Armature.prototype.dispose = function () { + if (null !== this._armatureData) { + this._lockUpdate = true; + this._dragonBones.bufferObject(this); + } + }; + Armature.prototype.init = function (armatureData, proxy, display, dragonBones) { + if (null !== this._armatureData) return; + this._armatureData = armatureData; + this._animation = dragonBones_1.BaseObject.borrowObject(dragonBones_1.Animation); + this._proxy = proxy; + this._display = display; + this._dragonBones = dragonBones; + this._proxy.dbInit(this); + this._animation.init(this); + this._animation.animations = this._armatureData.animations; + }; + Armature.prototype.advanceTime = function (passedTime) { + if (this._lockUpdate) return; + if (null === this._armatureData) { + console.warn("The armature has been disposed."); + return; + } + if (null === this._armatureData.parent) { + console.warn("The armature data has been disposed.\nPlease make sure dispose armature before call factory.clear()."); + return; + } + var prevCacheFrameIndex = this._cacheFrameIndex; + this._animation.advanceTime(passedTime); + if (this._slotsDirty) { + this._slotsDirty = false; + this._slots.sort(Armature._onSortSlots); + } + if (this._cacheFrameIndex < 0 || this._cacheFrameIndex !== prevCacheFrameIndex) { + var i = 0, l = 0; + for (i = 0, l = this._bones.length; i < l; ++i) this._bones[i].update(this._cacheFrameIndex); + for (i = 0, l = this._slots.length; i < l; ++i) this._slots[i].update(this._cacheFrameIndex); + } + if (this._actions.length > 0) { + this._lockUpdate = true; + for (var _i = 0, _a = this._actions; _i < _a.length; _i++) { + var action = _a[_i]; + var actionData = action.actionData; + if (null !== actionData && 0 === actionData.type) if (null !== action.slot) { + var childArmature = action.slot.childArmature; + null !== childArmature && childArmature.animation.fadeIn(actionData.name); + } else if (null !== action.bone) for (var _b = 0, _c = this.getSlots(); _b < _c.length; _b++) { + var slot = _c[_b]; + if (slot.parent === action.bone) { + var childArmature = slot.childArmature; + null !== childArmature && childArmature.animation.fadeIn(actionData.name); + } + } else this._animation.fadeIn(actionData.name); + action.returnToPool(); + } + this._actions.length = 0; + this._lockUpdate = false; + } + this._proxy.dbUpdate(); + }; + Armature.prototype.invalidUpdate = function (boneName, updateSlot) { + void 0 === boneName && (boneName = null); + void 0 === updateSlot && (updateSlot = false); + if (null !== boneName && boneName.length > 0) { + var bone = this.getBone(boneName); + if (null !== bone) { + bone.invalidUpdate(); + if (updateSlot) for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + slot.parent === bone && slot.invalidUpdate(); + } + } + } else { + for (var _b = 0, _c = this._bones; _b < _c.length; _b++) { + var bone = _c[_b]; + bone.invalidUpdate(); + } + if (updateSlot) for (var _d = 0, _e = this._slots; _d < _e.length; _d++) { + var slot = _e[_d]; + slot.invalidUpdate(); + } + } + }; + Armature.prototype.containsPoint = function (x, y) { + for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + if (slot.containsPoint(x, y)) return slot; + } + return null; + }; + Armature.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + var isV = xA === xB; + var dMin = 0; + var dMax = 0; + var intXA = 0; + var intYA = 0; + var intXB = 0; + var intYB = 0; + var intAN = 0; + var intBN = 0; + var intSlotA = null; + var intSlotB = null; + for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + var intersectionCount = slot.intersectsSegment(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians); + if (intersectionCount > 0) { + if (null === intersectionPointA && null === intersectionPointB) { + intSlotA = slot; + break; + } + if (null !== intersectionPointA) { + var d = isV ? intersectionPointA.y - yA : intersectionPointA.x - xA; + d < 0 && (d = -d); + if (null === intSlotA || d < dMin) { + dMin = d; + intXA = intersectionPointA.x; + intYA = intersectionPointA.y; + intSlotA = slot; + normalRadians && (intAN = normalRadians.x); + } + } + if (null !== intersectionPointB) { + var d = intersectionPointB.x - xA; + d < 0 && (d = -d); + if (null === intSlotB || d > dMax) { + dMax = d; + intXB = intersectionPointB.x; + intYB = intersectionPointB.y; + intSlotB = slot; + null !== normalRadians && (intBN = normalRadians.y); + } + } + } + } + if (null !== intSlotA && null !== intersectionPointA) { + intersectionPointA.x = intXA; + intersectionPointA.y = intYA; + null !== normalRadians && (normalRadians.x = intAN); + } + if (null !== intSlotB && null !== intersectionPointB) { + intersectionPointB.x = intXB; + intersectionPointB.y = intYB; + null !== normalRadians && (normalRadians.y = intBN); + } + return intSlotA; + }; + Armature.prototype.getBone = function (name) { + for (var _i = 0, _a = this._bones; _i < _a.length; _i++) { + var bone = _a[_i]; + if (bone.name === name) return bone; + } + return null; + }; + Armature.prototype.getBoneByDisplay = function (display) { + var slot = this.getSlotByDisplay(display); + return null !== slot ? slot.parent : null; + }; + Armature.prototype.getSlot = function (name) { + for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + if (slot.name === name) return slot; + } + return null; + }; + Armature.prototype.getSlotByDisplay = function (display) { + if (null !== display) for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + if (slot.display === display) return slot; + } + return null; + }; + Armature.prototype.getBones = function () { + return this._bones; + }; + Armature.prototype.getSlots = function () { + return this._slots; + }; + Object.defineProperty(Armature.prototype, "flipX", { + get: function get() { + return this._flipX; + }, + set: function set(value) { + if (this._flipX === value) return; + this._flipX = value; + this.invalidUpdate(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "flipY", { + get: function get() { + return this._flipY; + }, + set: function set(value) { + if (this._flipY === value) return; + this._flipY = value; + this.invalidUpdate(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "cacheFrameRate", { + get: function get() { + return this._armatureData.cacheFrameRate; + }, + set: function set(value) { + if (this._armatureData.cacheFrameRate !== value) { + this._armatureData.cacheFrames(value); + for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + var childArmature = slot.childArmature; + null !== childArmature && (childArmature.cacheFrameRate = value); + } + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "name", { + get: function get() { + return this._armatureData.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "armatureData", { + get: function get() { + return this._armatureData; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "animation", { + get: function get() { + return this._animation; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "proxy", { + get: function get() { + return this._proxy; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "eventDispatcher", { + get: function get() { + return this._proxy; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "display", { + get: function get() { + return this._display; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "replacedTexture", { + get: function get() { + return this._replacedTexture; + }, + set: function set(value) { + if (this._replacedTexture === value) return; + if (null !== this._replaceTextureAtlasData) { + this._replaceTextureAtlasData.returnToPool(); + this._replaceTextureAtlasData = null; + } + this._replacedTexture = value; + for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + slot.invalidUpdate(); + slot.update(-1); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "clock", { + get: function get() { + return this._clock; + }, + set: function set(value) { + if (this._clock === value) return; + null !== this._clock && this._clock.remove(this); + this._clock = value; + this._clock && this._clock.add(this); + for (var _i = 0, _a = this._slots; _i < _a.length; _i++) { + var slot = _a[_i]; + var childArmature = slot.childArmature; + null !== childArmature && (childArmature.clock = this._clock); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Armature.prototype, "parent", { + get: function get() { + return this._parent; + }, + enumerable: true, + configurable: true + }); + Armature.prototype.replaceTexture = function (texture) { + this.replacedTexture = texture; + }; + Armature.prototype.hasEventListener = function (type) { + return this._proxy.hasDBEventListener(type); + }; + Armature.prototype.addEventListener = function (type, listener, target) { + this._proxy.addDBEventListener(type, listener, target); + }; + Armature.prototype.removeEventListener = function (type, listener, target) { + this._proxy.removeDBEventListener(type, listener, target); + }; + Armature.prototype.enableAnimationCache = function (frameRate) { + console.warn("Deprecated."); + this.cacheFrameRate = frameRate; + }; + Armature.prototype.getDisplay = function () { + return this._display; + }; + return Armature; + })(dragonBones_1.BaseObject); + dragonBones_1.Armature = Armature; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var TransformObject = (function (_super) { + __extends(TransformObject, _super); + function TransformObject() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.globalTransformMatrix = new dragonBones.Matrix(); + _this.global = new dragonBones.Transform(); + _this.offset = new dragonBones.Transform(); + return _this; + } + TransformObject.prototype._onClear = function () { + this.globalTransformMatrix.identity(); + this.global.identity(); + this.offset.identity(); + this.origin = null; + this.userData = null; + this._globalDirty = false; + this._armature = null; + }; + TransformObject.prototype.updateGlobalTransform = function () { + if (this._globalDirty) { + this._globalDirty = false; + this.global.fromMatrix(this.globalTransformMatrix); + } + }; + Object.defineProperty(TransformObject.prototype, "armature", { + get: function get() { + return this._armature; + }, + enumerable: true, + configurable: true + }); + TransformObject._helpMatrix = new dragonBones.Matrix(); + TransformObject._helpTransform = new dragonBones.Transform(); + TransformObject._helpPoint = new dragonBones.Point(); + return TransformObject; + })(dragonBones.BaseObject); + dragonBones.TransformObject = TransformObject; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Bone = (function (_super) { + __extends(Bone, _super); + function Bone() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.animationPose = new dragonBones.Transform(); + _this._blendState = new dragonBones.BlendState(); + return _this; + } + Bone.toString = function () { + return "[class dragonBones.Bone]"; + }; + Bone.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.offsetMode = 1; + this.animationPose.identity(); + this._transformDirty = false; + this._childrenTransformDirty = false; + this._localDirty = true; + this._hasConstraint = false; + this._visible = true; + this._cachedFrameIndex = -1; + this._blendState.clear(); + this._boneData = null; + this._parent = null; + this._cachedFrameIndices = null; + }; + Bone.prototype._updateGlobalTransformMatrix = function (isCache) { + var boneData = this._boneData; + var global = this.global; + var globalTransformMatrix = this.globalTransformMatrix; + var origin = this.origin; + var offset = this.offset; + var animationPose = this.animationPose; + var parent = this._parent; + var flipX = this._armature.flipX; + var flipY = this._armature.flipY === dragonBones.DragonBones.yDown; + var inherit = null !== parent; + var rotation = 0; + if (1 === this.offsetMode) if (null !== origin) { + global.x = origin.x + offset.x + animationPose.x; + global.scaleX = origin.scaleX * offset.scaleX * animationPose.scaleX; + global.scaleY = origin.scaleY * offset.scaleY * animationPose.scaleY; + if (dragonBones.DragonBones.yDown) { + global.y = origin.y + offset.y + animationPose.y; + global.skew = origin.skew + offset.skew + animationPose.skew; + global.rotation = origin.rotation + offset.rotation + animationPose.rotation; + } else { + global.y = origin.y - offset.y + animationPose.y; + global.skew = origin.skew - offset.skew + animationPose.skew; + global.rotation = origin.rotation - offset.rotation + animationPose.rotation; + } + } else { + global.copyFrom(offset); + if (!dragonBones.DragonBones.yDown) { + global.y = -global.y; + global.skew = -global.skew; + global.rotation = -global.rotation; + } + global.add(animationPose); + } else if (0 === this.offsetMode) null !== origin ? global.copyFrom(origin).add(animationPose) : global.copyFrom(animationPose); else { + inherit = false; + global.copyFrom(offset); + if (!dragonBones.DragonBones.yDown) { + global.y = -global.y; + global.skew = -global.skew; + global.rotation = -global.rotation; + } + } + if (inherit) { + var parentMatrix = 0 === parent._boneData.type ? parent.globalTransformMatrix : parent._getGlobalTransformMatrix(global.x, global.y); + if (boneData.inheritScale) { + if (!boneData.inheritRotation) { + parent.updateGlobalTransform(); + rotation = flipX && flipY ? global.rotation - (parent.global.rotation + Math.PI) : flipX ? global.rotation + parent.global.rotation + Math.PI : flipY ? global.rotation + parent.global.rotation : global.rotation - parent.global.rotation; + global.rotation = rotation; + } + global.toMatrix(globalTransformMatrix); + globalTransformMatrix.concat(parentMatrix); + if (boneData.inheritTranslation) { + global.x = globalTransformMatrix.tx; + global.y = globalTransformMatrix.ty; + } else { + globalTransformMatrix.tx = global.x; + globalTransformMatrix.ty = global.y; + } + isCache ? global.fromMatrix(globalTransformMatrix) : this._globalDirty = true; + } else { + if (boneData.inheritTranslation) { + var x = global.x; + var y = global.y; + global.x = parentMatrix.a * x + parentMatrix.c * y + parentMatrix.tx; + global.y = parentMatrix.b * x + parentMatrix.d * y + parentMatrix.ty; + } else { + flipX && (global.x = -global.x); + flipY && (global.y = -global.y); + } + if (boneData.inheritRotation) { + parent.updateGlobalTransform(); + rotation = parent.global.scaleX < 0 ? global.rotation + parent.global.rotation + Math.PI : global.rotation + parent.global.rotation; + if (parentMatrix.a * parentMatrix.d - parentMatrix.b * parentMatrix.c < 0) { + rotation -= 2 * global.rotation; + (flipX !== flipY || boneData.inheritReflection) && (global.skew += Math.PI); + dragonBones.DragonBones.yDown || (global.skew = -global.skew); + } + global.rotation = rotation; + } else if (flipX || flipY) { + if (flipX && flipY) rotation = global.rotation + Math.PI; else { + rotation = flipX ? Math.PI - global.rotation : -global.rotation; + global.skew += Math.PI; + } + global.rotation = rotation; + } + global.toMatrix(globalTransformMatrix); + } + } else { + if (flipX || flipY) { + flipX && (global.x = -global.x); + flipY && (global.y = -global.y); + if (flipX && flipY) rotation = global.rotation + Math.PI; else { + rotation = flipX ? Math.PI - global.rotation : -global.rotation; + global.skew += Math.PI; + } + global.rotation = rotation; + } + global.toMatrix(globalTransformMatrix); + } + }; + Bone.prototype.init = function (boneData, armatureValue) { + if (null !== this._boneData) return; + this._boneData = boneData; + this._armature = armatureValue; + null !== this._boneData.parent && (this._parent = this._armature.getBone(this._boneData.parent.name)); + this._armature._addBone(this); + this.origin = this._boneData.transform; + }; + Bone.prototype.update = function (cacheFrameIndex) { + this._blendState.dirty = false; + if (cacheFrameIndex >= 0 && null !== this._cachedFrameIndices) { + var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex]; + if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) this._transformDirty = false; else if (cachedFrameIndex >= 0) { + this._transformDirty = true; + this._cachedFrameIndex = cachedFrameIndex; + } else { + if (this._hasConstraint) for (var _i = 0, _a = this._armature._constraints; _i < _a.length; _i++) { + var constraint = _a[_i]; + constraint._root === this && constraint.update(); + } + if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) { + this._transformDirty = true; + this._cachedFrameIndex = -1; + } else if (this._cachedFrameIndex >= 0) { + this._transformDirty = false; + this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex; + } else { + this._transformDirty = true; + this._cachedFrameIndex = -1; + } + } + } else { + if (this._hasConstraint) for (var _b = 0, _c = this._armature._constraints; _b < _c.length; _b++) { + var constraint = _c[_b]; + constraint._root === this && constraint.update(); + } + if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) { + cacheFrameIndex = -1; + this._transformDirty = true; + this._cachedFrameIndex = -1; + } + } + if (this._transformDirty) { + this._transformDirty = false; + this._childrenTransformDirty = true; + if (this._cachedFrameIndex < 0) { + var isCache = cacheFrameIndex >= 0; + this._localDirty && this._updateGlobalTransformMatrix(isCache); + isCache && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global)); + } else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex); + } else this._childrenTransformDirty && (this._childrenTransformDirty = false); + this._localDirty = true; + }; + Bone.prototype.updateByConstraint = function () { + if (this._localDirty) { + this._localDirty = false; + (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && this._updateGlobalTransformMatrix(true); + this._transformDirty = true; + } + }; + Bone.prototype.invalidUpdate = function () { + this._transformDirty = true; + }; + Bone.prototype.contains = function (value) { + if (value === this) return false; + var ancestor = value; + while (ancestor !== this && null !== ancestor) ancestor = ancestor.parent; + return ancestor === this; + }; + Object.defineProperty(Bone.prototype, "boneData", { + get: function get() { + return this._boneData; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Bone.prototype, "visible", { + get: function get() { + return this._visible; + }, + set: function set(value) { + if (this._visible === value) return; + this._visible = value; + for (var _i = 0, _a = this._armature.getSlots(); _i < _a.length; _i++) { + var slot = _a[_i]; + slot.parent === this && slot._updateVisible(); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Bone.prototype, "name", { + get: function get() { + return this._boneData.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Bone.prototype, "parent", { + get: function get() { + return this._parent; + }, + enumerable: true, + configurable: true + }); + Bone.prototype.getBones = function () { + console.warn("Deprecated."); + var bones = new Array(); + for (var _i = 0, _a = this._armature.getBones(); _i < _a.length; _i++) { + var bone = _a[_i]; + bone.parent === this && bones.push(bone); + } + return bones; + }; + Bone.prototype.getSlots = function () { + console.warn("Deprecated."); + var slots = new Array(); + for (var _i = 0, _a = this._armature.getSlots(); _i < _a.length; _i++) { + var slot = _a[_i]; + slot.parent === this && slots.push(slot); + } + return slots; + }; + Object.defineProperty(Bone.prototype, "slot", { + get: function get() { + console.warn("Deprecated."); + for (var _i = 0, _a = this._armature.getSlots(); _i < _a.length; _i++) { + var slot = _a[_i]; + if (slot.parent === this) return slot; + } + return null; + }, + enumerable: true, + configurable: true + }); + return Bone; + })(dragonBones.TransformObject); + dragonBones.Bone = Bone; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Surface = (function (_super) { + __extends(Surface, _super); + function Surface() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._vertices = []; + _this._deformVertices = []; + _this._hullCache = []; + _this._matrixCahce = []; + return _this; + } + Surface.toString = function () { + return "[class dragonBones.Surface]"; + }; + Surface.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this._dX = 0; + this._dY = 0; + this._k = 0; + this._kX = 0; + this._kY = 0; + this._vertices.length = 0; + this._deformVertices.length = 0; + this._matrixCahce.length = 0; + this._hullCache.length = 0; + }; + Surface.prototype._getAffineTransform = function (x, y, lX, lY, aX, aY, bX, bY, cX, cY, transform, matrix, isDown) { + var dabX = bX - aX; + var dabY = bY - aY; + var dacX = cX - aX; + var dacY = cY - aY; + transform.rotation = Math.atan2(dabY, dabX); + transform.skew = Math.atan2(dacY, dacX) - .5 * Math.PI - transform.rotation; + isDown && (transform.rotation += Math.PI); + transform.scaleX = Math.sqrt(dabX * dabX + dabY * dabY) / lX; + transform.scaleY = Math.sqrt(dacX * dacX + dacY * dacY) / lY; + transform.toMatrix(matrix); + transform.x = matrix.tx = aX - (matrix.a * x + matrix.c * y); + transform.y = matrix.ty = aY - (matrix.b * x + matrix.d * y); + }; + Surface.prototype._updateVertices = function () { + var originalVertices = this._boneData.vertices; + var vertices = this._vertices; + var animationVertices = this._deformVertices; + if (null !== this._parent) if (1 === this._parent._boneData.type) for (var i = 0, l = originalVertices.length; i < l; i += 2) { + var x = originalVertices[i] + animationVertices[i]; + var y = originalVertices[i + 1] + animationVertices[i]; + var matrix = this._parent._getGlobalTransformMatrix(x, y); + vertices[i] = matrix.a * x + matrix.c * y + matrix.tx; + vertices[i + 1] = matrix.b * x + matrix.d * y + matrix.ty; + } else { + var parentMatrix = this._parent.globalTransformMatrix; + for (var i = 0, l = originalVertices.length; i < l; i += 2) { + var x = originalVertices[i] + animationVertices[i]; + var y = originalVertices[i + 1] + animationVertices[i + 1]; + vertices[i] = parentMatrix.a * x + parentMatrix.c * y + parentMatrix.tx; + vertices[i + 1] = parentMatrix.b * x + parentMatrix.d * y + parentMatrix.ty; + } + } else for (var i = 0, l = originalVertices.length; i < l; i += 2) { + vertices[i] = originalVertices[i] + animationVertices[i]; + vertices[i + 1] = originalVertices[i + 1] + animationVertices[i + 1]; + } + }; + Surface.prototype._updateGlobalTransformMatrix = function (isCache) { + isCache; + var segmentXD = 2 * this._boneData.segmentX; + var lastIndex = this._vertices.length - 2; + var lA = 200; + var raX = this._vertices[0]; + var raY = this._vertices[1]; + var rbX = this._vertices[segmentXD]; + var rbY = this._vertices[segmentXD + 1]; + var rcX = this._vertices[lastIndex]; + var rcY = this._vertices[lastIndex + 1]; + var rdX = this._vertices[lastIndex - segmentXD]; + var rdY = this._vertices[lastIndex - segmentXD + 1]; + var dacX = raX + .5 * (rcX - raX); + var dacY = raY + .5 * (rcY - raY); + var dbdX = rbX + .5 * (rdX - rbX); + var dbdY = rbY + .5 * (rdY - rbY); + var aX = dacX + .5 * (dbdX - dacX); + var aY = dacY + .5 * (dbdY - dacY); + var bX = rbX + .5 * (rcX - rbX); + var bY = rbY + .5 * (rcY - rbY); + var cX = rdX + .5 * (rcX - rdX); + var cY = rdY + .5 * (rcY - rdY); + this._globalDirty = false; + this._getAffineTransform(0, 0, lA, lA, aX, aY, bX, bY, cX, cY, this.global, this.globalTransformMatrix, false); + }; + Surface.prototype._getGlobalTransformMatrix = function (x, y) { + var lB = 1e3; + if (x < -lB || lB < x || y < -lB || lB < y) return this.globalTransformMatrix; + var isDown = false; + var lA = 200; + var surfaceData = this._boneData; + var segmentX = surfaceData.segmentX; + var segmentY = surfaceData.segmentY; + var segmentXD = 2 * surfaceData.segmentX; + var dX = this._dX; + var dY = this._dY; + var indexX = Math.floor((x + lA) / dX); + var indexY = Math.floor((y + lA) / dY); + var matrixIndex = 0; + var pX = indexX * dX - lA; + var pY = indexY * dY - lA; + var matrices = this._matrixCahce; + var helpMatrix = Surface._helpMatrix; + if (x < -lA) { + if (y < -lA || y >= lA) return this.globalTransformMatrix; + isDown = y > this._kX * (x + lA) + pY; + matrixIndex = 7 * (2 * (segmentX * (segmentY + 1) + 2 * segmentX + segmentY + indexY) + (isDown ? 1 : 0)); + if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else { + var vertexIndex = indexY * (segmentXD + 2); + var ddX = this._hullCache[4]; + var ddY = this._hullCache[5]; + var sX = this._hullCache[2] - (segmentY - indexY) * ddX; + var sY = this._hullCache[3] - (segmentY - indexY) * ddY; + var vertices = this._vertices; + isDown ? this._getAffineTransform(-lA, pY + dY, lB - lA, dY, vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], sX + ddX, sY + ddY, vertices[vertexIndex], vertices[vertexIndex + 1], Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(-lB, pY, lB - lA, dY, sX, sY, vertices[vertexIndex], vertices[vertexIndex + 1], sX + ddX, sY + ddY, Surface._helpTransform, helpMatrix, false); + matrices[matrixIndex] = 1; + matrices[matrixIndex + 1] = helpMatrix.a; + matrices[matrixIndex + 2] = helpMatrix.b; + matrices[matrixIndex + 3] = helpMatrix.c; + matrices[matrixIndex + 4] = helpMatrix.d; + matrices[matrixIndex + 5] = helpMatrix.tx; + matrices[matrixIndex + 6] = helpMatrix.ty; + } + } else if (x >= lA) { + if (y < -lA || y >= lA) return this.globalTransformMatrix; + isDown = y > this._kX * (x - lB) + pY; + matrixIndex = 7 * (2 * (segmentX * (segmentY + 1) + segmentX + indexY) + (isDown ? 1 : 0)); + if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else { + var vertexIndex = (indexY + 1) * (segmentXD + 2) - 2; + var ddX = this._hullCache[4]; + var ddY = this._hullCache[5]; + var sX = this._hullCache[0] + indexY * ddX; + var sY = this._hullCache[1] + indexY * ddY; + var vertices = this._vertices; + isDown ? this._getAffineTransform(lB, pY + dY, lB - lA, dY, sX + ddX, sY + ddY, vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], sX, sY, Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(lA, pY, lB - lA, dY, vertices[vertexIndex], vertices[vertexIndex + 1], sX, sY, vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], Surface._helpTransform, helpMatrix, false); + matrices[matrixIndex] = 1; + matrices[matrixIndex + 1] = helpMatrix.a; + matrices[matrixIndex + 2] = helpMatrix.b; + matrices[matrixIndex + 3] = helpMatrix.c; + matrices[matrixIndex + 4] = helpMatrix.d; + matrices[matrixIndex + 5] = helpMatrix.tx; + matrices[matrixIndex + 6] = helpMatrix.ty; + } + } else if (y < -lA) { + if (x < -lA || x >= lA) return this.globalTransformMatrix; + isDown = y > this._kY * (x - pX - dX) - lB; + matrixIndex = 7 * (segmentX * (segmentY + 1) + 2 * indexX + (isDown ? 1 : 0)); + if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else { + var vertexIndex = 2 * indexX; + var ddX = this._hullCache[10]; + var ddY = this._hullCache[11]; + var sX = this._hullCache[8] + indexX * ddX; + var sY = this._hullCache[9] + indexX * ddY; + var vertices = this._vertices; + isDown ? this._getAffineTransform(pX + dX, -lA, dX, lB - lA, vertices[vertexIndex + 2], vertices[vertexIndex + 3], vertices[vertexIndex], vertices[vertexIndex + 1], sX + ddX, sY + ddY, Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(pX, -lB, dX, lB - lA, sX, sY, sX + ddX, sY + ddY, vertices[vertexIndex], vertices[vertexIndex + 1], Surface._helpTransform, helpMatrix, false); + matrices[matrixIndex] = 1; + matrices[matrixIndex + 1] = helpMatrix.a; + matrices[matrixIndex + 2] = helpMatrix.b; + matrices[matrixIndex + 3] = helpMatrix.c; + matrices[matrixIndex + 4] = helpMatrix.d; + matrices[matrixIndex + 5] = helpMatrix.tx; + matrices[matrixIndex + 6] = helpMatrix.ty; + } + } else if (y >= lA) { + if (x < -lA || x >= lA) return this.globalTransformMatrix; + isDown = y > this._kY * (x - pX - dX) + lA; + matrixIndex = 7 * (2 * (segmentX * (segmentY + 1) + segmentX + segmentY + indexY) + (isDown ? 1 : 0)); + if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else { + var vertexIndex = segmentY * (segmentXD + 2) + 2 * indexX; + var ddX = this._hullCache[10]; + var ddY = this._hullCache[11]; + var sX = this._hullCache[6] - (segmentX - indexX) * ddX; + var sY = this._hullCache[7] - (segmentX - indexX) * ddY; + var vertices = this._vertices; + isDown ? this._getAffineTransform(pX + dX, lB, dX, lB - lA, sX + ddX, sY + ddY, sX, sY, vertices[vertexIndex + 2], vertices[vertexIndex + 3], Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(pX, lA, dX, lB - lA, vertices[vertexIndex], vertices[vertexIndex + 1], vertices[vertexIndex + 2], vertices[vertexIndex + 3], sX, sY, Surface._helpTransform, helpMatrix, false); + matrices[matrixIndex] = 1; + matrices[matrixIndex + 1] = helpMatrix.a; + matrices[matrixIndex + 2] = helpMatrix.b; + matrices[matrixIndex + 3] = helpMatrix.c; + matrices[matrixIndex + 4] = helpMatrix.d; + matrices[matrixIndex + 5] = helpMatrix.tx; + matrices[matrixIndex + 6] = helpMatrix.ty; + } + } else { + isDown = y > this._k * (x - pX - dX) + pY; + matrixIndex = 7 * (2 * (segmentX * indexY + indexX) + (isDown ? 1 : 0)); + if (this._matrixCahce[matrixIndex] > 0) helpMatrix.copyFromArray(matrices, matrixIndex + 1); else { + var vertexIndex = 2 * indexX + indexY * (segmentXD + 2); + var vertices = this._vertices; + isDown ? this._getAffineTransform(pX + dX, pY + dY, dX, dY, vertices[vertexIndex + segmentXD + 4], vertices[vertexIndex + segmentXD + 5], vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], vertices[vertexIndex + 2], vertices[vertexIndex + 3], Surface._helpTransform, helpMatrix, true) : this._getAffineTransform(pX, pY, dX, dY, vertices[vertexIndex], vertices[vertexIndex + 1], vertices[vertexIndex + 2], vertices[vertexIndex + 3], vertices[vertexIndex + segmentXD + 2], vertices[vertexIndex + segmentXD + 3], Surface._helpTransform, helpMatrix, false); + matrices[matrixIndex] = 1; + matrices[matrixIndex + 1] = helpMatrix.a; + matrices[matrixIndex + 2] = helpMatrix.b; + matrices[matrixIndex + 3] = helpMatrix.c; + matrices[matrixIndex + 4] = helpMatrix.d; + matrices[matrixIndex + 5] = helpMatrix.tx; + matrices[matrixIndex + 6] = helpMatrix.ty; + } + } + return helpMatrix; + }; + Surface.prototype.init = function (surfaceData, armatureValue) { + if (null !== this._boneData) return; + _super.prototype.init.call(this, surfaceData, armatureValue); + var segmentX = surfaceData.segmentX; + var segmentY = surfaceData.segmentY; + var vertexCount = surfaceData.vertices.length; + var lB = 1e3; + var lA = 200; + this._dX = 2 * lA / segmentX; + this._dY = 2 * lA / segmentY; + this._k = -this._dY / this._dX; + this._kX = -this._dY / (lB - lA); + this._kY = -(lB - lA) / this._dX; + this._vertices.length = vertexCount; + this._deformVertices.length = vertexCount; + this._matrixCahce.length = 2 * (segmentX * segmentY + 2 * segmentX + 2 * segmentY) * 7; + this._hullCache.length = 10; + for (var i = 0; i < vertexCount; ++i) this._deformVertices[i] = 0; + }; + Surface.prototype.update = function (cacheFrameIndex) { + this._blendState.dirty = false; + if (cacheFrameIndex >= 0 && null !== this._cachedFrameIndices) { + var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex]; + if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) this._transformDirty = false; else if (cachedFrameIndex >= 0) { + this._transformDirty = true; + this._cachedFrameIndex = cachedFrameIndex; + } else { + if (this._hasConstraint) for (var _i = 0, _a = this._armature._constraints; _i < _a.length; _i++) { + var constraint = _a[_i]; + constraint._root === this && constraint.update(); + } + if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) { + this._transformDirty = true; + this._cachedFrameIndex = -1; + } else if (this._cachedFrameIndex >= 0) { + this._transformDirty = false; + this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex; + } else { + this._transformDirty = true; + this._cachedFrameIndex = -1; + } + } + } else { + if (this._hasConstraint) for (var _b = 0, _c = this._armature._constraints; _b < _c.length; _b++) { + var constraint = _c[_b]; + constraint._root === this && constraint.update(); + } + if (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) { + cacheFrameIndex = -1; + this._transformDirty = true; + this._cachedFrameIndex = -1; + } + } + if (this._transformDirty) { + this._transformDirty = false; + this._childrenTransformDirty = true; + for (var i = 0, l = this._matrixCahce.length; i < l; i += 7) this._matrixCahce[i] = -1; + this._updateVertices(); + if (this._cachedFrameIndex < 0) { + var isCache = cacheFrameIndex >= 0; + this._localDirty && this._updateGlobalTransformMatrix(isCache); + isCache && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global)); + } else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex); + var lB = 1e3; + var lA = 200; + var ddX = 2 * this.global.x; + var ddY = 2 * this.global.y; + var helpPoint = Surface._helpPoint; + this.globalTransformMatrix.transformPoint(lB, -lA, helpPoint); + this._hullCache[0] = helpPoint.x; + this._hullCache[1] = helpPoint.y; + this._hullCache[2] = ddX - helpPoint.x; + this._hullCache[3] = ddY - helpPoint.y; + this.globalTransformMatrix.transformPoint(0, this._dY, helpPoint, true); + this._hullCache[4] = helpPoint.x; + this._hullCache[5] = helpPoint.y; + this.globalTransformMatrix.transformPoint(lA, lB, helpPoint); + this._hullCache[6] = helpPoint.x; + this._hullCache[7] = helpPoint.y; + this._hullCache[8] = ddX - helpPoint.x; + this._hullCache[9] = ddY - helpPoint.y; + this.globalTransformMatrix.transformPoint(this._dX, 0, helpPoint, true); + this._hullCache[10] = helpPoint.x; + this._hullCache[11] = helpPoint.y; + } else this._childrenTransformDirty && (this._childrenTransformDirty = false); + this._localDirty = true; + }; + return Surface; + })(dragonBones.Bone); + dragonBones.Surface = Surface; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Slot = (function (_super) { + __extends(Slot, _super); + function Slot() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._localMatrix = new dragonBones.Matrix(); + _this._colorTransform = new dragonBones.ColorTransform(); + _this._displayDatas = []; + _this._displayList = []; + _this._deformVertices = null; + _this._rawDisplay = null; + _this._meshDisplay = null; + return _this; + } + Slot.prototype._onClear = function () { + _super.prototype._onClear.call(this); + var disposeDisplayList = []; + for (var _i = 0, _a = this._displayList; _i < _a.length; _i++) { + var eachDisplay = _a[_i]; + null !== eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay && disposeDisplayList.indexOf(eachDisplay) < 0 && disposeDisplayList.push(eachDisplay); + } + for (var _b = 0, disposeDisplayList_1 = disposeDisplayList; _b < disposeDisplayList_1.length; _b++) { + var eachDisplay = disposeDisplayList_1[_b]; + eachDisplay instanceof dragonBones.Armature ? eachDisplay.dispose() : this._disposeDisplay(eachDisplay, true); + } + null !== this._deformVertices && this._deformVertices.returnToPool(); + null !== this._meshDisplay && this._meshDisplay !== this._rawDisplay && this._disposeDisplay(this._meshDisplay, false); + null !== this._rawDisplay && this._disposeDisplay(this._rawDisplay, false); + this.displayController = null; + this._displayDirty = false; + this._zOrderDirty = false; + this._blendModeDirty = false; + this._colorDirty = false; + this._transformDirty = false; + this._visible = true; + this._blendMode = 0; + this._displayIndex = -1; + this._animationDisplayIndex = -1; + this._zOrder = 0; + this._cachedFrameIndex = -1; + this._pivotX = 0; + this._pivotY = 0; + this._localMatrix.identity(); + this._colorTransform.identity(); + this._displayList.length = 0; + this._displayDatas.length = 0; + this._slotData = null; + this._rawDisplayDatas = null; + this._displayData = null; + this._boundingBoxData = null; + this._textureData = null; + this._deformVertices = null; + this._rawDisplay = null; + this._meshDisplay = null; + this._display = null; + this._childArmature = null; + this._parent = null; + this._cachedFrameIndices = null; + }; + Slot.prototype._getDefaultRawDisplayData = function (displayIndex) { + var defaultSkin = this._armature._armatureData.defaultSkin; + if (null !== defaultSkin) { + var defaultRawDisplayDatas = defaultSkin.getDisplays(this._slotData.name); + if (null !== defaultRawDisplayDatas) return displayIndex < defaultRawDisplayDatas.length ? defaultRawDisplayDatas[displayIndex] : null; + } + return null; + }; + Slot.prototype._updateDisplayData = function () { + var prevDisplayData = this._displayData; + var prevVerticesData = null !== this._deformVertices ? this._deformVertices.verticesData : null; + var prevTextureData = this._textureData; + var rawDisplayData = null; + var currentVerticesData = null; + this._displayData = null; + this._boundingBoxData = null; + this._textureData = null; + if (this._displayIndex >= 0) { + null !== this._rawDisplayDatas && (rawDisplayData = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null); + null === rawDisplayData && (rawDisplayData = this._getDefaultRawDisplayData(this._displayIndex)); + this._displayIndex < this._displayDatas.length && (this._displayData = this._displayDatas[this._displayIndex]); + } + if (null !== this._displayData) { + 2 === this._displayData.type ? currentVerticesData = this._displayData.vertices : 4 === this._displayData.type ? currentVerticesData = this._displayData.vertices : null !== rawDisplayData && (2 === rawDisplayData.type ? currentVerticesData = rawDisplayData.vertices : 4 === rawDisplayData.type && (currentVerticesData = rawDisplayData.vertices)); + 3 === this._displayData.type ? this._boundingBoxData = this._displayData.boundingBox : null !== rawDisplayData && 3 === rawDisplayData.type && (this._boundingBoxData = rawDisplayData.boundingBox); + 0 === this._displayData.type ? this._textureData = this._displayData.texture : 2 === this._displayData.type && (this._textureData = this._displayData.texture); + } + if (this._displayData !== prevDisplayData || currentVerticesData !== prevVerticesData || this._textureData !== prevTextureData) { + if (null === currentVerticesData && null !== this._textureData) { + var imageDisplayData = this._displayData; + var scale = this._textureData.parent.scale * this._armature._armatureData.scale; + var frame = this._textureData.frame; + this._pivotX = imageDisplayData.pivot.x; + this._pivotY = imageDisplayData.pivot.y; + var rect = null !== frame ? frame : this._textureData.region; + var width = rect.width; + var height = rect.height; + if (this._textureData.rotated && null === frame) { + width = rect.height; + height = rect.width; + } + this._pivotX *= width * scale; + this._pivotY *= height * scale; + if (null !== frame) { + this._pivotX += frame.x * scale; + this._pivotY += frame.y * scale; + } + if (null !== this._displayData && null !== rawDisplayData && this._displayData !== rawDisplayData) { + rawDisplayData.transform.toMatrix(Slot._helpMatrix); + Slot._helpMatrix.invert(); + Slot._helpMatrix.transformPoint(0, 0, Slot._helpPoint); + this._pivotX -= Slot._helpPoint.x; + this._pivotY -= Slot._helpPoint.y; + this._displayData.transform.toMatrix(Slot._helpMatrix); + Slot._helpMatrix.invert(); + Slot._helpMatrix.transformPoint(0, 0, Slot._helpPoint); + this._pivotX += Slot._helpPoint.x; + this._pivotY += Slot._helpPoint.y; + } + dragonBones.DragonBones.yDown || (this._pivotY = (this._textureData.rotated ? this._textureData.region.width : this._textureData.region.height) * scale - this._pivotY); + } else { + this._pivotX = 0; + this._pivotY = 0; + } + null !== rawDisplayData ? this.origin = rawDisplayData.transform : null !== this._displayData ? this.origin = this._displayData.transform : this.origin = null; + if (currentVerticesData !== prevVerticesData) { + null === this._deformVertices && (this._deformVertices = dragonBones.BaseObject.borrowObject(dragonBones.DeformVertices)); + this._deformVertices.init(currentVerticesData, this._armature); + } else null !== this._deformVertices && this._textureData !== prevTextureData && (this._deformVertices.verticesDirty = true); + this._displayDirty = true; + this._transformDirty = true; + } + }; + Slot.prototype._updateDisplay = function () { + var prevDisplay = null !== this._display ? this._display : this._rawDisplay; + var prevChildArmature = this._childArmature; + if (this._displayIndex >= 0 && this._displayIndex < this._displayList.length) { + this._display = this._displayList[this._displayIndex]; + if (null !== this._display && this._display instanceof dragonBones.Armature) { + this._childArmature = this._display; + this._display = this._childArmature.display; + } else this._childArmature = null; + } else { + this._display = null; + this._childArmature = null; + } + var currentDisplay = null !== this._display ? this._display : this._rawDisplay; + if (currentDisplay !== prevDisplay) { + this._onUpdateDisplay(); + this._replaceDisplay(prevDisplay); + this._transformDirty = true; + this._visibleDirty = true; + this._blendModeDirty = true; + this._colorDirty = true; + } + currentDisplay !== this._rawDisplay && currentDisplay !== this._meshDisplay || this._updateFrame(); + if (this._childArmature !== prevChildArmature) { + if (null !== prevChildArmature) { + prevChildArmature._parent = null; + prevChildArmature.clock = null; + prevChildArmature.inheritAnimation && prevChildArmature.animation.reset(); + } + if (null !== this._childArmature) { + this._childArmature._parent = this; + this._childArmature.clock = this._armature.clock; + if (this._childArmature.inheritAnimation) { + if (0 === this._childArmature.cacheFrameRate) { + var cacheFrameRate = this._armature.cacheFrameRate; + 0 !== cacheFrameRate && (this._childArmature.cacheFrameRate = cacheFrameRate); + } + var actions = null; + if (null !== this._displayData && 1 === this._displayData.type) actions = this._displayData.actions; else if (this._displayIndex >= 0 && null !== this._rawDisplayDatas) { + var rawDisplayData = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null; + null === rawDisplayData && (rawDisplayData = this._getDefaultRawDisplayData(this._displayIndex)); + null !== rawDisplayData && 1 === rawDisplayData.type && (actions = rawDisplayData.actions); + } + if (null !== actions && actions.length > 0) for (var _i = 0, actions_1 = actions; _i < actions_1.length; _i++) { + var action = actions_1[_i]; + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + dragonBones.EventObject.actionDataToInstance(action, eventObject, this._armature); + eventObject.slot = this; + this._armature._bufferAction(eventObject, false); + } else this._childArmature.animation.play(); + } + } + } + }; + Slot.prototype._updateGlobalTransformMatrix = function (isCache) { + var parentMatrix = 0 === this._parent._boneData.type ? this._parent.globalTransformMatrix : this._parent._getGlobalTransformMatrix(this.global.x, this.global.y); + this.globalTransformMatrix.copyFrom(this._localMatrix); + this.globalTransformMatrix.concat(parentMatrix); + isCache ? this.global.fromMatrix(this.globalTransformMatrix) : this._globalDirty = true; + }; + Slot.prototype._setDisplayIndex = function (value, isAnimation) { + void 0 === isAnimation && (isAnimation = false); + if (isAnimation) { + if (this._animationDisplayIndex === value) return false; + this._animationDisplayIndex = value; + } + if (this._displayIndex === value) return false; + this._displayIndex = value; + this._displayDirty = true; + this._updateDisplayData(); + return this._displayDirty; + }; + Slot.prototype._setZorder = function (value) { + this._zOrder === value; + this._zOrder = value; + this._zOrderDirty = true; + return this._zOrderDirty; + }; + Slot.prototype._setColor = function (value) { + this._colorTransform.copyFrom(value); + this._colorDirty = true; + return this._colorDirty; + }; + Slot.prototype._setDisplayList = function (value) { + if (null !== value && value.length > 0) { + this._displayList.length !== value.length && (this._displayList.length = value.length); + for (var i = 0, l = value.length; i < l; ++i) { + var eachDisplay = value[i]; + null !== eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay && !(eachDisplay instanceof dragonBones.Armature) && this._displayList.indexOf(eachDisplay) < 0 && this._initDisplay(eachDisplay, true); + this._displayList[i] = eachDisplay; + } + } else this._displayList.length > 0 && (this._displayList.length = 0); + this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? this._displayDirty = this._display !== this._displayList[this._displayIndex] : this._displayDirty = null !== this._display; + this._updateDisplayData(); + return this._displayDirty; + }; + Slot.prototype.init = function (slotData, armatureValue, rawDisplay, meshDisplay) { + if (null !== this._slotData) return; + this._slotData = slotData; + this._isFromCache = false; + this._visibleDirty = true; + this._blendModeDirty = true; + this._colorDirty = true; + this._blendMode = this._slotData.blendMode; + this._zOrder = this._slotData.zOrder; + this._colorTransform.copyFrom(this._slotData.color); + this._rawDisplay = rawDisplay; + this._meshDisplay = meshDisplay; + this._armature = armatureValue; + var slotParent = this._armature.getBone(this._slotData.parent.name); + null !== slotParent && (this._parent = slotParent); + this._armature._addSlot(this); + this._initDisplay(this._rawDisplay, false); + this._rawDisplay !== this._meshDisplay && this._initDisplay(this._meshDisplay, false); + this._onUpdateDisplay(); + this._addDisplay(); + }; + Slot.prototype.update = function (cacheFrameIndex) { + this._isFromCache = false; + if (this._displayDirty) { + this._displayDirty = false; + this._updateDisplay(); + this._transformDirty && (null !== this.origin ? this.global.copyFrom(this.origin).add(this.offset).toMatrix(this._localMatrix) : this.global.copyFrom(this.offset).toMatrix(this._localMatrix)); + } + if (this._zOrderDirty) { + this._zOrderDirty = false; + this._updateZOrder(); + } + if (cacheFrameIndex >= 0 && null !== this._cachedFrameIndices) { + var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex]; + if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) this._transformDirty = false; else if (cachedFrameIndex >= 0) { + this._transformDirty = true; + this._cachedFrameIndex = cachedFrameIndex; + } else if (this._transformDirty || this._parent._childrenTransformDirty) { + this._transformDirty = true; + this._cachedFrameIndex = -1; + } else if (this._cachedFrameIndex >= 0) { + this._transformDirty = false; + this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex; + } else { + this._transformDirty = true; + this._cachedFrameIndex = -1; + } + } else if (this._transformDirty || this._parent._childrenTransformDirty) { + cacheFrameIndex = -1; + this._transformDirty = true; + this._cachedFrameIndex = -1; + } + if (null === this._display) return; + if (this._visibleDirty) { + this._visibleDirty = false; + this._updateVisible(); + } + if (this._blendModeDirty) { + this._blendModeDirty = false; + this._updateBlendMode(); + } + if (this._colorDirty) { + this._colorDirty = false; + this._updateColor(); + } + if (null !== this._deformVertices && null !== this._deformVertices.verticesData && this._display === this._meshDisplay) { + var isSkinned = null !== this._deformVertices.verticesData.weight; + var isSurface = 0 !== this._parent._boneData.type; + if (this._deformVertices.verticesDirty || isSkinned && this._deformVertices.isBonesUpdate() || isSurface && this._parent._childrenTransformDirty) { + this._deformVertices.verticesDirty = false; + this._updateMesh(); + } + if (isSkinned || isSurface) return; + } + if (this._transformDirty) { + this._transformDirty = false; + if (this._cachedFrameIndex < 0) { + var isCache = cacheFrameIndex >= 0; + this._updateGlobalTransformMatrix(isCache); + isCache && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global)); + } else { + this._isFromCache = true; + this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex); + } + this._updateTransform(); + } + }; + Slot.prototype.updateTransformAndMatrix = function () { + if (this._transformDirty) { + this._transformDirty = false; + this._updateGlobalTransformMatrix(false); + } + }; + Slot.prototype.replaceDisplayData = function (value, displayIndex) { + void 0 === displayIndex && (displayIndex = -1); + displayIndex < 0 && (displayIndex = this._displayIndex < 0 ? 0 : this._displayIndex); + if (this._displayDatas.length <= displayIndex) { + this._displayDatas.length = displayIndex + 1; + for (var i = 0, l = this._displayDatas.length; i < l; ++i) this._displayDatas[i] || (this._displayDatas[i] = null); + } + this._displayDatas[displayIndex] = value; + }; + Slot.prototype.containsPoint = function (x, y) { + if (null === this._boundingBoxData) return false; + this.updateTransformAndMatrix(); + Slot._helpMatrix.copyFrom(this.globalTransformMatrix); + Slot._helpMatrix.invert(); + Slot._helpMatrix.transformPoint(x, y, Slot._helpPoint); + return this._boundingBoxData.containsPoint(Slot._helpPoint.x, Slot._helpPoint.y); + }; + Slot.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) { + void 0 === intersectionPointA && (intersectionPointA = null); + void 0 === intersectionPointB && (intersectionPointB = null); + void 0 === normalRadians && (normalRadians = null); + if (null === this._boundingBoxData) return 0; + this.updateTransformAndMatrix(); + Slot._helpMatrix.copyFrom(this.globalTransformMatrix); + Slot._helpMatrix.invert(); + Slot._helpMatrix.transformPoint(xA, yA, Slot._helpPoint); + xA = Slot._helpPoint.x; + yA = Slot._helpPoint.y; + Slot._helpMatrix.transformPoint(xB, yB, Slot._helpPoint); + xB = Slot._helpPoint.x; + yB = Slot._helpPoint.y; + var intersectionCount = this._boundingBoxData.intersectsSegment(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians); + if (intersectionCount > 0) { + if (1 === intersectionCount || 2 === intersectionCount) if (null !== intersectionPointA) { + this.globalTransformMatrix.transformPoint(intersectionPointA.x, intersectionPointA.y, intersectionPointA); + if (null !== intersectionPointB) { + intersectionPointB.x = intersectionPointA.x; + intersectionPointB.y = intersectionPointA.y; + } + } else null !== intersectionPointB && this.globalTransformMatrix.transformPoint(intersectionPointB.x, intersectionPointB.y, intersectionPointB); else { + null !== intersectionPointA && this.globalTransformMatrix.transformPoint(intersectionPointA.x, intersectionPointA.y, intersectionPointA); + null !== intersectionPointB && this.globalTransformMatrix.transformPoint(intersectionPointB.x, intersectionPointB.y, intersectionPointB); + } + if (null !== normalRadians) { + this.globalTransformMatrix.transformPoint(Math.cos(normalRadians.x), Math.sin(normalRadians.x), Slot._helpPoint, true); + normalRadians.x = Math.atan2(Slot._helpPoint.y, Slot._helpPoint.x); + this.globalTransformMatrix.transformPoint(Math.cos(normalRadians.y), Math.sin(normalRadians.y), Slot._helpPoint, true); + normalRadians.y = Math.atan2(Slot._helpPoint.y, Slot._helpPoint.x); + } + } + return intersectionCount; + }; + Slot.prototype.invalidUpdate = function () { + this._displayDirty = true; + this._transformDirty = true; + }; + Object.defineProperty(Slot.prototype, "visible", { + get: function get() { + return this._visible; + }, + set: function set(value) { + if (this._visible === value) return; + this._visible = value; + this._updateVisible(); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "displayIndex", { + get: function get() { + return this._displayIndex; + }, + set: function set(value) { + this._setDisplayIndex(value) && this.update(-1); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "name", { + get: function get() { + return this._slotData.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "displayList", { + get: function get() { + return this._displayList.concat(); + }, + set: function set(value) { + var backupDisplayList = this._displayList.concat(); + var disposeDisplayList = new Array(); + this._setDisplayList(value) && this.update(-1); + for (var _i = 0, backupDisplayList_1 = backupDisplayList; _i < backupDisplayList_1.length; _i++) { + var eachDisplay = backupDisplayList_1[_i]; + null !== eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay && this._displayList.indexOf(eachDisplay) < 0 && disposeDisplayList.indexOf(eachDisplay) < 0 && disposeDisplayList.push(eachDisplay); + } + for (var _a = 0, disposeDisplayList_2 = disposeDisplayList; _a < disposeDisplayList_2.length; _a++) { + var eachDisplay = disposeDisplayList_2[_a]; + eachDisplay instanceof dragonBones.Armature || this._disposeDisplay(eachDisplay, true); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "slotData", { + get: function get() { + return this._slotData; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "rawDisplayDatas", { + get: function get() { + return this._rawDisplayDatas; + }, + set: function set(value) { + if (this._rawDisplayDatas === value) return; + this._displayDirty = true; + this._rawDisplayDatas = value; + if (null !== this._rawDisplayDatas) { + this._displayDatas.length = this._rawDisplayDatas.length; + for (var i = 0, l = this._displayDatas.length; i < l; ++i) { + var rawDisplayData = this._rawDisplayDatas[i]; + null === rawDisplayData && (rawDisplayData = this._getDefaultRawDisplayData(i)); + this._displayDatas[i] = rawDisplayData; + } + } else this._displayDatas.length = 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "displayData", { + get: function get() { + return this._displayData; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "boundingBoxData", { + get: function get() { + return this._boundingBoxData; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "rawDisplay", { + get: function get() { + return this._rawDisplay; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "meshDisplay", { + get: function get() { + return this._meshDisplay; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "display", { + get: function get() { + return this._display; + }, + set: function set(value) { + if (this._display === value) return; + var displayListLength = this._displayList.length; + this._displayIndex < 0 && 0 === displayListLength && (this._displayIndex = 0); + if (this._displayIndex < 0) return; + var replaceDisplayList = this.displayList; + displayListLength <= this._displayIndex && (replaceDisplayList.length = this._displayIndex + 1); + replaceDisplayList[this._displayIndex] = value; + this.displayList = replaceDisplayList; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "childArmature", { + get: function get() { + return this._childArmature; + }, + set: function set(value) { + if (this._childArmature === value) return; + this.display = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Slot.prototype, "parent", { + get: function get() { + return this._parent; + }, + enumerable: true, + configurable: true + }); + Slot.prototype.getDisplay = function () { + return this._display; + }; + Slot.prototype.setDisplay = function (value) { + this.display = value; + }; + return Slot; + })(dragonBones.TransformObject); + dragonBones.Slot = Slot; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Constraint = (function (_super) { + __extends(Constraint, _super); + function Constraint() { + return null !== _super && _super.apply(this, arguments) || this; + } + Constraint.prototype._onClear = function () { + this._armature = null; + this._target = null; + this._root = null; + this._bone = null; + }; + Object.defineProperty(Constraint.prototype, "name", { + get: function get() { + return this._constraintData.name; + }, + enumerable: true, + configurable: true + }); + Constraint._helpMatrix = new dragonBones.Matrix(); + Constraint._helpTransform = new dragonBones.Transform(); + Constraint._helpPoint = new dragonBones.Point(); + return Constraint; + })(dragonBones.BaseObject); + dragonBones.Constraint = Constraint; + var IKConstraint = (function (_super) { + __extends(IKConstraint, _super); + function IKConstraint() { + return null !== _super && _super.apply(this, arguments) || this; + } + IKConstraint.toString = function () { + return "[class dragonBones.IKConstraint]"; + }; + IKConstraint.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this._scaleEnabled = false; + this._bendPositive = false; + this._weight = 1; + this._constraintData = null; + }; + IKConstraint.prototype._computeA = function () { + var ikGlobal = this._target.global; + var global = this._root.global; + var globalTransformMatrix = this._root.globalTransformMatrix; + var radian = Math.atan2(ikGlobal.y - global.y, ikGlobal.x - global.x); + global.scaleX < 0 && (radian += Math.PI); + global.rotation += dragonBones.Transform.normalizeRadian(radian - global.rotation) * this._weight; + global.toMatrix(globalTransformMatrix); + }; + IKConstraint.prototype._computeB = function () { + var boneLength = this._bone._boneData.length; + var parent = this._root; + var ikGlobal = this._target.global; + var parentGlobal = parent.global; + var global = this._bone.global; + var globalTransformMatrix = this._bone.globalTransformMatrix; + var x = globalTransformMatrix.a * boneLength; + var y = globalTransformMatrix.b * boneLength; + var lLL = x * x + y * y; + var lL = Math.sqrt(lLL); + var dX = global.x - parentGlobal.x; + var dY = global.y - parentGlobal.y; + var lPP = dX * dX + dY * dY; + var lP = Math.sqrt(lPP); + var rawRadian = global.rotation; + var rawParentRadian = parentGlobal.rotation; + var rawRadianA = Math.atan2(dY, dX); + dX = ikGlobal.x - parentGlobal.x; + dY = ikGlobal.y - parentGlobal.y; + var lTT = dX * dX + dY * dY; + var lT = Math.sqrt(lTT); + var radianA = 0; + if (lL + lP <= lT || lT + lL <= lP || lT + lP <= lL) { + radianA = Math.atan2(ikGlobal.y - parentGlobal.y, ikGlobal.x - parentGlobal.x); + lL + lP <= lT || lP < lL && (radianA += Math.PI); + } else { + var h = (lPP - lLL + lTT) / (2 * lTT); + var r = Math.sqrt(lPP - h * h * lTT) / lT; + var hX = parentGlobal.x + dX * h; + var hY = parentGlobal.y + dY * h; + var rX = -dY * r; + var rY = dX * r; + var isPPR = false; + var parentParent = parent.parent; + if (null !== parentParent) { + var parentParentMatrix = parentParent.globalTransformMatrix; + isPPR = parentParentMatrix.a * parentParentMatrix.d - parentParentMatrix.b * parentParentMatrix.c < 0; + } + if (isPPR !== this._bendPositive) { + global.x = hX - rX; + global.y = hY - rY; + } else { + global.x = hX + rX; + global.y = hY + rY; + } + radianA = Math.atan2(global.y - parentGlobal.y, global.x - parentGlobal.x); + } + var dR = dragonBones.Transform.normalizeRadian(radianA - rawRadianA); + parentGlobal.rotation = rawParentRadian + dR * this._weight; + parentGlobal.toMatrix(parent.globalTransformMatrix); + var currentRadianA = rawRadianA + dR * this._weight; + global.x = parentGlobal.x + Math.cos(currentRadianA) * lP; + global.y = parentGlobal.y + Math.sin(currentRadianA) * lP; + var radianB = Math.atan2(ikGlobal.y - global.y, ikGlobal.x - global.x); + global.scaleX < 0 && (radianB += Math.PI); + global.rotation = parentGlobal.rotation + rawRadian - rawParentRadian + dragonBones.Transform.normalizeRadian(radianB - dR - rawRadian) * this._weight; + global.toMatrix(globalTransformMatrix); + }; + IKConstraint.prototype.init = function (constraintData, armature) { + if (null !== this._constraintData) return; + this._constraintData = constraintData; + this._armature = armature; + this._target = this._armature.getBone(this._constraintData.target.name); + this._root = this._armature.getBone(this._constraintData.root.name); + this._bone = null !== this._constraintData.bone ? this._armature.getBone(this._constraintData.bone.name) : null; + var ikConstraintData = this._constraintData; + this._scaleEnabled = ikConstraintData.scaleEnabled; + this._bendPositive = ikConstraintData.bendPositive; + this._weight = ikConstraintData.weight; + this._root._hasConstraint = true; + }; + IKConstraint.prototype.update = function () { + this._root.updateByConstraint(); + if (null !== this._bone) { + this._bone.updateByConstraint(); + this._computeB(); + } else this._computeA(); + }; + IKConstraint.prototype.invalidUpdate = function () { + this._root.invalidUpdate(); + null !== this._bone && this._bone.invalidUpdate(); + }; + return IKConstraint; + })(Constraint); + dragonBones.IKConstraint = IKConstraint; + var PathConstraint = (function (_super) { + __extends(PathConstraint, _super); + function PathConstraint() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._bones = []; + _this._spaces = []; + _this._positions = []; + _this._curves = []; + _this._boneLengths = []; + _this._pathGlobalVertices = []; + _this._segments = [10]; + return _this; + } + PathConstraint.toString = function () { + return "[class dragonBones.PathConstraint]"; + }; + PathConstraint.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.dirty = false; + this.pathOffset = 0; + this.position = 0; + this.spacing = 0; + this.rotateOffset = 0; + this.rotateMix = 1; + this.translateMix = 1; + this._pathSlot = null; + this._bones.length = 0; + this._spaces.length = 0; + this._positions.length = 0; + this._curves.length = 0; + this._boneLengths.length = 0; + this._pathGlobalVertices.length = 0; + }; + PathConstraint.prototype._updatePathVertices = function (verticesData) { + var armature = this._armature; + var dragonBonesData = armature.armatureData.parent; + var scale = armature.armatureData.scale; + var intArray = dragonBonesData.intArray; + var floatArray = dragonBonesData.floatArray; + var pathOffset = verticesData.offset; + var pathVertexCount = intArray[pathOffset + 0]; + var pathVertexOffset = intArray[pathOffset + 2]; + this._pathGlobalVertices.length = 2 * pathVertexCount; + var weightData = verticesData.weight; + if (null === weightData) { + var parentBone = this._pathSlot.parent; + parentBone.updateByConstraint(); + var matrix = parentBone.globalTransformMatrix; + for (var i = 0, iV_1 = pathVertexOffset; i < pathVertexCount; i += 2) { + var vx = floatArray[iV_1++] * scale; + var vy = floatArray[iV_1++] * scale; + var x = matrix.a * vx + matrix.c * vy + matrix.tx; + var y = matrix.b * vx + matrix.d * vy + matrix.ty; + this._pathGlobalVertices[i] = x; + this._pathGlobalVertices[i + 1] = y; + } + return; + } + var bones = this._pathSlot._deformVertices.bones; + var weightBoneCount = weightData.bones.length; + var weightOffset = weightData.offset; + var floatOffset = intArray[weightOffset + 1]; + var iV = floatOffset; + var iB = weightOffset + 2 + weightBoneCount; + for (var i = 0, iW = 0; i < pathVertexCount; i++) { + var vertexBoneCount = intArray[iB++]; + var xG = 0, yG = 0; + for (var ii = 0, ll = vertexBoneCount; ii < ll; ii++) { + var boneIndex = intArray[iB++]; + var bone = bones[boneIndex]; + if (null === bone) continue; + bone.updateByConstraint(); + var matrix = bone.globalTransformMatrix; + var weight = floatArray[iV++]; + var vx = floatArray[iV++] * scale; + var vy = floatArray[iV++] * scale; + xG += (matrix.a * vx + matrix.c * vy + matrix.tx) * weight; + yG += (matrix.b * vx + matrix.d * vy + matrix.ty) * weight; + } + this._pathGlobalVertices[iW++] = xG; + this._pathGlobalVertices[iW++] = yG; + } + }; + PathConstraint.prototype._computeVertices = function (start, count, offset, out) { + for (var i = offset, iW = start; i < count; i += 2) { + out[i] = this._pathGlobalVertices[iW++]; + out[i + 1] = this._pathGlobalVertices[iW++]; + } + }; + PathConstraint.prototype._computeBezierCurve = function (pathDisplayDta, spaceCount, tangents, percentPosition, percentSpacing) { + var armature = this._armature; + var intArray = armature.armatureData.parent.intArray; + var vertexCount = intArray[pathDisplayDta.vertices.offset + 0]; + var positions = this._positions; + var spaces = this._spaces; + var isClosed = pathDisplayDta.closed; + var curveVertices = Array(); + var verticesLength = 2 * vertexCount; + var curveCount = verticesLength / 6; + var preCurve = -1; + var position = this.position; + positions.length = 3 * spaceCount + 2; + var pathLength = 0; + if (!pathDisplayDta.constantSpeed) { + var lenghts = pathDisplayDta.curveLengths; + curveCount -= isClosed ? 1 : 2; + pathLength = lenghts[curveCount]; + percentPosition && (position *= pathLength); + if (percentSpacing) for (var i = 0; i < spaceCount; i++) spaces[i] *= pathLength; + curveVertices.length = 8; + for (var i = 0, o = 0, curve = 0; i < spaceCount; i++, o += 3) { + var space = spaces[i]; + position += space; + if (isClosed) { + position %= pathLength; + position < 0 && (position += pathLength); + curve = 0; + } else { + if (position < 0) continue; + if (position > pathLength) continue; + } + var percent = 0; + for (; ; curve++) { + var len = lenghts[curve]; + if (position > len) continue; + if (0 === curve) percent = position / len; else { + var preLen = lenghts[curve - 1]; + percent = (position - preLen) / (len - preLen); + } + break; + } + if (curve !== preCurve) { + preCurve = curve; + if (isClosed && curve === curveCount) { + this._computeVertices(verticesLength - 4, 4, 0, curveVertices); + this._computeVertices(0, 4, 4, curveVertices); + } else this._computeVertices(6 * curve + 2, 8, 0, curveVertices); + } + this.addCurvePosition(percent, curveVertices[0], curveVertices[1], curveVertices[2], curveVertices[3], curveVertices[4], curveVertices[5], curveVertices[6], curveVertices[7], positions, o, tangents); + } + return; + } + if (isClosed) { + verticesLength += 2; + curveVertices.length = vertexCount; + this._computeVertices(2, verticesLength - 4, 0, curveVertices); + this._computeVertices(0, 2, verticesLength - 4, curveVertices); + curveVertices[verticesLength - 2] = curveVertices[0]; + curveVertices[verticesLength - 1] = curveVertices[1]; + } else { + curveCount--; + verticesLength -= 4; + curveVertices.length = verticesLength; + this._computeVertices(2, verticesLength, 0, curveVertices); + } + var curves = new Array(curveCount); + pathLength = 0; + var x1 = curveVertices[0], y1 = curveVertices[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + var tmpx, tmpy, dddfx, dddfy, ddfx, ddfy, dfx, dfy; + for (var i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = curveVertices[w]; + cy1 = curveVertices[w + 1]; + cx2 = curveVertices[w + 2]; + cy2 = curveVertices[w + 3]; + x2 = curveVertices[w + 4]; + y2 = curveVertices[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; + } + percentPosition && (position *= pathLength); + if (percentSpacing) for (var i = 0; i < spaceCount; i++) spaces[i] *= pathLength; + var segments = this._segments; + var curveLength = 0; + for (var i = 0, o = 0, curve = 0, segment = 0; i < spaceCount; i++, o += 3) { + var space = spaces[i]; + position += space; + var p = position; + if (isClosed) { + p %= pathLength; + p < 0 && (p += pathLength); + curve = 0; + } else { + if (p < 0) continue; + if (p > pathLength) continue; + } + for (; ; curve++) { + var length_1 = curves[curve]; + if (p > length_1) continue; + if (0 === curve) p /= length_1; else { + var prev = curves[curve - 1]; + p = (p - prev) / (length_1 - prev); + } + break; + } + if (curve !== preCurve) { + preCurve = curve; + var ii = 6 * curve; + x1 = curveVertices[ii]; + y1 = curveVertices[ii + 1]; + cx1 = curveVertices[ii + 2]; + cy1 = curveVertices[ii + 3]; + cx2 = curveVertices[ii + 4]; + cy2 = curveVertices[ii + 5]; + x2 = curveVertices[ii + 6]; + y2 = curveVertices[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_2 = segments[segment]; + if (p > length_2) continue; + if (0 === segment) p /= length_2; else { + var prev = segments[segment - 1]; + p = segment + (p - prev) / (length_2 - prev); + } + break; + } + this.addCurvePosition(.1 * p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, positions, o, tangents); + } + }; + PathConstraint.prototype.addCurvePosition = function (t, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, offset, tangents) { + if (0 === t) { + out[offset] = x1; + out[offset + 1] = y1; + out[offset + 2] = 0; + return; + } + if (1 === t) { + out[offset] = x2; + out[offset + 1] = y2; + out[offset + 2] = 0; + return; + } + var mt = 1 - t; + var mt2 = mt * mt; + var t2 = t * t; + var a = mt2 * mt; + var b = mt2 * t * 3; + var c = mt * t2 * 3; + var d = t * t2; + var x = a * x1 + b * cx1 + c * cx2 + d * x2; + var y = a * y1 + b * cy1 + c * cy2 + d * y2; + out[offset] = x; + out[offset + 1] = y; + out[offset + 2] = tangents ? Math.atan2(y - (a * y1 + b * cy1 + c * cy2), x - (a * x1 + b * cx1 + c * cx2)) : 0; + }; + PathConstraint.prototype.init = function (constraintData, armature) { + this._constraintData = constraintData; + this._armature = armature; + var data = constraintData; + this.pathOffset = data.pathDisplayData.vertices.offset; + this.position = data.position; + this.spacing = data.spacing; + this.rotateOffset = data.rotateOffset; + this.rotateMix = data.rotateMix; + this.translateMix = data.translateMix; + this._root = this._armature.getBone(data.root.name); + this._target = this._armature.getBone(data.target.name); + this._pathSlot = this._armature.getSlot(data.pathSlot.name); + for (var i = 0, l = data.bones.length; i < l; i++) { + var bone = this._armature.getBone(data.bones[i].name); + null !== bone && this._bones.push(bone); + } + 2 === data.rotateMode && (this._boneLengths.length = this._bones.length); + this._root._hasConstraint = true; + }; + PathConstraint.prototype.update = function () { + var pathSlot = this._pathSlot; + if (null === pathSlot._deformVertices || null === pathSlot._deformVertices.verticesData || pathSlot._deformVertices.verticesData.offset !== this.pathOffset) return; + var constraintData = this._constraintData; + var pathDisplayData = pathSlot._displayData; + var isPathVerticeDirty = false; + var deformVertices = pathSlot._deformVertices; + if (this._root._childrenTransformDirty) { + this._updatePathVertices(pathDisplayData.vertices); + isPathVerticeDirty = true; + } else if (null !== deformVertices && (deformVertices.verticesDirty || deformVertices.isBonesUpdate())) { + this._updatePathVertices(pathDisplayData.vertices); + deformVertices.verticesDirty = false; + isPathVerticeDirty = true; + } + if (!isPathVerticeDirty && !this.dirty) return; + var positionMode = constraintData.positionMode; + var spacingMode = constraintData.spacingMode; + var rotateMode = constraintData.rotateMode; + var bones = this._bones; + var isLengthMode = 0 === spacingMode; + var isChainScaleMode = 2 === rotateMode; + var isTangentMode = 0 === rotateMode; + var boneCount = bones.length; + var spacesCount = isTangentMode ? boneCount : boneCount + 1; + var spacing = this.spacing; + var spaces = this._spaces; + spaces.length = spacesCount; + if (isChainScaleMode || isLengthMode) { + spaces[0] = 0; + for (var i = 0, l = spacesCount - 1; i < l; i++) { + var bone = bones[i]; + bone.updateByConstraint(); + var boneLength = bone._boneData.length; + var matrix = bone.globalTransformMatrix; + var x = boneLength * matrix.a; + var y = boneLength * matrix.b; + var len = Math.sqrt(x * x + y * y); + isChainScaleMode && (this._boneLengths[i] = len); + spaces[i + 1] = (boneLength + spacing) * len / boneLength; + } + } else for (var i = 0; i < spacesCount; i++) spaces[i] = spacing; + this._computeBezierCurve(pathDisplayData, spacesCount, isTangentMode, 1 === positionMode, 2 === spacingMode); + var positions = this._positions; + var rotateOffset = this.rotateOffset; + var boneX = positions[0], boneY = positions[1]; + var tip; + if (0 === rotateOffset) tip = 1 === rotateMode; else { + tip = false; + var bone = pathSlot.parent; + if (null !== bone) { + var matrix = bone.globalTransformMatrix; + rotateOffset *= matrix.a * matrix.d - matrix.b * matrix.c > 0 ? dragonBones.Transform.DEG_RAD : -dragonBones.Transform.DEG_RAD; + } + } + var rotateMix = this.rotateMix; + var translateMix = this.translateMix; + for (var i = 0, p = 3; i < boneCount; i++, p += 3) { + var bone = bones[i]; + bone.updateByConstraint(); + var matrix = bone.globalTransformMatrix; + matrix.tx += (boneX - matrix.tx) * translateMix; + matrix.ty += (boneY - matrix.ty) * translateMix; + var x = positions[p], y = positions[p + 1]; + var dx = x - boneX, dy = y - boneY; + if (isChainScaleMode) { + var lenght = this._boneLengths[i]; + var s = (Math.sqrt(dx * dx + dy * dy) / lenght - 1) * rotateMix + 1; + matrix.a *= s; + matrix.b *= s; + } + boneX = x; + boneY = y; + if (rotateMix > 0) { + var a = matrix.a, b = matrix.b, c = matrix.c, d = matrix.d, r = void 0, cos = void 0, sin = void 0; + r = isTangentMode ? positions[p - 1] : Math.atan2(dy, dx); + r -= Math.atan2(b, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + var length_3 = bone._boneData.length; + boneX += (length_3 * (cos * a - sin * b) - dx) * rotateMix; + boneY += (length_3 * (sin * a + cos * b) - dy) * rotateMix; + } else r += rotateOffset; + r > dragonBones.Transform.PI ? r -= dragonBones.Transform.PI_D : r < -dragonBones.Transform.PI && (r += dragonBones.Transform.PI_D); + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + matrix.a = cos * a - sin * b; + matrix.b = sin * a + cos * b; + matrix.c = cos * c - sin * d; + matrix.d = sin * c + cos * d; + } + bone.global.fromMatrix(matrix); + } + this.dirty = false; + }; + PathConstraint.prototype.invalidUpdate = function () { }; + return PathConstraint; + })(Constraint); + dragonBones.PathConstraint = PathConstraint; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var WorldClock = (function () { + function WorldClock(time) { + void 0 === time && (time = 0); + this.time = 0; + this.timeScale = 1; + this._systemTime = 0; + this._animatebles = []; + this._clock = null; + this.time = time; + this._systemTime = .001 * new Date().getTime(); + } + WorldClock.prototype.advanceTime = function (passedTime) { + passedTime !== passedTime && (passedTime = 0); + var currentTime = .001 * Date.now(); + passedTime < 0 && (passedTime = currentTime - this._systemTime); + this._systemTime = currentTime; + 1 !== this.timeScale && (passedTime *= this.timeScale); + if (0 === passedTime) return; + passedTime < 0 ? this.time -= passedTime : this.time += passedTime; + var i = 0, r = 0, l = this._animatebles.length; + for (; i < l; ++i) { + var animatable = this._animatebles[i]; + if (null !== animatable) { + if (r > 0) { + this._animatebles[i - r] = animatable; + this._animatebles[i] = null; + } + animatable.advanceTime(passedTime); + } else r++; + } + if (r > 0) { + l = this._animatebles.length; + for (; i < l; ++i) { + var animateble = this._animatebles[i]; + null !== animateble ? this._animatebles[i - r] = animateble : r++; + } + this._animatebles.length -= r; + } + }; + WorldClock.prototype.contains = function (value) { + if (value === this) return false; + var ancestor = value; + while (ancestor !== this && null !== ancestor) ancestor = ancestor.clock; + return ancestor === this; + }; + WorldClock.prototype.add = function (value) { + if (this._animatebles.indexOf(value) < 0) { + this._animatebles.push(value); + value.clock = this; + } + }; + WorldClock.prototype.remove = function (value) { + var index = this._animatebles.indexOf(value); + if (index >= 0) { + this._animatebles[index] = null; + value.clock = null; + } + }; + WorldClock.prototype.clear = function () { + for (var _i = 0, _a = this._animatebles; _i < _a.length; _i++) { + var animatable = _a[_i]; + null !== animatable && (animatable.clock = null); + } + }; + Object.defineProperty(WorldClock.prototype, "clock", { + get: function get() { + return this._clock; + }, + set: function set(value) { + if (this._clock === value) return; + null !== this._clock && this._clock.remove(this); + this._clock = value; + null !== this._clock && this._clock.add(this); + }, + enumerable: true, + configurable: true + }); + WorldClock.clock = new WorldClock(); + return WorldClock; + })(); + dragonBones.WorldClock = WorldClock; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var Animation = (function (_super) { + __extends(Animation, _super); + function Animation() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._animationNames = []; + _this._animationStates = []; + _this._animations = {}; + _this._animationConfig = null; + return _this; + } + Animation.toString = function () { + return "[class dragonBones.Animation]"; + }; + Animation.prototype._onClear = function () { + for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState = _a[_i]; + animationState.returnToPool(); + } + for (var k in this._animations) delete this._animations[k]; + null !== this._animationConfig && this._animationConfig.returnToPool(); + this.timeScale = 1; + this._lockUpdate = false; + this._animationDirty = false; + this._inheritTimeScale = 1; + this._animationNames.length = 0; + this._animationStates.length = 0; + this._armature = null; + this._animationConfig = null; + this._lastAnimationState = null; + }; + Animation.prototype._fadeOut = function (animationConfig) { + switch (animationConfig.fadeOutMode) { + case 1: + for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState = _a[_i]; + if (null !== animationState._parent) continue; + animationState.layer === animationConfig.layer && animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut); + } + break; + + case 2: + for (var _b = 0, _c = this._animationStates; _b < _c.length; _b++) { + var animationState = _c[_b]; + if (null !== animationState._parent) continue; + animationState.group === animationConfig.group && animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut); + } + break; + + case 3: + for (var _d = 0, _e = this._animationStates; _d < _e.length; _d++) { + var animationState = _e[_d]; + if (null !== animationState._parent) continue; + animationState.layer === animationConfig.layer && animationState.group === animationConfig.group && animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut); + } + break; + + case 4: + for (var _f = 0, _g = this._animationStates; _f < _g.length; _f++) { + var animationState = _g[_f]; + if (null !== animationState._parent) continue; + animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut); + } + } + }; + Animation.prototype.init = function (armature) { + if (null !== this._armature) return; + this._armature = armature; + this._animationConfig = dragonBones.BaseObject.borrowObject(dragonBones.AnimationConfig); + }; + Animation.prototype.advanceTime = function (passedTime) { + passedTime < 0 && (passedTime = -passedTime); + this._armature.inheritAnimation && null !== this._armature._parent ? this._inheritTimeScale = this._armature._parent._armature.animation._inheritTimeScale * this.timeScale : this._inheritTimeScale = this.timeScale; + 1 !== this._inheritTimeScale && (passedTime *= this._inheritTimeScale); + var animationStateCount = this._animationStates.length; + if (1 === animationStateCount) { + var animationState = this._animationStates[0]; + if (animationState._fadeState > 0 && animationState._subFadeState > 0) { + this._armature._dragonBones.bufferObject(animationState); + this._animationStates.length = 0; + this._lastAnimationState = null; + } else { + var animationData = animationState._animationData; + var cacheFrameRate = animationData.cacheFrameRate; + if (this._animationDirty && cacheFrameRate > 0) { + this._animationDirty = false; + for (var _i = 0, _a = this._armature.getBones(); _i < _a.length; _i++) { + var bone = _a[_i]; + bone._cachedFrameIndices = animationData.getBoneCachedFrameIndices(bone.name); + } + for (var _b = 0, _c = this._armature.getSlots(); _b < _c.length; _b++) { + var slot = _c[_b]; + var rawDisplayDatas = slot.rawDisplayDatas; + if (null !== rawDisplayDatas && rawDisplayDatas.length > 0) { + var rawDsplayData = rawDisplayDatas[0]; + if (null !== rawDsplayData && rawDsplayData.parent === this._armature.armatureData.defaultSkin) { + slot._cachedFrameIndices = animationData.getSlotCachedFrameIndices(slot.name); + continue; + } + } + slot._cachedFrameIndices = null; + } + } + animationState.advanceTime(passedTime, cacheFrameRate); + } + } else if (animationStateCount > 1) { + for (var i = 0, r = 0; i < animationStateCount; ++i) { + var animationState = this._animationStates[i]; + if (animationState._fadeState > 0 && animationState._subFadeState > 0) { + r++; + this._armature._dragonBones.bufferObject(animationState); + this._animationDirty = true; + this._lastAnimationState === animationState && (this._lastAnimationState = null); + } else { + r > 0 && (this._animationStates[i - r] = animationState); + animationState.advanceTime(passedTime, 0); + } + if (i === animationStateCount - 1 && r > 0) { + this._animationStates.length -= r; + null === this._lastAnimationState && this._animationStates.length > 0 && (this._lastAnimationState = this._animationStates[this._animationStates.length - 1]); + } + } + this._armature._cacheFrameIndex = -1; + } else this._armature._cacheFrameIndex = -1; + }; + Animation.prototype.reset = function () { + for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState = _a[_i]; + animationState.returnToPool(); + } + this._animationDirty = false; + this._animationConfig.clear(); + this._animationStates.length = 0; + this._lastAnimationState = null; + }; + Animation.prototype.stop = function (animationName) { + void 0 === animationName && (animationName = null); + if (null !== animationName) { + var animationState = this.getState(animationName); + null !== animationState && animationState.stop(); + } else for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState = _a[_i]; + animationState.stop(); + } + }; + Animation.prototype.playConfig = function (animationConfig) { + var animationName = animationConfig.animation; + if (!(animationName in this._animations)) { + console.warn("Non-existent animation.\n", "DragonBones name: " + this._armature.armatureData.parent.name, "Armature name: " + this._armature.name, "Animation name: " + animationName); + return null; + } + var animationData = this._animations[animationName]; + if (5 === animationConfig.fadeOutMode) for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState_1 = _a[_i]; + if (animationState_1._animationData === animationData) return animationState_1; + } + 0 === this._animationStates.length ? animationConfig.fadeInTime = 0 : animationConfig.fadeInTime < 0 && (animationConfig.fadeInTime = animationData.fadeInTime); + animationConfig.fadeOutTime < 0 && (animationConfig.fadeOutTime = animationConfig.fadeInTime); + animationConfig.timeScale <= -100 && (animationConfig.timeScale = 1 / animationData.scale); + if (animationData.frameCount > 1) { + if (animationConfig.position < 0) { + animationConfig.position %= animationData.duration; + animationConfig.position = animationData.duration - animationConfig.position; + } else animationConfig.position === animationData.duration ? animationConfig.position -= 1e-6 : animationConfig.position > animationData.duration && (animationConfig.position %= animationData.duration); + animationConfig.duration > 0 && animationConfig.position + animationConfig.duration > animationData.duration && (animationConfig.duration = animationData.duration - animationConfig.position); + animationConfig.playTimes < 0 && (animationConfig.playTimes = animationData.playTimes); + } else { + animationConfig.playTimes = 1; + animationConfig.position = 0; + animationConfig.duration > 0 && (animationConfig.duration = 0); + } + 0 === animationConfig.duration && (animationConfig.duration = -1); + this._fadeOut(animationConfig); + var animationState = dragonBones.BaseObject.borrowObject(dragonBones.AnimationState); + animationState.init(this._armature, animationData, animationConfig); + this._animationDirty = true; + this._armature._cacheFrameIndex = -1; + if (this._animationStates.length > 0) { + var added = false; + for (var i = 0, l = this._animationStates.length; i < l; ++i) { + if (animationState.layer > this._animationStates[i].layer) { + added = true; + this._animationStates.splice(i, 0, animationState); + break; + } + if (i !== l - 1 && animationState.layer > this._animationStates[i + 1].layer) { + added = true; + this._animationStates.splice(i + 1, 0, animationState); + break; + } + } + added || this._animationStates.push(animationState); + } else this._animationStates.push(animationState); + for (var _b = 0, _c = this._armature.getSlots(); _b < _c.length; _b++) { + var slot = _c[_b]; + var childArmature = slot.childArmature; + null !== childArmature && childArmature.inheritAnimation && childArmature.animation.hasAnimation(animationName) && null === childArmature.animation.getState(animationName) && childArmature.animation.fadeIn(animationName); + } + var isLocked = false; + for (var k in animationData.animationTimelines) { + if (!this._lockUpdate) { + isLocked = true; + this._lockUpdate = true; + } + var childAnimatiionState = this.fadeIn(k, animationConfig.fadeInTime, 1, animationState.layer, null, 0); + if (null !== childAnimatiionState) { + childAnimatiionState.resetToPose = false; + childAnimatiionState._parent = animationState; + childAnimatiionState.stop(); + } + } + isLocked && (this._lockUpdate = false); + if (!this._lockUpdate) { + animationConfig.fadeInTime <= 0 && this._armature.advanceTime(0); + this._lastAnimationState = animationState; + } + return animationState; + }; + Animation.prototype.play = function (animationName, playTimes) { + void 0 === animationName && (animationName = null); + void 0 === playTimes && (playTimes = -1); + this._animationConfig.clear(); + this._animationConfig.resetToPose = true; + this._animationConfig.playTimes = playTimes; + this._animationConfig.fadeInTime = 0; + this._animationConfig.animation = null !== animationName ? animationName : ""; + if (null !== animationName && animationName.length > 0) this.playConfig(this._animationConfig); else if (null === this._lastAnimationState) { + var defaultAnimation = this._armature.armatureData.defaultAnimation; + if (null !== defaultAnimation) { + this._animationConfig.animation = defaultAnimation.name; + this.playConfig(this._animationConfig); + } + } else if (this._lastAnimationState.isPlaying || this._lastAnimationState.isCompleted) { + this._animationConfig.animation = this._lastAnimationState.name; + this.playConfig(this._animationConfig); + } else this._lastAnimationState.play(); + return this._lastAnimationState; + }; + Animation.prototype.fadeIn = function (animationName, fadeInTime, playTimes, layer, group, fadeOutMode) { + void 0 === fadeInTime && (fadeInTime = -1); + void 0 === playTimes && (playTimes = -1); + void 0 === layer && (layer = 0); + void 0 === group && (group = null); + void 0 === fadeOutMode && (fadeOutMode = 3); + this._animationConfig.clear(); + this._animationConfig.fadeOutMode = fadeOutMode; + this._animationConfig.playTimes = playTimes; + this._animationConfig.layer = layer; + this._animationConfig.fadeInTime = fadeInTime; + this._animationConfig.animation = animationName; + this._animationConfig.group = null !== group ? group : ""; + return this.playConfig(this._animationConfig); + }; + Animation.prototype.gotoAndPlayByTime = function (animationName, time, playTimes) { + void 0 === time && (time = 0); + void 0 === playTimes && (playTimes = -1); + this._animationConfig.clear(); + this._animationConfig.resetToPose = true; + this._animationConfig.playTimes = playTimes; + this._animationConfig.position = time; + this._animationConfig.fadeInTime = 0; + this._animationConfig.animation = animationName; + return this.playConfig(this._animationConfig); + }; + Animation.prototype.gotoAndPlayByFrame = function (animationName, frame, playTimes) { + void 0 === frame && (frame = 0); + void 0 === playTimes && (playTimes = -1); + this._animationConfig.clear(); + this._animationConfig.resetToPose = true; + this._animationConfig.playTimes = playTimes; + this._animationConfig.fadeInTime = 0; + this._animationConfig.animation = animationName; + var animationData = animationName in this._animations ? this._animations[animationName] : null; + null !== animationData && (this._animationConfig.position = animationData.duration * frame / animationData.frameCount); + return this.playConfig(this._animationConfig); + }; + Animation.prototype.gotoAndPlayByProgress = function (animationName, progress, playTimes) { + void 0 === progress && (progress = 0); + void 0 === playTimes && (playTimes = -1); + this._animationConfig.clear(); + this._animationConfig.resetToPose = true; + this._animationConfig.playTimes = playTimes; + this._animationConfig.fadeInTime = 0; + this._animationConfig.animation = animationName; + var animationData = animationName in this._animations ? this._animations[animationName] : null; + null !== animationData && (this._animationConfig.position = animationData.duration * (progress > 0 ? progress : 0)); + return this.playConfig(this._animationConfig); + }; + Animation.prototype.gotoAndStopByTime = function (animationName, time) { + void 0 === time && (time = 0); + var animationState = this.gotoAndPlayByTime(animationName, time, 1); + null !== animationState && animationState.stop(); + return animationState; + }; + Animation.prototype.gotoAndStopByFrame = function (animationName, frame) { + void 0 === frame && (frame = 0); + var animationState = this.gotoAndPlayByFrame(animationName, frame, 1); + null !== animationState && animationState.stop(); + return animationState; + }; + Animation.prototype.gotoAndStopByProgress = function (animationName, progress) { + void 0 === progress && (progress = 0); + var animationState = this.gotoAndPlayByProgress(animationName, progress, 1); + null !== animationState && animationState.stop(); + return animationState; + }; + Animation.prototype.getState = function (animationName) { + var i = this._animationStates.length; + while (i--) { + var animationState = this._animationStates[i]; + if (animationState.name === animationName) return animationState; + } + return null; + }; + Animation.prototype.hasAnimation = function (animationName) { + return animationName in this._animations; + }; + Animation.prototype.getStates = function () { + return this._animationStates; + }; + Object.defineProperty(Animation.prototype, "isPlaying", { + get: function get() { + for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState = _a[_i]; + if (animationState.isPlaying) return true; + } + return false; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "isCompleted", { + get: function get() { + for (var _i = 0, _a = this._animationStates; _i < _a.length; _i++) { + var animationState = _a[_i]; + if (!animationState.isCompleted) return false; + } + return this._animationStates.length > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "lastAnimationName", { + get: function get() { + return null !== this._lastAnimationState ? this._lastAnimationState.name : ""; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "animationNames", { + get: function get() { + return this._animationNames; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "animations", { + get: function get() { + return this._animations; + }, + set: function set(value) { + if (this._animations === value) return; + this._animationNames.length = 0; + for (var k in this._animations) delete this._animations[k]; + for (var k in value) { + this._animationNames.push(k); + this._animations[k] = value[k]; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "animationConfig", { + get: function get() { + this._animationConfig.clear(); + return this._animationConfig; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "lastAnimationState", { + get: function get() { + return this._lastAnimationState; + }, + enumerable: true, + configurable: true + }); + Animation.prototype.gotoAndPlay = function (animationName, fadeInTime, duration, playTimes, layer, group, fadeOutMode, pauseFadeOut, pauseFadeIn) { + void 0 === fadeInTime && (fadeInTime = -1); + void 0 === duration && (duration = -1); + void 0 === playTimes && (playTimes = -1); + void 0 === layer && (layer = 0); + void 0 === group && (group = null); + void 0 === fadeOutMode && (fadeOutMode = 3); + void 0 === pauseFadeOut && (pauseFadeOut = true); + void 0 === pauseFadeIn && (pauseFadeIn = true); + console.warn("Deprecated."); + pauseFadeOut; + pauseFadeIn; + this._animationConfig.clear(); + this._animationConfig.resetToPose = true; + this._animationConfig.fadeOutMode = fadeOutMode; + this._animationConfig.playTimes = playTimes; + this._animationConfig.layer = layer; + this._animationConfig.fadeInTime = fadeInTime; + this._animationConfig.animation = animationName; + this._animationConfig.group = null !== group ? group : ""; + var animationData = this._animations[animationName]; + animationData && duration > 0 && (this._animationConfig.timeScale = animationData.duration / duration); + return this.playConfig(this._animationConfig); + }; + Animation.prototype.gotoAndStop = function (animationName, time) { + void 0 === time && (time = 0); + console.warn("Deprecated."); + return this.gotoAndStopByTime(animationName, time); + }; + Object.defineProperty(Animation.prototype, "animationList", { + get: function get() { + console.warn("Deprecated."); + return this._animationNames; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Animation.prototype, "animationDataList", { + get: function get() { + console.warn("Deprecated."); + var list = []; + for (var i = 0, l = this._animationNames.length; i < l; ++i) list.push(this._animations[this._animationNames[i]]); + return list; + }, + enumerable: true, + configurable: true + }); + return Animation; + })(dragonBones.BaseObject); + dragonBones.Animation = Animation; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var AnimationState = (function (_super) { + __extends(AnimationState, _super); + function AnimationState() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._blendState = new BlendState(); + _this._boneMask = []; + _this._boneTimelines = []; + _this._surfaceTimelines = []; + _this._slotTimelines = []; + _this._constraintTimelines = []; + _this._animationTimelines = []; + _this._poseTimelines = []; + _this._bonePoses = {}; + _this._actionTimeline = null; + _this._zOrderTimeline = null; + _this._parent = null; + return _this; + } + AnimationState.toString = function () { + return "[class dragonBones.AnimationState]"; + }; + AnimationState.prototype._onClear = function () { + for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) { + var timeline = _a[_i]; + timeline.returnToPool(); + } + for (var _b = 0, _c = this._surfaceTimelines; _b < _c.length; _b++) { + var timeline = _c[_b]; + timeline.returnToPool(); + } + for (var _d = 0, _e = this._slotTimelines; _d < _e.length; _d++) { + var timeline = _e[_d]; + timeline.returnToPool(); + } + for (var _f = 0, _g = this._constraintTimelines; _f < _g.length; _f++) { + var timeline = _g[_f]; + timeline.returnToPool(); + } + for (var _h = 0, _j = this._animationTimelines; _h < _j.length; _h++) { + var timeline = _j[_h]; + timeline.returnToPool(); + } + for (var k in this._bonePoses) { + this._bonePoses[k].returnToPool(); + delete this._bonePoses[k]; + } + null !== this._actionTimeline && this._actionTimeline.returnToPool(); + null !== this._zOrderTimeline && this._zOrderTimeline.returnToPool(); + this.actionEnabled = false; + this.additiveBlending = false; + this.displayControl = false; + this.resetToPose = false; + this.playTimes = 1; + this.layer = 0; + this.timeScale = 1; + this.weight = 1; + this.autoFadeOutTime = 0; + this.fadeTotalTime = 0; + this.name = ""; + this.group = ""; + this._timelineDirty = 2; + this._playheadState = 0; + this._fadeState = -1; + this._subFadeState = -1; + this._position = 0; + this._duration = 0; + this._fadeTime = 0; + this._time = 0; + this._fadeProgress = 0; + this._weightResult = 0; + this._blendState.clear(); + this._boneMask.length = 0; + this._boneTimelines.length = 0; + this._surfaceTimelines.length = 0; + this._slotTimelines.length = 0; + this._constraintTimelines.length = 0; + this._animationTimelines.length = 0; + this._poseTimelines.length = 0; + this._animationData = null; + this._armature = null; + this._actionTimeline = null; + this._zOrderTimeline = null; + this._parent = null; + }; + AnimationState.prototype._updateTimelines = function () { + for (var _i = 0, _a = this._armature._constraints; _i < _a.length; _i++) { + var constraint = _a[_i]; + var timelineDatas = this._animationData.getConstraintTimelines(constraint.name); + if (null !== timelineDatas) for (var _b = 0, timelineDatas_1 = timelineDatas; _b < timelineDatas_1.length; _b++) { + var timelineData = timelineDatas_1[_b]; + switch (timelineData.type) { + case 30: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraintTimelineState); + timeline.constraint = constraint; + timeline.init(this._armature, this, timelineData); + this._constraintTimelines.push(timeline); + } + } else if (this.resetToPose) { + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraintTimelineState); + timeline.constraint = constraint; + timeline.init(this._armature, this, null); + this._constraintTimelines.push(timeline); + this._poseTimelines.push(timeline); + } + } + for (var _c = 0, _d = this._armature.animation.getStates(); _c < _d.length; _c++) { + var animationState = _d[_c]; + if (animationState._parent !== this) continue; + var timelineDatas = this._animationData.getAnimationTimelines(animationState.name); + if (null === timelineDatas) continue; + for (var _e = 0, timelineDatas_2 = timelineDatas; _e < timelineDatas_2.length; _e++) { + var timelineData = timelineDatas_2[_e]; + switch (timelineData.type) { + case 40: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.AnimationTimelineState); + timeline.animationState = animationState; + timeline.init(this._armature, this, timelineData); + this._animationTimelines.push(timeline); + } + } + } + }; + AnimationState.prototype._updateBoneAndSlotTimelines = function () { + var boneTimelines = {}; + for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) { + var timeline = _a[_i]; + var timelineName = timeline.bone.name; + timelineName in boneTimelines || (boneTimelines[timelineName] = []); + boneTimelines[timelineName].push(timeline); + } + for (var _b = 0, _c = this._armature.getBones(); _b < _c.length; _b++) { + var bone = _c[_b]; + var timelineName = bone.name; + if (!this.containsBoneMask(timelineName)) continue; + if (timelineName in boneTimelines) delete boneTimelines[timelineName]; else if (0 === bone._boneData.type) { + var timelineDatas = this._animationData.getBoneTimelines(timelineName); + var bonePose = timelineName in this._bonePoses ? this._bonePoses[timelineName] : this._bonePoses[timelineName] = dragonBones.BaseObject.borrowObject(BonePose); + if (null !== timelineDatas) for (var _d = 0, timelineDatas_3 = timelineDatas; _d < timelineDatas_3.length; _d++) { + var timelineData = timelineDatas_3[_d]; + switch (timelineData.type) { + case 10: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneAllTimelineState); + timeline.bone = bone; + timeline.bonePose = bonePose; + timeline.init(this._armature, this, timelineData); + this._boneTimelines.push(timeline); + break; + + case 11: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneTranslateTimelineState); + timeline.bone = bone; + timeline.bonePose = bonePose; + timeline.init(this._armature, this, timelineData); + this._boneTimelines.push(timeline); + break; + + case 12: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneRotateTimelineState); + timeline.bone = bone; + timeline.bonePose = bonePose; + timeline.init(this._armature, this, timelineData); + this._boneTimelines.push(timeline); + break; + + case 13: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneScaleTimelineState); + timeline.bone = bone; + timeline.bonePose = bonePose; + timeline.init(this._armature, this, timelineData); + this._boneTimelines.push(timeline); + } + } else if (this.resetToPose) { + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneAllTimelineState); + timeline.bone = bone; + timeline.bonePose = bonePose; + timeline.init(this._armature, this, null); + this._boneTimelines.push(timeline); + this._poseTimelines.push(timeline); + } + } else if (1 === bone._boneData.type) { + var timelineDatas = this._animationData.getSurfaceTimelines(timelineName); + if (null !== timelineDatas) for (var _e = 0, timelineDatas_4 = timelineDatas; _e < timelineDatas_4.length; _e++) { + var timelineData = timelineDatas_4[_e]; + switch (timelineData.type) { + case 50: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SurfaceTimelineState); + timeline.surface = bone; + timeline.init(this._armature, this, timelineData); + this._surfaceTimelines.push(timeline); + } + } else if (this.resetToPose) { + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SurfaceTimelineState); + timeline.surface = bone; + timeline.init(this._armature, this, null); + this._surfaceTimelines.push(timeline); + this._poseTimelines.push(timeline); + } + } + } + for (var k in boneTimelines) for (var _f = 0, _g = boneTimelines[k]; _f < _g.length; _f++) { + var timeline = _g[_f]; + this._boneTimelines.splice(this._boneTimelines.indexOf(timeline), 1); + timeline.returnToPool(); + } + var slotTimelines = {}; + var ffdFlags = []; + for (var _h = 0, _j = this._slotTimelines; _h < _j.length; _h++) { + var timeline = _j[_h]; + var timelineName = timeline.slot.name; + timelineName in slotTimelines || (slotTimelines[timelineName] = []); + slotTimelines[timelineName].push(timeline); + } + for (var _k = 0, _l = this._armature.getSlots(); _k < _l.length; _k++) { + var slot = _l[_k]; + var boneName = slot.parent.name; + if (!this.containsBoneMask(boneName)) continue; + var timelineName = slot.name; + var timelineDatas = this._animationData.getSlotTimelines(timelineName); + if (timelineName in slotTimelines) delete slotTimelines[timelineName]; else { + var displayIndexFlag = false; + var colorFlag = false; + ffdFlags.length = 0; + if (null !== timelineDatas) for (var _m = 0, timelineDatas_5 = timelineDatas; _m < timelineDatas_5.length; _m++) { + var timelineData = timelineDatas_5[_m]; + switch (timelineData.type) { + case 20: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotDislayTimelineState); + timeline.slot = slot; + timeline.init(this._armature, this, timelineData); + this._slotTimelines.push(timeline); + displayIndexFlag = true; + break; + + case 21: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotColorTimelineState); + timeline.slot = slot; + timeline.init(this._armature, this, timelineData); + this._slotTimelines.push(timeline); + colorFlag = true; + break; + + case 22: + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.DeformTimelineState); + timeline.slot = slot; + timeline.init(this._armature, this, timelineData); + this._slotTimelines.push(timeline); + ffdFlags.push(timeline.vertexOffset); + } + } + if (this.resetToPose) { + if (!displayIndexFlag) { + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotDislayTimelineState); + timeline.slot = slot; + timeline.init(this._armature, this, null); + this._slotTimelines.push(timeline); + this._poseTimelines.push(timeline); + } + if (!colorFlag) { + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotColorTimelineState); + timeline.slot = slot; + timeline.init(this._armature, this, null); + this._slotTimelines.push(timeline); + this._poseTimelines.push(timeline); + } + if (null !== slot.rawDisplayDatas) for (var _o = 0, _p = slot.rawDisplayDatas; _o < _p.length; _o++) { + var displayData = _p[_o]; + if (null !== displayData && 2 === displayData.type) { + var meshOffset = displayData.vertices.offset; + if (ffdFlags.indexOf(meshOffset) < 0) { + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.DeformTimelineState); + timeline.vertexOffset = meshOffset; + timeline.slot = slot; + timeline.init(this._armature, this, null); + this._slotTimelines.push(timeline); + this._poseTimelines.push(timeline); + } + } + } + } + } + } + for (var k in slotTimelines) for (var _q = 0, _r = slotTimelines[k]; _q < _r.length; _q++) { + var timeline = _r[_q]; + this._slotTimelines.splice(this._slotTimelines.indexOf(timeline), 1); + timeline.returnToPool(); + } + }; + AnimationState.prototype._advanceFadeTime = function (passedTime) { + var isFadeOut = this._fadeState > 0; + if (this._subFadeState < 0) { + this._subFadeState = 0; + var eventType = isFadeOut ? dragonBones.EventObject.FADE_OUT : dragonBones.EventObject.FADE_IN; + if (this._armature.eventDispatcher.hasDBEventListener(eventType)) { + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + eventObject.type = eventType; + eventObject.armature = this._armature; + eventObject.animationState = this; + this._armature._dragonBones.bufferEvent(eventObject); + } + } + passedTime < 0 && (passedTime = -passedTime); + this._fadeTime += passedTime; + if (this._fadeTime >= this.fadeTotalTime) { + this._subFadeState = 1; + this._fadeProgress = isFadeOut ? 0 : 1; + } else this._fadeTime > 0 ? this._fadeProgress = isFadeOut ? 1 - this._fadeTime / this.fadeTotalTime : this._fadeTime / this.fadeTotalTime : this._fadeProgress = isFadeOut ? 1 : 0; + if (this._subFadeState > 0) { + if (!isFadeOut) { + this._playheadState |= 1; + this._fadeState = 0; + } + var eventType = isFadeOut ? dragonBones.EventObject.FADE_OUT_COMPLETE : dragonBones.EventObject.FADE_IN_COMPLETE; + if (this._armature.eventDispatcher.hasDBEventListener(eventType)) { + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + eventObject.type = eventType; + eventObject.armature = this._armature; + eventObject.animationState = this; + this._armature._dragonBones.bufferEvent(eventObject); + } + } + }; + AnimationState.prototype.init = function (armature, animationData, animationConfig) { + if (null !== this._armature) return; + this._armature = armature; + this._animationData = animationData; + this.resetToPose = animationConfig.resetToPose; + this.additiveBlending = animationConfig.additiveBlending; + this.displayControl = animationConfig.displayControl; + this.actionEnabled = animationConfig.actionEnabled; + this.layer = animationConfig.layer; + this.playTimes = animationConfig.playTimes; + this.timeScale = animationConfig.timeScale; + this.fadeTotalTime = animationConfig.fadeInTime; + this.autoFadeOutTime = animationConfig.autoFadeOutTime; + this.weight = animationConfig.weight; + this.name = animationConfig.name.length > 0 ? animationConfig.name : animationConfig.animation; + this.group = animationConfig.group; + animationConfig.pauseFadeIn ? this._playheadState = 2 : this._playheadState = 3; + if (animationConfig.duration < 0) { + this._position = 0; + this._duration = this._animationData.duration; + 0 !== animationConfig.position ? this.timeScale >= 0 ? this._time = animationConfig.position : this._time = animationConfig.position - this._duration : this._time = 0; + } else { + this._position = animationConfig.position; + this._duration = animationConfig.duration; + this._time = 0; + } + this.timeScale < 0 && 0 === this._time && (this._time = -1e-6); + this.fadeTotalTime <= 0 && (this._fadeProgress = .999999); + if (animationConfig.boneMask.length > 0) { + this._boneMask.length = animationConfig.boneMask.length; + for (var i = 0, l = this._boneMask.length; i < l; ++i) this._boneMask[i] = animationConfig.boneMask[i]; + } + this._actionTimeline = dragonBones.BaseObject.borrowObject(dragonBones.ActionTimelineState); + this._actionTimeline.init(this._armature, this, this._animationData.actionTimeline); + this._actionTimeline.currentTime = this._time; + this._actionTimeline.currentTime < 0 && (this._actionTimeline.currentTime = this._duration - this._actionTimeline.currentTime); + if (null !== this._animationData.zOrderTimeline) { + this._zOrderTimeline = dragonBones.BaseObject.borrowObject(dragonBones.ZOrderTimelineState); + this._zOrderTimeline.init(this._armature, this, this._animationData.zOrderTimeline); + } + }; + AnimationState.prototype.advanceTime = function (passedTime, cacheFrameRate) { + this._blendState.dirty = false; + 0 === this._fadeState && 0 === this._subFadeState || this._advanceFadeTime(passedTime); + if (3 === this._playheadState) { + 1 !== this.timeScale && (passedTime *= this.timeScale); + this._time += passedTime; + } + if (0 !== this._timelineDirty) { + 2 === this._timelineDirty && this._updateTimelines(); + this._timelineDirty = 0; + this._updateBoneAndSlotTimelines(); + } + if (0 === this.weight) return; + var isCacheEnabled = 0 === this._fadeState && cacheFrameRate > 0; + var isUpdateTimeline = true; + var isUpdateBoneTimeline = true; + var time = this._time; + this._weightResult = this.weight * this._fadeProgress; + null !== this._parent && (this._weightResult *= this._parent._weightResult / this._parent._fadeProgress); + this._actionTimeline.playState <= 0 && this._actionTimeline.update(time); + if (isCacheEnabled) { + var internval = 2 * cacheFrameRate; + this._actionTimeline.currentTime = Math.floor(this._actionTimeline.currentTime * internval) / internval; + } + null !== this._zOrderTimeline && this._zOrderTimeline.playState <= 0 && this._zOrderTimeline.update(time); + if (isCacheEnabled) { + var cacheFrameIndex = Math.floor(this._actionTimeline.currentTime * cacheFrameRate); + if (this._armature._cacheFrameIndex === cacheFrameIndex) { + isUpdateTimeline = false; + isUpdateBoneTimeline = false; + } else { + this._armature._cacheFrameIndex = cacheFrameIndex; + this._animationData.cachedFrames[cacheFrameIndex] ? isUpdateBoneTimeline = false : this._animationData.cachedFrames[cacheFrameIndex] = true; + } + } + if (isUpdateTimeline) { + if (isUpdateBoneTimeline) for (var i = 0, l = this._boneTimelines.length; i < l; ++i) { + var timeline = this._boneTimelines[i]; + timeline.playState <= 0 && timeline.update(time); + if (i === l - 1 || timeline.bone !== this._boneTimelines[i + 1].bone) { + var state = timeline.bone._blendState.update(this._weightResult, this.layer); + 0 !== state && timeline.blend(state); + } + } + for (var i = 0, l = this._surfaceTimelines.length; i < l; ++i) { + var timeline = this._surfaceTimelines[i]; + var state = timeline.surface._blendState.update(this._weightResult, this.layer); + timeline.playState <= 0 && timeline.update(time); + 0 !== state && timeline.blend(state); + } + if (this.displayControl) for (var i = 0, l = this._slotTimelines.length; i < l; ++i) { + var timeline = this._slotTimelines[i]; + var displayController = timeline.slot.displayController; + null !== displayController && displayController !== this.name && displayController !== this.group || timeline.playState <= 0 && timeline.update(time); + } + for (var i = 0, l = this._constraintTimelines.length; i < l; ++i) { + var timeline = this._constraintTimelines[i]; + timeline.playState <= 0 && timeline.update(time); + } + for (var i = 0, l = this._animationTimelines.length; i < l; ++i) { + var timeline = this._animationTimelines[i]; + var state = timeline.animationState._blendState.update(this._weightResult, this.layer); + timeline.playState <= 0 && timeline.update(time); + 0 !== state && timeline.blend(state); + } + } + if (0 === this._fadeState) { + if (this._subFadeState > 0) { + this._subFadeState = 0; + if (this._poseTimelines.length > 0) { + for (var _i = 0, _a = this._poseTimelines; _i < _a.length; _i++) { + var timeline = _a[_i]; + timeline instanceof dragonBones.BoneTimelineState ? this._boneTimelines.splice(this._boneTimelines.indexOf(timeline), 1) : timeline instanceof dragonBones.SurfaceTimelineState ? this._surfaceTimelines.splice(this._surfaceTimelines.indexOf(timeline), 1) : timeline instanceof dragonBones.SlotTimelineState ? this._slotTimelines.splice(this._slotTimelines.indexOf(timeline), 1) : timeline instanceof dragonBones.ConstraintTimelineState && this._constraintTimelines.splice(this._constraintTimelines.indexOf(timeline), 1); + timeline.returnToPool(); + } + this._poseTimelines.length = 0; + } + } + this._actionTimeline.playState > 0 && this.autoFadeOutTime >= 0 && this.fadeOut(this.autoFadeOutTime); + } + }; + AnimationState.prototype.play = function () { + this._playheadState = 3; + }; + AnimationState.prototype.stop = function () { + this._playheadState &= 1; + }; + AnimationState.prototype.fadeOut = function (fadeOutTime, pausePlayhead) { + void 0 === pausePlayhead && (pausePlayhead = true); + fadeOutTime < 0 && (fadeOutTime = 0); + pausePlayhead && (this._playheadState &= 2); + if (this._fadeState > 0) { + if (fadeOutTime > this.fadeTotalTime - this._fadeTime) return; + } else { + this._fadeState = 1; + this._subFadeState = -1; + (fadeOutTime <= 0 || this._fadeProgress <= 0) && (this._fadeProgress = 1e-6); + for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) { + var timeline = _a[_i]; + timeline.fadeOut(); + } + for (var _b = 0, _c = this._surfaceTimelines; _b < _c.length; _b++) { + var timeline = _c[_b]; + timeline.fadeOut(); + } + for (var _d = 0, _e = this._slotTimelines; _d < _e.length; _d++) { + var timeline = _e[_d]; + timeline.fadeOut(); + } + for (var _f = 0, _g = this._constraintTimelines; _f < _g.length; _f++) { + var timeline = _g[_f]; + timeline.fadeOut(); + } + for (var _h = 0, _j = this._animationTimelines; _h < _j.length; _h++) { + var timeline = _j[_h]; + timeline.animationState.fadeOut(fadeOutTime, pausePlayhead); + timeline.fadeOut(); + } + } + this.displayControl = false; + this.fadeTotalTime = this._fadeProgress > 1e-6 ? fadeOutTime / this._fadeProgress : 0; + this._fadeTime = this.fadeTotalTime * (1 - this._fadeProgress); + }; + AnimationState.prototype.containsBoneMask = function (boneName) { + return 0 === this._boneMask.length || this._boneMask.indexOf(boneName) >= 0; + }; + AnimationState.prototype.addBoneMask = function (boneName, recursive) { + void 0 === recursive && (recursive = true); + var currentBone = this._armature.getBone(boneName); + if (null === currentBone) return; + this._boneMask.indexOf(boneName) < 0 && this._boneMask.push(boneName); + if (recursive) for (var _i = 0, _a = this._armature.getBones(); _i < _a.length; _i++) { + var bone = _a[_i]; + this._boneMask.indexOf(bone.name) < 0 && currentBone.contains(bone) && this._boneMask.push(bone.name); + } + this._timelineDirty = 1; + }; + AnimationState.prototype.removeBoneMask = function (boneName, recursive) { + void 0 === recursive && (recursive = true); + var index = this._boneMask.indexOf(boneName); + index >= 0 && this._boneMask.splice(index, 1); + if (recursive) { + var currentBone = this._armature.getBone(boneName); + if (null !== currentBone) { + var bones = this._armature.getBones(); + if (this._boneMask.length > 0) for (var _i = 0, bones_1 = bones; _i < bones_1.length; _i++) { + var bone = bones_1[_i]; + var index_2 = this._boneMask.indexOf(bone.name); + index_2 >= 0 && currentBone.contains(bone) && this._boneMask.splice(index_2, 1); + } else for (var _a = 0, bones_2 = bones; _a < bones_2.length; _a++) { + var bone = bones_2[_a]; + if (bone === currentBone) continue; + currentBone.contains(bone) || this._boneMask.push(bone.name); + } + } + } + this._timelineDirty = 1; + }; + AnimationState.prototype.removeAllBoneMask = function () { + this._boneMask.length = 0; + this._timelineDirty = 1; + }; + Object.defineProperty(AnimationState.prototype, "isFadeIn", { + get: function get() { + return this._fadeState < 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "isFadeOut", { + get: function get() { + return this._fadeState > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "isFadeComplete", { + get: function get() { + return 0 === this._fadeState; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "isPlaying", { + get: function get() { + return 0 !== (2 & this._playheadState) && this._actionTimeline.playState <= 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "isCompleted", { + get: function get() { + return this._actionTimeline.playState > 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "currentPlayTimes", { + get: function get() { + return this._actionTimeline.currentPlayTimes; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "totalTime", { + get: function get() { + return this._duration; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "currentTime", { + get: function get() { + return this._actionTimeline.currentTime; + }, + set: function set(value) { + var currentPlayTimes = this._actionTimeline.currentPlayTimes - (this._actionTimeline.playState > 0 ? 1 : 0); + if (value < 0 || this._duration < value) { + value = value % this._duration + currentPlayTimes * this._duration; + value < 0 && (value += this._duration); + } + this.playTimes > 0 && currentPlayTimes === this.playTimes - 1 && value === this._duration && (value = this._duration - 1e-6); + if (this._time === value) return; + this._time = value; + this._actionTimeline.setCurrentTime(this._time); + null !== this._zOrderTimeline && (this._zOrderTimeline.playState = -1); + for (var _i = 0, _a = this._boneTimelines; _i < _a.length; _i++) { + var timeline = _a[_i]; + timeline.playState = -1; + } + for (var _b = 0, _c = this._slotTimelines; _b < _c.length; _b++) { + var timeline = _c[_b]; + timeline.playState = -1; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnimationState.prototype, "animationData", { + get: function get() { + return this._animationData; + }, + enumerable: true, + configurable: true + }); + return AnimationState; + })(dragonBones.BaseObject); + dragonBones.AnimationState = AnimationState; + var BonePose = (function (_super) { + __extends(BonePose, _super); + function BonePose() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.current = new dragonBones.Transform(); + _this.delta = new dragonBones.Transform(); + _this.result = new dragonBones.Transform(); + return _this; + } + BonePose.toString = function () { + return "[class dragonBones.BonePose]"; + }; + BonePose.prototype._onClear = function () { + this.current.identity(); + this.delta.identity(); + this.result.identity(); + }; + return BonePose; + })(dragonBones.BaseObject); + dragonBones.BonePose = BonePose; + var BlendState = (function () { + function BlendState() { } + BlendState.prototype.update = function (weight, p_layer) { + if (this.dirty) { + if (!(this.leftWeight > 0)) return 0; + if (this.layer !== p_layer) { + if (this.layerWeight >= this.leftWeight) { + this.leftWeight = 0; + return 0; + } + this.layer = p_layer; + this.leftWeight -= this.layerWeight; + this.layerWeight = 0; + } + weight *= this.leftWeight; + this.layerWeight += weight; + this.blendWeight = weight; + return 2; + } + this.dirty = true; + this.layer = p_layer; + this.layerWeight = weight; + this.leftWeight = 1; + this.blendWeight = weight; + return 1; + }; + BlendState.prototype.clear = function () { + this.dirty = false; + this.layer = 0; + this.leftWeight = 0; + this.layerWeight = 0; + this.blendWeight = 0; + }; + return BlendState; + })(); + dragonBones.BlendState = BlendState; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var TimelineState = (function (_super) { + __extends(TimelineState, _super); + function TimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + TimelineState.prototype._onClear = function () { + this.playState = -1; + this.currentPlayTimes = -1; + this.currentTime = -1; + this._tweenState = 0; + this._frameRate = 0; + this._frameValueOffset = 0; + this._frameCount = 0; + this._frameOffset = 0; + this._frameIndex = -1; + this._frameRateR = 0; + this._position = 0; + this._duration = 0; + this._timeScale = 1; + this._timeOffset = 0; + this._dragonBonesData = null; + this._animationData = null; + this._timelineData = null; + this._armature = null; + this._animationState = null; + this._actionTimeline = null; + this._frameArray = null; + this._frameIntArray = null; + this._frameFloatArray = null; + this._timelineArray = null; + this._frameIndices = null; + }; + TimelineState.prototype._setCurrentTime = function (passedTime) { + var prevState = this.playState; + var prevPlayTimes = this.currentPlayTimes; + var prevTime = this.currentTime; + if (null !== this._actionTimeline && this._frameCount <= 1) { + this.playState = this._actionTimeline.playState >= 0 ? 1 : -1; + this.currentPlayTimes = 1; + this.currentTime = this._actionTimeline.currentTime; + } else if (null === this._actionTimeline || 1 !== this._timeScale || 0 !== this._timeOffset) { + var playTimes = this._animationState.playTimes; + var totalTime = playTimes * this._duration; + passedTime *= this._timeScale; + 0 !== this._timeOffset && (passedTime += this._timeOffset * this._animationData.duration); + if (playTimes > 0 && (passedTime >= totalTime || passedTime <= -totalTime)) { + this.playState <= 0 && 3 === this._animationState._playheadState && (this.playState = 1); + this.currentPlayTimes = playTimes; + this.currentTime = passedTime < 0 ? 0 : this._duration + 1e-6; + } else { + 0 !== this.playState && 3 === this._animationState._playheadState && (this.playState = 0); + if (passedTime < 0) { + passedTime = -passedTime; + this.currentPlayTimes = Math.floor(passedTime / this._duration); + this.currentTime = this._duration - passedTime % this._duration; + } else { + this.currentPlayTimes = Math.floor(passedTime / this._duration); + this.currentTime = passedTime % this._duration; + } + } + this.currentTime += this._position; + } else { + this.playState = this._actionTimeline.playState; + this.currentPlayTimes = this._actionTimeline.currentPlayTimes; + this.currentTime = this._actionTimeline.currentTime; + } + if (this.currentPlayTimes === prevPlayTimes && this.currentTime === prevTime) return false; + (prevState < 0 && this.playState !== prevState || this.playState <= 0 && this.currentPlayTimes !== prevPlayTimes) && (this._frameIndex = -1); + return true; + }; + TimelineState.prototype.init = function (armature, animationState, timelineData) { + this._armature = armature; + this._animationState = animationState; + this._timelineData = timelineData; + this._actionTimeline = this._animationState._actionTimeline; + this === this._actionTimeline && (this._actionTimeline = null); + this._animationData = this._animationState._animationData; + this._frameRate = this._animationData.parent.frameRate; + this._frameRateR = 1 / this._frameRate; + this._position = this._animationState._position; + this._duration = this._animationState._duration; + this._dragonBonesData = this._animationData.parent.parent; + if (null !== this._timelineData) { + this._frameIntArray = this._dragonBonesData.frameIntArray; + this._frameFloatArray = this._dragonBonesData.frameFloatArray; + this._frameArray = this._dragonBonesData.frameArray; + this._timelineArray = this._dragonBonesData.timelineArray; + this._frameIndices = this._dragonBonesData.frameIndices; + this._frameCount = this._timelineArray[this._timelineData.offset + 2]; + this._frameValueOffset = this._timelineArray[this._timelineData.offset + 4]; + this._timeScale = 100 / this._timelineArray[this._timelineData.offset + 0]; + this._timeOffset = .01 * this._timelineArray[this._timelineData.offset + 1]; + } + }; + TimelineState.prototype.fadeOut = function () { }; + TimelineState.prototype.update = function (passedTime) { + if (this._setCurrentTime(passedTime)) { + if (this._frameCount > 1) { + var timelineFrameIndex = Math.floor(this.currentTime * this._frameRate); + var frameIndex = this._frameIndices[this._timelineData.frameIndicesOffset + timelineFrameIndex]; + if (this._frameIndex !== frameIndex) { + this._frameIndex = frameIndex; + this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex]; + this._onArriveAtFrame(); + } + } else if (this._frameIndex < 0) { + this._frameIndex = 0; + null !== this._timelineData && (this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5]); + this._onArriveAtFrame(); + } + 0 !== this._tweenState && this._onUpdateFrame(); + } + }; + return TimelineState; + })(dragonBones.BaseObject); + dragonBones.TimelineState = TimelineState; + var TweenTimelineState = (function (_super) { + __extends(TweenTimelineState, _super); + function TweenTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + TweenTimelineState._getEasingValue = function (tweenType, progress, easing) { + var value = progress; + switch (tweenType) { + case 3: + value = Math.pow(progress, 2); + break; + + case 4: + value = 1 - Math.pow(1 - progress, 2); + break; + + case 5: + value = .5 * (1 - Math.cos(progress * Math.PI)); + } + return (value - progress) * easing + progress; + }; + TweenTimelineState._getEasingCurveValue = function (progress, samples, count, offset) { + if (progress <= 0) return 0; + if (progress >= 1) return 1; + var segmentCount = count + 1; + var valueIndex = Math.floor(progress * segmentCount); + var fromValue = 0 === valueIndex ? 0 : samples[offset + valueIndex - 1]; + var toValue = valueIndex === segmentCount - 1 ? 1e4 : samples[offset + valueIndex]; + return 1e-4 * (fromValue + (toValue - fromValue) * (progress * segmentCount - valueIndex)); + }; + TweenTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this._tweenType = 0; + this._curveCount = 0; + this._framePosition = 0; + this._frameDurationR = 0; + this._tweenProgress = 0; + this._tweenEasing = 0; + }; + TweenTimelineState.prototype._onArriveAtFrame = function () { + if (this._frameCount > 1 && (this._frameIndex !== this._frameCount - 1 || 0 === this._animationState.playTimes || this._animationState.currentPlayTimes < this._animationState.playTimes - 1)) { + this._tweenType = this._frameArray[this._frameOffset + 1]; + this._tweenState = 0 === this._tweenType ? 1 : 2; + 2 === this._tweenType ? this._curveCount = this._frameArray[this._frameOffset + 2] : 0 !== this._tweenType && 1 !== this._tweenType && (this._tweenEasing = .01 * this._frameArray[this._frameOffset + 2]); + this._framePosition = this._frameArray[this._frameOffset] * this._frameRateR; + if (this._frameIndex === this._frameCount - 1) this._frameDurationR = 1 / (this._animationData.duration - this._framePosition); else { + var nextFrameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex + 1]; + var frameDuration = this._frameArray[nextFrameOffset] * this._frameRateR - this._framePosition; + this._frameDurationR = frameDuration > 0 ? 1 / frameDuration : 0; + } + } else this._tweenState = 1; + }; + TweenTimelineState.prototype._onUpdateFrame = function () { + if (2 === this._tweenState) { + this._tweenProgress = (this.currentTime - this._framePosition) * this._frameDurationR; + 2 === this._tweenType ? this._tweenProgress = TweenTimelineState._getEasingCurveValue(this._tweenProgress, this._frameArray, this._curveCount, this._frameOffset + 3) : 1 !== this._tweenType && (this._tweenProgress = TweenTimelineState._getEasingValue(this._tweenType, this._tweenProgress, this._tweenEasing)); + } else this._tweenProgress = 0; + }; + return TweenTimelineState; + })(TimelineState); + dragonBones.TweenTimelineState = TweenTimelineState; + var BoneTimelineState = (function (_super) { + __extends(BoneTimelineState, _super); + function BoneTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + BoneTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.bone = null; + this.bonePose = null; + }; + BoneTimelineState.prototype.blend = function (state) { + var blendWeight = this.bone._blendState.blendWeight; + var animationPose = this.bone.animationPose; + var result = this.bonePose.result; + if (2 === state) { + animationPose.x += result.x * blendWeight; + animationPose.y += result.y * blendWeight; + animationPose.rotation += result.rotation * blendWeight; + animationPose.skew += result.skew * blendWeight; + animationPose.scaleX += (result.scaleX - 1) * blendWeight; + animationPose.scaleY += (result.scaleY - 1) * blendWeight; + } else if (1 !== blendWeight) { + animationPose.x = result.x * blendWeight; + animationPose.y = result.y * blendWeight; + animationPose.rotation = result.rotation * blendWeight; + animationPose.skew = result.skew * blendWeight; + animationPose.scaleX = (result.scaleX - 1) * blendWeight + 1; + animationPose.scaleY = (result.scaleY - 1) * blendWeight + 1; + } else { + animationPose.x = result.x; + animationPose.y = result.y; + animationPose.rotation = result.rotation; + animationPose.skew = result.skew; + animationPose.scaleX = result.scaleX; + animationPose.scaleY = result.scaleY; + } + 0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.bone._transformDirty = true); + }; + return BoneTimelineState; + })(TweenTimelineState); + dragonBones.BoneTimelineState = BoneTimelineState; + var SlotTimelineState = (function (_super) { + __extends(SlotTimelineState, _super); + function SlotTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + SlotTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.slot = null; + }; + return SlotTimelineState; + })(TweenTimelineState); + dragonBones.SlotTimelineState = SlotTimelineState; + var ConstraintTimelineState = (function (_super) { + __extends(ConstraintTimelineState, _super); + function ConstraintTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + ConstraintTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.constraint = null; + }; + return ConstraintTimelineState; + })(TweenTimelineState); + dragonBones.ConstraintTimelineState = ConstraintTimelineState; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var ActionTimelineState = (function (_super) { + __extends(ActionTimelineState, _super); + function ActionTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + ActionTimelineState.toString = function () { + return "[class dragonBones.ActionTimelineState]"; + }; + ActionTimelineState.prototype._onCrossFrame = function (frameIndex) { + var eventDispatcher = this._armature.eventDispatcher; + if (this._animationState.actionEnabled) { + var frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + frameIndex]; + var actionCount = this._frameArray[frameOffset + 1]; + var actions = this._animationData.parent.actions; + for (var i = 0; i < actionCount; ++i) { + var actionIndex = this._frameArray[frameOffset + 2 + i]; + var action = actions[actionIndex]; + if (0 === action.type) { + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + eventObject.time = this._frameArray[frameOffset] / this._frameRate; + eventObject.animationState = this._animationState; + dragonBones.EventObject.actionDataToInstance(action, eventObject, this._armature); + this._armature._bufferAction(eventObject, true); + } else { + var eventType = 10 === action.type ? dragonBones.EventObject.FRAME_EVENT : dragonBones.EventObject.SOUND_EVENT; + if (11 === action.type || eventDispatcher.hasDBEventListener(eventType)) { + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + eventObject.time = this._frameArray[frameOffset] / this._frameRate; + eventObject.animationState = this._animationState; + dragonBones.EventObject.actionDataToInstance(action, eventObject, this._armature); + this._armature._dragonBones.bufferEvent(eventObject); + } + } + } + } + }; + ActionTimelineState.prototype._onArriveAtFrame = function () { }; + ActionTimelineState.prototype._onUpdateFrame = function () { }; + ActionTimelineState.prototype.update = function (passedTime) { + var prevState = this.playState; + var prevPlayTimes = this.currentPlayTimes; + var prevTime = this.currentTime; + if (this._setCurrentTime(passedTime)) { + var eventDispatcher = this._armature.eventDispatcher; + if (prevState < 0) { + if (this.playState === prevState) return; + this._animationState.displayControl && this._animationState.resetToPose && this._armature._sortZOrder(null, 0); + prevPlayTimes = this.currentPlayTimes; + if (eventDispatcher.hasDBEventListener(dragonBones.EventObject.START)) { + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + eventObject.type = dragonBones.EventObject.START; + eventObject.armature = this._armature; + eventObject.animationState = this._animationState; + this._armature._dragonBones.bufferEvent(eventObject); + } + } + var isReverse = this._animationState.timeScale < 0; + var loopCompleteEvent = null; + var completeEvent = null; + if (this.currentPlayTimes !== prevPlayTimes) { + if (eventDispatcher.hasDBEventListener(dragonBones.EventObject.LOOP_COMPLETE)) { + loopCompleteEvent = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + loopCompleteEvent.type = dragonBones.EventObject.LOOP_COMPLETE; + loopCompleteEvent.armature = this._armature; + loopCompleteEvent.animationState = this._animationState; + } + if (this.playState > 0 && eventDispatcher.hasDBEventListener(dragonBones.EventObject.COMPLETE)) { + completeEvent = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + completeEvent.type = dragonBones.EventObject.COMPLETE; + completeEvent.armature = this._armature; + completeEvent.animationState = this._animationState; + } + } + if (this._frameCount > 1) { + var timelineData = this._timelineData; + var timelineFrameIndex = Math.floor(this.currentTime * this._frameRate); + var frameIndex = this._frameIndices[timelineData.frameIndicesOffset + timelineFrameIndex]; + if (this._frameIndex !== frameIndex) { + var crossedFrameIndex = this._frameIndex; + this._frameIndex = frameIndex; + if (null !== this._timelineArray) { + this._frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + this._frameIndex]; + if (isReverse) { + if (crossedFrameIndex < 0) { + var prevFrameIndex = Math.floor(prevTime * this._frameRate); + crossedFrameIndex = this._frameIndices[timelineData.frameIndicesOffset + prevFrameIndex]; + this.currentPlayTimes === prevPlayTimes && crossedFrameIndex === frameIndex && (crossedFrameIndex = -1); + } + while (crossedFrameIndex >= 0) { + var frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + crossedFrameIndex]; + var framePosition = this._frameArray[frameOffset] / this._frameRate; + this._position <= framePosition && framePosition <= this._position + this._duration && this._onCrossFrame(crossedFrameIndex); + if (null !== loopCompleteEvent && 0 === crossedFrameIndex) { + this._armature._dragonBones.bufferEvent(loopCompleteEvent); + loopCompleteEvent = null; + } + crossedFrameIndex > 0 ? crossedFrameIndex-- : crossedFrameIndex = this._frameCount - 1; + if (crossedFrameIndex === frameIndex) break; + } + } else { + if (crossedFrameIndex < 0) { + var prevFrameIndex = Math.floor(prevTime * this._frameRate); + crossedFrameIndex = this._frameIndices[timelineData.frameIndicesOffset + prevFrameIndex]; + var frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + crossedFrameIndex]; + var framePosition = this._frameArray[frameOffset] / this._frameRate; + this.currentPlayTimes === prevPlayTimes && (prevTime <= framePosition ? crossedFrameIndex > 0 ? crossedFrameIndex-- : crossedFrameIndex = this._frameCount - 1 : crossedFrameIndex === frameIndex && (crossedFrameIndex = -1)); + } + while (crossedFrameIndex >= 0) { + crossedFrameIndex < this._frameCount - 1 ? crossedFrameIndex++ : crossedFrameIndex = 0; + var frameOffset = this._animationData.frameOffset + this._timelineArray[timelineData.offset + 5 + crossedFrameIndex]; + var framePosition = this._frameArray[frameOffset] / this._frameRate; + this._position <= framePosition && framePosition <= this._position + this._duration && this._onCrossFrame(crossedFrameIndex); + if (null !== loopCompleteEvent && 0 === crossedFrameIndex) { + this._armature._dragonBones.bufferEvent(loopCompleteEvent); + loopCompleteEvent = null; + } + if (crossedFrameIndex === frameIndex) break; + } + } + } + } + } else if (this._frameIndex < 0) { + this._frameIndex = 0; + if (null !== this._timelineData) { + this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5]; + var framePosition = this._frameArray[this._frameOffset] / this._frameRate; + if (this.currentPlayTimes === prevPlayTimes) prevTime <= framePosition && this._onCrossFrame(this._frameIndex); else if (this._position <= framePosition) { + if (!isReverse && null !== loopCompleteEvent) { + this._armature._dragonBones.bufferEvent(loopCompleteEvent); + loopCompleteEvent = null; + } + this._onCrossFrame(this._frameIndex); + } + } + } + null !== loopCompleteEvent && this._armature._dragonBones.bufferEvent(loopCompleteEvent); + null !== completeEvent && this._armature._dragonBones.bufferEvent(completeEvent); + } + }; + ActionTimelineState.prototype.setCurrentTime = function (value) { + this._setCurrentTime(value); + this._frameIndex = -1; + }; + return ActionTimelineState; + })(dragonBones.TimelineState); + dragonBones.ActionTimelineState = ActionTimelineState; + var ZOrderTimelineState = (function (_super) { + __extends(ZOrderTimelineState, _super); + function ZOrderTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + ZOrderTimelineState.toString = function () { + return "[class dragonBones.ZOrderTimelineState]"; + }; + ZOrderTimelineState.prototype._onArriveAtFrame = function () { + if (this.playState >= 0) { + var count = this._frameArray[this._frameOffset + 1]; + count > 0 ? this._armature._sortZOrder(this._frameArray, this._frameOffset + 2) : this._armature._sortZOrder(null, 0); + } + }; + ZOrderTimelineState.prototype._onUpdateFrame = function () { }; + return ZOrderTimelineState; + })(dragonBones.TimelineState); + dragonBones.ZOrderTimelineState = ZOrderTimelineState; + var BoneAllTimelineState = (function (_super) { + __extends(BoneAllTimelineState, _super); + function BoneAllTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + BoneAllTimelineState.toString = function () { + return "[class dragonBones.BoneAllTimelineState]"; + }; + BoneAllTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 6 * this._frameIndex; + var scale = this._armature._armatureData.scale; + var frameFloatArray = this._frameFloatArray; + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.x = frameFloatArray[valueOffset++] * scale; + current.y = frameFloatArray[valueOffset++] * scale; + current.rotation = frameFloatArray[valueOffset++]; + current.skew = frameFloatArray[valueOffset++]; + current.scaleX = frameFloatArray[valueOffset++]; + current.scaleY = frameFloatArray[valueOffset++]; + if (2 === this._tweenState) { + this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset); + delta.x = frameFloatArray[valueOffset++] * scale - current.x; + delta.y = frameFloatArray[valueOffset++] * scale - current.y; + delta.rotation = frameFloatArray[valueOffset++] - current.rotation; + delta.skew = frameFloatArray[valueOffset++] - current.skew; + delta.scaleX = frameFloatArray[valueOffset++] - current.scaleX; + delta.scaleY = frameFloatArray[valueOffset++] - current.scaleY; + } else { + delta.x = 0; + delta.y = 0; + delta.rotation = 0; + delta.skew = 0; + delta.scaleX = 0; + delta.scaleY = 0; + } + } else { + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.x = 0; + current.y = 0; + current.rotation = 0; + current.skew = 0; + current.scaleX = 1; + current.scaleY = 1; + delta.x = 0; + delta.y = 0; + delta.rotation = 0; + delta.skew = 0; + delta.scaleX = 0; + delta.scaleY = 0; + } + }; + BoneAllTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + var current = this.bonePose.current; + var delta = this.bonePose.delta; + var result = this.bonePose.result; + this.bone._transformDirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + result.x = current.x + delta.x * this._tweenProgress; + result.y = current.y + delta.y * this._tweenProgress; + result.rotation = current.rotation + delta.rotation * this._tweenProgress; + result.skew = current.skew + delta.skew * this._tweenProgress; + result.scaleX = current.scaleX + delta.scaleX * this._tweenProgress; + result.scaleY = current.scaleY + delta.scaleY * this._tweenProgress; + }; + BoneAllTimelineState.prototype.fadeOut = function () { + var result = this.bonePose.result; + result.rotation = dragonBones.Transform.normalizeRadian(result.rotation); + result.skew = dragonBones.Transform.normalizeRadian(result.skew); + }; + return BoneAllTimelineState; + })(dragonBones.BoneTimelineState); + dragonBones.BoneAllTimelineState = BoneAllTimelineState; + var BoneTranslateTimelineState = (function (_super) { + __extends(BoneTranslateTimelineState, _super); + function BoneTranslateTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + BoneTranslateTimelineState.toString = function () { + return "[class dragonBones.BoneTranslateTimelineState]"; + }; + BoneTranslateTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex; + var scale = this._armature._armatureData.scale; + var frameFloatArray = this._frameFloatArray; + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.x = frameFloatArray[valueOffset++] * scale; + current.y = frameFloatArray[valueOffset++] * scale; + if (2 === this._tweenState) { + this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset); + delta.x = frameFloatArray[valueOffset++] * scale - current.x; + delta.y = frameFloatArray[valueOffset++] * scale - current.y; + } else { + delta.x = 0; + delta.y = 0; + } + } else { + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.x = 0; + current.y = 0; + delta.x = 0; + delta.y = 0; + } + }; + BoneTranslateTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + var current = this.bonePose.current; + var delta = this.bonePose.delta; + var result = this.bonePose.result; + this.bone._transformDirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + result.x = current.x + delta.x * this._tweenProgress; + result.y = current.y + delta.y * this._tweenProgress; + }; + return BoneTranslateTimelineState; + })(dragonBones.BoneTimelineState); + dragonBones.BoneTranslateTimelineState = BoneTranslateTimelineState; + var BoneRotateTimelineState = (function (_super) { + __extends(BoneRotateTimelineState, _super); + function BoneRotateTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + BoneRotateTimelineState.toString = function () { + return "[class dragonBones.BoneRotateTimelineState]"; + }; + BoneRotateTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex; + var frameFloatArray = this._frameFloatArray; + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.rotation = frameFloatArray[valueOffset++]; + current.skew = frameFloatArray[valueOffset++]; + if (2 === this._tweenState) { + if (this._frameIndex === this._frameCount - 1) { + valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset; + delta.rotation = dragonBones.Transform.normalizeRadian(frameFloatArray[valueOffset++] - current.rotation); + } else delta.rotation = frameFloatArray[valueOffset++] - current.rotation; + delta.skew = frameFloatArray[valueOffset++] - current.skew; + } else { + delta.rotation = 0; + delta.skew = 0; + } + } else { + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.rotation = 0; + current.skew = 0; + delta.rotation = 0; + delta.skew = 0; + } + }; + BoneRotateTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + var current = this.bonePose.current; + var delta = this.bonePose.delta; + var result = this.bonePose.result; + this.bone._transformDirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + result.rotation = current.rotation + delta.rotation * this._tweenProgress; + result.skew = current.skew + delta.skew * this._tweenProgress; + }; + BoneRotateTimelineState.prototype.fadeOut = function () { + var result = this.bonePose.result; + result.rotation = dragonBones.Transform.normalizeRadian(result.rotation); + result.skew = dragonBones.Transform.normalizeRadian(result.skew); + }; + return BoneRotateTimelineState; + })(dragonBones.BoneTimelineState); + dragonBones.BoneRotateTimelineState = BoneRotateTimelineState; + var BoneScaleTimelineState = (function (_super) { + __extends(BoneScaleTimelineState, _super); + function BoneScaleTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + BoneScaleTimelineState.toString = function () { + return "[class dragonBones.BoneScaleTimelineState]"; + }; + BoneScaleTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex; + var frameFloatArray = this._frameFloatArray; + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.scaleX = frameFloatArray[valueOffset++]; + current.scaleY = frameFloatArray[valueOffset++]; + if (2 === this._tweenState) { + this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset); + delta.scaleX = frameFloatArray[valueOffset++] - current.scaleX; + delta.scaleY = frameFloatArray[valueOffset++] - current.scaleY; + } else { + delta.scaleX = 0; + delta.scaleY = 0; + } + } else { + var current = this.bonePose.current; + var delta = this.bonePose.delta; + current.scaleX = 1; + current.scaleY = 1; + delta.scaleX = 0; + delta.scaleY = 0; + } + }; + BoneScaleTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + var current = this.bonePose.current; + var delta = this.bonePose.delta; + var result = this.bonePose.result; + this.bone._transformDirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + result.scaleX = current.scaleX + delta.scaleX * this._tweenProgress; + result.scaleY = current.scaleY + delta.scaleY * this._tweenProgress; + }; + return BoneScaleTimelineState; + })(dragonBones.BoneTimelineState); + dragonBones.BoneScaleTimelineState = BoneScaleTimelineState; + var SurfaceTimelineState = (function (_super) { + __extends(SurfaceTimelineState, _super); + function SurfaceTimelineState() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._current = []; + _this._delta = []; + _this._result = []; + return _this; + } + SurfaceTimelineState.toString = function () { + return "[class dragonBones.SurfaceTimelineState]"; + }; + SurfaceTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.surface = null; + this._frameFloatOffset = 0; + this._valueCount = 0; + this._deformCount = 0; + this._valueOffset = 0; + this._current.length = 0; + this._delta.length = 0; + this._result.length = 0; + }; + SurfaceTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount; + var scale = this._armature._armatureData.scale; + var frameFloatArray = this._frameFloatArray; + if (2 === this._tweenState) { + var nextValueOffset = valueOffset + this._valueCount; + this._frameIndex === this._frameCount - 1 && (nextValueOffset = this._animationData.frameFloatOffset + this._frameValueOffset); + for (var i = 0; i < this._valueCount; ++i) this._delta[i] = frameFloatArray[nextValueOffset + i] * scale - (this._current[i] = frameFloatArray[valueOffset + i] * scale); + } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = frameFloatArray[valueOffset + i] * scale; + } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = 0; + }; + SurfaceTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + this.surface._transformDirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + for (var i = 0; i < this._valueCount; ++i) this._result[i] = this._current[i] + this._delta[i] * this._tweenProgress; + }; + SurfaceTimelineState.prototype.init = function (armature, animationState, timelineData) { + _super.prototype.init.call(this, armature, animationState, timelineData); + if (null !== this._timelineData) { + var frameIntOffset = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3]; + this._deformCount = this._frameIntArray[frameIntOffset + 1]; + this._valueCount = this._frameIntArray[frameIntOffset + 2]; + this._valueOffset = this._frameIntArray[frameIntOffset + 3]; + this._frameFloatOffset = this._frameIntArray[frameIntOffset + 4] + this._animationData.frameFloatOffset; + } else { + this._deformCount = this.surface._deformVertices.length; + this._valueCount = this._deformCount; + this._valueOffset = 0; + this._frameFloatOffset = 0; + } + this._current.length = this._valueCount; + this._delta.length = this._valueCount; + this._result.length = this._valueCount; + for (var i = 0; i < this._valueCount; ++i) this._delta[i] = 0; + }; + SurfaceTimelineState.prototype.blend = function (state) { + var blendWeight = this.surface._blendState.blendWeight; + var result = this.surface._deformVertices; + for (var i = 0; i < this._deformCount; ++i) { + var value = 0; + value = i < this._valueOffset ? this._frameFloatArray[this._frameFloatOffset + i] : i < this._valueOffset + this._valueCount ? this._result[i - this._valueOffset] : this._frameFloatArray[this._frameFloatOffset + i - this._valueCount]; + 2 === state ? result[i] += value * blendWeight : result[i] = 1 !== blendWeight ? value * blendWeight : value; + } + 0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.surface._transformDirty = true); + }; + return SurfaceTimelineState; + })(dragonBones.TweenTimelineState); + dragonBones.SurfaceTimelineState = SurfaceTimelineState; + var SlotDislayTimelineState = (function (_super) { + __extends(SlotDislayTimelineState, _super); + function SlotDislayTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + SlotDislayTimelineState.toString = function () { + return "[class dragonBones.SlotDislayTimelineState]"; + }; + SlotDislayTimelineState.prototype._onArriveAtFrame = function () { + if (this.playState >= 0) { + var displayIndex = null !== this._timelineData ? this._frameArray[this._frameOffset + 1] : this.slot._slotData.displayIndex; + this.slot.displayIndex !== displayIndex && this.slot._setDisplayIndex(displayIndex, true); + } + }; + return SlotDislayTimelineState; + })(dragonBones.SlotTimelineState); + dragonBones.SlotDislayTimelineState = SlotDislayTimelineState; + var SlotColorTimelineState = (function (_super) { + __extends(SlotColorTimelineState, _super); + function SlotColorTimelineState() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._current = [0, 0, 0, 0, 0, 0, 0, 0]; + _this._delta = [0, 0, 0, 0, 0, 0, 0, 0]; + _this._result = [0, 0, 0, 0, 0, 0, 0, 0]; + return _this; + } + SlotColorTimelineState.toString = function () { + return "[class dragonBones.SlotColorTimelineState]"; + }; + SlotColorTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this._dirty = false; + }; + SlotColorTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var intArray = this._dragonBonesData.intArray; + var frameIntArray = this._frameIntArray; + var valueOffset = this._animationData.frameIntOffset + this._frameValueOffset + 1 * this._frameIndex; + var colorOffset = frameIntArray[valueOffset]; + colorOffset < 0 && (colorOffset += 65536); + this._current[0] = intArray[colorOffset++]; + this._current[1] = intArray[colorOffset++]; + this._current[2] = intArray[colorOffset++]; + this._current[3] = intArray[colorOffset++]; + this._current[4] = intArray[colorOffset++]; + this._current[5] = intArray[colorOffset++]; + this._current[6] = intArray[colorOffset++]; + this._current[7] = intArray[colorOffset++]; + if (2 === this._tweenState) { + colorOffset = this._frameIndex === this._frameCount - 1 ? frameIntArray[this._animationData.frameIntOffset + this._frameValueOffset] : frameIntArray[valueOffset + 1]; + colorOffset < 0 && (colorOffset += 65536); + this._delta[0] = intArray[colorOffset++] - this._current[0]; + this._delta[1] = intArray[colorOffset++] - this._current[1]; + this._delta[2] = intArray[colorOffset++] - this._current[2]; + this._delta[3] = intArray[colorOffset++] - this._current[3]; + this._delta[4] = intArray[colorOffset++] - this._current[4]; + this._delta[5] = intArray[colorOffset++] - this._current[5]; + this._delta[6] = intArray[colorOffset++] - this._current[6]; + this._delta[7] = intArray[colorOffset++] - this._current[7]; + } + } else { + var color = this.slot._slotData.color; + this._current[0] = 100 * color.alphaMultiplier; + this._current[1] = 100 * color.redMultiplier; + this._current[2] = 100 * color.greenMultiplier; + this._current[3] = 100 * color.blueMultiplier; + this._current[4] = color.alphaOffset; + this._current[5] = color.redOffset; + this._current[6] = color.greenOffset; + this._current[7] = color.blueOffset; + } + }; + SlotColorTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + this._dirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + this._result[0] = .01 * (this._current[0] + this._delta[0] * this._tweenProgress); + this._result[1] = .01 * (this._current[1] + this._delta[1] * this._tweenProgress); + this._result[2] = .01 * (this._current[2] + this._delta[2] * this._tweenProgress); + this._result[3] = .01 * (this._current[3] + this._delta[3] * this._tweenProgress); + this._result[4] = this._current[4] + this._delta[4] * this._tweenProgress; + this._result[5] = this._current[5] + this._delta[5] * this._tweenProgress; + this._result[6] = this._current[6] + this._delta[6] * this._tweenProgress; + this._result[7] = this._current[7] + this._delta[7] * this._tweenProgress; + }; + SlotColorTimelineState.prototype.fadeOut = function () { + this._tweenState = 0; + this._dirty = false; + }; + SlotColorTimelineState.prototype.update = function (passedTime) { + _super.prototype.update.call(this, passedTime); + if (0 !== this._tweenState || this._dirty) { + var result = this.slot._colorTransform; + if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) { + if (result.alphaMultiplier !== this._result[0] || result.redMultiplier !== this._result[1] || result.greenMultiplier !== this._result[2] || result.blueMultiplier !== this._result[3] || result.alphaOffset !== this._result[4] || result.redOffset !== this._result[5] || result.greenOffset !== this._result[6] || result.blueOffset !== this._result[7]) { + var fadeProgress = Math.pow(this._animationState._fadeProgress, 4); + result.alphaMultiplier += (this._result[0] - result.alphaMultiplier) * fadeProgress; + result.redMultiplier += (this._result[1] - result.redMultiplier) * fadeProgress; + result.greenMultiplier += (this._result[2] - result.greenMultiplier) * fadeProgress; + result.blueMultiplier += (this._result[3] - result.blueMultiplier) * fadeProgress; + result.alphaOffset += (this._result[4] - result.alphaOffset) * fadeProgress; + result.redOffset += (this._result[5] - result.redOffset) * fadeProgress; + result.greenOffset += (this._result[6] - result.greenOffset) * fadeProgress; + result.blueOffset += (this._result[7] - result.blueOffset) * fadeProgress; + this.slot._colorDirty = true; + } + } else if (this._dirty) { + this._dirty = false; + if (result.alphaMultiplier !== this._result[0] || result.redMultiplier !== this._result[1] || result.greenMultiplier !== this._result[2] || result.blueMultiplier !== this._result[3] || result.alphaOffset !== this._result[4] || result.redOffset !== this._result[5] || result.greenOffset !== this._result[6] || result.blueOffset !== this._result[7]) { + result.alphaMultiplier = this._result[0]; + result.redMultiplier = this._result[1]; + result.greenMultiplier = this._result[2]; + result.blueMultiplier = this._result[3]; + result.alphaOffset = this._result[4]; + result.redOffset = this._result[5]; + result.greenOffset = this._result[6]; + result.blueOffset = this._result[7]; + this.slot._colorDirty = true; + } + } + } + }; + return SlotColorTimelineState; + })(dragonBones.SlotTimelineState); + dragonBones.SlotColorTimelineState = SlotColorTimelineState; + var DeformTimelineState = (function (_super) { + __extends(DeformTimelineState, _super); + function DeformTimelineState() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._current = []; + _this._delta = []; + _this._result = []; + return _this; + } + DeformTimelineState.toString = function () { + return "[class dragonBones.DeformTimelineState]"; + }; + DeformTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.vertexOffset = 0; + this._dirty = false; + this._frameFloatOffset = 0; + this._valueCount = 0; + this._deformCount = 0; + this._valueOffset = 0; + this._current.length = 0; + this._delta.length = 0; + this._result.length = 0; + }; + DeformTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount; + var scale = this._armature._armatureData.scale; + var frameFloatArray = this._frameFloatArray; + if (2 === this._tweenState) { + var nextValueOffset = valueOffset + this._valueCount; + this._frameIndex === this._frameCount - 1 && (nextValueOffset = this._animationData.frameFloatOffset + this._frameValueOffset); + for (var i = 0; i < this._valueCount; ++i) this._delta[i] = frameFloatArray[nextValueOffset + i] * scale - (this._current[i] = frameFloatArray[valueOffset + i] * scale); + } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = frameFloatArray[valueOffset + i] * scale; + } else for (var i = 0; i < this._valueCount; ++i) this._current[i] = 0; + }; + DeformTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + this._dirty = true; + 2 !== this._tweenState && (this._tweenState = 0); + for (var i = 0; i < this._valueCount; ++i) this._result[i] = this._current[i] + this._delta[i] * this._tweenProgress; + }; + DeformTimelineState.prototype.init = function (armature, animationState, timelineData) { + _super.prototype.init.call(this, armature, animationState, timelineData); + if (null !== this._timelineData) { + var frameIntOffset = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3]; + this.vertexOffset = this._frameIntArray[frameIntOffset + 0]; + this.vertexOffset < 0 && (this.vertexOffset += 65536); + this._deformCount = this._frameIntArray[frameIntOffset + 1]; + this._valueCount = this._frameIntArray[frameIntOffset + 2]; + this._valueOffset = this._frameIntArray[frameIntOffset + 3]; + this._frameFloatOffset = this._frameIntArray[frameIntOffset + 4] + this._animationData.frameFloatOffset; + } else { + var deformVertices = this.slot._deformVertices; + this._deformCount = null !== deformVertices ? deformVertices.vertices.length : 0; + this._valueCount = this._deformCount; + this._valueOffset = 0; + this._frameFloatOffset = 0; + } + this._current.length = this._valueCount; + this._delta.length = this._valueCount; + this._result.length = this._valueCount; + for (var i = 0; i < this._valueCount; ++i) this._delta[i] = 0; + }; + DeformTimelineState.prototype.fadeOut = function () { + this._tweenState = 0; + this._dirty = false; + }; + DeformTimelineState.prototype.update = function (passedTime) { + var deformVertices = this.slot._deformVertices; + if (null === deformVertices || null === deformVertices.verticesData || deformVertices.verticesData.offset !== this.vertexOffset) return; + _super.prototype.update.call(this, passedTime); + if (0 !== this._tweenState || this._dirty) { + var result = deformVertices.vertices; + if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) { + var fadeProgress = Math.pow(this._animationState._fadeProgress, 2); + for (var i = 0; i < this._deformCount; ++i) i < this._valueOffset ? result[i] += (this._frameFloatArray[this._frameFloatOffset + i] - result[i]) * fadeProgress : i < this._valueOffset + this._valueCount ? result[i] += (this._result[i - this._valueOffset] - result[i]) * fadeProgress : result[i] += (this._frameFloatArray[this._frameFloatOffset + i - this._valueCount] - result[i]) * fadeProgress; + deformVertices.verticesDirty = true; + } else if (this._dirty) { + this._dirty = false; + for (var i = 0; i < this._deformCount; ++i) i < this._valueOffset ? result[i] = this._frameFloatArray[this._frameFloatOffset + i] : i < this._valueOffset + this._valueCount ? result[i] = this._result[i - this._valueOffset] : result[i] = this._frameFloatArray[this._frameFloatOffset + i - this._valueCount]; + deformVertices.verticesDirty = true; + } + } + }; + return DeformTimelineState; + })(dragonBones.SlotTimelineState); + dragonBones.DeformTimelineState = DeformTimelineState; + var IKConstraintTimelineState = (function (_super) { + __extends(IKConstraintTimelineState, _super); + function IKConstraintTimelineState() { + return null !== _super && _super.apply(this, arguments) || this; + } + IKConstraintTimelineState.toString = function () { + return "[class dragonBones.IKConstraintTimelineState]"; + }; + IKConstraintTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this._current = 0; + this._delta = 0; + }; + IKConstraintTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + var ikConstraint = this.constraint; + if (null !== this._timelineData) { + var valueOffset = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex; + var frameIntArray = this._frameIntArray; + var bendPositive = 0 !== frameIntArray[valueOffset++]; + this._current = .01 * frameIntArray[valueOffset++]; + if (2 === this._tweenState) { + this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameIntOffset + this._frameValueOffset); + this._delta = .01 * frameIntArray[valueOffset + 1] - this._current; + } else this._delta = 0; + ikConstraint._bendPositive = bendPositive; + } else { + var ikConstraintData = ikConstraint._constraintData; + this._current = ikConstraintData.weight; + this._delta = 0; + ikConstraint._bendPositive = ikConstraintData.bendPositive; + } + ikConstraint.invalidUpdate(); + }; + IKConstraintTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + 2 !== this._tweenState && (this._tweenState = 0); + var ikConstraint = this.constraint; + ikConstraint._weight = this._current + this._delta * this._tweenProgress; + ikConstraint.invalidUpdate(); + }; + return IKConstraintTimelineState; + })(dragonBones.ConstraintTimelineState); + dragonBones.IKConstraintTimelineState = IKConstraintTimelineState; + var AnimationTimelineState = (function (_super) { + __extends(AnimationTimelineState, _super); + function AnimationTimelineState() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._floats = [0, 0, 0, 0, 0, 0]; + return _this; + } + AnimationTimelineState.toString = function () { + return "[class dragonBones.AnimationTimelineState]"; + }; + AnimationTimelineState.prototype._onClear = function () { + _super.prototype._onClear.call(this); + this.animationState = null; + }; + AnimationTimelineState.prototype._onArriveAtFrame = function () { + _super.prototype._onArriveAtFrame.call(this); + if (null === this._timelineData) return; + var valueOffset = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex; + var frameRateR = 1 / this.animationState._animationData.parent.frameRate; + var frameIntArray = this._frameIntArray; + this._floats[0] = frameIntArray[valueOffset++] * frameRateR; + this._floats[3] = .01 * frameIntArray[valueOffset++]; + if (2 === this._tweenState) { + this._frameIndex === this._frameCount - 1 && (valueOffset = this._animationData.frameIntOffset + this._frameValueOffset); + this._floats[1] = frameIntArray[valueOffset++] * frameRateR - this._floats[0]; + this._floats[4] = .01 * frameIntArray[valueOffset++] - this._floats[3]; + } else { + this._floats[1] = 0; + this._floats[4] = 0; + } + }; + AnimationTimelineState.prototype._onUpdateFrame = function () { + _super.prototype._onUpdateFrame.call(this); + 2 !== this._tweenState && (this._tweenState = 0); + this._floats[0] >= 0 && (this._floats[2] = this._floats[0] + this._floats[1] * this._tweenProgress); + this._floats[5] = this._floats[3] + this._floats[4] * this._tweenProgress; + }; + AnimationTimelineState.prototype.blend = function (state) { + var animationState = this.animationState; + var blendWeight = animationState._blendState.blendWeight; + if (2 === state) { + animationState.weight += this._floats[5] * blendWeight; + animationState.currentTime += this._floats[2] * blendWeight; + } else { + animationState.weight = this._floats[5] * blendWeight; + animationState.currentTime = this._floats[2] * blendWeight; + } + }; + return AnimationTimelineState; + })(dragonBones.TweenTimelineState); + dragonBones.AnimationTimelineState = AnimationTimelineState; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var EventObject = (function (_super) { + __extends(EventObject, _super); + function EventObject() { + return null !== _super && _super.apply(this, arguments) || this; + } + EventObject.actionDataToInstance = function (data, instance, armature) { + 0 === data.type ? instance.type = EventObject.FRAME_EVENT : instance.type = 10 === data.type ? EventObject.FRAME_EVENT : EventObject.SOUND_EVENT; + instance.name = data.name; + instance.armature = armature; + instance.actionData = data; + instance.data = data.data; + null !== data.bone && (instance.bone = armature.getBone(data.bone.name)); + null !== data.slot && (instance.slot = armature.getSlot(data.slot.name)); + }; + EventObject.toString = function () { + return "[class dragonBones.EventObject]"; + }; + EventObject.prototype._onClear = function () { + this.time = 0; + this.type = ""; + this.name = ""; + this.armature = null; + this.bone = null; + this.slot = null; + this.animationState = null; + this.actionData = null; + this.data = null; + }; + EventObject.START = "start"; + EventObject.LOOP_COMPLETE = "loopComplete"; + EventObject.COMPLETE = "complete"; + EventObject.FADE_IN = "fadeIn"; + EventObject.FADE_IN_COMPLETE = "fadeInComplete"; + EventObject.FADE_OUT = "fadeOut"; + EventObject.FADE_OUT_COMPLETE = "fadeOutComplete"; + EventObject.FRAME_EVENT = "frameEvent"; + EventObject.SOUND_EVENT = "soundEvent"; + return EventObject; + })(dragonBones.BaseObject); + dragonBones.EventObject = EventObject; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var DataParser = (function () { + function DataParser() { } + DataParser._getArmatureType = function (value) { + switch (value.toLowerCase()) { + case "stage": + return 2; + + case "armature": + return 0; + + case "movieclip": + return 1; + + default: + return 0; + } + }; + DataParser._getBoneType = function (value) { + switch (value.toLowerCase()) { + case "bone": + return 0; + + case "surface": + return 1; + + default: + return 0; + } + }; + DataParser._getDisplayType = function (value) { + switch (value.toLowerCase()) { + case "image": + return 0; + + case "mesh": + return 2; + + case "armature": + return 1; + + case "boundingbox": + return 3; + + case "path": + return 4; + + default: + return 0; + } + }; + DataParser._getBoundingBoxType = function (value) { + switch (value.toLowerCase()) { + case "rectangle": + return 0; + + case "ellipse": + return 1; + + case "polygon": + return 2; + + default: + return 0; + } + }; + DataParser._getActionType = function (value) { + switch (value.toLowerCase()) { + case "play": + return 0; + + case "frame": + return 10; + + case "sound": + return 11; + + default: + return 0; + } + }; + DataParser._getBlendMode = function (value) { + switch (value.toLowerCase()) { + case "normal": + return 0; + + case "add": + return 1; + + case "alpha": + return 2; + + case "darken": + return 3; + + case "difference": + return 4; + + case "erase": + return 5; + + case "hardlight": + return 6; + + case "invert": + return 7; + + case "layer": + return 8; + + case "lighten": + return 9; + + case "multiply": + return 10; + + case "overlay": + return 11; + + case "screen": + return 12; + + case "subtract": + return 13; + + default: + return 0; + } + }; + DataParser._getPositionMode = function (value) { + switch (value.toLocaleLowerCase()) { + case "percent": + return 1; + + case "fixed": + return 0; + + default: + return 1; + } + }; + DataParser._getSpacingMode = function (value) { + switch (value.toLocaleLowerCase()) { + case "length": + return 0; + + case "percent": + return 2; + + case "fixed": + return 1; + + default: + return 0; + } + }; + DataParser._getRotateMode = function (value) { + switch (value.toLocaleLowerCase()) { + case "tangent": + return 0; + + case "chain": + return 1; + + case "chainscale": + return 2; + + default: + return 0; + } + }; + DataParser.parseDragonBonesData = function (rawData) { + console.warn("Deprecated."); + return rawData instanceof ArrayBuffer ? dragonBones.BinaryDataParser.getInstance().parseDragonBonesData(rawData) : dragonBones.ObjectDataParser.getInstance().parseDragonBonesData(rawData); + }; + DataParser.parseTextureAtlasData = function (rawData, scale) { + void 0 === scale && (scale = 1); + console.warn("\u5df2\u5e9f\u5f03"); + var textureAtlasData = {}; + var subTextureList = rawData[DataParser.SUB_TEXTURE]; + for (var i = 0, len = subTextureList.length; i < len; i++) { + var subTextureObject = subTextureList[i]; + var subTextureName = subTextureObject[DataParser.NAME]; + var subTextureRegion = new dragonBones.Rectangle(); + var subTextureFrame = null; + subTextureRegion.x = subTextureObject[DataParser.X] / scale; + subTextureRegion.y = subTextureObject[DataParser.Y] / scale; + subTextureRegion.width = subTextureObject[DataParser.WIDTH] / scale; + subTextureRegion.height = subTextureObject[DataParser.HEIGHT] / scale; + if (DataParser.FRAME_WIDTH in subTextureObject) { + subTextureFrame = new dragonBones.Rectangle(); + subTextureFrame.x = subTextureObject[DataParser.FRAME_X] / scale; + subTextureFrame.y = subTextureObject[DataParser.FRAME_Y] / scale; + subTextureFrame.width = subTextureObject[DataParser.FRAME_WIDTH] / scale; + subTextureFrame.height = subTextureObject[DataParser.FRAME_HEIGHT] / scale; + } + textureAtlasData[subTextureName] = { + region: subTextureRegion, + frame: subTextureFrame, + rotated: false + }; + } + return textureAtlasData; + }; + DataParser.DATA_VERSION_2_3 = "2.3"; + DataParser.DATA_VERSION_3_0 = "3.0"; + DataParser.DATA_VERSION_4_0 = "4.0"; + DataParser.DATA_VERSION_4_5 = "4.5"; + DataParser.DATA_VERSION_5_0 = "5.0"; + DataParser.DATA_VERSION_5_5 = "5.5"; + DataParser.DATA_VERSION = DataParser.DATA_VERSION_5_5; + DataParser.DATA_VERSIONS = [DataParser.DATA_VERSION_4_0, DataParser.DATA_VERSION_4_5, DataParser.DATA_VERSION_5_0, DataParser.DATA_VERSION_5_5]; + DataParser.TEXTURE_ATLAS = "textureAtlas"; + DataParser.SUB_TEXTURE = "SubTexture"; + DataParser.FORMAT = "format"; + DataParser.IMAGE_PATH = "imagePath"; + DataParser.WIDTH = "width"; + DataParser.HEIGHT = "height"; + DataParser.ROTATED = "rotated"; + DataParser.FRAME_X = "frameX"; + DataParser.FRAME_Y = "frameY"; + DataParser.FRAME_WIDTH = "frameWidth"; + DataParser.FRAME_HEIGHT = "frameHeight"; + DataParser.DRADON_BONES = "dragonBones"; + DataParser.USER_DATA = "userData"; + DataParser.ARMATURE = "armature"; + DataParser.BONE = "bone"; + DataParser.SURFACE = "surface"; + DataParser.SLOT = "slot"; + DataParser.CONSTRAINT = "constraint"; + DataParser.IK = "ik"; + DataParser.PATH_CONSTRAINT = "path"; + DataParser.SKIN = "skin"; + DataParser.DISPLAY = "display"; + DataParser.ANIMATION = "animation"; + DataParser.Z_ORDER = "zOrder"; + DataParser.FFD = "ffd"; + DataParser.FRAME = "frame"; + DataParser.TRANSLATE_FRAME = "translateFrame"; + DataParser.ROTATE_FRAME = "rotateFrame"; + DataParser.SCALE_FRAME = "scaleFrame"; + DataParser.DISPLAY_FRAME = "displayFrame"; + DataParser.COLOR_FRAME = "colorFrame"; + DataParser.DEFAULT_ACTIONS = "defaultActions"; + DataParser.ACTIONS = "actions"; + DataParser.EVENTS = "events"; + DataParser.INTS = "ints"; + DataParser.FLOATS = "floats"; + DataParser.STRINGS = "strings"; + DataParser.CANVAS = "canvas"; + DataParser.TRANSFORM = "transform"; + DataParser.PIVOT = "pivot"; + DataParser.AABB = "aabb"; + DataParser.COLOR = "color"; + DataParser.VERSION = "version"; + DataParser.COMPATIBLE_VERSION = "compatibleVersion"; + DataParser.FRAME_RATE = "frameRate"; + DataParser.TYPE = "type"; + DataParser.SUB_TYPE = "subType"; + DataParser.NAME = "name"; + DataParser.PARENT = "parent"; + DataParser.TARGET = "target"; + DataParser.STAGE = "stage"; + DataParser.SHARE = "share"; + DataParser.PATH = "path"; + DataParser.LENGTH = "length"; + DataParser.DISPLAY_INDEX = "displayIndex"; + DataParser.BLEND_MODE = "blendMode"; + DataParser.INHERIT_TRANSLATION = "inheritTranslation"; + DataParser.INHERIT_ROTATION = "inheritRotation"; + DataParser.INHERIT_SCALE = "inheritScale"; + DataParser.INHERIT_REFLECTION = "inheritReflection"; + DataParser.INHERIT_ANIMATION = "inheritAnimation"; + DataParser.INHERIT_DEFORM = "inheritDeform"; + DataParser.SEGMENT_X = "segmentX"; + DataParser.SEGMENT_Y = "segmentY"; + DataParser.BEND_POSITIVE = "bendPositive"; + DataParser.CHAIN = "chain"; + DataParser.WEIGHT = "weight"; + DataParser.FADE_IN_TIME = "fadeInTime"; + DataParser.PLAY_TIMES = "playTimes"; + DataParser.SCALE = "scale"; + DataParser.OFFSET = "offset"; + DataParser.POSITION = "position"; + DataParser.DURATION = "duration"; + DataParser.TWEEN_EASING = "tweenEasing"; + DataParser.TWEEN_ROTATE = "tweenRotate"; + DataParser.TWEEN_SCALE = "tweenScale"; + DataParser.CLOCK_WISE = "clockwise"; + DataParser.CURVE = "curve"; + DataParser.SOUND = "sound"; + DataParser.EVENT = "event"; + DataParser.ACTION = "action"; + DataParser.X = "x"; + DataParser.Y = "y"; + DataParser.SKEW_X = "skX"; + DataParser.SKEW_Y = "skY"; + DataParser.SCALE_X = "scX"; + DataParser.SCALE_Y = "scY"; + DataParser.VALUE = "value"; + DataParser.ROTATE = "rotate"; + DataParser.SKEW = "skew"; + DataParser.ALPHA_OFFSET = "aO"; + DataParser.RED_OFFSET = "rO"; + DataParser.GREEN_OFFSET = "gO"; + DataParser.BLUE_OFFSET = "bO"; + DataParser.ALPHA_MULTIPLIER = "aM"; + DataParser.RED_MULTIPLIER = "rM"; + DataParser.GREEN_MULTIPLIER = "gM"; + DataParser.BLUE_MULTIPLIER = "bM"; + DataParser.UVS = "uvs"; + DataParser.VERTICES = "vertices"; + DataParser.TRIANGLES = "triangles"; + DataParser.WEIGHTS = "weights"; + DataParser.SLOT_POSE = "slotPose"; + DataParser.BONE_POSE = "bonePose"; + DataParser.GLUE_WEIGHTS = "glueWeights"; + DataParser.GLUE_MESHES = "glueMeshes"; + DataParser.BONES = "bones"; + DataParser.POSITION_MODE = "positionMode"; + DataParser.SPACING_MODE = "spacingMode"; + DataParser.ROTATE_MODE = "rotateMode"; + DataParser.SPACING = "spacing"; + DataParser.ROTATE_OFFSET = "rotateOffset"; + DataParser.ROTATE_MIX = "rotateMix"; + DataParser.TRANSLATE_MIX = "translateMix"; + DataParser.TARGET_DISPLAY = "targetDisplay"; + DataParser.CLOSED = "closed"; + DataParser.CONSTANT_SPEED = "constantSpeed"; + DataParser.VERTEX_COUNT = "vertexCount"; + DataParser.LENGTHS = "lengths"; + DataParser.GOTO_AND_PLAY = "gotoAndPlay"; + DataParser.DEFAULT_NAME = "default"; + return DataParser; + })(); + dragonBones.DataParser = DataParser; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var ObjectDataParser = (function (_super) { + __extends(ObjectDataParser, _super); + function ObjectDataParser() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this._rawTextureAtlasIndex = 0; + _this._rawBones = []; + _this._data = null; + _this._armature = null; + _this._bone = null; + _this._surface = null; + _this._slot = null; + _this._skin = null; + _this._mesh = null; + _this._animation = null; + _this._timeline = null; + _this._rawTextureAtlases = null; + _this._defaultColorOffset = -1; + _this._prevClockwise = 0; + _this._prevRotation = 0; + _this._helpMatrixA = new dragonBones.Matrix(); + _this._helpMatrixB = new dragonBones.Matrix(); + _this._helpTransform = new dragonBones.Transform(); + _this._helpColorTransform = new dragonBones.ColorTransform(); + _this._helpPoint = new dragonBones.Point(); + _this._helpArray = []; + _this._intArray = []; + _this._floatArray = []; + _this._frameIntArray = []; + _this._frameFloatArray = []; + _this._frameArray = []; + _this._timelineArray = []; + _this._cacheRawMeshes = []; + _this._cacheMeshes = []; + _this._actionFrames = []; + _this._weightSlotPose = {}; + _this._weightBonePoses = {}; + _this._cacheBones = {}; + _this._slotChildActions = {}; + return _this; + } + ObjectDataParser._getBoolean = function (rawData, key, defaultValue) { + if (key in rawData) { + var value = rawData[key]; + var type = typeof value; + if ("boolean" === type) return value; + if ("string" !== type) return !!value; + switch (value) { + case "0": + case "NaN": + case "": + case "false": + case "null": + case "undefined": + return false; + + default: + return true; + } + } + return defaultValue; + }; + ObjectDataParser._getNumber = function (rawData, key, defaultValue) { + if (key in rawData) { + var value = rawData[key]; + if (null === value || "NaN" === value) return defaultValue; + return +value || 0; + } + return defaultValue; + }; + ObjectDataParser._getString = function (rawData, key, defaultValue) { + if (key in rawData) { + var value = rawData[key]; + var type = typeof value; + if ("string" === type) { + if (dragonBones.DragonBones.webAssembly) for (var i = 0, l = value.length; i < l; ++i) if (value.charCodeAt(i) > 255) return encodeURI(value); + return value; + } + return String(value); + } + return defaultValue; + }; + ObjectDataParser.prototype._getCurvePoint = function (x1, y1, x2, y2, x3, y3, x4, y4, t, result) { + var l_t = 1 - t; + var powA = l_t * l_t; + var powB = t * t; + var kA = l_t * powA; + var kB = 3 * t * powA; + var kC = 3 * l_t * powB; + var kD = t * powB; + result.x = kA * x1 + kB * x2 + kC * x3 + kD * x4; + result.y = kA * y1 + kB * y2 + kC * y3 + kD * y4; + }; + ObjectDataParser.prototype._samplingEasingCurve = function (curve, samples) { + var curveCount = curve.length; + var stepIndex = -2; + for (var i = 0, l = samples.length; i < l; ++i) { + var t = (i + 1) / (l + 1); + while ((stepIndex + 6 < curveCount ? curve[stepIndex + 6] : 1) < t) stepIndex += 6; + var isInCurve = stepIndex >= 0 && stepIndex + 6 < curveCount; + var x1 = isInCurve ? curve[stepIndex] : 0; + var y1 = isInCurve ? curve[stepIndex + 1] : 0; + var x2 = curve[stepIndex + 2]; + var y2 = curve[stepIndex + 3]; + var x3 = curve[stepIndex + 4]; + var y3 = curve[stepIndex + 5]; + var x4 = isInCurve ? curve[stepIndex + 6] : 1; + var y4 = isInCurve ? curve[stepIndex + 7] : 1; + var lower = 0; + var higher = 1; + while (higher - lower > 1e-4) { + var percentage = .5 * (higher + lower); + this._getCurvePoint(x1, y1, x2, y2, x3, y3, x4, y4, percentage, this._helpPoint); + t - this._helpPoint.x > 0 ? lower = percentage : higher = percentage; + } + samples[i] = this._helpPoint.y; + } + }; + ObjectDataParser.prototype._parseActionDataInFrame = function (rawData, frameStart, bone, slot) { + dragonBones.DataParser.EVENT in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.EVENT], frameStart, 10, bone, slot); + dragonBones.DataParser.SOUND in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.SOUND], frameStart, 11, bone, slot); + dragonBones.DataParser.ACTION in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.ACTION], frameStart, 0, bone, slot); + dragonBones.DataParser.EVENTS in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.EVENTS], frameStart, 10, bone, slot); + dragonBones.DataParser.ACTIONS in rawData && this._mergeActionFrame(rawData[dragonBones.DataParser.ACTIONS], frameStart, 0, bone, slot); + }; + ObjectDataParser.prototype._mergeActionFrame = function (rawData, frameStart, type, bone, slot) { + var actionOffset = dragonBones.DragonBones.webAssembly ? this._armature.actions.size() : this._armature.actions.length; + var actions = this._parseActionData(rawData, type, bone, slot); + var frameIndex = 0; + var frame = null; + for (var _i = 0, actions_2 = actions; _i < actions_2.length; _i++) { + var action = actions_2[_i]; + this._armature.addAction(action, false); + } + if (0 === this._actionFrames.length) { + frame = new ActionFrame(); + frame.frameStart = 0; + this._actionFrames.push(frame); + frame = null; + } + for (var _a = 0, _b = this._actionFrames; _a < _b.length; _a++) { + var eachFrame = _b[_a]; + if (eachFrame.frameStart === frameStart) { + frame = eachFrame; + break; + } + if (eachFrame.frameStart > frameStart) break; + frameIndex++; + } + if (null === frame) { + frame = new ActionFrame(); + frame.frameStart = frameStart; + this._actionFrames.splice(frameIndex + 1, 0, frame); + } + for (var i = 0; i < actions.length; ++i) frame.actions.push(actionOffset + i); + }; + ObjectDataParser.prototype._parseArmature = function (rawData, scale) { + var armature = dragonBones.BaseObject.borrowObject(dragonBones.ArmatureData); + armature.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + armature.frameRate = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FRAME_RATE, this._data.frameRate); + armature.scale = scale; + dragonBones.DataParser.TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.TYPE] ? armature.type = dragonBones.DataParser._getArmatureType(rawData[dragonBones.DataParser.TYPE]) : armature.type = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TYPE, 0); + 0 === armature.frameRate && (armature.frameRate = 24); + this._armature = armature; + if (dragonBones.DataParser.CANVAS in rawData) { + var rawCanvas = rawData[dragonBones.DataParser.CANVAS]; + var canvas = dragonBones.BaseObject.borrowObject(dragonBones.CanvasData); + dragonBones.DataParser.COLOR in rawCanvas ? canvas.hasBackground = true : canvas.hasBackground = false; + canvas.color = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.COLOR, 0); + canvas.x = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.X, 0) * armature.scale; + canvas.y = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.Y, 0) * armature.scale; + canvas.width = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.WIDTH, 0) * armature.scale; + canvas.height = ObjectDataParser._getNumber(rawCanvas, dragonBones.DataParser.HEIGHT, 0) * armature.scale; + armature.canvas = canvas; + } + if (dragonBones.DataParser.AABB in rawData) { + var rawAABB = rawData[dragonBones.DataParser.AABB]; + armature.aabb.x = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.X, 0) * armature.scale; + armature.aabb.y = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.Y, 0) * armature.scale; + armature.aabb.width = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.WIDTH, 0) * armature.scale; + armature.aabb.height = ObjectDataParser._getNumber(rawAABB, dragonBones.DataParser.HEIGHT, 0) * armature.scale; + } + if (dragonBones.DataParser.BONE in rawData) { + var rawBones = rawData[dragonBones.DataParser.BONE]; + for (var _i = 0, rawBones_1 = rawBones; _i < rawBones_1.length; _i++) { + var rawBone = rawBones_1[_i]; + var parentName = ObjectDataParser._getString(rawBone, dragonBones.DataParser.PARENT, ""); + var bone = this._parseBone(rawBone); + if (parentName.length > 0) { + var parent_1 = armature.getBone(parentName); + if (null !== parent_1) bone.parent = parent_1; else { + parentName in this._cacheBones || (this._cacheBones[parentName] = []); + this._cacheBones[parentName].push(bone); + } + } + if (bone.name in this._cacheBones) { + for (var _a = 0, _b = this._cacheBones[bone.name]; _a < _b.length; _a++) { + var child = _b[_a]; + child.parent = bone; + } + delete this._cacheBones[bone.name]; + } + armature.addBone(bone); + this._rawBones.push(bone); + } + } + if (dragonBones.DataParser.IK in rawData) { + var rawIKS = rawData[dragonBones.DataParser.IK]; + for (var _c = 0, rawIKS_1 = rawIKS; _c < rawIKS_1.length; _c++) { + var rawIK = rawIKS_1[_c]; + var constraint = this._parseIKConstraint(rawIK); + constraint && armature.addConstraint(constraint); + } + } + armature.sortBones(); + if (dragonBones.DataParser.SLOT in rawData) { + var zOrder = 0; + var rawSlots = rawData[dragonBones.DataParser.SLOT]; + for (var _d = 0, rawSlots_1 = rawSlots; _d < rawSlots_1.length; _d++) { + var rawSlot = rawSlots_1[_d]; + armature.addSlot(this._parseSlot(rawSlot, zOrder++)); + } + } + if (dragonBones.DataParser.SKIN in rawData) { + var rawSkins = rawData[dragonBones.DataParser.SKIN]; + for (var _e = 0, rawSkins_1 = rawSkins; _e < rawSkins_1.length; _e++) { + var rawSkin = rawSkins_1[_e]; + armature.addSkin(this._parseSkin(rawSkin)); + } + } + if (dragonBones.DataParser.PATH_CONSTRAINT in rawData) { + var rawPaths = rawData[dragonBones.DataParser.PATH_CONSTRAINT]; + for (var _f = 0, rawPaths_1 = rawPaths; _f < rawPaths_1.length; _f++) { + var rawPath = rawPaths_1[_f]; + var constraint = this._parsePathConstraint(rawPath); + constraint && armature.addConstraint(constraint); + } + } + for (var i = 0, l = this._cacheRawMeshes.length; i < l; ++i) { + var rawMeshData = this._cacheRawMeshes[i]; + if (!(dragonBones.DataParser.GLUE_WEIGHTS in rawMeshData) || !(dragonBones.DataParser.GLUE_MESHES in rawMeshData)) continue; + this._parseMeshGlue(rawMeshData, this._cacheMeshes[i]); + } + for (var i = 0, l = this._cacheRawMeshes.length; i < l; ++i) { + var rawData_1 = this._cacheRawMeshes[i]; + var shareName = ObjectDataParser._getString(rawData_1, dragonBones.DataParser.SHARE, ""); + if (0 === shareName.length) continue; + var skinName = ObjectDataParser._getString(rawData_1, dragonBones.DataParser.SKIN, dragonBones.DataParser.DEFAULT_NAME); + 0 === skinName.length && (skinName = dragonBones.DataParser.DEFAULT_NAME); + var shareMesh = armature.getMesh(skinName, "", shareName); + if (null === shareMesh) continue; + var mesh = this._cacheMeshes[i]; + mesh.vertices.shareFrom(shareMesh.vertices); + } + if (dragonBones.DataParser.ANIMATION in rawData) { + var rawAnimations = rawData[dragonBones.DataParser.ANIMATION]; + for (var _g = 0, rawAnimations_1 = rawAnimations; _g < rawAnimations_1.length; _g++) { + var rawAnimation = rawAnimations_1[_g]; + var animation = this._parseAnimation(rawAnimation); + armature.addAnimation(animation); + } + } + if (dragonBones.DataParser.DEFAULT_ACTIONS in rawData) { + var actions = this._parseActionData(rawData[dragonBones.DataParser.DEFAULT_ACTIONS], 0, null, null); + for (var _h = 0, actions_3 = actions; _h < actions_3.length; _h++) { + var action = actions_3[_h]; + armature.addAction(action, true); + if (0 === action.type) { + var animation = armature.getAnimation(action.name); + null !== animation && (armature.defaultAnimation = animation); + } + } + } + if (dragonBones.DataParser.ACTIONS in rawData) { + var actions = this._parseActionData(rawData[dragonBones.DataParser.ACTIONS], 0, null, null); + for (var _j = 0, actions_4 = actions; _j < actions_4.length; _j++) { + var action = actions_4[_j]; + armature.addAction(action, false); + } + } + this._rawBones.length = 0; + this._cacheRawMeshes.length = 0; + this._cacheMeshes.length = 0; + this._armature = null; + for (var k in this._weightSlotPose) delete this._weightSlotPose[k]; + for (var k in this._weightBonePoses) delete this._weightBonePoses[k]; + for (var k in this._cacheBones) delete this._cacheBones[k]; + for (var k in this._slotChildActions) delete this._slotChildActions[k]; + return armature; + }; + ObjectDataParser.prototype._parseBone = function (rawData) { + var type = 0; + var scale = this._armature.scale; + type = dragonBones.DataParser.TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.TYPE] ? dragonBones.DataParser._getBoneType(rawData[dragonBones.DataParser.TYPE]) : ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TYPE, 0); + if (0 === type) { + var bone = dragonBones.BaseObject.borrowObject(dragonBones.BoneData); + bone.inheritTranslation = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_TRANSLATION, true); + bone.inheritRotation = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_ROTATION, true); + bone.inheritScale = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_SCALE, true); + bone.inheritReflection = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_REFLECTION, true); + bone.length = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.LENGTH, 0) * scale; + bone.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + dragonBones.DataParser.TRANSFORM in rawData && this._parseTransform(rawData[dragonBones.DataParser.TRANSFORM], bone.transform, scale); + return bone; + } + var surface = dragonBones.BaseObject.borrowObject(dragonBones.SurfaceData); + surface.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + surface.segmentX = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SEGMENT_X, 0); + surface.segmentY = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SEGMENT_Y, 0); + surface.vertices.length = (surface.segmentX + 1) * (surface.segmentY + 1) * 2; + if (dragonBones.DataParser.VERTICES in rawData) { + var rawVertices = rawData[dragonBones.DataParser.VERTICES]; + for (var i = 0, l = surface.vertices.length; i < l; ++i) i < rawVertices.length ? surface.vertices[i] = rawVertices[i] * scale : surface.vertices[i] = 0; + } + return surface; + }; + ObjectDataParser.prototype._parseIKConstraint = function (rawData) { + var bone = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.BONE, "")); + if (null === bone) return null; + var target = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.TARGET, "")); + if (null === target) return null; + var constraint = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraintData); + constraint.scaleEnabled = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.SCALE, false); + constraint.bendPositive = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.BEND_POSITIVE, true); + constraint.weight = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WEIGHT, 1); + constraint.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + constraint.type = 0; + constraint.target = target; + var chain = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.CHAIN, 0); + if (chain > 0 && null !== bone.parent) { + constraint.root = bone.parent; + constraint.bone = bone; + } else { + constraint.root = bone; + constraint.bone = null; + } + return constraint; + }; + ObjectDataParser.prototype._parsePathConstraint = function (rawData) { + var target = this._armature.getSlot(ObjectDataParser._getString(rawData, dragonBones.DataParser.TARGET, "")); + if (null === target) return null; + var defaultSkin = this._armature.defaultSkin; + if (null === defaultSkin) return null; + var targetDisplay = defaultSkin.getDisplay(target.name, ObjectDataParser._getString(rawData, dragonBones.DataParser.TARGET_DISPLAY, target.name)); + if (null === targetDisplay || !(targetDisplay instanceof dragonBones.PathDisplayData)) return null; + var bones = rawData[dragonBones.DataParser.BONES]; + if (null === bones || 0 === bones.length) return null; + var constraint = dragonBones.BaseObject.borrowObject(dragonBones.PathConstraintData); + constraint.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + constraint.type = 1; + constraint.pathSlot = target; + constraint.pathDisplayData = targetDisplay; + constraint.target = target.parent; + constraint.positionMode = dragonBones.DataParser._getPositionMode(ObjectDataParser._getString(rawData, dragonBones.DataParser.POSITION_MODE, "")); + constraint.spacingMode = dragonBones.DataParser._getSpacingMode(ObjectDataParser._getString(rawData, dragonBones.DataParser.SPACING_MODE, "")); + constraint.rotateMode = dragonBones.DataParser._getRotateMode(ObjectDataParser._getString(rawData, dragonBones.DataParser.ROTATE_MODE, "")); + constraint.position = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.POSITION, 0); + constraint.spacing = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SPACING, 0); + constraint.rotateOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE_OFFSET, 0); + constraint.rotateMix = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE_MIX, 1); + constraint.translateMix = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TRANSLATE_MIX, 1); + for (var _i = 0, bones_3 = bones; _i < bones_3.length; _i++) { + var boneName = bones_3[_i]; + var bone = this._armature.getBone(boneName); + if (null !== bone) { + constraint.AddBone(bone); + null === constraint.root && (constraint.root = bone); + } + } + return constraint; + }; + ObjectDataParser.prototype._parseSlot = function (rawData, zOrder) { + var slot = dragonBones.BaseObject.borrowObject(dragonBones.SlotData); + slot.displayIndex = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DISPLAY_INDEX, 0); + slot.zOrder = zOrder; + slot.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + slot.parent = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.PARENT, "")); + dragonBones.DataParser.BLEND_MODE in rawData && "string" === typeof rawData[dragonBones.DataParser.BLEND_MODE] ? slot.blendMode = dragonBones.DataParser._getBlendMode(rawData[dragonBones.DataParser.BLEND_MODE]) : slot.blendMode = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.BLEND_MODE, 0); + if (dragonBones.DataParser.COLOR in rawData) { + slot.color = dragonBones.SlotData.createColor(); + this._parseColorTransform(rawData[dragonBones.DataParser.COLOR], slot.color); + } else slot.color = dragonBones.SlotData.DEFAULT_COLOR; + dragonBones.DataParser.ACTIONS in rawData && (this._slotChildActions[slot.name] = this._parseActionData(rawData[dragonBones.DataParser.ACTIONS], 0, null, null)); + return slot; + }; + ObjectDataParser.prototype._parseSkin = function (rawData) { + var skin = dragonBones.BaseObject.borrowObject(dragonBones.SkinData); + skin.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, dragonBones.DataParser.DEFAULT_NAME); + 0 === skin.name.length && (skin.name = dragonBones.DataParser.DEFAULT_NAME); + if (dragonBones.DataParser.SLOT in rawData) { + var rawSlots = rawData[dragonBones.DataParser.SLOT]; + this._skin = skin; + for (var _i = 0, rawSlots_2 = rawSlots; _i < rawSlots_2.length; _i++) { + var rawSlot = rawSlots_2[_i]; + var slotName = ObjectDataParser._getString(rawSlot, dragonBones.DataParser.NAME, ""); + var slot = this._armature.getSlot(slotName); + if (null !== slot) { + this._slot = slot; + if (dragonBones.DataParser.DISPLAY in rawSlot) { + var rawDisplays = rawSlot[dragonBones.DataParser.DISPLAY]; + for (var _a = 0, rawDisplays_1 = rawDisplays; _a < rawDisplays_1.length; _a++) { + var rawDisplay = rawDisplays_1[_a]; + rawDisplay ? skin.addDisplay(slotName, this._parseDisplay(rawDisplay)) : skin.addDisplay(slotName, null); + } + } + this._slot = null; + } + } + this._skin = null; + } + return skin; + }; + ObjectDataParser.prototype._parseDisplay = function (rawData) { + var name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + var path = ObjectDataParser._getString(rawData, dragonBones.DataParser.PATH, ""); + var type = 0; + var display = null; + type = dragonBones.DataParser.TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.TYPE] ? dragonBones.DataParser._getDisplayType(rawData[dragonBones.DataParser.TYPE]) : ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TYPE, type); + switch (type) { + case 0: + var imageDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.ImageDisplayData); + imageDisplay.name = name; + imageDisplay.path = path.length > 0 ? path : name; + this._parsePivot(rawData, imageDisplay); + break; + + case 1: + var armatureDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.ArmatureDisplayData); + armatureDisplay.name = name; + armatureDisplay.path = path.length > 0 ? path : name; + armatureDisplay.inheritAnimation = true; + if (dragonBones.DataParser.ACTIONS in rawData) { + var actions = this._parseActionData(rawData[dragonBones.DataParser.ACTIONS], 0, null, null); + for (var _i = 0, actions_5 = actions; _i < actions_5.length; _i++) { + var action = actions_5[_i]; + armatureDisplay.addAction(action); + } + } else if (this._slot.name in this._slotChildActions) { + var displays = this._skin.getDisplays(this._slot.name); + if (null === displays ? 0 === this._slot.displayIndex : this._slot.displayIndex === displays.length) { + for (var _a = 0, _b = this._slotChildActions[this._slot.name]; _a < _b.length; _a++) { + var action = _b[_a]; + armatureDisplay.addAction(action); + } + delete this._slotChildActions[this._slot.name]; + } + } + break; + + case 2: + var meshDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.MeshDisplayData); + meshDisplay.vertices.inheritDeform = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.INHERIT_DEFORM, true); + meshDisplay.name = name; + meshDisplay.path = path.length > 0 ? path : name; + meshDisplay.vertices.data = this._data; + if (dragonBones.DataParser.SHARE in rawData) { + this._cacheRawMeshes.push(rawData); + this._cacheMeshes.push(meshDisplay); + } else this._parseMesh(rawData, meshDisplay); + if (dragonBones.DataParser.GLUE_WEIGHTS in rawData && dragonBones.DataParser.GLUE_MESHES in rawData) { + this._cacheRawMeshes.push(rawData); + this._cacheMeshes.push(meshDisplay); + } + break; + + case 3: + var boundingBox = this._parseBoundingBox(rawData); + if (null !== boundingBox) { + var boundingBoxDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.BoundingBoxDisplayData); + boundingBoxDisplay.name = name; + boundingBoxDisplay.path = path.length > 0 ? path : name; + boundingBoxDisplay.boundingBox = boundingBox; + } + break; + + case 4: + var rawCurveLengths = rawData[dragonBones.DataParser.LENGTHS]; + var pathDisplay = display = dragonBones.BaseObject.borrowObject(dragonBones.PathDisplayData); + pathDisplay.closed = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.CLOSED, false); + pathDisplay.constantSpeed = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.CONSTANT_SPEED, false); + pathDisplay.name = name; + pathDisplay.path = path.length > 0 ? path : name; + pathDisplay.vertices.data = this._data; + pathDisplay.curveLengths.length = rawCurveLengths.length; + for (var i = 0, l = rawCurveLengths.length; i < l; ++i) pathDisplay.curveLengths[i] = rawCurveLengths[i]; + this._parsePath(rawData, pathDisplay); + } + null !== display && dragonBones.DataParser.TRANSFORM in rawData && this._parseTransform(rawData[dragonBones.DataParser.TRANSFORM], display.transform, this._armature.scale); + return display; + }; + ObjectDataParser.prototype._parsePath = function (rawData, display) { + var rawVertices = rawData[dragonBones.DataParser.VERTICES]; + var vertexCount = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.VERTEX_COUNT, 0); + var vertexOffset = this._floatArray.length; + var pathOffset = this._intArray.length; + display.vertices.offset = pathOffset; + this._intArray.length += 2; + this._intArray[pathOffset + 0] = vertexCount; + this._intArray[pathOffset + 2] = vertexOffset; + if (dragonBones.DataParser.WEIGHTS in rawData) { + var rawWeights = rawData[dragonBones.DataParser.WEIGHTS]; + var rawBones = rawData[dragonBones.DataParser.BONES]; + var weightBoneCount = rawBones.length; + var weightCount = Math.floor(rawWeights.length - vertexCount) / 2; + var weightOffset = this._intArray.length; + var floatOffset = this._floatArray.length; + var sortedBones = this._armature.sortedBones; + var weight = dragonBones.BaseObject.borrowObject(dragonBones.WeightData); + weight.count = weightCount; + weight.offset = weightOffset; + this._intArray.length += 2 + weightBoneCount + vertexCount + weightCount; + this._intArray[weightOffset + 0] = weightBoneCount; + this._intArray[weightOffset + 1] = floatOffset; + for (var i = 0; i < weightBoneCount; i++) { + var rawBoneIndex = rawBones[i]; + var bone = this._rawBones[rawBoneIndex]; + weight.addBone(bone); + this._intArray[weightOffset + 2 + i] = sortedBones.indexOf(bone); + } + this._floatArray.length += 3 * weightCount; + for (var i = 0, iW = 0, iV = 0, iB = weightOffset + 2 + weightBoneCount, iF = floatOffset; i < weightCount; i++) { + var boneCount = rawWeights[iW++]; + this._intArray[iB++] = boneCount; + for (var j = 0; j < boneCount; j++) { + var boneIndex = rawWeights[iW++]; + var boneWeight = rawWeights[iW++]; + var x = rawVertices[iV++]; + var y = rawVertices[iV++]; + this._intArray[iB++] = rawBones.indexOf(boneIndex); + this._floatArray[iF++] = boneWeight; + this._floatArray[iF++] = x; + this._floatArray[iF++] = y; + } + } + display.vertices.weight = weight; + } else { + this._floatArray.length += rawVertices.length; + for (var i = 0, l = rawVertices.length; i < l; ++i) this._floatArray[vertexOffset + i] = rawVertices[i]; + } + }; + ObjectDataParser.prototype._parsePivot = function (rawData, display) { + if (dragonBones.DataParser.PIVOT in rawData) { + var rawPivot = rawData[dragonBones.DataParser.PIVOT]; + display.pivot.x = ObjectDataParser._getNumber(rawPivot, dragonBones.DataParser.X, 0); + display.pivot.y = ObjectDataParser._getNumber(rawPivot, dragonBones.DataParser.Y, 0); + } else { + display.pivot.x = .5; + display.pivot.y = .5; + } + }; + ObjectDataParser.prototype._parseMesh = function (rawData, mesh) { + var rawVertices = rawData[dragonBones.DataParser.VERTICES]; + var rawUVs = rawData[dragonBones.DataParser.UVS]; + var rawTriangles = rawData[dragonBones.DataParser.TRIANGLES]; + var vertexCount = Math.floor(rawVertices.length / 2); + var triangleCount = Math.floor(rawTriangles.length / 3); + var vertexOffset = this._floatArray.length; + var uvOffset = vertexOffset + 2 * vertexCount; + var meshOffset = this._intArray.length; + var meshName = this._skin.name + "_" + this._slot.name + "_" + mesh.name; + mesh.vertices.offset = meshOffset; + this._intArray.length += 4 + 3 * triangleCount; + this._intArray[meshOffset + 0] = vertexCount; + this._intArray[meshOffset + 1] = triangleCount; + this._intArray[meshOffset + 2] = vertexOffset; + for (var i = 0, l = 3 * triangleCount; i < l; ++i) this._intArray[meshOffset + 4 + i] = rawTriangles[i]; + this._floatArray.length += 2 * vertexCount + 2 * vertexCount; + for (var i = 0, l = 2 * vertexCount; i < l; ++i) { + this._floatArray[vertexOffset + i] = rawVertices[i]; + this._floatArray[uvOffset + i] = rawUVs[i]; + } + if (dragonBones.DataParser.WEIGHTS in rawData) { + var rawWeights = rawData[dragonBones.DataParser.WEIGHTS]; + var rawSlotPose = rawData[dragonBones.DataParser.SLOT_POSE]; + var rawBonePoses = rawData[dragonBones.DataParser.BONE_POSE]; + var sortedBones = this._armature.sortedBones; + var weightBoneIndices = new Array(); + var weightBoneCount = Math.floor(rawBonePoses.length / 7); + var floatOffset = this._floatArray.length; + var weightCount = Math.floor(rawWeights.length - vertexCount) / 2; + var weightOffset = this._intArray.length; + var weight = dragonBones.BaseObject.borrowObject(dragonBones.WeightData); + weight.count = weightCount; + weight.offset = weightOffset; + weightBoneIndices.length = weightBoneCount; + this._intArray.length += 2 + weightBoneCount + vertexCount + weightCount; + this._intArray[weightOffset + 1] = floatOffset; + for (var i = 0; i < weightBoneCount; ++i) { + var rawBoneIndex = rawBonePoses[7 * i]; + var bone = this._rawBones[rawBoneIndex]; + weight.addBone(bone); + weightBoneIndices[i] = rawBoneIndex; + this._intArray[weightOffset + 2 + i] = sortedBones.indexOf(bone); + } + this._floatArray.length += 3 * weightCount; + this._helpMatrixA.copyFromArray(rawSlotPose, 0); + for (var i = 0, iW = 0, iB = weightOffset + 2 + weightBoneCount, iV = floatOffset; i < vertexCount; ++i) { + var iD = 2 * i; + var vertexBoneCount = this._intArray[iB++] = rawWeights[iW++]; + var x = this._floatArray[vertexOffset + iD]; + var y = this._floatArray[vertexOffset + iD + 1]; + this._helpMatrixA.transformPoint(x, y, this._helpPoint); + x = this._helpPoint.x; + y = this._helpPoint.y; + for (var j = 0; j < vertexBoneCount; ++j) { + var rawBoneIndex = rawWeights[iW++]; + var boneIndex = weightBoneIndices.indexOf(rawBoneIndex); + this._helpMatrixB.copyFromArray(rawBonePoses, 7 * boneIndex + 1); + this._helpMatrixB.invert(); + this._helpMatrixB.transformPoint(x, y, this._helpPoint); + this._intArray[iB++] = boneIndex; + this._floatArray[iV++] = rawWeights[iW++]; + this._floatArray[iV++] = this._helpPoint.x; + this._floatArray[iV++] = this._helpPoint.y; + } + } + mesh.vertices.weight = weight; + this._weightSlotPose[meshName] = rawSlotPose; + this._weightBonePoses[meshName] = rawBonePoses; + } + }; + ObjectDataParser.prototype._parseMeshGlue = function (rawData, mesh) { + rawData; + mesh; + }; + ObjectDataParser.prototype._parseBoundingBox = function (rawData) { + var boundingBox = null; + var type = 0; + type = dragonBones.DataParser.SUB_TYPE in rawData && "string" === typeof rawData[dragonBones.DataParser.SUB_TYPE] ? dragonBones.DataParser._getBoundingBoxType(rawData[dragonBones.DataParser.SUB_TYPE]) : ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SUB_TYPE, type); + switch (type) { + case 0: + boundingBox = dragonBones.BaseObject.borrowObject(dragonBones.RectangleBoundingBoxData); + break; + + case 1: + boundingBox = dragonBones.BaseObject.borrowObject(dragonBones.EllipseBoundingBoxData); + break; + + case 2: + boundingBox = this._parsePolygonBoundingBox(rawData); + } + if (null !== boundingBox) { + boundingBox.color = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.COLOR, 0); + if (0 === boundingBox.type || 1 === boundingBox.type) { + boundingBox.width = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WIDTH, 0); + boundingBox.height = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.HEIGHT, 0); + } + } + return boundingBox; + }; + ObjectDataParser.prototype._parsePolygonBoundingBox = function (rawData) { + var polygonBoundingBox = dragonBones.BaseObject.borrowObject(dragonBones.PolygonBoundingBoxData); + if (dragonBones.DataParser.VERTICES in rawData) { + var scale = this._armature.scale; + var rawVertices = rawData[dragonBones.DataParser.VERTICES]; + var vertices = polygonBoundingBox.vertices; + dragonBones.DragonBones.webAssembly ? vertices.resize(rawVertices.length, 0) : vertices.length = rawVertices.length; + for (var i = 0, l = rawVertices.length; i < l; i += 2) { + var x = rawVertices[i] * scale; + var y = rawVertices[i + 1] * scale; + if (dragonBones.DragonBones.webAssembly) { + vertices.set(i, x); + vertices.set(i + 1, y); + } else { + vertices[i] = x; + vertices[i + 1] = y; + } + if (0 === i) { + polygonBoundingBox.x = x; + polygonBoundingBox.y = y; + polygonBoundingBox.width = x; + polygonBoundingBox.height = y; + } else { + x < polygonBoundingBox.x ? polygonBoundingBox.x = x : x > polygonBoundingBox.width && (polygonBoundingBox.width = x); + y < polygonBoundingBox.y ? polygonBoundingBox.y = y : y > polygonBoundingBox.height && (polygonBoundingBox.height = y); + } + } + polygonBoundingBox.width -= polygonBoundingBox.x; + polygonBoundingBox.height -= polygonBoundingBox.y; + } else console.warn("Data error.\n Please reexport DragonBones Data to fixed the bug."); + return polygonBoundingBox; + }; + ObjectDataParser.prototype._parseAnimation = function (rawData) { + var animation = dragonBones.BaseObject.borrowObject(dragonBones.AnimationData); + animation.frameCount = Math.max(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DURATION, 1), 1); + animation.playTimes = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.PLAY_TIMES, 1); + animation.duration = animation.frameCount / this._armature.frameRate; + animation.fadeInTime = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FADE_IN_TIME, 0); + animation.scale = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1); + animation.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, dragonBones.DataParser.DEFAULT_NAME); + 0 === animation.name.length && (animation.name = dragonBones.DataParser.DEFAULT_NAME); + animation.frameIntOffset = this._frameIntArray.length; + animation.frameFloatOffset = this._frameFloatArray.length; + animation.frameOffset = this._frameArray.length; + this._animation = animation; + if (dragonBones.DataParser.FRAME in rawData) { + var rawFrames = rawData[dragonBones.DataParser.FRAME]; + var keyFrameCount = rawFrames.length; + if (keyFrameCount > 0) for (var i = 0, frameStart = 0; i < keyFrameCount; ++i) { + var rawFrame = rawFrames[i]; + this._parseActionDataInFrame(rawFrame, frameStart, null, null); + frameStart += ObjectDataParser._getNumber(rawFrame, dragonBones.DataParser.DURATION, 1); + } + } + dragonBones.DataParser.Z_ORDER in rawData && (this._animation.zOrderTimeline = this._parseTimeline(rawData[dragonBones.DataParser.Z_ORDER], null, dragonBones.DataParser.FRAME, 1, false, false, 0, this._parseZOrderFrame)); + if (dragonBones.DataParser.BONE in rawData) { + var rawTimelines = rawData[dragonBones.DataParser.BONE]; + for (var _i = 0, rawTimelines_1 = rawTimelines; _i < rawTimelines_1.length; _i++) { + var rawTimeline = rawTimelines_1[_i]; + this._parseBoneTimeline(rawTimeline); + } + } + if (dragonBones.DataParser.SURFACE in rawData) { + var rawTimelines = rawData[dragonBones.DataParser.SURFACE]; + for (var _a = 0, rawTimelines_2 = rawTimelines; _a < rawTimelines_2.length; _a++) { + var rawTimeline = rawTimelines_2[_a]; + var surfaceName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, ""); + this._surface = this._armature.getBone(surfaceName); + if (null === this._surface) continue; + var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 50, false, true, 0, this._parseSurfaceFrame); + null !== timeline && this._animation.addSurfaceTimeline(this._surface, timeline); + this._surface = null; + } + } + if (dragonBones.DataParser.SLOT in rawData) { + var rawTimelines = rawData[dragonBones.DataParser.SLOT]; + for (var _b = 0, rawTimelines_3 = rawTimelines; _b < rawTimelines_3.length; _b++) { + var rawTimeline = rawTimelines_3[_b]; + this._parseSlotTimeline(rawTimeline); + } + } + if (dragonBones.DataParser.FFD in rawData) { + var rawTimelines = rawData[dragonBones.DataParser.FFD]; + for (var _c = 0, rawTimelines_4 = rawTimelines; _c < rawTimelines_4.length; _c++) { + var rawTimeline = rawTimelines_4[_c]; + var skinName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.SKIN, dragonBones.DataParser.DEFAULT_NAME); + var slotName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.SLOT, ""); + var displayName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, ""); + 0 === skinName.length && (skinName = dragonBones.DataParser.DEFAULT_NAME); + this._slot = this._armature.getSlot(slotName); + this._mesh = this._armature.getMesh(skinName, slotName, displayName); + if (null === this._slot || null === this._mesh) continue; + var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 22, false, true, 0, this._parseSlotFFDFrame); + null !== timeline && this._animation.addSlotTimeline(this._slot, timeline); + this._slot = null; + this._mesh = null; + } + } + if (dragonBones.DataParser.IK in rawData) { + var rawTimelines = rawData[dragonBones.DataParser.IK]; + for (var _d = 0, rawTimelines_5 = rawTimelines; _d < rawTimelines_5.length; _d++) { + var rawTimeline = rawTimelines_5[_d]; + var constraintName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, ""); + var constraint = this._armature.getConstraint(constraintName); + if (null === constraint) continue; + var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 30, true, false, 2, this._parseIKConstraintFrame); + null !== timeline && this._animation.addConstraintTimeline(constraint, timeline); + } + } + if (dragonBones.DataParser.ANIMATION in rawData) { + var rawTimelines = rawData[dragonBones.DataParser.ANIMATION]; + for (var _e = 0, rawTimelines_6 = rawTimelines; _e < rawTimelines_6.length; _e++) { + var rawTimeline = rawTimelines_6[_e]; + var animationName = ObjectDataParser._getString(rawTimeline, dragonBones.DataParser.NAME, ""); + var timeline = this._parseTimeline(rawTimeline, null, dragonBones.DataParser.FRAME, 40, true, false, 2, this._parseAnimationFrame); + null !== timeline && this._animation.addAnimationTimeline(animationName, timeline); + } + } + if (this._actionFrames.length > 0) { + this._animation.actionTimeline = this._parseTimeline(null, this._actionFrames, "", 0, false, false, 0, this._parseActionFrame); + this._actionFrames.length = 0; + } + this._animation = null; + return animation; + }; + ObjectDataParser.prototype._parseTimeline = function (rawData, rawFrames, framesKey, type, addIntOffset, addFloatOffset, frameValueCount, frameParser) { + null !== rawData && framesKey.length > 0 && framesKey in rawData && (rawFrames = rawData[framesKey]); + if (null === rawFrames) return null; + var keyFrameCount = rawFrames.length; + if (0 === keyFrameCount) return null; + var frameIntArrayLength = this._frameIntArray.length; + var frameFloatArrayLength = this._frameFloatArray.length; + var timeline = dragonBones.BaseObject.borrowObject(dragonBones.TimelineData); + var timelineOffset = this._timelineArray.length; + this._timelineArray.length += 5 + keyFrameCount; + if (null !== rawData) { + this._timelineArray[timelineOffset + 0] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1)); + this._timelineArray[timelineOffset + 1] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.OFFSET, 0)); + } else { + this._timelineArray[timelineOffset + 0] = 100; + this._timelineArray[timelineOffset + 1] = 0; + } + this._timelineArray[timelineOffset + 2] = keyFrameCount; + this._timelineArray[timelineOffset + 3] = frameValueCount; + this._timelineArray[timelineOffset + 4] = addIntOffset ? frameIntArrayLength - this._animation.frameIntOffset : addFloatOffset ? frameFloatArrayLength - this._animation.frameFloatOffset : 0; + this._timeline = timeline; + timeline.type = type; + timeline.offset = timelineOffset; + if (1 === keyFrameCount) { + timeline.frameIndicesOffset = -1; + this._timelineArray[timelineOffset + 5 + 0] = frameParser.call(this, rawFrames[0], 0, 0) - this._animation.frameOffset; + } else { + var totalFrameCount = this._animation.frameCount + 1; + var frameIndices = this._data.frameIndices; + var frameIndicesOffset = 0; + if (dragonBones.DragonBones.webAssembly) { + frameIndicesOffset = frameIndices.size(); + frameIndices.resize(frameIndicesOffset + totalFrameCount, 0); + } else { + frameIndicesOffset = frameIndices.length; + frameIndices.length += totalFrameCount; + } + timeline.frameIndicesOffset = frameIndicesOffset; + for (var i = 0, iK = 0, frameStart = 0, frameCount = 0; i < totalFrameCount; ++i) { + if (frameStart + frameCount <= i && iK < keyFrameCount) { + var rawFrame = rawFrames[iK]; + frameStart = i; + frameCount = iK === keyFrameCount - 1 ? this._animation.frameCount - frameStart : rawFrame instanceof ActionFrame ? this._actionFrames[iK + 1].frameStart - frameStart : ObjectDataParser._getNumber(rawFrame, dragonBones.DataParser.DURATION, 1); + this._timelineArray[timelineOffset + 5 + iK] = frameParser.call(this, rawFrame, frameStart, frameCount) - this._animation.frameOffset; + iK++; + } + dragonBones.DragonBones.webAssembly ? frameIndices.set(frameIndicesOffset + i, iK - 1) : frameIndices[frameIndicesOffset + i] = iK - 1; + } + } + this._timeline = null; + return timeline; + }; + ObjectDataParser.prototype._parseBoneTimeline = function (rawData) { + var bone = this._armature.getBone(ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "")); + if (null === bone) return; + this._bone = bone; + this._slot = this._armature.getSlot(this._bone.name); + if (dragonBones.DataParser.TRANSLATE_FRAME in rawData) { + var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.TRANSLATE_FRAME, 11, false, true, 2, this._parseBoneTranslateFrame); + null !== timeline && this._animation.addBoneTimeline(bone, timeline); + } + if (dragonBones.DataParser.ROTATE_FRAME in rawData) { + var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.ROTATE_FRAME, 12, false, true, 2, this._parseBoneRotateFrame); + null !== timeline && this._animation.addBoneTimeline(bone, timeline); + } + if (dragonBones.DataParser.SCALE_FRAME in rawData) { + var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.SCALE_FRAME, 13, false, true, 2, this._parseBoneScaleFrame); + null !== timeline && this._animation.addBoneTimeline(bone, timeline); + } + if (dragonBones.DataParser.FRAME in rawData) { + var timeline = this._parseTimeline(rawData, null, dragonBones.DataParser.FRAME, 10, false, true, 6, this._parseBoneAllFrame); + null !== timeline && this._animation.addBoneTimeline(bone, timeline); + } + this._bone = null; + this._slot = null; + }; + ObjectDataParser.prototype._parseSlotTimeline = function (rawData) { + var slot = this._armature.getSlot(ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, "")); + if (null === slot) return; + this._slot = slot; + var displayTimeline = null; + displayTimeline = dragonBones.DataParser.DISPLAY_FRAME in rawData ? this._parseTimeline(rawData, null, dragonBones.DataParser.DISPLAY_FRAME, 20, false, false, 0, this._parseSlotDisplayFrame) : this._parseTimeline(rawData, null, dragonBones.DataParser.FRAME, 20, false, false, 0, this._parseSlotDisplayFrame); + null !== displayTimeline && this._animation.addSlotTimeline(slot, displayTimeline); + var colorTimeline = null; + colorTimeline = dragonBones.DataParser.COLOR_FRAME in rawData ? this._parseTimeline(rawData, null, dragonBones.DataParser.COLOR_FRAME, 21, true, false, 1, this._parseSlotColorFrame) : this._parseTimeline(rawData, null, dragonBones.DataParser.FRAME, 21, true, false, 1, this._parseSlotColorFrame); + null !== colorTimeline && this._animation.addSlotTimeline(slot, colorTimeline); + this._slot = null; + }; + ObjectDataParser.prototype._parseFrame = function (rawData, frameStart, frameCount) { + rawData; + frameCount; + var frameOffset = this._frameArray.length; + this._frameArray.length += 1; + this._frameArray[frameOffset + 0] = frameStart; + return frameOffset; + }; + ObjectDataParser.prototype._parseTweenFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseFrame(rawData, frameStart, frameCount); + if (frameCount > 0) if (dragonBones.DataParser.CURVE in rawData) { + var sampleCount = frameCount + 1; + this._helpArray.length = sampleCount; + this._samplingEasingCurve(rawData[dragonBones.DataParser.CURVE], this._helpArray); + this._frameArray.length += 2 + this._helpArray.length; + this._frameArray[frameOffset + 1] = 2; + this._frameArray[frameOffset + 2] = sampleCount; + for (var i = 0; i < sampleCount; ++i) this._frameArray[frameOffset + 3 + i] = Math.round(1e4 * this._helpArray[i]); + } else { + var noTween = -2; + var tweenEasing = noTween; + dragonBones.DataParser.TWEEN_EASING in rawData && (tweenEasing = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TWEEN_EASING, noTween)); + if (tweenEasing === noTween) { + this._frameArray.length += 1; + this._frameArray[frameOffset + 1] = 0; + } else if (0 === tweenEasing) { + this._frameArray.length += 1; + this._frameArray[frameOffset + 1] = 1; + } else if (tweenEasing < 0) { + this._frameArray.length += 2; + this._frameArray[frameOffset + 1] = 3; + this._frameArray[frameOffset + 2] = Math.round(100 * -tweenEasing); + } else if (tweenEasing <= 1) { + this._frameArray.length += 2; + this._frameArray[frameOffset + 1] = 4; + this._frameArray[frameOffset + 2] = Math.round(100 * tweenEasing); + } else { + this._frameArray.length += 2; + this._frameArray[frameOffset + 1] = 5; + this._frameArray[frameOffset + 2] = Math.round(100 * tweenEasing - 100); + } + } else { + this._frameArray.length += 1; + this._frameArray[frameOffset + 1] = 0; + } + return frameOffset; + }; + ObjectDataParser.prototype._parseActionFrame = function (frame, frameStart, frameCount) { + frameCount; + var frameOffset = this._frameArray.length; + var actionCount = frame.actions.length; + this._frameArray.length += 2 + actionCount; + this._frameArray[frameOffset + 0] = frameStart; + this._frameArray[frameOffset + 0 + 1] = actionCount; + for (var i = 0; i < actionCount; ++i) this._frameArray[frameOffset + 0 + 2 + i] = frame.actions[i]; + return frameOffset; + }; + ObjectDataParser.prototype._parseZOrderFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseFrame(rawData, frameStart, frameCount); + if (dragonBones.DataParser.Z_ORDER in rawData) { + var rawZOrder = rawData[dragonBones.DataParser.Z_ORDER]; + if (rawZOrder.length > 0) { + var slotCount = this._armature.sortedSlots.length; + var unchanged = new Array(slotCount - rawZOrder.length / 2); + var zOrders = new Array(slotCount); + for (var i_1 = 0; i_1 < unchanged.length; ++i_1) unchanged[i_1] = 0; + for (var i_2 = 0; i_2 < slotCount; ++i_2) zOrders[i_2] = -1; + var originalIndex = 0; + var unchangedIndex = 0; + for (var i_3 = 0, l = rawZOrder.length; i_3 < l; i_3 += 2) { + var slotIndex = rawZOrder[i_3]; + var zOrderOffset = rawZOrder[i_3 + 1]; + while (originalIndex !== slotIndex) unchanged[unchangedIndex++] = originalIndex++; + var index = originalIndex + zOrderOffset; + zOrders[index] = originalIndex++; + } + while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++; + this._frameArray.length += 1 + slotCount; + this._frameArray[frameOffset + 1] = slotCount; + var i = slotCount; + while (i--) -1 === zOrders[i] ? this._frameArray[frameOffset + 2 + i] = unchanged[--unchangedIndex] || 0 : this._frameArray[frameOffset + 2 + i] = zOrders[i] || 0; + return frameOffset; + } + } + this._frameArray.length += 1; + this._frameArray[frameOffset + 1] = 0; + return frameOffset; + }; + ObjectDataParser.prototype._parseBoneAllFrame = function (rawData, frameStart, frameCount) { + this._helpTransform.identity(); + dragonBones.DataParser.TRANSFORM in rawData && this._parseTransform(rawData[dragonBones.DataParser.TRANSFORM], this._helpTransform, 1); + var rotation = this._helpTransform.rotation; + if (0 !== frameStart) if (0 === this._prevClockwise) rotation = this._prevRotation + dragonBones.Transform.normalizeRadian(rotation - this._prevRotation); else { + (this._prevClockwise > 0 ? rotation >= this._prevRotation : rotation <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1); + rotation = this._prevRotation + rotation - this._prevRotation + dragonBones.Transform.PI_D * this._prevClockwise; + } + this._prevClockwise = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.TWEEN_ROTATE, 0); + this._prevRotation = rotation; + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var frameFloatOffset = this._frameFloatArray.length; + this._frameFloatArray.length += 6; + this._frameFloatArray[frameFloatOffset++] = this._helpTransform.x; + this._frameFloatArray[frameFloatOffset++] = this._helpTransform.y; + this._frameFloatArray[frameFloatOffset++] = rotation; + this._frameFloatArray[frameFloatOffset++] = this._helpTransform.skew; + this._frameFloatArray[frameFloatOffset++] = this._helpTransform.scaleX; + this._frameFloatArray[frameFloatOffset++] = this._helpTransform.scaleY; + this._parseActionDataInFrame(rawData, frameStart, this._bone, this._slot); + return frameOffset; + }; + ObjectDataParser.prototype._parseBoneTranslateFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var frameFloatOffset = this._frameFloatArray.length; + this._frameFloatArray.length += 2; + this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.X, 0); + this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.Y, 0); + return frameOffset; + }; + ObjectDataParser.prototype._parseBoneRotateFrame = function (rawData, frameStart, frameCount) { + var rotation = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE, 0) * dragonBones.Transform.DEG_RAD; + if (0 !== frameStart) if (0 === this._prevClockwise) rotation = this._prevRotation + dragonBones.Transform.normalizeRadian(rotation - this._prevRotation); else { + (this._prevClockwise > 0 ? rotation >= this._prevRotation : rotation <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1); + rotation = this._prevRotation + rotation - this._prevRotation + dragonBones.Transform.PI_D * this._prevClockwise; + } + this._prevClockwise = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.CLOCK_WISE, 0); + this._prevRotation = rotation; + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var frameFloatOffset = this._frameFloatArray.length; + this._frameFloatArray.length += 2; + this._frameFloatArray[frameFloatOffset++] = rotation; + this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW, 0) * dragonBones.Transform.DEG_RAD; + return frameOffset; + }; + ObjectDataParser.prototype._parseBoneScaleFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var frameFloatOffset = this._frameFloatArray.length; + this._frameFloatArray.length += 2; + this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.X, 1); + this._frameFloatArray[frameFloatOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.Y, 1); + return frameOffset; + }; + ObjectDataParser.prototype._parseSurfaceFrame = function (rawData, frameStart, frameCount) { + var frameFloatOffset = this._frameFloatArray.length; + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var rawVertices = rawData[dragonBones.DataParser.VERTICES]; + var offset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.OFFSET, 0); + var vertexCount = this._surface.vertices.length / 2; + var x = 0; + var y = 0; + this._frameFloatArray.length += 2 * vertexCount; + for (var i = 0; i < 2 * vertexCount; i += 2) { + x = i < offset || i - offset >= rawVertices.length ? 0 : rawVertices[i - offset]; + y = i + 1 < offset || i + 1 - offset >= rawVertices.length ? 0 : rawVertices[i + 1 - offset]; + this._frameFloatArray[frameFloatOffset + i] = x; + this._frameFloatArray[frameFloatOffset + i + 1] = y; + } + if (0 === frameStart) { + var frameIntOffset = this._frameIntArray.length; + this._frameIntArray.length += 5; + this._frameIntArray[frameIntOffset + 0] = 0; + this._frameIntArray[frameIntOffset + 1] = this._frameFloatArray.length - frameFloatOffset; + this._frameIntArray[frameIntOffset + 2] = this._frameFloatArray.length - frameFloatOffset; + this._frameIntArray[frameIntOffset + 3] = 0; + this._frameIntArray[frameIntOffset + 4] = frameFloatOffset - this._animation.frameFloatOffset; + this._timelineArray[this._timeline.offset + 3] = frameIntOffset - this._animation.frameIntOffset; + } + return frameOffset; + }; + ObjectDataParser.prototype._parseSlotDisplayFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseFrame(rawData, frameStart, frameCount); + this._frameArray.length += 1; + dragonBones.DataParser.VALUE in rawData ? this._frameArray[frameOffset + 1] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.VALUE, 0) : this._frameArray[frameOffset + 1] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DISPLAY_INDEX, 0); + this._parseActionDataInFrame(rawData, frameStart, this._slot.parent, this._slot); + return frameOffset; + }; + ObjectDataParser.prototype._parseSlotColorFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var colorOffset = -1; + if (dragonBones.DataParser.VALUE in rawData || dragonBones.DataParser.COLOR in rawData) { + var rawColor = dragonBones.DataParser.VALUE in rawData ? rawData[dragonBones.DataParser.VALUE] : rawData[dragonBones.DataParser.COLOR]; + for (var k in rawColor) { + k; + this._parseColorTransform(rawColor, this._helpColorTransform); + colorOffset = this._intArray.length; + this._intArray.length += 8; + this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.alphaMultiplier); + this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.redMultiplier); + this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.greenMultiplier); + this._intArray[colorOffset++] = Math.round(100 * this._helpColorTransform.blueMultiplier); + this._intArray[colorOffset++] = Math.round(this._helpColorTransform.alphaOffset); + this._intArray[colorOffset++] = Math.round(this._helpColorTransform.redOffset); + this._intArray[colorOffset++] = Math.round(this._helpColorTransform.greenOffset); + this._intArray[colorOffset++] = Math.round(this._helpColorTransform.blueOffset); + colorOffset -= 8; + break; + } + } + if (colorOffset < 0) { + if (this._defaultColorOffset < 0) { + this._defaultColorOffset = colorOffset = this._intArray.length; + this._intArray.length += 8; + this._intArray[colorOffset++] = 100; + this._intArray[colorOffset++] = 100; + this._intArray[colorOffset++] = 100; + this._intArray[colorOffset++] = 100; + this._intArray[colorOffset++] = 0; + this._intArray[colorOffset++] = 0; + this._intArray[colorOffset++] = 0; + this._intArray[colorOffset++] = 0; + } + colorOffset = this._defaultColorOffset; + } + var frameIntOffset = this._frameIntArray.length; + this._frameIntArray.length += 1; + this._frameIntArray[frameIntOffset] = colorOffset; + return frameOffset; + }; + ObjectDataParser.prototype._parseSlotFFDFrame = function (rawData, frameStart, frameCount) { + var frameFloatOffset = this._frameFloatArray.length; + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var rawVertices = dragonBones.DataParser.VERTICES in rawData ? rawData[dragonBones.DataParser.VERTICES] : null; + var offset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.OFFSET, 0); + var vertexCount = this._intArray[this._mesh.vertices.offset + 0]; + var meshName = this._mesh.parent.name + "_" + this._slot.name + "_" + this._mesh.name; + var weight = this._mesh.vertices.weight; + var x = 0; + var y = 0; + var iB = 0; + var iV = 0; + if (null !== weight) { + var rawSlotPose = this._weightSlotPose[meshName]; + this._helpMatrixA.copyFromArray(rawSlotPose, 0); + this._frameFloatArray.length += 2 * weight.count; + iB = weight.offset + 2 + weight.bones.length; + } else this._frameFloatArray.length += 2 * vertexCount; + for (var i = 0; i < 2 * vertexCount; i += 2) { + if (null === rawVertices) { + x = 0; + y = 0; + } else { + x = i < offset || i - offset >= rawVertices.length ? 0 : rawVertices[i - offset]; + y = i + 1 < offset || i + 1 - offset >= rawVertices.length ? 0 : rawVertices[i + 1 - offset]; + } + if (null !== weight) { + var rawBonePoses = this._weightBonePoses[meshName]; + var vertexBoneCount = this._intArray[iB++]; + this._helpMatrixA.transformPoint(x, y, this._helpPoint, true); + x = this._helpPoint.x; + y = this._helpPoint.y; + for (var j = 0; j < vertexBoneCount; ++j) { + var boneIndex = this._intArray[iB++]; + this._helpMatrixB.copyFromArray(rawBonePoses, 7 * boneIndex + 1); + this._helpMatrixB.invert(); + this._helpMatrixB.transformPoint(x, y, this._helpPoint, true); + this._frameFloatArray[frameFloatOffset + iV++] = this._helpPoint.x; + this._frameFloatArray[frameFloatOffset + iV++] = this._helpPoint.y; + } + } else { + this._frameFloatArray[frameFloatOffset + i] = x; + this._frameFloatArray[frameFloatOffset + i + 1] = y; + } + } + if (0 === frameStart) { + var frameIntOffset = this._frameIntArray.length; + this._frameIntArray.length += 5; + this._frameIntArray[frameIntOffset + 0] = this._mesh.vertices.offset; + this._frameIntArray[frameIntOffset + 1] = this._frameFloatArray.length - frameFloatOffset; + this._frameIntArray[frameIntOffset + 2] = this._frameFloatArray.length - frameFloatOffset; + this._frameIntArray[frameIntOffset + 3] = 0; + this._frameIntArray[frameIntOffset + 4] = frameFloatOffset - this._animation.frameFloatOffset; + this._timelineArray[this._timeline.offset + 3] = frameIntOffset - this._animation.frameIntOffset; + } + return frameOffset; + }; + ObjectDataParser.prototype._parseIKConstraintFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var frameIntOffset = this._frameIntArray.length; + this._frameIntArray.length += 2; + this._frameIntArray[frameIntOffset++] = ObjectDataParser._getBoolean(rawData, dragonBones.DataParser.BEND_POSITIVE, true) ? 1 : 0; + this._frameIntArray[frameIntOffset++] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WEIGHT, 1)); + return frameOffset; + }; + ObjectDataParser.prototype._parseAnimationFrame = function (rawData, frameStart, frameCount) { + var frameOffset = this._parseTweenFrame(rawData, frameStart, frameCount); + var frameIntOffset = this._frameIntArray.length; + this._frameIntArray.length += 2; + this._frameIntArray[frameIntOffset++] = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.VALUE, 0); + this._frameIntArray[frameIntOffset++] = Math.round(100 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WEIGHT, 1)); + return frameOffset; + }; + ObjectDataParser.prototype._parseActionData = function (rawData, type, bone, slot) { + var actions = new Array(); + if ("string" === typeof rawData) { + var action = dragonBones.BaseObject.borrowObject(dragonBones.ActionData); + action.type = type; + action.name = rawData; + action.bone = bone; + action.slot = slot; + actions.push(action); + } else if (rawData instanceof Array) for (var _i = 0, rawData_2 = rawData; _i < rawData_2.length; _i++) { + var rawAction = rawData_2[_i]; + var action = dragonBones.BaseObject.borrowObject(dragonBones.ActionData); + if (dragonBones.DataParser.GOTO_AND_PLAY in rawAction) { + action.type = 0; + action.name = ObjectDataParser._getString(rawAction, dragonBones.DataParser.GOTO_AND_PLAY, ""); + } else { + dragonBones.DataParser.TYPE in rawAction && "string" === typeof rawAction[dragonBones.DataParser.TYPE] ? action.type = dragonBones.DataParser._getActionType(rawAction[dragonBones.DataParser.TYPE]) : action.type = ObjectDataParser._getNumber(rawAction, dragonBones.DataParser.TYPE, type); + action.name = ObjectDataParser._getString(rawAction, dragonBones.DataParser.NAME, ""); + } + if (dragonBones.DataParser.BONE in rawAction) { + var boneName = ObjectDataParser._getString(rawAction, dragonBones.DataParser.BONE, ""); + action.bone = this._armature.getBone(boneName); + } else action.bone = bone; + if (dragonBones.DataParser.SLOT in rawAction) { + var slotName = ObjectDataParser._getString(rawAction, dragonBones.DataParser.SLOT, ""); + action.slot = this._armature.getSlot(slotName); + } else action.slot = slot; + var userData = null; + if (dragonBones.DataParser.INTS in rawAction) { + null === userData && (userData = dragonBones.BaseObject.borrowObject(dragonBones.UserData)); + var rawInts = rawAction[dragonBones.DataParser.INTS]; + for (var _a = 0, rawInts_1 = rawInts; _a < rawInts_1.length; _a++) { + var rawValue = rawInts_1[_a]; + userData.addInt(rawValue); + } + } + if (dragonBones.DataParser.FLOATS in rawAction) { + null === userData && (userData = dragonBones.BaseObject.borrowObject(dragonBones.UserData)); + var rawFloats = rawAction[dragonBones.DataParser.FLOATS]; + for (var _b = 0, rawFloats_1 = rawFloats; _b < rawFloats_1.length; _b++) { + var rawValue = rawFloats_1[_b]; + userData.addFloat(rawValue); + } + } + if (dragonBones.DataParser.STRINGS in rawAction) { + null === userData && (userData = dragonBones.BaseObject.borrowObject(dragonBones.UserData)); + var rawStrings = rawAction[dragonBones.DataParser.STRINGS]; + for (var _c = 0, rawStrings_1 = rawStrings; _c < rawStrings_1.length; _c++) { + var rawValue = rawStrings_1[_c]; + userData.addString(rawValue); + } + } + action.data = userData; + actions.push(action); + } + return actions; + }; + ObjectDataParser.prototype._parseTransform = function (rawData, transform, scale) { + transform.x = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.X, 0) * scale; + transform.y = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.Y, 0) * scale; + if (dragonBones.DataParser.ROTATE in rawData || dragonBones.DataParser.SKEW in rawData) { + transform.rotation = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ROTATE, 0) * dragonBones.Transform.DEG_RAD); + transform.skew = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW, 0) * dragonBones.Transform.DEG_RAD); + } else if (dragonBones.DataParser.SKEW_X in rawData || dragonBones.DataParser.SKEW_Y in rawData) { + transform.rotation = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW_Y, 0) * dragonBones.Transform.DEG_RAD); + transform.skew = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SKEW_X, 0) * dragonBones.Transform.DEG_RAD) - transform.rotation; + } + transform.scaleX = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE_X, 1); + transform.scaleY = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE_Y, 1); + }; + ObjectDataParser.prototype._parseColorTransform = function (rawData, color) { + color.alphaMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ALPHA_MULTIPLIER, 100); + color.redMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.RED_MULTIPLIER, 100); + color.greenMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.GREEN_MULTIPLIER, 100); + color.blueMultiplier = .01 * ObjectDataParser._getNumber(rawData, dragonBones.DataParser.BLUE_MULTIPLIER, 100); + color.alphaOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.ALPHA_OFFSET, 0); + color.redOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.RED_OFFSET, 0); + color.greenOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.GREEN_OFFSET, 0); + color.blueOffset = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.BLUE_OFFSET, 0); + }; + ObjectDataParser.prototype._parseArray = function (rawData) { + rawData; + this._intArray.length = 0; + this._floatArray.length = 0; + this._frameIntArray.length = 0; + this._frameFloatArray.length = 0; + this._frameArray.length = 0; + this._timelineArray.length = 0; + }; + ObjectDataParser.prototype._modifyArray = function () { + this._intArray.length % Int16Array.BYTES_PER_ELEMENT !== 0 && this._intArray.push(0); + this._frameIntArray.length % Int16Array.BYTES_PER_ELEMENT !== 0 && this._frameIntArray.push(0); + this._frameArray.length % Int16Array.BYTES_PER_ELEMENT !== 0 && this._frameArray.push(0); + this._timelineArray.length % Uint16Array.BYTES_PER_ELEMENT !== 0 && this._timelineArray.push(0); + var l1 = this._intArray.length * Int16Array.BYTES_PER_ELEMENT; + var l2 = this._floatArray.length * Float32Array.BYTES_PER_ELEMENT; + var l3 = this._frameIntArray.length * Int16Array.BYTES_PER_ELEMENT; + var l4 = this._frameFloatArray.length * Float32Array.BYTES_PER_ELEMENT; + var l5 = this._frameArray.length * Int16Array.BYTES_PER_ELEMENT; + var l6 = this._timelineArray.length * Uint16Array.BYTES_PER_ELEMENT; + var lTotal = l1 + l2 + l3 + l4 + l5 + l6; + if (dragonBones.DragonBones.webAssembly) { + var shareBuffer = dragonBones.webAssemblyModule.HEAP16.buffer; + var bufferPointer = dragonBones.webAssemblyModule._malloc(lTotal); + var intArray = new Int16Array(shareBuffer, bufferPointer, this._intArray.length); + var floatArray = new Float32Array(shareBuffer, bufferPointer + l1, this._floatArray.length); + var frameIntArray = new Int16Array(shareBuffer, bufferPointer + l1 + l2, this._frameIntArray.length); + var frameFloatArray = new Float32Array(shareBuffer, bufferPointer + l1 + l2 + l3, this._frameFloatArray.length); + var frameArray = new Int16Array(shareBuffer, bufferPointer + l1 + l2 + l3 + l4, this._frameArray.length); + var timelineArray = new Uint16Array(shareBuffer, bufferPointer + l1 + l2 + l3 + l4 + l5, this._timelineArray.length); + for (var i = 0, l = this._intArray.length; i < l; ++i) intArray[i] = this._intArray[i]; + for (var i = 0, l = this._floatArray.length; i < l; ++i) floatArray[i] = this._floatArray[i]; + for (var i = 0, l = this._frameIntArray.length; i < l; ++i) frameIntArray[i] = this._frameIntArray[i]; + for (var i = 0, l = this._frameFloatArray.length; i < l; ++i) frameFloatArray[i] = this._frameFloatArray[i]; + for (var i = 0, l = this._frameArray.length; i < l; ++i) frameArray[i] = this._frameArray[i]; + for (var i = 0, l = this._timelineArray.length; i < l; ++i) timelineArray[i] = this._timelineArray[i]; + dragonBones.webAssemblyModule.setDataBinary(this._data, bufferPointer, l1, l2, l3, l4, l5, l6); + } else { + var binary = new ArrayBuffer(lTotal); + var intArray = new Int16Array(binary, 0, this._intArray.length); + var floatArray = new Float32Array(binary, l1, this._floatArray.length); + var frameIntArray = new Int16Array(binary, l1 + l2, this._frameIntArray.length); + var frameFloatArray = new Float32Array(binary, l1 + l2 + l3, this._frameFloatArray.length); + var frameArray = new Int16Array(binary, l1 + l2 + l3 + l4, this._frameArray.length); + var timelineArray = new Uint16Array(binary, l1 + l2 + l3 + l4 + l5, this._timelineArray.length); + for (var i = 0, l = this._intArray.length; i < l; ++i) intArray[i] = this._intArray[i]; + for (var i = 0, l = this._floatArray.length; i < l; ++i) floatArray[i] = this._floatArray[i]; + for (var i = 0, l = this._frameIntArray.length; i < l; ++i) frameIntArray[i] = this._frameIntArray[i]; + for (var i = 0, l = this._frameFloatArray.length; i < l; ++i) frameFloatArray[i] = this._frameFloatArray[i]; + for (var i = 0, l = this._frameArray.length; i < l; ++i) frameArray[i] = this._frameArray[i]; + for (var i = 0, l = this._timelineArray.length; i < l; ++i) timelineArray[i] = this._timelineArray[i]; + this._data.binary = binary; + this._data.intArray = intArray; + this._data.floatArray = floatArray; + this._data.frameIntArray = frameIntArray; + this._data.frameFloatArray = frameFloatArray; + this._data.frameArray = frameArray; + this._data.timelineArray = timelineArray; + } + this._defaultColorOffset = -1; + }; + ObjectDataParser.prototype.parseDragonBonesData = function (rawData, scale) { + void 0 === scale && (scale = 1); + console.assert(null !== rawData && void 0 !== rawData, "Data error."); + var version = ObjectDataParser._getString(rawData, dragonBones.DataParser.VERSION, ""); + var compatibleVersion = ObjectDataParser._getString(rawData, dragonBones.DataParser.COMPATIBLE_VERSION, ""); + if (dragonBones.DataParser.DATA_VERSIONS.indexOf(version) >= 0 || dragonBones.DataParser.DATA_VERSIONS.indexOf(compatibleVersion) >= 0) { + var data = dragonBones.BaseObject.borrowObject(dragonBones.DragonBonesData); + data.version = version; + data.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + data.frameRate = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FRAME_RATE, 24); + 0 === data.frameRate && (data.frameRate = 24); + if (dragonBones.DataParser.ARMATURE in rawData) { + this._data = data; + this._parseArray(rawData); + var rawArmatures = rawData[dragonBones.DataParser.ARMATURE]; + for (var _i = 0, rawArmatures_1 = rawArmatures; _i < rawArmatures_1.length; _i++) { + var rawArmature = rawArmatures_1[_i]; + data.addArmature(this._parseArmature(rawArmature, scale)); + } + this._data.binary || this._modifyArray(); + dragonBones.DataParser.STAGE in rawData ? data.stage = data.getArmature(ObjectDataParser._getString(rawData, dragonBones.DataParser.STAGE, "")) : data.armatureNames.length > 0 && (data.stage = data.getArmature(data.armatureNames[0])); + this._data = null; + } + dragonBones.DataParser.TEXTURE_ATLAS in rawData && (this._rawTextureAtlases = rawData[dragonBones.DataParser.TEXTURE_ATLAS]); + return data; + } + console.assert(false, "Nonsupport data version: " + version + "\nPlease convert DragonBones data to support version.\nRead more: https://github.com/DragonBones/Tools/"); + return null; + }; + ObjectDataParser.prototype.parseTextureAtlasData = function (rawData, textureAtlasData, scale) { + void 0 === scale && (scale = 1); + console.assert(void 0 !== rawData); + if (null === rawData) { + if (null === this._rawTextureAtlases || 0 === this._rawTextureAtlases.length) return false; + var rawTextureAtlas = this._rawTextureAtlases[this._rawTextureAtlasIndex++]; + this.parseTextureAtlasData(rawTextureAtlas, textureAtlasData, scale); + if (this._rawTextureAtlasIndex >= this._rawTextureAtlases.length) { + this._rawTextureAtlasIndex = 0; + this._rawTextureAtlases = null; + } + return true; + } + textureAtlasData.width = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.WIDTH, 0); + textureAtlasData.height = ObjectDataParser._getNumber(rawData, dragonBones.DataParser.HEIGHT, 0); + textureAtlasData.scale = 1 === scale ? 1 / ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1) : scale; + textureAtlasData.name = ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, ""); + textureAtlasData.imagePath = ObjectDataParser._getString(rawData, dragonBones.DataParser.IMAGE_PATH, ""); + if (dragonBones.DataParser.SUB_TEXTURE in rawData) { + var rawTextures = rawData[dragonBones.DataParser.SUB_TEXTURE]; + for (var i = 0, l = rawTextures.length; i < l; ++i) { + var rawTexture = rawTextures[i]; + var textureData = textureAtlasData.createTexture(); + textureData.rotated = ObjectDataParser._getBoolean(rawTexture, dragonBones.DataParser.ROTATED, false); + textureData.name = ObjectDataParser._getString(rawTexture, dragonBones.DataParser.NAME, ""); + textureData.region.x = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.X, 0); + textureData.region.y = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.Y, 0); + textureData.region.width = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.WIDTH, 0); + textureData.region.height = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.HEIGHT, 0); + var frameWidth = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_WIDTH, -1); + var frameHeight = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_HEIGHT, -1); + if (frameWidth > 0 && frameHeight > 0) { + textureData.frame = dragonBones.TextureData.createRectangle(); + textureData.frame.x = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_X, 0); + textureData.frame.y = ObjectDataParser._getNumber(rawTexture, dragonBones.DataParser.FRAME_Y, 0); + textureData.frame.width = frameWidth; + textureData.frame.height = frameHeight; + } + textureAtlasData.addTexture(textureData); + } + } + return true; + }; + ObjectDataParser.getInstance = function () { + null === ObjectDataParser._objectDataParserInstance && (ObjectDataParser._objectDataParserInstance = new ObjectDataParser()); + return ObjectDataParser._objectDataParserInstance; + }; + ObjectDataParser._objectDataParserInstance = null; + return ObjectDataParser; + })(dragonBones.DataParser); + dragonBones.ObjectDataParser = ObjectDataParser; + var ActionFrame = (function () { + function ActionFrame() { + this.frameStart = 0; + this.actions = []; + } + return ActionFrame; + })(); + dragonBones.ActionFrame = ActionFrame; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var BinaryDataParser = (function (_super) { + __extends(BinaryDataParser, _super); + function BinaryDataParser() { + return null !== _super && _super.apply(this, arguments) || this; + } + BinaryDataParser.prototype._inRange = function (a, min, max) { + return min <= a && a <= max; + }; + BinaryDataParser.prototype._decodeUTF8 = function (data) { + var EOF_byte = -1; + var EOF_code_point = -1; + var FATAL_POINT = 65533; + var pos = 0; + var result = ""; + var code_point; + var utf8_code_point = 0; + var utf8_bytes_needed = 0; + var utf8_bytes_seen = 0; + var utf8_lower_boundary = 0; + while (data.length > pos) { + var _byte = data[pos++]; + if (_byte === EOF_byte) code_point = 0 !== utf8_bytes_needed ? FATAL_POINT : EOF_code_point; else if (0 === utf8_bytes_needed) if (this._inRange(_byte, 0, 127)) code_point = _byte; else { + if (this._inRange(_byte, 194, 223)) { + utf8_bytes_needed = 1; + utf8_lower_boundary = 128; + utf8_code_point = _byte - 192; + } else if (this._inRange(_byte, 224, 239)) { + utf8_bytes_needed = 2; + utf8_lower_boundary = 2048; + utf8_code_point = _byte - 224; + } else if (this._inRange(_byte, 240, 244)) { + utf8_bytes_needed = 3; + utf8_lower_boundary = 65536; + utf8_code_point = _byte - 240; + } + utf8_code_point *= Math.pow(64, utf8_bytes_needed); + code_point = null; + } else if (this._inRange(_byte, 128, 191)) { + utf8_bytes_seen += 1; + utf8_code_point += (_byte - 128) * Math.pow(64, utf8_bytes_needed - utf8_bytes_seen); + if (utf8_bytes_seen !== utf8_bytes_needed) code_point = null; else { + var cp = utf8_code_point; + var lower_boundary = utf8_lower_boundary; + utf8_code_point = 0; + utf8_bytes_needed = 0; + utf8_bytes_seen = 0; + utf8_lower_boundary = 0; + code_point = this._inRange(cp, lower_boundary, 1114111) && !this._inRange(cp, 55296, 57343) ? cp : _byte; + } + } else { + utf8_code_point = 0; + utf8_bytes_needed = 0; + utf8_bytes_seen = 0; + utf8_lower_boundary = 0; + pos--; + code_point = _byte; + } + if (null !== code_point && code_point !== EOF_code_point) if (code_point <= 65535) code_point > 0 && (result += String.fromCharCode(code_point)); else { + code_point -= 65536; + result += String.fromCharCode(55296 + (code_point >> 10 & 1023)); + result += String.fromCharCode(56320 + (1023 & code_point)); + } + } + return result; + }; + BinaryDataParser.prototype._getUTF16Key = function (value) { + for (var i = 0, l = value.length; i < l; ++i) if (value.charCodeAt(i) > 255) return encodeURI(value); + return value; + }; + BinaryDataParser.prototype._parseBinaryTimeline = function (type, offset, timelineData) { + void 0 === timelineData && (timelineData = null); + var timeline = null !== timelineData ? timelineData : dragonBones.BaseObject.borrowObject(dragonBones.TimelineData); + timeline.type = type; + timeline.offset = offset; + this._timeline = timeline; + var keyFrameCount = this._timelineArrayBuffer[timeline.offset + 2]; + if (1 === keyFrameCount) timeline.frameIndicesOffset = -1; else { + var frameIndicesOffset = 0; + var totalFrameCount = this._animation.frameCount + 1; + var frameIndices = this._data.frameIndices; + if (dragonBones.DragonBones.webAssembly) { + frameIndicesOffset = frameIndices.size(); + frameIndices.resize(frameIndicesOffset + totalFrameCount, 0); + } else { + frameIndicesOffset = frameIndices.length; + frameIndices.length += totalFrameCount; + } + timeline.frameIndicesOffset = frameIndicesOffset; + for (var i = 0, iK = 0, frameStart = 0, frameCount = 0; i < totalFrameCount; ++i) { + if (frameStart + frameCount <= i && iK < keyFrameCount) { + frameStart = this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[timeline.offset + 5 + iK]]; + frameCount = iK === keyFrameCount - 1 ? this._animation.frameCount - frameStart : this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[timeline.offset + 5 + iK + 1]] - frameStart; + iK++; + } + dragonBones.DragonBones.webAssembly ? frameIndices.set(frameIndicesOffset + i, iK - 1) : frameIndices[frameIndicesOffset + i] = iK - 1; + } + } + this._timeline = null; + return timeline; + }; + BinaryDataParser.prototype._parseVertices = function (rawData, vertices) { + vertices.offset = rawData[dragonBones.DataParser.OFFSET]; + var weightOffset = this._intArrayBuffer[vertices.offset + 3]; + if (weightOffset >= 0) { + var weight = dragonBones.BaseObject.borrowObject(dragonBones.WeightData); + var vertexCount = this._intArrayBuffer[vertices.offset + 0]; + var boneCount = this._intArrayBuffer[weightOffset + 0]; + weight.offset = weightOffset; + for (var i = 0; i < boneCount; ++i) { + var boneIndex = this._intArrayBuffer[weightOffset + 2 + i]; + weight.addBone(this._rawBones[boneIndex]); + } + var boneIndicesOffset = weightOffset + 2 + boneCount; + var weightCount = 0; + for (var i = 0, l = vertexCount; i < l; ++i) { + var vertexBoneCount = this._intArrayBuffer[boneIndicesOffset++]; + weightCount += vertexBoneCount; + boneIndicesOffset += vertexBoneCount; + } + weight.count = weightCount; + vertices.weight = weight; + } + }; + BinaryDataParser.prototype._parseMesh = function (rawData, mesh) { + this._parseVertices(rawData, mesh.vertices); + }; + BinaryDataParser.prototype._parsePath = function (rawData, path) { + this._parseVertices(rawData, path.vertices); + }; + BinaryDataParser.prototype._parseAnimation = function (rawData) { + var animation = dragonBones.BaseObject.borrowObject(dragonBones.AnimationData); + animation.frameCount = Math.max(dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.DURATION, 1), 1); + animation.playTimes = dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.PLAY_TIMES, 1); + animation.duration = animation.frameCount / this._armature.frameRate; + animation.fadeInTime = dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.FADE_IN_TIME, 0); + animation.scale = dragonBones.ObjectDataParser._getNumber(rawData, dragonBones.DataParser.SCALE, 1); + animation.name = dragonBones.ObjectDataParser._getString(rawData, dragonBones.DataParser.NAME, dragonBones.DataParser.DEFAULT_NAME); + 0 === animation.name.length && (animation.name = dragonBones.DataParser.DEFAULT_NAME); + var offsets = rawData[dragonBones.DataParser.OFFSET]; + animation.frameIntOffset = offsets[0]; + animation.frameFloatOffset = offsets[1]; + animation.frameOffset = offsets[2]; + this._animation = animation; + dragonBones.DataParser.ACTION in rawData && (animation.actionTimeline = this._parseBinaryTimeline(0, rawData[dragonBones.DataParser.ACTION])); + dragonBones.DataParser.Z_ORDER in rawData && (animation.zOrderTimeline = this._parseBinaryTimeline(1, rawData[dragonBones.DataParser.Z_ORDER])); + if (dragonBones.DataParser.BONE in rawData) { + var rawTimeliness = rawData[dragonBones.DataParser.BONE]; + for (var k in rawTimeliness) { + var rawTimelines = rawTimeliness[k]; + dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k)); + var bone = this._armature.getBone(k); + if (null === bone) continue; + for (var i = 0, l = rawTimelines.length; i < l; i += 2) { + var timelineType = rawTimelines[i]; + var timelineOffset = rawTimelines[i + 1]; + var timeline = this._parseBinaryTimeline(timelineType, timelineOffset); + this._animation.addBoneTimeline(bone, timeline); + } + } + } + if (dragonBones.DataParser.SURFACE in rawData) { + var rawTimeliness = rawData[dragonBones.DataParser.SURFACE]; + for (var k in rawTimeliness) { + var rawTimelines = rawTimeliness[k]; + dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k)); + var surface = this._armature.getBone(k); + if (null === surface) continue; + for (var i = 0, l = rawTimelines.length; i < l; i += 2) { + var timelineType = rawTimelines[i]; + var timelineOffset = rawTimelines[i + 1]; + var timeline = this._parseBinaryTimeline(timelineType, timelineOffset); + this._animation.addSurfaceTimeline(surface, timeline); + } + } + } + if (dragonBones.DataParser.SLOT in rawData) { + var rawTimeliness = rawData[dragonBones.DataParser.SLOT]; + for (var k in rawTimeliness) { + var rawTimelines = rawTimeliness[k]; + dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k)); + var slot = this._armature.getSlot(k); + if (null === slot) continue; + for (var i = 0, l = rawTimelines.length; i < l; i += 2) { + var timelineType = rawTimelines[i]; + var timelineOffset = rawTimelines[i + 1]; + var timeline = this._parseBinaryTimeline(timelineType, timelineOffset); + this._animation.addSlotTimeline(slot, timeline); + } + } + } + if (dragonBones.DataParser.CONSTRAINT in rawData) { + var rawTimeliness = rawData[dragonBones.DataParser.CONSTRAINT]; + for (var k in rawTimeliness) { + var rawTimelines = rawTimeliness[k]; + dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k)); + var constraint = this._armature.getConstraint(k); + if (null === constraint) continue; + for (var i = 0, l = rawTimelines.length; i < l; i += 2) { + var timelineType = rawTimelines[i]; + var timelineOffset = rawTimelines[i + 1]; + var timeline = this._parseBinaryTimeline(timelineType, timelineOffset); + this._animation.addConstraintTimeline(constraint, timeline); + } + } + } + if (dragonBones.DataParser.ANIMATION in rawData) { + var rawTimeliness = rawData[dragonBones.DataParser.ANIMATION]; + for (var k in rawTimeliness) { + var rawTimelines = rawTimeliness[k]; + dragonBones.DragonBones.webAssembly && (k = this._getUTF16Key(k)); + for (var i = 0, l = rawTimelines.length; i < l; i += 2) { + var timelineType = rawTimelines[i]; + var timelineOffset = rawTimelines[i + 1]; + var timeline = this._parseBinaryTimeline(timelineType, timelineOffset); + this._animation.addAnimationTimeline(k, timeline); + } + } + } + this._animation = null; + return animation; + }; + BinaryDataParser.prototype._parseArray = function (rawData) { + var offsets = rawData[dragonBones.DataParser.OFFSET]; + var l1 = offsets[1]; + var l2 = offsets[3]; + var l3 = offsets[5]; + var l4 = offsets[7]; + var l5 = offsets[9]; + var l6 = offsets[11]; + var intArray = new Int16Array(this._binary, this._binaryOffset + offsets[0], l1 / Int16Array.BYTES_PER_ELEMENT); + var floatArray = new Float32Array(this._binary, this._binaryOffset + offsets[2], l2 / Float32Array.BYTES_PER_ELEMENT); + var frameIntArray = new Int16Array(this._binary, this._binaryOffset + offsets[4], l3 / Int16Array.BYTES_PER_ELEMENT); + var frameFloatArray = new Float32Array(this._binary, this._binaryOffset + offsets[6], l4 / Float32Array.BYTES_PER_ELEMENT); + var frameArray = new Int16Array(this._binary, this._binaryOffset + offsets[8], l5 / Int16Array.BYTES_PER_ELEMENT); + var timelineArray = new Uint16Array(this._binary, this._binaryOffset + offsets[10], l6 / Uint16Array.BYTES_PER_ELEMENT); + if (dragonBones.DragonBones.webAssembly) { + var lTotal = l1 + l2 + l3 + l4 + l5 + l6; + var bufferPointer = dragonBones.webAssemblyModule._malloc(lTotal); + var rawArray = new Uint8Array(this._binary, this._binaryOffset, lTotal / Uint8Array.BYTES_PER_ELEMENT); + var copyArray = new Uint8Array(dragonBones.webAssemblyModule.HEAP16.buffer, bufferPointer, rawArray.length); + for (var i = 0, l = rawArray.length; i < l; ++i) copyArray[i] = rawArray[i]; + dragonBones.webAssemblyModule.setDataBinary(this._data, bufferPointer, l1, l2, l3, l4, l5, l6); + this._intArrayBuffer = intArray; + this._floatArrayBuffer = floatArray; + this._frameIntArrayBuffer = frameIntArray; + this._frameFloatArrayBuffer = frameFloatArray; + this._frameArrayBuffer = frameArray; + this._timelineArrayBuffer = timelineArray; + } else { + this._data.binary = this._binary; + this._data.intArray = this._intArrayBuffer = intArray; + this._data.floatArray = this._floatArrayBuffer = floatArray; + this._data.frameIntArray = this._frameIntArrayBuffer = frameIntArray; + this._data.frameFloatArray = this._frameFloatArrayBuffer = frameFloatArray; + this._data.frameArray = this._frameArrayBuffer = frameArray; + this._data.timelineArray = this._timelineArrayBuffer = timelineArray; + } + }; + BinaryDataParser.prototype.parseDragonBonesData = function (rawData, scale) { + void 0 === scale && (scale = 1); + console.assert(null !== rawData && void 0 !== rawData && rawData instanceof ArrayBuffer, "Data error."); + var tag = new Uint8Array(rawData, 0, 8); + if (tag[0] !== "D".charCodeAt(0) || tag[1] !== "B".charCodeAt(0) || tag[2] !== "D".charCodeAt(0) || tag[3] !== "T".charCodeAt(0)) { + console.assert(false, "Nonsupport data."); + return null; + } + var headerLength = new Uint32Array(rawData, 8, 1)[0]; + var headerBytes = new Uint8Array(rawData, 12, headerLength); + var headerString = this._decodeUTF8(headerBytes); + var header = JSON.parse(headerString); + this._binaryOffset = 12 + headerLength; + this._binary = rawData; + return _super.prototype.parseDragonBonesData.call(this, header, scale); + }; + BinaryDataParser.getInstance = function () { + null === BinaryDataParser._binaryDataParserInstance && (BinaryDataParser._binaryDataParserInstance = new BinaryDataParser()); + return BinaryDataParser._binaryDataParserInstance; + }; + BinaryDataParser._binaryDataParserInstance = null; + return BinaryDataParser; + })(dragonBones.ObjectDataParser); + dragonBones.BinaryDataParser = BinaryDataParser; + })(dragonBones || (dragonBones = {})); + var dragonBones; + (function (dragonBones) { + var BaseFactory = (function () { + function BaseFactory(dataParser) { + void 0 === dataParser && (dataParser = null); + this.autoSearch = false; + this._dragonBonesDataMap = {}; + this._textureAtlasDataMap = {}; + this._dragonBones = null; + this._dataParser = null; + null === BaseFactory._objectParser && (BaseFactory._objectParser = new dragonBones.ObjectDataParser()); + null === BaseFactory._binaryParser && (BaseFactory._binaryParser = new dragonBones.BinaryDataParser()); + this._dataParser = null !== dataParser ? dataParser : BaseFactory._objectParser; + } + BaseFactory.prototype._isSupportMesh = function () { + return true; + }; + BaseFactory.prototype._getTextureData = function (textureAtlasName, textureName) { + if (textureAtlasName in this._textureAtlasDataMap) for (var _i = 0, _a = this._textureAtlasDataMap[textureAtlasName]; _i < _a.length; _i++) { + var textureAtlasData = _a[_i]; + var textureData = textureAtlasData.getTexture(textureName); + if (null !== textureData) return textureData; + } + if (this.autoSearch) for (var k in this._textureAtlasDataMap) for (var _b = 0, _c = this._textureAtlasDataMap[k]; _b < _c.length; _b++) { + var textureAtlasData = _c[_b]; + if (textureAtlasData.autoSearch) { + var textureData = textureAtlasData.getTexture(textureName); + if (null !== textureData) return textureData; + } + } + return null; + }; + BaseFactory.prototype._fillBuildArmaturePackage = function (dataPackage, dragonBonesName, armatureName, skinName, textureAtlasName) { + var dragonBonesData = null; + var armatureData = null; + if (dragonBonesName.length > 0 && dragonBonesName in this._dragonBonesDataMap) { + dragonBonesData = this._dragonBonesDataMap[dragonBonesName]; + armatureData = dragonBonesData.getArmature(armatureName); + } + if (null === armatureData && (0 === dragonBonesName.length || this.autoSearch)) for (var k in this._dragonBonesDataMap) { + dragonBonesData = this._dragonBonesDataMap[k]; + if (0 === dragonBonesName.length || dragonBonesData.autoSearch) { + armatureData = dragonBonesData.getArmature(armatureName); + if (null !== armatureData) { + dragonBonesName = k; + break; + } + } + } + if (null !== armatureData) { + dataPackage.dataName = dragonBonesName; + dataPackage.textureAtlasName = textureAtlasName; + dataPackage.data = dragonBonesData; + dataPackage.armature = armatureData; + dataPackage.skin = null; + if (skinName.length > 0) { + dataPackage.skin = armatureData.getSkin(skinName); + if (null === dataPackage.skin && this.autoSearch) for (var k in this._dragonBonesDataMap) { + var skinDragonBonesData = this._dragonBonesDataMap[k]; + var skinArmatureData = skinDragonBonesData.getArmature(skinName); + if (null !== skinArmatureData) { + dataPackage.skin = skinArmatureData.defaultSkin; + break; + } + } + } + null === dataPackage.skin && (dataPackage.skin = armatureData.defaultSkin); + return true; + } + return false; + }; + BaseFactory.prototype._buildBones = function (dataPackage, armature) { + for (var _i = 0, _a = dataPackage.armature.sortedBones; _i < _a.length; _i++) { + var boneData = _a[_i]; + var bone = dragonBones.BaseObject.borrowObject(0 === boneData.type ? dragonBones.Bone : dragonBones.Surface); + bone.init(boneData, armature); + } + }; + BaseFactory.prototype._buildSlots = function (dataPackage, armature) { + var currentSkin = dataPackage.skin; + var defaultSkin = dataPackage.armature.defaultSkin; + if (null === currentSkin || null === defaultSkin) return; + var skinSlots = {}; + for (var k in defaultSkin.displays) { + var displays = defaultSkin.getDisplays(k); + skinSlots[k] = displays; + } + if (currentSkin !== defaultSkin) for (var k in currentSkin.displays) { + var displays = currentSkin.getDisplays(k); + skinSlots[k] = displays; + } + for (var _i = 0, _a = dataPackage.armature.sortedSlots; _i < _a.length; _i++) { + var slotData = _a[_i]; + var displayDatas = slotData.name in skinSlots ? skinSlots[slotData.name] : null; + var slot = this._buildSlot(dataPackage, slotData, armature); + slot.rawDisplayDatas = displayDatas; + if (null !== displayDatas) { + var displayList = new Array(); + for (var i = 0, l = dragonBones.DragonBones.webAssembly ? displayDatas.size() : displayDatas.length; i < l; ++i) { + var displayData = dragonBones.DragonBones.webAssembly ? displayDatas.get(i) : displayDatas[i]; + null !== displayData ? displayList.push(this._getSlotDisplay(dataPackage, displayData, null, slot)) : displayList.push(null); + } + slot._setDisplayList(displayList); + } + slot._setDisplayIndex(slotData.displayIndex, true); + } + }; + BaseFactory.prototype._buildConstraints = function (dataPackage, armature) { + var constraints = dataPackage.armature.constraints; + for (var k in constraints) { + var constraintData = constraints[k]; + switch (constraintData.type) { + case 0: + var ikConstraint = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraint); + ikConstraint.init(constraintData, armature); + armature._addConstraint(ikConstraint); + break; + + case 1: + var pathConstraint = dragonBones.BaseObject.borrowObject(dragonBones.PathConstraint); + pathConstraint.init(constraintData, armature); + armature._addConstraint(pathConstraint); + break; + + default: + var constraint = dragonBones.BaseObject.borrowObject(dragonBones.IKConstraint); + constraint.init(constraintData, armature); + armature._addConstraint(constraint); + } + } + }; + BaseFactory.prototype._buildChildArmature = function (dataPackage, slot, displayData) { + slot; + return this.buildArmature(displayData.path, null !== dataPackage ? dataPackage.dataName : "", "", null !== dataPackage ? dataPackage.textureAtlasName : ""); + }; + BaseFactory.prototype._getSlotDisplay = function (dataPackage, displayData, rawDisplayData, slot) { + var dataName = null !== dataPackage ? dataPackage.dataName : displayData.parent.parent.parent.name; + var display = null; + switch (displayData.type) { + case 0: + var imageDisplayData = displayData; + null !== dataPackage && dataPackage.textureAtlasName.length > 0 && (imageDisplayData.texture = this._getTextureData(dataPackage.textureAtlasName, displayData.path)); + null === imageDisplayData.texture && (imageDisplayData.texture = this._getTextureData(dataName, displayData.path)); + display = null !== rawDisplayData && 2 === rawDisplayData.type && this._isSupportMesh() ? slot.meshDisplay : slot.rawDisplay; + break; + + case 2: + var meshDisplayData = displayData; + null !== dataPackage && dataPackage.textureAtlasName.length > 0 && (meshDisplayData.texture = this._getTextureData(dataPackage.textureAtlasName, meshDisplayData.path)); + null === meshDisplayData.texture && (meshDisplayData.texture = this._getTextureData(dataName, meshDisplayData.path)); + display = this._isSupportMesh() ? slot.meshDisplay : slot.rawDisplay; + break; + + case 1: + var armatureDisplayData = displayData; + var childArmature = this._buildChildArmature(dataPackage, slot, displayData); + if (null !== childArmature) { + childArmature.inheritAnimation = armatureDisplayData.inheritAnimation; + if (!childArmature.inheritAnimation) { + var actions = armatureDisplayData.actions.length > 0 ? armatureDisplayData.actions : childArmature.armatureData.defaultActions; + if (actions.length > 0) for (var _i = 0, actions_6 = actions; _i < actions_6.length; _i++) { + var action = actions_6[_i]; + var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject); + dragonBones.EventObject.actionDataToInstance(action, eventObject, slot.armature); + eventObject.slot = slot; + slot.armature._bufferAction(eventObject, false); + } else childArmature.animation.play(); + } + armatureDisplayData.armature = childArmature.armatureData; + } + display = childArmature; + } + return display; + }; + BaseFactory.prototype.parseDragonBonesData = function (rawData, name, scale) { + void 0 === name && (name = null); + void 0 === scale && (scale = 1); + var dataParser = rawData instanceof ArrayBuffer ? BaseFactory._binaryParser : this._dataParser; + var dragonBonesData = dataParser.parseDragonBonesData(rawData, scale); + while (true) { + var textureAtlasData = this._buildTextureAtlasData(null, null); + if (!dataParser.parseTextureAtlasData(null, textureAtlasData, scale)) { + textureAtlasData.returnToPool(); + break; + } + this.addTextureAtlasData(textureAtlasData, name); + } + null !== dragonBonesData && this.addDragonBonesData(dragonBonesData, name); + return dragonBonesData; + }; + BaseFactory.prototype.parseTextureAtlasData = function (rawData, textureAtlas, name, scale) { + void 0 === name && (name = null); + void 0 === scale && (scale = 1); + var textureAtlasData = this._buildTextureAtlasData(null, null); + this._dataParser.parseTextureAtlasData(rawData, textureAtlasData, scale); + this._buildTextureAtlasData(textureAtlasData, textureAtlas || null); + this.addTextureAtlasData(textureAtlasData, name); + return textureAtlasData; + }; + BaseFactory.prototype.updateTextureAtlasData = function (name, textureAtlases) { + var textureAtlasDatas = this.getTextureAtlasData(name); + if (null !== textureAtlasDatas) for (var i = 0, l = textureAtlasDatas.length; i < l; ++i) i < textureAtlases.length && this._buildTextureAtlasData(textureAtlasDatas[i], textureAtlases[i]); + }; + BaseFactory.prototype.getDragonBonesData = function (name) { + return name in this._dragonBonesDataMap ? this._dragonBonesDataMap[name] : null; + }; + BaseFactory.prototype.addDragonBonesData = function (data, name) { + void 0 === name && (name = null); + name = null !== name ? name : data.name; + if (name in this._dragonBonesDataMap) { + if (this._dragonBonesDataMap[name] === data) return; + console.warn("Can not add same name data: " + name); + return; + } + this._dragonBonesDataMap[name] = data; + }; + BaseFactory.prototype.removeDragonBonesData = function (name, disposeData) { + void 0 === disposeData && (disposeData = true); + if (name in this._dragonBonesDataMap) { + disposeData && this._dragonBones.bufferObject(this._dragonBonesDataMap[name]); + delete this._dragonBonesDataMap[name]; + } + }; + BaseFactory.prototype.getTextureAtlasData = function (name) { + return name in this._textureAtlasDataMap ? this._textureAtlasDataMap[name] : null; + }; + BaseFactory.prototype.addTextureAtlasData = function (data, name) { + void 0 === name && (name = null); + name = null !== name ? name : data.name; + var textureAtlasList = name in this._textureAtlasDataMap ? this._textureAtlasDataMap[name] : this._textureAtlasDataMap[name] = []; + textureAtlasList.indexOf(data) < 0 && textureAtlasList.push(data); + }; + BaseFactory.prototype.removeTextureAtlasData = function (name, disposeData) { + void 0 === disposeData && (disposeData = true); + if (name in this._textureAtlasDataMap) { + var textureAtlasDataList = this._textureAtlasDataMap[name]; + if (disposeData) for (var _i = 0, textureAtlasDataList_1 = textureAtlasDataList; _i < textureAtlasDataList_1.length; _i++) { + var textureAtlasData = textureAtlasDataList_1[_i]; + this._dragonBones.bufferObject(textureAtlasData); + } + delete this._textureAtlasDataMap[name]; + } + }; + BaseFactory.prototype.getArmatureData = function (name, dragonBonesName) { + void 0 === dragonBonesName && (dragonBonesName = ""); + var dataPackage = new BuildArmaturePackage(); + if (!this._fillBuildArmaturePackage(dataPackage, dragonBonesName, name, "", "")) return null; + return dataPackage.armature; + }; + BaseFactory.prototype.clear = function (disposeData) { + void 0 === disposeData && (disposeData = true); + for (var k in this._dragonBonesDataMap) { + disposeData && this._dragonBones.bufferObject(this._dragonBonesDataMap[k]); + delete this._dragonBonesDataMap[k]; + } + for (var k in this._textureAtlasDataMap) { + if (disposeData) { + var textureAtlasDataList = this._textureAtlasDataMap[k]; + for (var _i = 0, textureAtlasDataList_2 = textureAtlasDataList; _i < textureAtlasDataList_2.length; _i++) { + var textureAtlasData = textureAtlasDataList_2[_i]; + this._dragonBones.bufferObject(textureAtlasData); + } + } + delete this._textureAtlasDataMap[k]; + } + }; + BaseFactory.prototype.buildArmature = function (armatureName, dragonBonesName, skinName, textureAtlasName) { + void 0 === dragonBonesName && (dragonBonesName = ""); + void 0 === skinName && (skinName = ""); + void 0 === textureAtlasName && (textureAtlasName = ""); + var dataPackage = new BuildArmaturePackage(); + if (!this._fillBuildArmaturePackage(dataPackage, dragonBonesName || "", armatureName, skinName || "", textureAtlasName || "")) { + console.warn("No armature data: " + armatureName + ", " + (null !== dragonBonesName ? dragonBonesName : "")); + return null; + } + var armature = this._buildArmature(dataPackage); + this._buildBones(dataPackage, armature); + this._buildSlots(dataPackage, armature); + this._buildConstraints(dataPackage, armature); + armature.invalidUpdate(null, true); + armature.advanceTime(0); + return armature; + }; + BaseFactory.prototype.replaceDisplay = function (slot, displayData, displayIndex) { + void 0 === displayIndex && (displayIndex = -1); + displayIndex < 0 && (displayIndex = slot.displayIndex); + displayIndex < 0 && (displayIndex = 0); + slot.replaceDisplayData(displayData, displayIndex); + var displayList = slot.displayList; + if (displayList.length <= displayIndex) { + displayList.length = displayIndex + 1; + for (var i = 0, l = displayList.length; i < l; ++i) displayList[i] || (displayList[i] = null); + } + if (null !== displayData) { + var rawDisplayDatas = slot.rawDisplayDatas; + var rawDisplayData = null; + rawDisplayDatas && (dragonBones.DragonBones.webAssembly ? displayIndex < rawDisplayDatas.size() && (rawDisplayData = rawDisplayDatas.get(displayIndex)) : displayIndex < rawDisplayDatas.length && (rawDisplayData = rawDisplayDatas[displayIndex])); + displayList[displayIndex] = this._getSlotDisplay(null, displayData, rawDisplayData, slot); + } else displayList[displayIndex] = null; + slot.displayList = displayList; + }; + BaseFactory.prototype.replaceSlotDisplay = function (dragonBonesName, armatureName, slotName, displayName, slot, displayIndex) { + void 0 === displayIndex && (displayIndex = -1); + var armatureData = this.getArmatureData(armatureName, dragonBonesName || ""); + if (!armatureData || !armatureData.defaultSkin) return false; + var displayData = armatureData.defaultSkin.getDisplay(slotName, displayName); + if (!displayData) return false; + this.replaceDisplay(slot, displayData, displayIndex); + return true; + }; + BaseFactory.prototype.replaceSlotDisplayList = function (dragonBonesName, armatureName, slotName, slot) { + var armatureData = this.getArmatureData(armatureName, dragonBonesName || ""); + if (!armatureData || !armatureData.defaultSkin) return false; + var displays = armatureData.defaultSkin.getDisplays(slotName); + if (!displays) return false; + var displayIndex = 0; + for (var i = 0, l = dragonBones.DragonBones.webAssembly ? displays.size() : displays.length; i < l; ++i) { + var displayData = dragonBones.DragonBones.webAssembly ? displays.get(i) : displays[i]; + this.replaceDisplay(slot, displayData, displayIndex++); + } + return true; + }; + BaseFactory.prototype.replaceSkin = function (armature, skin, isOverride, exclude) { + void 0 === isOverride && (isOverride = false); + void 0 === exclude && (exclude = null); + var success = false; + var defaultSkin = skin.parent.defaultSkin; + for (var _i = 0, _a = armature.getSlots(); _i < _a.length; _i++) { + var slot = _a[_i]; + if (null !== exclude && exclude.indexOf(slot.name) >= 0) continue; + var displays = skin.getDisplays(slot.name); + if (!displays) { + null !== defaultSkin && skin !== defaultSkin && (displays = defaultSkin.getDisplays(slot.name)); + if (!displays) { + if (isOverride) { + slot.rawDisplayDatas = null; + slot.displayList = []; + } + continue; + } + } + var displayCount = dragonBones.DragonBones.webAssembly ? displays.size() : displays.length; + var displayList = slot.displayList; + displayList.length = displayCount; + for (var i = 0, l = displayCount; i < l; ++i) { + var displayData = dragonBones.DragonBones.webAssembly ? displays.get(i) : displays[i]; + displayList[i] = null !== displayData ? this._getSlotDisplay(null, displayData, null, slot) : null; + } + success = true; + slot.rawDisplayDatas = displays; + slot.displayList = displayList; + } + return success; + }; + BaseFactory.prototype.replaceAnimation = function (armature, armatureData, isOverride) { + void 0 === isOverride && (isOverride = true); + var skinData = armatureData.defaultSkin; + if (null === skinData) return false; + if (isOverride) armature.animation.animations = armatureData.animations; else { + var rawAnimations = armature.animation.animations; + var animations = {}; + for (var k in rawAnimations) animations[k] = rawAnimations[k]; + for (var k in armatureData.animations) animations[k] = armatureData.animations[k]; + armature.animation.animations = animations; + } + for (var _i = 0, _a = armature.getSlots(); _i < _a.length; _i++) { + var slot = _a[_i]; + var index = 0; + for (var _b = 0, _c = slot.displayList; _b < _c.length; _b++) { + var display = _c[_b]; + if (display instanceof dragonBones.Armature) { + var displayDatas = skinData.getDisplays(slot.name); + if (null !== displayDatas && index < (dragonBones.DragonBones.webAssembly ? displayDatas.size() : displayDatas.length)) { + var displayData = dragonBones.DragonBones.webAssembly ? displayDatas.get(index) : displayDatas[index]; + if (null !== displayData && 1 === displayData.type) { + var childArmatureData = this.getArmatureData(displayData.path, displayData.parent.parent.parent.name); + childArmatureData && this.replaceAnimation(display, childArmatureData, isOverride); + } + } + } + index++; + } + } + return true; + }; + BaseFactory.prototype.getAllDragonBonesData = function () { + return this._dragonBonesDataMap; + }; + BaseFactory.prototype.getAllTextureAtlasData = function () { + return this._textureAtlasDataMap; + }; + Object.defineProperty(BaseFactory.prototype, "clock", { + get: function get() { + return this._dragonBones.clock; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BaseFactory.prototype, "dragonBones", { + get: function get() { + return this._dragonBones; + }, + enumerable: true, + configurable: true + }); + BaseFactory.prototype.changeSkin = function (armature, skin, exclude) { + void 0 === exclude && (exclude = null); + return this.replaceSkin(armature, skin, false, exclude); + }; + BaseFactory.prototype.copyAnimationsToArmature = function (toArmature, fromArmatreName, fromSkinName, fromDragonBonesDataName, replaceOriginalAnimation) { + void 0 === fromSkinName && (fromSkinName = ""); + void 0 === fromDragonBonesDataName && (fromDragonBonesDataName = ""); + void 0 === replaceOriginalAnimation && (replaceOriginalAnimation = true); + fromSkinName; + var armatureData = this.getArmatureData(fromArmatreName, fromDragonBonesDataName); + if (!armatureData) return false; + return this.replaceAnimation(toArmature, armatureData, replaceOriginalAnimation); + }; + BaseFactory._objectParser = null; + BaseFactory._binaryParser = null; + return BaseFactory; + })(); + dragonBones.BaseFactory = BaseFactory; + var BuildArmaturePackage = (function () { + function BuildArmaturePackage() { + this.dataName = ""; + this.textureAtlasName = ""; + this.skin = null; + } + return BuildArmaturePackage; + })(); + dragonBones.BuildArmaturePackage = BuildArmaturePackage; + })(dragonBones || (dragonBones = {})); + module.exports = dragonBones; + }), {}], + 424: [(function (require, module, exports) { + "use strict"; + exports.__esModule = true; + exports["default"] = void 0; + var _assembler = _interopRequireDefault(require("../../cocos2d/core/renderer/assembler")); + var _mat = _interopRequireDefault(require("../../cocos2d/core/value-types/mat4")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Armature = require("./ArmatureDisplay"); + var RenderFlow = require("../../cocos2d/core/renderer/render-flow"); + var gfx = cc.gfx; + var NEED_COLOR = 1; + var NEED_BATCH = 16; + var _boneColor = cc.color(255, 0, 0, 255); + var _slotColor = cc.color(0, 0, 255, 255); + var _originColor = cc.color(0, 255, 0, 255); + var _nodeR, _nodeG, _nodeB, _nodeA, _premultipliedAlpha, _multiply, _mustFlush, _buffer, _node, _renderer, _comp, _vfOffset, _indexOffset, _vertexOffset, _vertexCount, _indexCount, _x, _y, _c, _r, _g, _b, _a, _handleVal, _m00, _m04, _m12, _m01, _m05, _m13; + function _getSlotMaterial(tex, blendMode) { + if (!tex) return null; + var src, dst; + switch (blendMode) { + case 1: + src = _premultipliedAlpha ? cc.macro.ONE : cc.macro.SRC_ALPHA; + dst = cc.macro.ONE; + break; + + case 10: + src = cc.macro.DST_COLOR; + dst = cc.macro.ONE_MINUS_SRC_ALPHA; + break; + + case 12: + src = cc.macro.ONE; + dst = cc.macro.ONE_MINUS_SRC_COLOR; + break; + + case 0: + 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; + var materialCache = _comp._materialCache; + var key = tex.getId() + src + dst + useModel; + 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.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, parentOpacity) { + _a = color.a * parentOpacity * _nodeA; + _multiply = _premultipliedAlpha ? _a / 255 : 1; + _r = color.r * _nodeR * _multiply; + _g = color.g * _nodeG * _multiply; + _b = color.b * _nodeB * _multiply; + _c = (_a << 24 >>> 0) + (_b << 16) + (_g << 8) + _r; + } + var ArmatureAssembler = (function (_Assembler) { + _inheritsLoose(ArmatureAssembler, _Assembler); + function ArmatureAssembler() { + return _Assembler.apply(this, arguments) || this; + } + var _proto = ArmatureAssembler.prototype; + _proto.updateRenderData = function updateRenderData(comp, batchData) { }; + _proto.realTimeTraverse = function realTimeTraverse(armature, parentMat, parentOpacity) { + var slots = armature._slots; + var vbuf, ibuf, uintbuf; + var material; + var vertices, indices; + var slotColor; + var slot; + var slotMat; + var slotMatm; + var offsetInfo; + for (var i = 0, l = slots.length; i < l; i++) { + slot = slots[i]; + slotColor = slot._color; + if (!slot._visible || !slot._displayData) continue; + parentMat ? slot._mulMat(slot._worldMatrix, parentMat, slot._matrix) : _mat["default"].copy(slot._worldMatrix, slot._matrix); + if (slot.childArmature) { + this.realTimeTraverse(slot.childArmature, slot._worldMatrix, parentOpacity * slotColor.a / 255); + continue; + } + material = _getSlotMaterial(slot.getTexture(), slot._blendMode); + if (!material) continue; + if (_mustFlush || material.getHash() !== _renderer.material.getHash()) { + _mustFlush = false; + _renderer._flush(); + _renderer.node = _node; + _renderer.material = material; + } + _handleColor(slotColor, parentOpacity); + slotMat = slot._worldMatrix; + slotMatm = slotMat.m; + vertices = slot._localVertices; + _vertexCount = vertices.length >> 2; + indices = slot._indices; + _indexCount = indices.length; + offsetInfo = _buffer.request(_vertexCount, _indexCount); + _indexOffset = offsetInfo.indiceOffset; + _vfOffset = offsetInfo.byteOffset >> 2; + _vertexOffset = offsetInfo.vertexOffset; + vbuf = _buffer._vData; + ibuf = _buffer._iData; + uintbuf = _buffer._uintVData; + _m00 = slotMatm[0]; + _m04 = slotMatm[4]; + _m12 = slotMatm[12]; + _m01 = slotMatm[1]; + _m05 = slotMatm[5]; + _m13 = slotMatm[13]; + for (var vi = 0, vl = vertices.length; vi < vl;) { + _x = vertices[vi++]; + _y = vertices[vi++]; + vbuf[_vfOffset++] = _x * _m00 + _y * _m04 + _m12; + vbuf[_vfOffset++] = _x * _m01 + _y * _m05 + _m13; + vbuf[_vfOffset++] = vertices[vi++]; + vbuf[_vfOffset++] = vertices[vi++]; + uintbuf[_vfOffset++] = _c; + } + for (var ii = 0, il = indices.length; ii < il; ii++) ibuf[_indexOffset++] = _vertexOffset + indices[ii]; + } + }; + _proto.cacheTraverse = function cacheTraverse(frame, parentMat) { + 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 frameVFOffset = 0, frameIndexOffset = 0, segVFCount = 0; + if (parentMat) { + var parentMatm = parentMat.m; + _m00 = parentMatm[0]; + _m01 = parentMatm[1]; + _m04 = parentMatm[4]; + _m05 = parentMatm[5]; + _m12 = parentMatm[12]; + _m13 = parentMatm[13]; + } + var justTranslate = 1 === _m00 && 0 === _m01 && 0 === _m04 && 1 === _m05; + var needBatch = _handleVal & NEED_BATCH; + var calcTranslate = needBatch && justTranslate; + var colorOffset = 0; + var colors = frame.colors; + var nowColor = colors[colorOffset++]; + var maxVFOffset = nowColor.vfOffset; + _handleColor(nowColor, 1); + for (var i = 0, n = segments.length; i < n; i++) { + var segInfo = segments[i]; + material = _getSlotMaterial(segInfo.tex, segInfo.blendMode); + 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.request(_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 _ii = _vfOffset, _il = _vfOffset + segVFCount; _ii < _il; _ii += 5) { + vbuf[_ii] += _m12; + vbuf[_ii + 1] += _m13; + } else if (needBatch) for (var _ii2 = _vfOffset, _il2 = _vfOffset + segVFCount; _ii2 < _il2; _ii2 += 5) { + _x = vbuf[_ii2]; + _y = vbuf[_ii2 + 1]; + vbuf[_ii2] = _x * _m00 + _y * _m04 + _m12; + vbuf[_ii2 + 1] = _x * _m01 + _y * _m05 + _m13; + } + if (!(_handleVal & NEED_COLOR)) continue; + var frameColorOffset = frameVFOffset - segVFCount; + for (var _ii3 = _vfOffset + 4, _il3 = _vfOffset + 4 + segVFCount; _ii3 < _il3; _ii3 += 5, + frameColorOffset += 5) { + if (frameColorOffset >= maxVFOffset) { + nowColor = colors[colorOffset++]; + _handleColor(nowColor, 1); + maxVFOffset = nowColor.vfOffset; + } + uintbuf[_ii3] = _c; + } + } + }; + _proto.fillBuffers = function fillBuffers(comp, renderer) { + comp.node._renderFlag |= RenderFlow.FLAG_UPDATE_RENDER_DATA; + var armature = comp._armature; + if (!armature) return; + _mustFlush = true; + _premultipliedAlpha = comp.premultipliedAlpha; + _node = comp.node; + _buffer = renderer._meshBuffer; + _renderer = renderer; + _comp = comp; + _handleVal = 0; + var nodeColor = _node._color; + _nodeR = nodeColor.r / 255; + _nodeG = nodeColor.g / 255; + _nodeB = nodeColor.b / 255; + _nodeA = nodeColor.a / 255; + 4294967295 !== nodeColor._val && (_handleVal |= NEED_COLOR); + var worldMat = void 0; + if (_comp.enableBatch) { + worldMat = _node._worldMatrix; + _mustFlush = false; + _handleVal |= NEED_BATCH; + } + if (comp.isAnimationCached()) this.cacheTraverse(comp._curFrame, worldMat); else { + this.realTimeTraverse(armature, worldMat, 1); + var graphics = comp._debugDraw; + if (comp.debugBones && graphics) { + graphics.clear(); + graphics.lineWidth = 5; + graphics.strokeColor = _boneColor; + graphics.fillColor = _slotColor; + var bones = armature.getBones(); + for (var i = 0, l = bones.length; i < l; i++) { + var bone = bones[i]; + var boneLength = Math.max(bone.boneData.length, 5); + var startX = bone.globalTransformMatrix.tx; + var startY = bone.globalTransformMatrix.ty; + var endX = startX + bone.globalTransformMatrix.a * boneLength; + var endY = startY + bone.globalTransformMatrix.b * boneLength; + graphics.moveTo(startX, startY); + graphics.lineTo(endX, endY); + graphics.stroke(); + graphics.circle(startX, startY, 2 * Math.PI); + graphics.fill(); + 0 === i && (graphics.fillColor = _originColor); + } + } + } + renderer.worldMatDirty++; + comp.attachUtil._syncAttachedNode(); + _node = void 0; + _buffer = void 0; + _renderer = void 0; + _comp = void 0; + }; + _proto.postFillBuffers = function postFillBuffers(comp, renderer) { + renderer.worldMatDirty--; + }; + return ArmatureAssembler; + })(_assembler["default"]); + exports["default"] = ArmatureAssembler; + _assembler["default"].register(Armature, ArmatureAssembler); + module.exports = exports["default"]; + }), { + "../../cocos2d/core/renderer/assembler": 268, + "../../cocos2d/core/renderer/render-flow": 272, + "../../cocos2d/core/value-types/mat4": 341, + "./ArmatureDisplay": 414 + }], + 425: [(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": 272, + "../../cocos2d/core/value-types/mat4": 341 + }], + 426: [(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 + }, + 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(); + }, + _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) { + 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); + } + 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.define("USE_TINT", useTint); + } + this._materialCache = {}; + }, + _updateBatch: function _updateBatch() { + var baseMaterial = this.getMaterial(0); + baseMaterial && 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(); + }, + 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; + }, + _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": 160, + "../../cocos2d/core/graphics/graphics": 202, + "../../cocos2d/core/renderer/render-flow": 272, + "./AttachUtil": 425, + "./lib/spine": 428, + "./skeleton-cache": 429, + "./track-entry-listeners": 433 + }], + 427: [(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": 426, + "./lib/spine": 428, + "./skeleton-data": 430, + "./skeleton-texture": 431, + "./spine-assembler": 432, + "./vertex-effect-delegate": 434 + }], + 428: [(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 (region.rotate) { + 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 { + 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; + }), {}], + 429: [(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": 428, + "./track-entry-listeners": 433 + }], + 430: [(function (require, module, exports) { + "use strict"; + 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 + }, + createNode: false, + reset: function reset() { + this._skeletonCache = null; + this._atlasCache = null; + false; + }, + 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)); + }, + destroy: function destroy() { + SkeletonCache.removeSkeleton(this._uuid); + this._super(); + } + }); + sp.SkeletonData = module.exports = SkeletonData; + }), { + "./skeleton-cache": 429 + }], + 431: [(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() { } + }); + }), {}], + 432: [(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 _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + 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 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 _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; + 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; + var skeleton = comp._skeleton; + skeleton && skeleton.updateWorldTransform(); + }; + _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.request(_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); + _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 (_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); + _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; + _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 = _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.request(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.request(_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.adjust(_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.request(_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.adjust(_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; + _useTint = comp.useTint || comp.isAnimationCached(); + _vertexFormat = _useTint ? VFTwoColor : VFOneColor; + _perVertexSize = _useTint ? 6 : 5; + _node = comp.node; + _buffer = renderer.getBuffer("spine", _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": 268, + "../../cocos2d/core/renderer/render-flow": 272, + "../../cocos2d/core/renderer/webgl/vertex-format": 313, + "./Skeleton": 426, + "./lib/spine": 428 + }], + 433: [(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; + }), {}], + 434: [(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": 428 + }], + 435: [(function (require, module, exports) { + "use strict"; + (function (global, factory) { + "object" === typeof exports && "undefined" !== typeof module ? factory(exports) : "function" === typeof define && define.amd ? define(["exports"], factory) : factory(global.box2d = {}); + })(void 0, (function (exports) { + function b2Assert(condition) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i]; + if (!condition) throw new (Error.bind.apply(Error, [void 0].concat(args)))(); + } + function b2Maybe(value, def) { + return void 0 !== value ? value : def; + } + var b2_maxFloat = 1e37; + var b2_epsilon = 1e-5; + var b2_epsilon_sq = b2_epsilon * b2_epsilon; + var b2_pi = 3.14159265359; + var b2_maxManifoldPoints = 2; + var b2_maxPolygonVertices = 8; + var b2_aabbExtension = .1; + var b2_aabbMultiplier = 2; + var b2_linearSlop = .008; + var b2_angularSlop = 2 / 180 * b2_pi; + var b2_polygonRadius = 2 * b2_linearSlop; + var b2_maxSubSteps = 8; + var b2_maxTOIContacts = 32; + var b2_velocityThreshold = 1; + var b2_maxLinearCorrection = .2; + var b2_maxAngularCorrection = 8 / 180 * b2_pi; + var b2_maxTranslation = 2; + var b2_maxTranslationSquared = b2_maxTranslation * b2_maxTranslation; + var b2_maxRotation = .5 * b2_pi; + var b2_maxRotationSquared = b2_maxRotation * b2_maxRotation; + var b2_baumgarte = .2; + var b2_toiBaumgarte = .75; + var b2_invalidParticleIndex = -1; + var b2_maxParticleIndex = 2147483647; + var b2_particleStride = .75; + var b2_minParticleWeight = 1; + var b2_maxParticlePressure = .25; + var b2_maxParticleForce = .5; + var b2_maxTriadDistance = 2; + var b2_maxTriadDistanceSquared = b2_maxTriadDistance * b2_maxTriadDistance; + var b2_minParticleSystemBufferCapacity = 256; + var b2_barrierCollisionTime = 2.5; + var b2_timeToSleep = .5; + var b2_linearSleepTolerance = .01; + var b2_angularSleepTolerance = 2 / 180 * b2_pi; + function b2Alloc(size) { + return null; + } + function b2Free(mem) { } + function b2Log(message) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i]; + } + var b2Version = (function () { + function b2Version(major, minor, revision) { + void 0 === major && (major = 0); + void 0 === minor && (minor = 0); + void 0 === revision && (revision = 0); + this.major = 0; + this.minor = 0; + this.revision = 0; + this.major = major; + this.minor = minor; + this.revision = revision; + } + b2Version.prototype.toString = function () { + return this.major + "." + this.minor + "." + this.revision; + }; + return b2Version; + })(); + var b2_version = new b2Version(2, 3, 2); + var b2_branch = "master"; + var b2_commit = "fbf51801d80fc389d43dc46524520e89043b6faf"; + function b2ParseInt(v) { + return parseInt(v, 10); + } + function b2ParseUInt(v) { + return Math.abs(parseInt(v, 10)); + } + function b2MakeArray(length, init) { + var a = []; + for (var i = 0; i < length; ++i) a.push(init(i)); + return a; + } + function b2MakeNullArray(length) { + var a = []; + for (var i = 0; i < length; ++i) a.push(null); + return a; + } + function b2MakeNumberArray(length, init) { + void 0 === init && (init = 0); + var a = []; + for (var i = 0; i < length; ++i) a.push(init); + return a; + } + var b2_pi_over_180 = b2_pi / 180; + var b2_180_over_pi = 180 / b2_pi; + var b2_two_pi = 2 * b2_pi; + var b2Abs = Math.abs; + var b2Min = Math.min; + var b2Max = Math.max; + function b2Clamp(a, lo, hi) { + return a < lo ? lo : a > hi ? hi : a; + } + function b2Swap(a, b) { + var tmp = a[0]; + a[0] = b[0]; + b[0] = tmp; + } + var b2IsValid = isFinite; + function b2Sq(n) { + return n * n; + } + function b2InvSqrt(n) { + return 1 / Math.sqrt(n); + } + var b2Sqrt = Math.sqrt; + var b2Pow = Math.pow; + function b2DegToRad(degrees) { + return degrees * b2_pi_over_180; + } + function b2RadToDeg(radians) { + return radians * b2_180_over_pi; + } + var b2Cos = Math.cos; + var b2Sin = Math.sin; + var b2Acos = Math.acos; + var b2Asin = Math.asin; + var b2Atan2 = Math.atan2; + function b2NextPowerOfTwo(x) { + x |= x >> 1 & 2147483647; + x |= x >> 2 & 1073741823; + x |= x >> 4 & 268435455; + x |= x >> 8 & 16777215; + x |= x >> 16 & 65535; + return x + 1; + } + function b2IsPowerOfTwo(x) { + return x > 0 && 0 === (x & x - 1); + } + function b2Random() { + return 2 * Math.random() - 1; + } + function b2RandomRange(lo, hi) { + return (hi - lo) * Math.random() + lo; + } + var b2Vec2 = (function () { + function b2Vec2(x, y) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + this.x = x; + this.y = y; + } + b2Vec2.prototype.Clone = function () { + return new b2Vec2(this.x, this.y); + }; + b2Vec2.prototype.SetZero = function () { + this.x = 0; + this.y = 0; + return this; + }; + b2Vec2.prototype.Set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + b2Vec2.prototype.Copy = function (other) { + this.x = other.x; + this.y = other.y; + return this; + }; + b2Vec2.prototype.SelfAdd = function (v) { + this.x += v.x; + this.y += v.y; + return this; + }; + b2Vec2.prototype.SelfAddXY = function (x, y) { + this.x += x; + this.y += y; + return this; + }; + b2Vec2.prototype.SelfSub = function (v) { + this.x -= v.x; + this.y -= v.y; + return this; + }; + b2Vec2.prototype.SelfSubXY = function (x, y) { + this.x -= x; + this.y -= y; + return this; + }; + b2Vec2.prototype.SelfMul = function (s) { + this.x *= s; + this.y *= s; + return this; + }; + b2Vec2.prototype.SelfMulAdd = function (s, v) { + this.x += s * v.x; + this.y += s * v.y; + return this; + }; + b2Vec2.prototype.SelfMulSub = function (s, v) { + this.x -= s * v.x; + this.y -= s * v.y; + return this; + }; + b2Vec2.prototype.Dot = function (v) { + return this.x * v.x + this.y * v.y; + }; + b2Vec2.prototype.Cross = function (v) { + return this.x * v.y - this.y * v.x; + }; + b2Vec2.prototype.Length = function () { + var x = this.x, y = this.y; + return Math.sqrt(x * x + y * y); + }; + b2Vec2.prototype.LengthSquared = function () { + var x = this.x, y = this.y; + return x * x + y * y; + }; + b2Vec2.prototype.Normalize = function () { + var length = this.Length(); + if (length >= b2_epsilon) { + var inv_length = 1 / length; + this.x *= inv_length; + this.y *= inv_length; + } + return length; + }; + b2Vec2.prototype.SelfNormalize = function () { + var length = this.Length(); + if (length >= b2_epsilon) { + var inv_length = 1 / length; + this.x *= inv_length; + this.y *= inv_length; + } + return this; + }; + b2Vec2.prototype.SelfRotate = function (radians) { + var c = Math.cos(radians); + var s = Math.sin(radians); + var x = this.x; + this.x = c * x - s * this.y; + this.y = s * x + c * this.y; + return this; + }; + b2Vec2.prototype.IsValid = function () { + return isFinite(this.x) && isFinite(this.y); + }; + b2Vec2.prototype.SelfCrossVS = function (s) { + var x = this.x; + this.x = s * this.y; + this.y = -s * x; + return this; + }; + b2Vec2.prototype.SelfCrossSV = function (s) { + var x = this.x; + this.x = -s * this.y; + this.y = s * x; + return this; + }; + b2Vec2.prototype.SelfMinV = function (v) { + this.x = b2Min(this.x, v.x); + this.y = b2Min(this.y, v.y); + return this; + }; + b2Vec2.prototype.SelfMaxV = function (v) { + this.x = b2Max(this.x, v.x); + this.y = b2Max(this.y, v.y); + return this; + }; + b2Vec2.prototype.SelfAbs = function () { + this.x = b2Abs(this.x); + this.y = b2Abs(this.y); + return this; + }; + b2Vec2.prototype.SelfNeg = function () { + this.x = -this.x; + this.y = -this.y; + return this; + }; + b2Vec2.prototype.SelfSkew = function () { + var x = this.x; + this.x = -this.y; + this.y = x; + return this; + }; + b2Vec2.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2Vec2(); + })); + }; + b2Vec2.AbsV = function (v, out) { + out.x = b2Abs(v.x); + out.y = b2Abs(v.y); + return out; + }; + b2Vec2.MinV = function (a, b, out) { + out.x = b2Min(a.x, b.x); + out.y = b2Min(a.y, b.y); + return out; + }; + b2Vec2.MaxV = function (a, b, out) { + out.x = b2Max(a.x, b.x); + out.y = b2Max(a.y, b.y); + return out; + }; + b2Vec2.ClampV = function (v, lo, hi, out) { + out.x = b2Clamp(v.x, lo.x, hi.x); + out.y = b2Clamp(v.y, lo.y, hi.y); + return out; + }; + b2Vec2.RotateV = function (v, radians, out) { + var v_x = v.x, v_y = v.y; + var c = Math.cos(radians); + var s = Math.sin(radians); + out.x = c * v_x - s * v_y; + out.y = s * v_x + c * v_y; + return out; + }; + b2Vec2.DotVV = function (a, b) { + return a.x * b.x + a.y * b.y; + }; + b2Vec2.CrossVV = function (a, b) { + return a.x * b.y - a.y * b.x; + }; + b2Vec2.CrossVS = function (v, s, out) { + var v_x = v.x; + out.x = s * v.y; + out.y = -s * v_x; + return out; + }; + b2Vec2.CrossVOne = function (v, out) { + var v_x = v.x; + out.x = v.y; + out.y = -v_x; + return out; + }; + b2Vec2.CrossSV = function (s, v, out) { + var v_x = v.x; + out.x = -s * v.y; + out.y = s * v_x; + return out; + }; + b2Vec2.CrossOneV = function (v, out) { + var v_x = v.x; + out.x = -v.y; + out.y = v_x; + return out; + }; + b2Vec2.AddVV = function (a, b, out) { + out.x = a.x + b.x; + out.y = a.y + b.y; + return out; + }; + b2Vec2.SubVV = function (a, b, out) { + out.x = a.x - b.x; + out.y = a.y - b.y; + return out; + }; + b2Vec2.MulSV = function (s, v, out) { + out.x = v.x * s; + out.y = v.y * s; + return out; + }; + b2Vec2.MulVS = function (v, s, out) { + out.x = v.x * s; + out.y = v.y * s; + return out; + }; + b2Vec2.AddVMulSV = function (a, s, b, out) { + out.x = a.x + s * b.x; + out.y = a.y + s * b.y; + return out; + }; + b2Vec2.SubVMulSV = function (a, s, b, out) { + out.x = a.x - s * b.x; + out.y = a.y - s * b.y; + return out; + }; + b2Vec2.AddVCrossSV = function (a, s, v, out) { + var v_x = v.x; + out.x = a.x - s * v.y; + out.y = a.y + s * v_x; + return out; + }; + b2Vec2.MidVV = function (a, b, out) { + out.x = .5 * (a.x + b.x); + out.y = .5 * (a.y + b.y); + return out; + }; + b2Vec2.ExtVV = function (a, b, out) { + out.x = .5 * (b.x - a.x); + out.y = .5 * (b.y - a.y); + return out; + }; + b2Vec2.IsEqualToV = function (a, b) { + return a.x === b.x && a.y === b.y; + }; + b2Vec2.DistanceVV = function (a, b) { + var c_x = a.x - b.x; + var c_y = a.y - b.y; + return Math.sqrt(c_x * c_x + c_y * c_y); + }; + b2Vec2.DistanceSquaredVV = function (a, b) { + var c_x = a.x - b.x; + var c_y = a.y - b.y; + return c_x * c_x + c_y * c_y; + }; + b2Vec2.NegV = function (v, out) { + out.x = -v.x; + out.y = -v.y; + return out; + }; + b2Vec2.ZERO = new b2Vec2(0, 0); + b2Vec2.UNITX = new b2Vec2(1, 0); + b2Vec2.UNITY = new b2Vec2(0, 1); + b2Vec2.s_t0 = new b2Vec2(); + b2Vec2.s_t1 = new b2Vec2(); + b2Vec2.s_t2 = new b2Vec2(); + b2Vec2.s_t3 = new b2Vec2(); + return b2Vec2; + })(); + var b2Vec2_zero = new b2Vec2(0, 0); + var b2Vec3 = (function () { + function b2Vec3(x, y, z) { + void 0 === x && (x = 0); + void 0 === y && (y = 0); + void 0 === z && (z = 0); + this.x = x; + this.y = y; + this.z = z; + } + b2Vec3.prototype.Clone = function () { + return new b2Vec3(this.x, this.y, this.z); + }; + b2Vec3.prototype.SetZero = function () { + this.x = 0; + this.y = 0; + this.z = 0; + return this; + }; + b2Vec3.prototype.SetXYZ = function (x, y, z) { + this.x = x; + this.y = y; + this.z = z; + return this; + }; + b2Vec3.prototype.Copy = function (other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + return this; + }; + b2Vec3.prototype.SelfNeg = function () { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + }; + b2Vec3.prototype.SelfAdd = function (v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + }; + b2Vec3.prototype.SelfAddXYZ = function (x, y, z) { + this.x += x; + this.y += y; + this.z += z; + return this; + }; + b2Vec3.prototype.SelfSub = function (v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + }; + b2Vec3.prototype.SelfSubXYZ = function (x, y, z) { + this.x -= x; + this.y -= y; + this.z -= z; + return this; + }; + b2Vec3.prototype.SelfMul = function (s) { + this.x *= s; + this.y *= s; + this.z *= s; + return this; + }; + b2Vec3.DotV3V3 = function (a, b) { + return a.x * b.x + a.y * b.y + a.z * b.z; + }; + b2Vec3.CrossV3V3 = function (a, b, out) { + var a_x = a.x, a_y = a.y, a_z = a.z; + var b_x = b.x, b_y = b.y, b_z = b.z; + out.x = a_y * b_z - a_z * b_y; + out.y = a_z * b_x - a_x * b_z; + out.z = a_x * b_y - a_y * b_x; + return out; + }; + b2Vec3.ZERO = new b2Vec3(0, 0, 0); + b2Vec3.s_t0 = new b2Vec3(); + return b2Vec3; + })(); + var b2Mat22 = (function () { + function b2Mat22() { + this.ex = new b2Vec2(1, 0); + this.ey = new b2Vec2(0, 1); + } + b2Mat22.prototype.Clone = function () { + return new b2Mat22().Copy(this); + }; + b2Mat22.FromVV = function (c1, c2) { + return new b2Mat22().SetVV(c1, c2); + }; + b2Mat22.FromSSSS = function (r1c1, r1c2, r2c1, r2c2) { + return new b2Mat22().SetSSSS(r1c1, r1c2, r2c1, r2c2); + }; + b2Mat22.FromAngle = function (radians) { + return new b2Mat22().SetAngle(radians); + }; + b2Mat22.prototype.SetSSSS = function (r1c1, r1c2, r2c1, r2c2) { + this.ex.Set(r1c1, r2c1); + this.ey.Set(r1c2, r2c2); + return this; + }; + b2Mat22.prototype.SetVV = function (c1, c2) { + this.ex.Copy(c1); + this.ey.Copy(c2); + return this; + }; + b2Mat22.prototype.SetAngle = function (radians) { + var c = Math.cos(radians); + var s = Math.sin(radians); + this.ex.Set(c, s); + this.ey.Set(-s, c); + return this; + }; + b2Mat22.prototype.Copy = function (other) { + this.ex.Copy(other.ex); + this.ey.Copy(other.ey); + return this; + }; + b2Mat22.prototype.SetIdentity = function () { + this.ex.Set(1, 0); + this.ey.Set(0, 1); + return this; + }; + b2Mat22.prototype.SetZero = function () { + this.ex.SetZero(); + this.ey.SetZero(); + return this; + }; + b2Mat22.prototype.GetAngle = function () { + return Math.atan2(this.ex.y, this.ex.x); + }; + b2Mat22.prototype.GetInverse = function (out) { + var a = this.ex.x; + var b = this.ey.x; + var c = this.ex.y; + var d = this.ey.y; + var det = a * d - b * c; + 0 !== det && (det = 1 / det); + out.ex.x = det * d; + out.ey.x = -det * b; + out.ex.y = -det * c; + out.ey.y = det * a; + return out; + }; + b2Mat22.prototype.Solve = function (b_x, b_y, out) { + var a11 = this.ex.x, a12 = this.ey.x; + var a21 = this.ex.y, a22 = this.ey.y; + var det = a11 * a22 - a12 * a21; + 0 !== det && (det = 1 / det); + out.x = det * (a22 * b_x - a12 * b_y); + out.y = det * (a11 * b_y - a21 * b_x); + return out; + }; + b2Mat22.prototype.SelfAbs = function () { + this.ex.SelfAbs(); + this.ey.SelfAbs(); + return this; + }; + b2Mat22.prototype.SelfInv = function () { + this.GetInverse(this); + return this; + }; + b2Mat22.prototype.SelfAddM = function (M) { + this.ex.SelfAdd(M.ex); + this.ey.SelfAdd(M.ey); + return this; + }; + b2Mat22.prototype.SelfSubM = function (M) { + this.ex.SelfSub(M.ex); + this.ey.SelfSub(M.ey); + return this; + }; + b2Mat22.AbsM = function (M, out) { + var M_ex = M.ex, M_ey = M.ey; + out.ex.x = b2Abs(M_ex.x); + out.ex.y = b2Abs(M_ex.y); + out.ey.x = b2Abs(M_ey.x); + out.ey.y = b2Abs(M_ey.y); + return out; + }; + b2Mat22.MulMV = function (M, v, out) { + var M_ex = M.ex, M_ey = M.ey; + var v_x = v.x, v_y = v.y; + out.x = M_ex.x * v_x + M_ey.x * v_y; + out.y = M_ex.y * v_x + M_ey.y * v_y; + return out; + }; + b2Mat22.MulTMV = function (M, v, out) { + var M_ex = M.ex, M_ey = M.ey; + var v_x = v.x, v_y = v.y; + out.x = M_ex.x * v_x + M_ex.y * v_y; + out.y = M_ey.x * v_x + M_ey.y * v_y; + return out; + }; + b2Mat22.AddMM = function (A, B, out) { + var A_ex = A.ex, A_ey = A.ey; + var B_ex = B.ex, B_ey = B.ey; + out.ex.x = A_ex.x + B_ex.x; + out.ex.y = A_ex.y + B_ex.y; + out.ey.x = A_ey.x + B_ey.x; + out.ey.y = A_ey.y + B_ey.y; + return out; + }; + b2Mat22.MulMM = function (A, B, out) { + var A_ex_x = A.ex.x, A_ex_y = A.ex.y; + var A_ey_x = A.ey.x, A_ey_y = A.ey.y; + var B_ex_x = B.ex.x, B_ex_y = B.ex.y; + var B_ey_x = B.ey.x, B_ey_y = B.ey.y; + out.ex.x = A_ex_x * B_ex_x + A_ey_x * B_ex_y; + out.ex.y = A_ex_y * B_ex_x + A_ey_y * B_ex_y; + out.ey.x = A_ex_x * B_ey_x + A_ey_x * B_ey_y; + out.ey.y = A_ex_y * B_ey_x + A_ey_y * B_ey_y; + return out; + }; + b2Mat22.MulTMM = function (A, B, out) { + var A_ex_x = A.ex.x, A_ex_y = A.ex.y; + var A_ey_x = A.ey.x, A_ey_y = A.ey.y; + var B_ex_x = B.ex.x, B_ex_y = B.ex.y; + var B_ey_x = B.ey.x, B_ey_y = B.ey.y; + out.ex.x = A_ex_x * B_ex_x + A_ex_y * B_ex_y; + out.ex.y = A_ey_x * B_ex_x + A_ey_y * B_ex_y; + out.ey.x = A_ex_x * B_ey_x + A_ex_y * B_ey_y; + out.ey.y = A_ey_x * B_ey_x + A_ey_y * B_ey_y; + return out; + }; + b2Mat22.IDENTITY = new b2Mat22(); + return b2Mat22; + })(); + var b2Mat33 = (function () { + function b2Mat33() { + this.ex = new b2Vec3(1, 0, 0); + this.ey = new b2Vec3(0, 1, 0); + this.ez = new b2Vec3(0, 0, 1); + } + b2Mat33.prototype.Clone = function () { + return new b2Mat33().Copy(this); + }; + b2Mat33.prototype.SetVVV = function (c1, c2, c3) { + this.ex.Copy(c1); + this.ey.Copy(c2); + this.ez.Copy(c3); + return this; + }; + b2Mat33.prototype.Copy = function (other) { + this.ex.Copy(other.ex); + this.ey.Copy(other.ey); + this.ez.Copy(other.ez); + return this; + }; + b2Mat33.prototype.SetIdentity = function () { + this.ex.SetXYZ(1, 0, 0); + this.ey.SetXYZ(0, 1, 0); + this.ez.SetXYZ(0, 0, 1); + return this; + }; + b2Mat33.prototype.SetZero = function () { + this.ex.SetZero(); + this.ey.SetZero(); + this.ez.SetZero(); + return this; + }; + b2Mat33.prototype.SelfAddM = function (M) { + this.ex.SelfAdd(M.ex); + this.ey.SelfAdd(M.ey); + this.ez.SelfAdd(M.ez); + return this; + }; + b2Mat33.prototype.Solve33 = function (b_x, b_y, b_z, out) { + var a11 = this.ex.x, a21 = this.ex.y, a31 = this.ex.z; + var a12 = this.ey.x, a22 = this.ey.y, a32 = this.ey.z; + var a13 = this.ez.x, a23 = this.ez.y, a33 = this.ez.z; + var det = a11 * (a22 * a33 - a32 * a23) + a21 * (a32 * a13 - a12 * a33) + a31 * (a12 * a23 - a22 * a13); + 0 !== det && (det = 1 / det); + out.x = det * (b_x * (a22 * a33 - a32 * a23) + b_y * (a32 * a13 - a12 * a33) + b_z * (a12 * a23 - a22 * a13)); + out.y = det * (a11 * (b_y * a33 - b_z * a23) + a21 * (b_z * a13 - b_x * a33) + a31 * (b_x * a23 - b_y * a13)); + out.z = det * (a11 * (a22 * b_z - a32 * b_y) + a21 * (a32 * b_x - a12 * b_z) + a31 * (a12 * b_y - a22 * b_x)); + return out; + }; + b2Mat33.prototype.Solve22 = function (b_x, b_y, out) { + var a11 = this.ex.x, a12 = this.ey.x; + var a21 = this.ex.y, a22 = this.ey.y; + var det = a11 * a22 - a12 * a21; + 0 !== det && (det = 1 / det); + out.x = det * (a22 * b_x - a12 * b_y); + out.y = det * (a11 * b_y - a21 * b_x); + return out; + }; + b2Mat33.prototype.GetInverse22 = function (M) { + var a = this.ex.x, b = this.ey.x, c = this.ex.y, d = this.ey.y; + var det = a * d - b * c; + 0 !== det && (det = 1 / det); + M.ex.x = det * d; + M.ey.x = -det * b; + M.ex.z = 0; + M.ex.y = -det * c; + M.ey.y = det * a; + M.ey.z = 0; + M.ez.x = 0; + M.ez.y = 0; + M.ez.z = 0; + }; + b2Mat33.prototype.GetSymInverse33 = function (M) { + var det = b2Vec3.DotV3V3(this.ex, b2Vec3.CrossV3V3(this.ey, this.ez, b2Vec3.s_t0)); + 0 !== det && (det = 1 / det); + var a11 = this.ex.x, a12 = this.ey.x, a13 = this.ez.x; + var a22 = this.ey.y, a23 = this.ez.y; + var a33 = this.ez.z; + M.ex.x = det * (a22 * a33 - a23 * a23); + M.ex.y = det * (a13 * a23 - a12 * a33); + M.ex.z = det * (a12 * a23 - a13 * a22); + M.ey.x = M.ex.y; + M.ey.y = det * (a11 * a33 - a13 * a13); + M.ey.z = det * (a13 * a12 - a11 * a23); + M.ez.x = M.ex.z; + M.ez.y = M.ey.z; + M.ez.z = det * (a11 * a22 - a12 * a12); + }; + b2Mat33.MulM33V3 = function (A, v, out) { + var v_x = v.x, v_y = v.y, v_z = v.z; + out.x = A.ex.x * v_x + A.ey.x * v_y + A.ez.x * v_z; + out.y = A.ex.y * v_x + A.ey.y * v_y + A.ez.y * v_z; + out.z = A.ex.z * v_x + A.ey.z * v_y + A.ez.z * v_z; + return out; + }; + b2Mat33.MulM33XYZ = function (A, x, y, z, out) { + out.x = A.ex.x * x + A.ey.x * y + A.ez.x * z; + out.y = A.ex.y * x + A.ey.y * y + A.ez.y * z; + out.z = A.ex.z * x + A.ey.z * y + A.ez.z * z; + return out; + }; + b2Mat33.MulM33V2 = function (A, v, out) { + var v_x = v.x, v_y = v.y; + out.x = A.ex.x * v_x + A.ey.x * v_y; + out.y = A.ex.y * v_x + A.ey.y * v_y; + return out; + }; + b2Mat33.MulM33XY = function (A, x, y, out) { + out.x = A.ex.x * x + A.ey.x * y; + out.y = A.ex.y * x + A.ey.y * y; + return out; + }; + b2Mat33.IDENTITY = new b2Mat33(); + return b2Mat33; + })(); + var b2Rot = (function () { + function b2Rot(angle) { + void 0 === angle && (angle = 0); + this.s = 0; + this.c = 1; + if (angle) { + this.s = Math.sin(angle); + this.c = Math.cos(angle); + } + } + b2Rot.prototype.Clone = function () { + return new b2Rot().Copy(this); + }; + b2Rot.prototype.Copy = function (other) { + this.s = other.s; + this.c = other.c; + return this; + }; + b2Rot.prototype.SetAngle = function (angle) { + this.s = Math.sin(angle); + this.c = Math.cos(angle); + return this; + }; + b2Rot.prototype.SetIdentity = function () { + this.s = 0; + this.c = 1; + return this; + }; + b2Rot.prototype.GetAngle = function () { + return Math.atan2(this.s, this.c); + }; + b2Rot.prototype.GetXAxis = function (out) { + out.x = this.c; + out.y = this.s; + return out; + }; + b2Rot.prototype.GetYAxis = function (out) { + out.x = -this.s; + out.y = this.c; + return out; + }; + b2Rot.MulRR = function (q, r, out) { + var q_c = q.c, q_s = q.s; + var r_c = r.c, r_s = r.s; + out.s = q_s * r_c + q_c * r_s; + out.c = q_c * r_c - q_s * r_s; + return out; + }; + b2Rot.MulTRR = function (q, r, out) { + var q_c = q.c, q_s = q.s; + var r_c = r.c, r_s = r.s; + out.s = q_c * r_s - q_s * r_c; + out.c = q_c * r_c + q_s * r_s; + return out; + }; + b2Rot.MulRV = function (q, v, out) { + var q_c = q.c, q_s = q.s; + var v_x = v.x, v_y = v.y; + out.x = q_c * v_x - q_s * v_y; + out.y = q_s * v_x + q_c * v_y; + return out; + }; + b2Rot.MulTRV = function (q, v, out) { + var q_c = q.c, q_s = q.s; + var v_x = v.x, v_y = v.y; + out.x = q_c * v_x + q_s * v_y; + out.y = -q_s * v_x + q_c * v_y; + return out; + }; + b2Rot.IDENTITY = new b2Rot(); + return b2Rot; + })(); + var b2Transform = (function () { + function b2Transform() { + this.p = new b2Vec2(); + this.q = new b2Rot(); + } + b2Transform.prototype.Clone = function () { + return new b2Transform().Copy(this); + }; + b2Transform.prototype.Copy = function (other) { + this.p.Copy(other.p); + this.q.Copy(other.q); + return this; + }; + b2Transform.prototype.SetIdentity = function () { + this.p.SetZero(); + this.q.SetIdentity(); + return this; + }; + b2Transform.prototype.SetPositionRotation = function (position, q) { + this.p.Copy(position); + this.q.Copy(q); + return this; + }; + b2Transform.prototype.SetPositionAngle = function (pos, a) { + this.p.Copy(pos); + this.q.SetAngle(a); + return this; + }; + b2Transform.prototype.SetPosition = function (position) { + this.p.Copy(position); + return this; + }; + b2Transform.prototype.SetPositionXY = function (x, y) { + this.p.Set(x, y); + return this; + }; + b2Transform.prototype.SetRotation = function (rotation) { + this.q.Copy(rotation); + return this; + }; + b2Transform.prototype.SetRotationAngle = function (radians) { + this.q.SetAngle(radians); + return this; + }; + b2Transform.prototype.GetPosition = function () { + return this.p; + }; + b2Transform.prototype.GetRotation = function () { + return this.q; + }; + b2Transform.prototype.GetRotationAngle = function () { + return this.q.GetAngle(); + }; + b2Transform.prototype.GetAngle = function () { + return this.q.GetAngle(); + }; + b2Transform.MulXV = function (T, v, out) { + var T_q_c = T.q.c, T_q_s = T.q.s; + var v_x = v.x, v_y = v.y; + out.x = T_q_c * v_x - T_q_s * v_y + T.p.x; + out.y = T_q_s * v_x + T_q_c * v_y + T.p.y; + return out; + }; + b2Transform.MulTXV = function (T, v, out) { + var T_q_c = T.q.c, T_q_s = T.q.s; + var p_x = v.x - T.p.x; + var p_y = v.y - T.p.y; + out.x = T_q_c * p_x + T_q_s * p_y; + out.y = -T_q_s * p_x + T_q_c * p_y; + return out; + }; + b2Transform.MulXX = function (A, B, out) { + b2Rot.MulRR(A.q, B.q, out.q); + b2Vec2.AddVV(b2Rot.MulRV(A.q, B.p, out.p), A.p, out.p); + return out; + }; + b2Transform.MulTXX = function (A, B, out) { + b2Rot.MulTRR(A.q, B.q, out.q); + b2Rot.MulTRV(A.q, b2Vec2.SubVV(B.p, A.p, out.p), out.p); + return out; + }; + b2Transform.IDENTITY = new b2Transform(); + return b2Transform; + })(); + var b2Sweep = (function () { + function b2Sweep() { + this.localCenter = new b2Vec2(); + this.c0 = new b2Vec2(); + this.c = new b2Vec2(); + this.a0 = 0; + this.a = 0; + this.alpha0 = 0; + } + b2Sweep.prototype.Clone = function () { + return new b2Sweep().Copy(this); + }; + b2Sweep.prototype.Copy = function (other) { + this.localCenter.Copy(other.localCenter); + this.c0.Copy(other.c0); + this.c.Copy(other.c); + this.a0 = other.a0; + this.a = other.a; + this.alpha0 = other.alpha0; + return this; + }; + b2Sweep.prototype.GetTransform = function (xf, beta) { + var one_minus_beta = 1 - beta; + xf.p.x = one_minus_beta * this.c0.x + beta * this.c.x; + xf.p.y = one_minus_beta * this.c0.y + beta * this.c.y; + var angle = one_minus_beta * this.a0 + beta * this.a; + xf.q.SetAngle(angle); + xf.p.SelfSub(b2Rot.MulRV(xf.q, this.localCenter, b2Vec2.s_t0)); + return xf; + }; + b2Sweep.prototype.Advance = function (alpha) { + var beta = (alpha - this.alpha0) / (1 - this.alpha0); + var one_minus_beta = 1 - beta; + this.c0.x = one_minus_beta * this.c0.x + beta * this.c.x; + this.c0.y = one_minus_beta * this.c0.y + beta * this.c.y; + this.a0 = one_minus_beta * this.a0 + beta * this.a; + this.alpha0 = alpha; + }; + b2Sweep.prototype.Normalize = function () { + var d = b2_two_pi * Math.floor(this.a0 / b2_two_pi); + this.a0 -= d; + this.a -= d; + }; + return b2Sweep; + })(); + var b2Color = (function () { + function b2Color(rr, gg, bb, aa) { + void 0 === rr && (rr = .5); + void 0 === gg && (gg = .5); + void 0 === bb && (bb = .5); + void 0 === aa && (aa = 1); + this.r = rr; + this.g = gg; + this.b = bb; + this.a = aa; + } + b2Color.prototype.Clone = function () { + return new b2Color().Copy(this); + }; + b2Color.prototype.Copy = function (other) { + this.r = other.r; + this.g = other.g; + this.b = other.b; + this.a = other.a; + return this; + }; + b2Color.prototype.IsEqual = function (color) { + return this.r === color.r && this.g === color.g && this.b === color.b && this.a === color.a; + }; + b2Color.prototype.IsZero = function () { + return 0 === this.r && 0 === this.g && 0 === this.b && 0 === this.a; + }; + b2Color.prototype.Set = function (r, g, b, a) { + void 0 === a && (a = this.a); + this.SetRGBA(r, g, b, a); + }; + b2Color.prototype.SetByteRGB = function (r, g, b) { + this.r = r / 255; + this.g = g / 255; + this.b = b / 255; + return this; + }; + b2Color.prototype.SetByteRGBA = function (r, g, b, a) { + this.r = r / 255; + this.g = g / 255; + this.b = b / 255; + this.a = a / 255; + return this; + }; + b2Color.prototype.SetRGB = function (rr, gg, bb) { + this.r = rr; + this.g = gg; + this.b = bb; + return this; + }; + b2Color.prototype.SetRGBA = function (rr, gg, bb, aa) { + this.r = rr; + this.g = gg; + this.b = bb; + this.a = aa; + return this; + }; + b2Color.prototype.SelfAdd = function (color) { + this.r += color.r; + this.g += color.g; + this.b += color.b; + this.a += color.a; + return this; + }; + b2Color.prototype.Add = function (color, out) { + out.r = this.r + color.r; + out.g = this.g + color.g; + out.b = this.b + color.b; + out.a = this.a + color.a; + return out; + }; + b2Color.prototype.SelfSub = function (color) { + this.r -= color.r; + this.g -= color.g; + this.b -= color.b; + this.a -= color.a; + return this; + }; + b2Color.prototype.Sub = function (color, out) { + out.r = this.r - color.r; + out.g = this.g - color.g; + out.b = this.b - color.b; + out.a = this.a - color.a; + return out; + }; + b2Color.prototype.SelfMul = function (s) { + this.r *= s; + this.g *= s; + this.b *= s; + this.a *= s; + return this; + }; + b2Color.prototype.Mul = function (s, out) { + out.r = this.r * s; + out.g = this.g * s; + out.b = this.b * s; + out.a = this.a * s; + return out; + }; + b2Color.prototype.Mix = function (mixColor, strength) { + b2Color.MixColors(this, mixColor, strength); + }; + b2Color.MixColors = function (colorA, colorB, strength) { + var dr = strength * (colorB.r - colorA.r); + var dg = strength * (colorB.g - colorA.g); + var db = strength * (colorB.b - colorA.b); + var da = strength * (colorB.a - colorA.a); + colorA.r += dr; + colorA.g += dg; + colorA.b += db; + colorA.a += da; + colorB.r -= dr; + colorB.g -= dg; + colorB.b -= db; + colorB.a -= da; + }; + b2Color.prototype.MakeStyleString = function (alpha) { + void 0 === alpha && (alpha = this.a); + return b2Color.MakeStyleString(this.r, this.g, this.b, alpha); + }; + b2Color.MakeStyleString = function (r, g, b, a) { + void 0 === a && (a = 1); + r *= 255; + g *= 255; + b *= 255; + return a < 1 ? "rgba(" + r + "," + g + "," + b + "," + a + ")" : "rgb(" + r + "," + g + "," + b + ")"; + }; + b2Color.ZERO = new b2Color(0, 0, 0, 0); + b2Color.RED = new b2Color(1, 0, 0); + b2Color.GREEN = new b2Color(0, 1, 0); + b2Color.BLUE = new b2Color(0, 0, 1); + return b2Color; + })(); + (function (b2DrawFlags) { + b2DrawFlags[b2DrawFlags["e_none"] = 0] = "e_none"; + b2DrawFlags[b2DrawFlags["e_shapeBit"] = 1] = "e_shapeBit"; + b2DrawFlags[b2DrawFlags["e_jointBit"] = 2] = "e_jointBit"; + b2DrawFlags[b2DrawFlags["e_aabbBit"] = 4] = "e_aabbBit"; + b2DrawFlags[b2DrawFlags["e_pairBit"] = 8] = "e_pairBit"; + b2DrawFlags[b2DrawFlags["e_centerOfMassBit"] = 16] = "e_centerOfMassBit"; + b2DrawFlags[b2DrawFlags["e_particleBit"] = 32] = "e_particleBit"; + b2DrawFlags[b2DrawFlags["e_controllerBit"] = 64] = "e_controllerBit"; + b2DrawFlags[b2DrawFlags["e_all"] = 63] = "e_all"; + })(exports.b2DrawFlags || (exports.b2DrawFlags = {})); + var b2Draw = (function () { + function b2Draw() { + this.m_drawFlags = 0; + } + b2Draw.prototype.SetFlags = function (flags) { + this.m_drawFlags = flags; + }; + b2Draw.prototype.GetFlags = function () { + return this.m_drawFlags; + }; + b2Draw.prototype.AppendFlags = function (flags) { + this.m_drawFlags |= flags; + }; + b2Draw.prototype.ClearFlags = function (flags) { + this.m_drawFlags &= ~flags; + }; + return b2Draw; + })(); + var b2Timer = (function () { + function b2Timer() { + this.m_start = Date.now(); + } + b2Timer.prototype.Reset = function () { + this.m_start = Date.now(); + return this; + }; + b2Timer.prototype.GetMilliseconds = function () { + return Date.now() - this.m_start; + }; + return b2Timer; + })(); + var b2Counter = (function () { + function b2Counter() { + this.m_count = 0; + this.m_min_count = 0; + this.m_max_count = 0; + } + b2Counter.prototype.GetCount = function () { + return this.m_count; + }; + b2Counter.prototype.GetMinCount = function () { + return this.m_min_count; + }; + b2Counter.prototype.GetMaxCount = function () { + return this.m_max_count; + }; + b2Counter.prototype.ResetCount = function () { + var count = this.m_count; + this.m_count = 0; + return count; + }; + b2Counter.prototype.ResetMinCount = function () { + this.m_min_count = 0; + }; + b2Counter.prototype.ResetMaxCount = function () { + this.m_max_count = 0; + }; + b2Counter.prototype.Increment = function () { + this.m_count++; + this.m_max_count < this.m_count && (this.m_max_count = this.m_count); + }; + b2Counter.prototype.Decrement = function () { + this.m_count--; + this.m_min_count > this.m_count && (this.m_min_count = this.m_count); + }; + return b2Counter; + })(); + var b2GrowableStack = (function () { + function b2GrowableStack(N) { + this.m_stack = []; + this.m_count = 0; + this.m_stack = b2MakeArray(N, (function (index) { + return null; + })); + this.m_count = 0; + } + b2GrowableStack.prototype.Reset = function () { + this.m_count = 0; + return this; + }; + b2GrowableStack.prototype.Push = function (element) { + this.m_stack[this.m_count] = element; + this.m_count++; + }; + b2GrowableStack.prototype.Pop = function () { + this.m_count--; + var element = this.m_stack[this.m_count]; + this.m_stack[this.m_count] = null; + if (null === element) throw new Error(); + return element; + }; + b2GrowableStack.prototype.GetCount = function () { + return this.m_count; + }; + return b2GrowableStack; + })(); + var b2BlockAllocator = (function () { + function b2BlockAllocator() { } + return b2BlockAllocator; + })(); + var b2StackAllocator = (function () { + function b2StackAllocator() { } + return b2StackAllocator; + })(); + var b2DistanceProxy = (function () { + function b2DistanceProxy() { + this.m_buffer = b2Vec2.MakeArray(2); + this.m_vertices = this.m_buffer; + this.m_count = 0; + this.m_radius = 0; + } + b2DistanceProxy.prototype.Copy = function (other) { + if (other.m_vertices === other.m_buffer) { + this.m_vertices = this.m_buffer; + this.m_buffer[0].Copy(other.m_buffer[0]); + this.m_buffer[1].Copy(other.m_buffer[1]); + } else this.m_vertices = other.m_vertices; + this.m_count = other.m_count; + this.m_radius = other.m_radius; + return this; + }; + b2DistanceProxy.prototype.Reset = function () { + this.m_vertices = this.m_buffer; + this.m_count = 0; + this.m_radius = 0; + return this; + }; + b2DistanceProxy.prototype.SetShape = function (shape, index) { + shape.SetupDistanceProxy(this, index); + }; + b2DistanceProxy.prototype.SetVerticesRadius = function (vertices, count, radius) { + this.m_vertices = vertices; + this.m_count = count; + this.m_radius = radius; + }; + b2DistanceProxy.prototype.GetSupport = function (d) { + var bestIndex = 0; + var bestValue = b2Vec2.DotVV(this.m_vertices[0], d); + for (var i = 1; i < this.m_count; ++i) { + var value = b2Vec2.DotVV(this.m_vertices[i], d); + if (value > bestValue) { + bestIndex = i; + bestValue = value; + } + } + return bestIndex; + }; + b2DistanceProxy.prototype.GetSupportVertex = function (d) { + var bestIndex = 0; + var bestValue = b2Vec2.DotVV(this.m_vertices[0], d); + for (var i = 1; i < this.m_count; ++i) { + var value = b2Vec2.DotVV(this.m_vertices[i], d); + if (value > bestValue) { + bestIndex = i; + bestValue = value; + } + } + return this.m_vertices[bestIndex]; + }; + b2DistanceProxy.prototype.GetVertexCount = function () { + return this.m_count; + }; + b2DistanceProxy.prototype.GetVertex = function (index) { + return this.m_vertices[index]; + }; + return b2DistanceProxy; + })(); + var b2SimplexCache = (function () { + function b2SimplexCache() { + this.metric = 0; + this.count = 0; + this.indexA = [0, 0, 0]; + this.indexB = [0, 0, 0]; + } + b2SimplexCache.prototype.Reset = function () { + this.metric = 0; + this.count = 0; + return this; + }; + return b2SimplexCache; + })(); + var b2DistanceInput = (function () { + function b2DistanceInput() { + this.proxyA = new b2DistanceProxy(); + this.proxyB = new b2DistanceProxy(); + this.transformA = new b2Transform(); + this.transformB = new b2Transform(); + this.useRadii = false; + } + b2DistanceInput.prototype.Reset = function () { + this.proxyA.Reset(); + this.proxyB.Reset(); + this.transformA.SetIdentity(); + this.transformB.SetIdentity(); + this.useRadii = false; + return this; + }; + return b2DistanceInput; + })(); + var b2DistanceOutput = (function () { + function b2DistanceOutput() { + this.pointA = new b2Vec2(); + this.pointB = new b2Vec2(); + this.distance = 0; + this.iterations = 0; + } + b2DistanceOutput.prototype.Reset = function () { + this.pointA.SetZero(); + this.pointB.SetZero(); + this.distance = 0; + this.iterations = 0; + return this; + }; + return b2DistanceOutput; + })(); + var b2ShapeCastInput = (function () { + function b2ShapeCastInput() { + this.proxyA = new b2DistanceProxy(); + this.proxyB = new b2DistanceProxy(); + this.transformA = new b2Transform(); + this.transformB = new b2Transform(); + this.translationB = new b2Vec2(); + } + return b2ShapeCastInput; + })(); + var b2ShapeCastOutput = (function () { + function b2ShapeCastOutput() { + this.point = new b2Vec2(); + this.normal = new b2Vec2(); + this.lambda = 0; + this.iterations = 0; + } + return b2ShapeCastOutput; + })(); + exports.b2_gjkCalls = 0; + exports.b2_gjkIters = 0; + exports.b2_gjkMaxIters = 0; + function b2_gjk_reset() { + exports.b2_gjkCalls = 0; + exports.b2_gjkIters = 0; + exports.b2_gjkMaxIters = 0; + } + var b2SimplexVertex = (function () { + function b2SimplexVertex() { + this.wA = new b2Vec2(); + this.wB = new b2Vec2(); + this.w = new b2Vec2(); + this.a = 0; + this.indexA = 0; + this.indexB = 0; + } + b2SimplexVertex.prototype.Copy = function (other) { + this.wA.Copy(other.wA); + this.wB.Copy(other.wB); + this.w.Copy(other.w); + this.a = other.a; + this.indexA = other.indexA; + this.indexB = other.indexB; + return this; + }; + return b2SimplexVertex; + })(); + var b2Simplex = (function () { + function b2Simplex() { + this.m_v1 = new b2SimplexVertex(); + this.m_v2 = new b2SimplexVertex(); + this.m_v3 = new b2SimplexVertex(); + this.m_vertices = []; + this.m_count = 0; + this.m_vertices[0] = this.m_v1; + this.m_vertices[1] = this.m_v2; + this.m_vertices[2] = this.m_v3; + } + b2Simplex.prototype.ReadCache = function (cache, proxyA, transformA, proxyB, transformB) { + this.m_count = cache.count; + var vertices = this.m_vertices; + for (var i = 0; i < this.m_count; ++i) { + var v = vertices[i]; + v.indexA = cache.indexA[i]; + v.indexB = cache.indexB[i]; + var wALocal = proxyA.GetVertex(v.indexA); + var wBLocal = proxyB.GetVertex(v.indexB); + b2Transform.MulXV(transformA, wALocal, v.wA); + b2Transform.MulXV(transformB, wBLocal, v.wB); + b2Vec2.SubVV(v.wB, v.wA, v.w); + v.a = 0; + } + if (this.m_count > 1) { + var metric1 = cache.metric; + var metric2 = this.GetMetric(); + (metric2 < .5 * metric1 || 2 * metric1 < metric2 || metric2 < b2_epsilon) && (this.m_count = 0); + } + if (0 === this.m_count) { + var v = vertices[0]; + v.indexA = 0; + v.indexB = 0; + var wALocal = proxyA.GetVertex(0); + var wBLocal = proxyB.GetVertex(0); + b2Transform.MulXV(transformA, wALocal, v.wA); + b2Transform.MulXV(transformB, wBLocal, v.wB); + b2Vec2.SubVV(v.wB, v.wA, v.w); + v.a = 1; + this.m_count = 1; + } + }; + b2Simplex.prototype.WriteCache = function (cache) { + cache.metric = this.GetMetric(); + cache.count = this.m_count; + var vertices = this.m_vertices; + for (var i = 0; i < this.m_count; ++i) { + cache.indexA[i] = vertices[i].indexA; + cache.indexB[i] = vertices[i].indexB; + } + }; + b2Simplex.prototype.GetSearchDirection = function (out) { + switch (this.m_count) { + case 1: + return b2Vec2.NegV(this.m_v1.w, out); + + case 2: + var e12 = b2Vec2.SubVV(this.m_v2.w, this.m_v1.w, out); + var sgn = b2Vec2.CrossVV(e12, b2Vec2.NegV(this.m_v1.w, b2Vec2.s_t0)); + return sgn > 0 ? b2Vec2.CrossOneV(e12, out) : b2Vec2.CrossVOne(e12, out); + + default: + return out.SetZero(); + } + }; + b2Simplex.prototype.GetClosestPoint = function (out) { + switch (this.m_count) { + case 0: + return out.SetZero(); + + case 1: + return out.Copy(this.m_v1.w); + + case 2: + return out.Set(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y); + + case 3: + default: + return out.SetZero(); + } + }; + b2Simplex.prototype.GetWitnessPoints = function (pA, pB) { + switch (this.m_count) { + case 0: + break; + + case 1: + pA.Copy(this.m_v1.wA); + pB.Copy(this.m_v1.wB); + break; + + case 2: + pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x; + pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y; + pB.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x; + pB.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y; + break; + + case 3: + pB.x = pA.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x; + pB.y = pA.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y; + } + }; + b2Simplex.prototype.GetMetric = function () { + switch (this.m_count) { + case 0: + case 1: + return 0; + + case 2: + return b2Vec2.DistanceVV(this.m_v1.w, this.m_v2.w); + + case 3: + return b2Vec2.CrossVV(b2Vec2.SubVV(this.m_v2.w, this.m_v1.w, b2Vec2.s_t0), b2Vec2.SubVV(this.m_v3.w, this.m_v1.w, b2Vec2.s_t1)); + + default: + return 0; + } + }; + b2Simplex.prototype.Solve2 = function () { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + var e12 = b2Vec2.SubVV(w2, w1, b2Simplex.s_e12); + var d12_2 = -b2Vec2.DotVV(w1, e12); + if (d12_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + var d12_1 = b2Vec2.DotVV(w2, e12); + if (d12_1 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.Copy(this.m_v2); + return; + } + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + }; + b2Simplex.prototype.Solve3 = function () { + var w1 = this.m_v1.w; + var w2 = this.m_v2.w; + var w3 = this.m_v3.w; + var e12 = b2Vec2.SubVV(w2, w1, b2Simplex.s_e12); + var w1e12 = b2Vec2.DotVV(w1, e12); + var w2e12 = b2Vec2.DotVV(w2, e12); + var d12_1 = w2e12; + var d12_2 = -w1e12; + var e13 = b2Vec2.SubVV(w3, w1, b2Simplex.s_e13); + var w1e13 = b2Vec2.DotVV(w1, e13); + var w3e13 = b2Vec2.DotVV(w3, e13); + var d13_1 = w3e13; + var d13_2 = -w1e13; + var e23 = b2Vec2.SubVV(w3, w2, b2Simplex.s_e23); + var w2e23 = b2Vec2.DotVV(w2, e23); + var w3e23 = b2Vec2.DotVV(w3, e23); + var d23_1 = w3e23; + var d23_2 = -w2e23; + var n123 = b2Vec2.CrossVV(e12, e13); + var d123_1 = n123 * b2Vec2.CrossVV(w2, w3); + var d123_2 = n123 * b2Vec2.CrossVV(w3, w1); + var d123_3 = n123 * b2Vec2.CrossVV(w1, w2); + if (d12_2 <= 0 && d13_2 <= 0) { + this.m_v1.a = 1; + this.m_count = 1; + return; + } + if (d12_1 > 0 && d12_2 > 0 && d123_3 <= 0) { + var inv_d12 = 1 / (d12_1 + d12_2); + this.m_v1.a = d12_1 * inv_d12; + this.m_v2.a = d12_2 * inv_d12; + this.m_count = 2; + return; + } + if (d13_1 > 0 && d13_2 > 0 && d123_2 <= 0) { + var inv_d13 = 1 / (d13_1 + d13_2); + this.m_v1.a = d13_1 * inv_d13; + this.m_v3.a = d13_2 * inv_d13; + this.m_count = 2; + this.m_v2.Copy(this.m_v3); + return; + } + if (d12_1 <= 0 && d23_2 <= 0) { + this.m_v2.a = 1; + this.m_count = 1; + this.m_v1.Copy(this.m_v2); + return; + } + if (d13_1 <= 0 && d23_1 <= 0) { + this.m_v3.a = 1; + this.m_count = 1; + this.m_v1.Copy(this.m_v3); + return; + } + if (d23_1 > 0 && d23_2 > 0 && d123_1 <= 0) { + var inv_d23 = 1 / (d23_1 + d23_2); + this.m_v2.a = d23_1 * inv_d23; + this.m_v3.a = d23_2 * inv_d23; + this.m_count = 2; + this.m_v1.Copy(this.m_v3); + return; + } + var inv_d123 = 1 / (d123_1 + d123_2 + d123_3); + this.m_v1.a = d123_1 * inv_d123; + this.m_v2.a = d123_2 * inv_d123; + this.m_v3.a = d123_3 * inv_d123; + this.m_count = 3; + }; + b2Simplex.s_e12 = new b2Vec2(); + b2Simplex.s_e13 = new b2Vec2(); + b2Simplex.s_e23 = new b2Vec2(); + return b2Simplex; + })(); + var b2Distance_s_simplex = new b2Simplex(); + var b2Distance_s_saveA = [0, 0, 0]; + var b2Distance_s_saveB = [0, 0, 0]; + var b2Distance_s_p = new b2Vec2(); + var b2Distance_s_d = new b2Vec2(); + var b2Distance_s_normal = new b2Vec2(); + var b2Distance_s_supportA = new b2Vec2(); + var b2Distance_s_supportB = new b2Vec2(); + function b2Distance(output, cache, input) { + ++exports.b2_gjkCalls; + var proxyA = input.proxyA; + var proxyB = input.proxyB; + var transformA = input.transformA; + var transformB = input.transformB; + var simplex = b2Distance_s_simplex; + simplex.ReadCache(cache, proxyA, transformA, proxyB, transformB); + var vertices = simplex.m_vertices; + var k_maxIters = 20; + var saveA = b2Distance_s_saveA; + var saveB = b2Distance_s_saveB; + var saveCount = 0; + var iter = 0; + while (iter < k_maxIters) { + saveCount = simplex.m_count; + for (var i = 0; i < saveCount; ++i) { + saveA[i] = vertices[i].indexA; + saveB[i] = vertices[i].indexB; + } + switch (simplex.m_count) { + case 1: + break; + + case 2: + simplex.Solve2(); + break; + + case 3: + simplex.Solve3(); + } + if (3 === simplex.m_count) break; + var d = simplex.GetSearchDirection(b2Distance_s_d); + if (d.LengthSquared() < b2_epsilon_sq) break; + var vertex = vertices[simplex.m_count]; + vertex.indexA = proxyA.GetSupport(b2Rot.MulTRV(transformA.q, b2Vec2.NegV(d, b2Vec2.s_t0), b2Distance_s_supportA)); + b2Transform.MulXV(transformA, proxyA.GetVertex(vertex.indexA), vertex.wA); + vertex.indexB = proxyB.GetSupport(b2Rot.MulTRV(transformB.q, d, b2Distance_s_supportB)); + b2Transform.MulXV(transformB, proxyB.GetVertex(vertex.indexB), vertex.wB); + b2Vec2.SubVV(vertex.wB, vertex.wA, vertex.w); + ++iter; + ++exports.b2_gjkIters; + var duplicate = false; + for (var i = 0; i < saveCount; ++i) if (vertex.indexA === saveA[i] && vertex.indexB === saveB[i]) { + duplicate = true; + break; + } + if (duplicate) break; + ++simplex.m_count; + } + exports.b2_gjkMaxIters = b2Max(exports.b2_gjkMaxIters, iter); + simplex.GetWitnessPoints(output.pointA, output.pointB); + output.distance = b2Vec2.DistanceVV(output.pointA, output.pointB); + output.iterations = iter; + simplex.WriteCache(cache); + if (input.useRadii) { + var rA = proxyA.m_radius; + var rB = proxyB.m_radius; + if (output.distance > rA + rB && output.distance > b2_epsilon) { + output.distance -= rA + rB; + var normal = b2Vec2.SubVV(output.pointB, output.pointA, b2Distance_s_normal); + normal.Normalize(); + output.pointA.SelfMulAdd(rA, normal); + output.pointB.SelfMulSub(rB, normal); + } else { + var p = b2Vec2.MidVV(output.pointA, output.pointB, b2Distance_s_p); + output.pointA.Copy(p); + output.pointB.Copy(p); + output.distance = 0; + } + } + } + var b2ShapeCast_s_n = new b2Vec2(); + var b2ShapeCast_s_simplex = new b2Simplex(); + var b2ShapeCast_s_wA = new b2Vec2(); + var b2ShapeCast_s_wB = new b2Vec2(); + var b2ShapeCast_s_v = new b2Vec2(); + var b2ShapeCast_s_p = new b2Vec2(); + var b2ShapeCast_s_pointA = new b2Vec2(); + var b2ShapeCast_s_pointB = new b2Vec2(); + function b2ShapeCast(output, input) { + output.iterations = 0; + output.lambda = 1; + output.normal.SetZero(); + output.point.SetZero(); + var proxyA = input.proxyA; + var proxyB = input.proxyB; + var radiusA = b2Max(proxyA.m_radius, b2_polygonRadius); + var radiusB = b2Max(proxyB.m_radius, b2_polygonRadius); + var radius = radiusA + radiusB; + var xfA = input.transformA; + var xfB = input.transformB; + var r = input.translationB; + var n = b2ShapeCast_s_n.Set(0, 0); + var lambda = 0; + var simplex = b2ShapeCast_s_simplex; + simplex.m_count = 0; + var vertices = simplex.m_vertices; + var indexA = proxyA.GetSupport(b2Rot.MulTRV(xfA.q, b2Vec2.NegV(r, b2Vec2.s_t1), b2Vec2.s_t0)); + var wA = b2Transform.MulXV(xfA, proxyA.GetVertex(indexA), b2ShapeCast_s_wA); + var indexB = proxyB.GetSupport(b2Rot.MulTRV(xfB.q, r, b2Vec2.s_t0)); + var wB = b2Transform.MulXV(xfB, proxyB.GetVertex(indexB), b2ShapeCast_s_wB); + var v = b2Vec2.SubVV(wA, wB, b2ShapeCast_s_v); + var sigma = b2Max(b2_polygonRadius, radius - b2_polygonRadius); + var tolerance = .5 * b2_linearSlop; + var k_maxIters = 20; + var iter = 0; + while (iter < k_maxIters && b2Abs(v.Length() - sigma) > tolerance) { + output.iterations += 1; + indexA = proxyA.GetSupport(b2Rot.MulTRV(xfA.q, b2Vec2.NegV(v, b2Vec2.s_t1), b2Vec2.s_t0)); + wA = b2Transform.MulXV(xfA, proxyA.GetVertex(indexA), b2ShapeCast_s_wA); + indexB = proxyB.GetSupport(b2Rot.MulTRV(xfB.q, v, b2Vec2.s_t0)); + wB = b2Transform.MulXV(xfB, proxyB.GetVertex(indexB), b2ShapeCast_s_wB); + var p = b2Vec2.SubVV(wA, wB, b2ShapeCast_s_p); + v.Normalize(); + var vp = b2Vec2.DotVV(v, p); + var vr = b2Vec2.DotVV(v, r); + if (vp - sigma > lambda * vr) { + if (vr <= 0) return false; + lambda = (vp - sigma) / vr; + if (lambda > 1) return false; + n.Copy(v).SelfNeg(); + simplex.m_count = 0; + } + var vertex = vertices[simplex.m_count]; + vertex.indexA = indexB; + vertex.wA.Copy(wB).SelfMulAdd(lambda, r); + vertex.indexB = indexA; + vertex.wB.Copy(wA); + vertex.w.Copy(vertex.wB).SelfSub(vertex.wA); + vertex.a = 1; + simplex.m_count += 1; + switch (simplex.m_count) { + case 1: + break; + + case 2: + simplex.Solve2(); + break; + + case 3: + simplex.Solve3(); + } + if (3 === simplex.m_count) return false; + simplex.GetClosestPoint(v); + ++iter; + } + var pointA = b2ShapeCast_s_pointA; + var pointB = b2ShapeCast_s_pointB; + simplex.GetWitnessPoints(pointA, pointB); + if (v.LengthSquared() > 0) { + n.Copy(v).SelfNeg(); + n.Normalize(); + } + output.normal.Copy(n); + output.lambda = lambda; + output.iterations = iter; + return true; + } + (function (b2ContactFeatureType) { + b2ContactFeatureType[b2ContactFeatureType["e_vertex"] = 0] = "e_vertex"; + b2ContactFeatureType[b2ContactFeatureType["e_face"] = 1] = "e_face"; + })(exports.b2ContactFeatureType || (exports.b2ContactFeatureType = {})); + var b2ContactFeature = (function () { + function b2ContactFeature() { + this._key = 0; + this._key_invalid = false; + this._indexA = 0; + this._indexB = 0; + this._typeA = 0; + this._typeB = 0; + } + Object.defineProperty(b2ContactFeature.prototype, "key", { + get: function get() { + if (this._key_invalid) { + this._key_invalid = false; + this._key = this._indexA | this._indexB << 8 | this._typeA << 16 | this._typeB << 24; + } + return this._key; + }, + set: function set(value) { + this._key = value; + this._key_invalid = false; + this._indexA = 255 & this._key; + this._indexB = this._key >> 8 & 255; + this._typeA = this._key >> 16 & 255; + this._typeB = this._key >> 24 & 255; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(b2ContactFeature.prototype, "indexA", { + get: function get() { + return this._indexA; + }, + set: function set(value) { + this._indexA = value; + this._key_invalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(b2ContactFeature.prototype, "indexB", { + get: function get() { + return this._indexB; + }, + set: function set(value) { + this._indexB = value; + this._key_invalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(b2ContactFeature.prototype, "typeA", { + get: function get() { + return this._typeA; + }, + set: function set(value) { + this._typeA = value; + this._key_invalid = true; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(b2ContactFeature.prototype, "typeB", { + get: function get() { + return this._typeB; + }, + set: function set(value) { + this._typeB = value; + this._key_invalid = true; + }, + enumerable: true, + configurable: true + }); + return b2ContactFeature; + })(); + var b2ContactID = (function () { + function b2ContactID() { + this.cf = new b2ContactFeature(); + } + b2ContactID.prototype.Copy = function (o) { + this.key = o.key; + return this; + }; + b2ContactID.prototype.Clone = function () { + return new b2ContactID().Copy(this); + }; + Object.defineProperty(b2ContactID.prototype, "key", { + get: function get() { + return this.cf.key; + }, + set: function set(value) { + this.cf.key = value; + }, + enumerable: true, + configurable: true + }); + return b2ContactID; + })(); + var b2ManifoldPoint = (function () { + function b2ManifoldPoint() { + this.localPoint = new b2Vec2(); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id = new b2ContactID(); + } + b2ManifoldPoint.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2ManifoldPoint(); + })); + }; + b2ManifoldPoint.prototype.Reset = function () { + this.localPoint.SetZero(); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.id.key = 0; + }; + b2ManifoldPoint.prototype.Copy = function (o) { + this.localPoint.Copy(o.localPoint); + this.normalImpulse = o.normalImpulse; + this.tangentImpulse = o.tangentImpulse; + this.id.Copy(o.id); + return this; + }; + return b2ManifoldPoint; + })(); + (function (b2ManifoldType) { + b2ManifoldType[b2ManifoldType["e_unknown"] = -1] = "e_unknown"; + b2ManifoldType[b2ManifoldType["e_circles"] = 0] = "e_circles"; + b2ManifoldType[b2ManifoldType["e_faceA"] = 1] = "e_faceA"; + b2ManifoldType[b2ManifoldType["e_faceB"] = 2] = "e_faceB"; + })(exports.b2ManifoldType || (exports.b2ManifoldType = {})); + var b2Manifold = (function () { + function b2Manifold() { + this.points = b2ManifoldPoint.MakeArray(b2_maxManifoldPoints); + this.localNormal = new b2Vec2(); + this.localPoint = new b2Vec2(); + this.type = exports.b2ManifoldType.e_unknown; + this.pointCount = 0; + } + b2Manifold.prototype.Reset = function () { + for (var i = 0; i < b2_maxManifoldPoints; ++i) this.points[i].Reset(); + this.localNormal.SetZero(); + this.localPoint.SetZero(); + this.type = exports.b2ManifoldType.e_unknown; + this.pointCount = 0; + }; + b2Manifold.prototype.Copy = function (o) { + this.pointCount = o.pointCount; + for (var i = 0; i < b2_maxManifoldPoints; ++i) this.points[i].Copy(o.points[i]); + this.localNormal.Copy(o.localNormal); + this.localPoint.Copy(o.localPoint); + this.type = o.type; + return this; + }; + b2Manifold.prototype.Clone = function () { + return new b2Manifold().Copy(this); + }; + return b2Manifold; + })(); + var b2WorldManifold = (function () { + function b2WorldManifold() { + this.normal = new b2Vec2(); + this.points = b2Vec2.MakeArray(b2_maxManifoldPoints); + this.separations = b2MakeNumberArray(b2_maxManifoldPoints); + } + b2WorldManifold.prototype.Initialize = function (manifold, xfA, radiusA, xfB, radiusB) { + if (0 === manifold.pointCount) return; + switch (manifold.type) { + case exports.b2ManifoldType.e_circles: + this.normal.Set(1, 0); + var pointA = b2Transform.MulXV(xfA, manifold.localPoint, b2WorldManifold.Initialize_s_pointA); + var pointB = b2Transform.MulXV(xfB, manifold.points[0].localPoint, b2WorldManifold.Initialize_s_pointB); + b2Vec2.DistanceSquaredVV(pointA, pointB) > b2_epsilon_sq && b2Vec2.SubVV(pointB, pointA, this.normal).SelfNormalize(); + var cA = b2Vec2.AddVMulSV(pointA, radiusA, this.normal, b2WorldManifold.Initialize_s_cA); + var cB = b2Vec2.SubVMulSV(pointB, radiusB, this.normal, b2WorldManifold.Initialize_s_cB); + b2Vec2.MidVV(cA, cB, this.points[0]); + this.separations[0] = b2Vec2.DotVV(b2Vec2.SubVV(cB, cA, b2Vec2.s_t0), this.normal); + break; + + case exports.b2ManifoldType.e_faceA: + b2Rot.MulRV(xfA.q, manifold.localNormal, this.normal); + var planePoint = b2Transform.MulXV(xfA, manifold.localPoint, b2WorldManifold.Initialize_s_planePoint); + for (var i = 0; i < manifold.pointCount; ++i) { + var clipPoint = b2Transform.MulXV(xfB, manifold.points[i].localPoint, b2WorldManifold.Initialize_s_clipPoint); + var s = radiusA - b2Vec2.DotVV(b2Vec2.SubVV(clipPoint, planePoint, b2Vec2.s_t0), this.normal); + var cA = b2Vec2.AddVMulSV(clipPoint, s, this.normal, b2WorldManifold.Initialize_s_cA); + var cB = b2Vec2.SubVMulSV(clipPoint, radiusB, this.normal, b2WorldManifold.Initialize_s_cB); + b2Vec2.MidVV(cA, cB, this.points[i]); + this.separations[i] = b2Vec2.DotVV(b2Vec2.SubVV(cB, cA, b2Vec2.s_t0), this.normal); + } + break; + + case exports.b2ManifoldType.e_faceB: + b2Rot.MulRV(xfB.q, manifold.localNormal, this.normal); + var planePoint = b2Transform.MulXV(xfB, manifold.localPoint, b2WorldManifold.Initialize_s_planePoint); + for (var i = 0; i < manifold.pointCount; ++i) { + var clipPoint = b2Transform.MulXV(xfA, manifold.points[i].localPoint, b2WorldManifold.Initialize_s_clipPoint); + var s = radiusB - b2Vec2.DotVV(b2Vec2.SubVV(clipPoint, planePoint, b2Vec2.s_t0), this.normal); + var cB = b2Vec2.AddVMulSV(clipPoint, s, this.normal, b2WorldManifold.Initialize_s_cB); + var cA = b2Vec2.SubVMulSV(clipPoint, radiusA, this.normal, b2WorldManifold.Initialize_s_cA); + b2Vec2.MidVV(cA, cB, this.points[i]); + this.separations[i] = b2Vec2.DotVV(b2Vec2.SubVV(cA, cB, b2Vec2.s_t0), this.normal); + } + this.normal.SelfNeg(); + } + }; + b2WorldManifold.Initialize_s_pointA = new b2Vec2(); + b2WorldManifold.Initialize_s_pointB = new b2Vec2(); + b2WorldManifold.Initialize_s_cA = new b2Vec2(); + b2WorldManifold.Initialize_s_cB = new b2Vec2(); + b2WorldManifold.Initialize_s_planePoint = new b2Vec2(); + b2WorldManifold.Initialize_s_clipPoint = new b2Vec2(); + return b2WorldManifold; + })(); + (function (b2PointState) { + b2PointState[b2PointState["b2_nullState"] = 0] = "b2_nullState"; + b2PointState[b2PointState["b2_addState"] = 1] = "b2_addState"; + b2PointState[b2PointState["b2_persistState"] = 2] = "b2_persistState"; + b2PointState[b2PointState["b2_removeState"] = 3] = "b2_removeState"; + })(exports.b2PointState || (exports.b2PointState = {})); + function b2GetPointStates(state1, state2, manifold1, manifold2) { + var i; + for (i = 0; i < manifold1.pointCount; ++i) { + var id = manifold1.points[i].id; + var key = id.key; + state1[i] = exports.b2PointState.b2_removeState; + for (var j = 0, jct = manifold2.pointCount; j < jct; ++j) if (manifold2.points[j].id.key === key) { + state1[i] = exports.b2PointState.b2_persistState; + break; + } + } + for (; i < b2_maxManifoldPoints; ++i) state1[i] = exports.b2PointState.b2_nullState; + for (i = 0; i < manifold2.pointCount; ++i) { + var id = manifold2.points[i].id; + var key = id.key; + state2[i] = exports.b2PointState.b2_addState; + for (var j = 0, jct = manifold1.pointCount; j < jct; ++j) if (manifold1.points[j].id.key === key) { + state2[i] = exports.b2PointState.b2_persistState; + break; + } + } + for (; i < b2_maxManifoldPoints; ++i) state2[i] = exports.b2PointState.b2_nullState; + } + var b2ClipVertex = (function () { + function b2ClipVertex() { + this.v = new b2Vec2(); + this.id = new b2ContactID(); + } + b2ClipVertex.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2ClipVertex(); + })); + }; + b2ClipVertex.prototype.Copy = function (other) { + this.v.Copy(other.v); + this.id.Copy(other.id); + return this; + }; + return b2ClipVertex; + })(); + var b2RayCastInput = (function () { + function b2RayCastInput() { + this.p1 = new b2Vec2(); + this.p2 = new b2Vec2(); + this.maxFraction = 1; + } + b2RayCastInput.prototype.Copy = function (o) { + this.p1.Copy(o.p1); + this.p2.Copy(o.p2); + this.maxFraction = o.maxFraction; + return this; + }; + return b2RayCastInput; + })(); + var b2RayCastOutput = (function () { + function b2RayCastOutput() { + this.normal = new b2Vec2(); + this.fraction = 0; + } + b2RayCastOutput.prototype.Copy = function (o) { + this.normal.Copy(o.normal); + this.fraction = o.fraction; + return this; + }; + return b2RayCastOutput; + })(); + var b2AABB = (function () { + function b2AABB() { + this.lowerBound = new b2Vec2(); + this.upperBound = new b2Vec2(); + this.m_cache_center = new b2Vec2(); + this.m_cache_extent = new b2Vec2(); + } + b2AABB.prototype.Copy = function (o) { + this.lowerBound.Copy(o.lowerBound); + this.upperBound.Copy(o.upperBound); + return this; + }; + b2AABB.prototype.IsValid = function () { + var d_x = this.upperBound.x - this.lowerBound.x; + var d_y = this.upperBound.y - this.lowerBound.y; + var valid = d_x >= 0 && d_y >= 0; + valid = valid && this.lowerBound.IsValid() && this.upperBound.IsValid(); + return valid; + }; + b2AABB.prototype.GetCenter = function () { + return b2Vec2.MidVV(this.lowerBound, this.upperBound, this.m_cache_center); + }; + b2AABB.prototype.GetExtents = function () { + return b2Vec2.ExtVV(this.lowerBound, this.upperBound, this.m_cache_extent); + }; + b2AABB.prototype.GetPerimeter = function () { + var wx = this.upperBound.x - this.lowerBound.x; + var wy = this.upperBound.y - this.lowerBound.y; + return 2 * (wx + wy); + }; + b2AABB.prototype.Combine1 = function (aabb) { + this.lowerBound.x = b2Min(this.lowerBound.x, aabb.lowerBound.x); + this.lowerBound.y = b2Min(this.lowerBound.y, aabb.lowerBound.y); + this.upperBound.x = b2Max(this.upperBound.x, aabb.upperBound.x); + this.upperBound.y = b2Max(this.upperBound.y, aabb.upperBound.y); + return this; + }; + b2AABB.prototype.Combine2 = function (aabb1, aabb2) { + this.lowerBound.x = b2Min(aabb1.lowerBound.x, aabb2.lowerBound.x); + this.lowerBound.y = b2Min(aabb1.lowerBound.y, aabb2.lowerBound.y); + this.upperBound.x = b2Max(aabb1.upperBound.x, aabb2.upperBound.x); + this.upperBound.y = b2Max(aabb1.upperBound.y, aabb2.upperBound.y); + return this; + }; + b2AABB.Combine = function (aabb1, aabb2, out) { + out.Combine2(aabb1, aabb2); + return out; + }; + b2AABB.prototype.Contains = function (aabb) { + var result = true; + result = result && this.lowerBound.x <= aabb.lowerBound.x; + result = result && this.lowerBound.y <= aabb.lowerBound.y; + result = result && aabb.upperBound.x <= this.upperBound.x; + result = result && aabb.upperBound.y <= this.upperBound.y; + return result; + }; + b2AABB.prototype.RayCast = function (output, input) { + var tmin = -b2_maxFloat; + var tmax = b2_maxFloat; + var p_x = input.p1.x; + var p_y = input.p1.y; + var d_x = input.p2.x - input.p1.x; + var d_y = input.p2.y - input.p1.y; + var absD_x = b2Abs(d_x); + var absD_y = b2Abs(d_y); + var normal = output.normal; + if (absD_x < b2_epsilon) { + if (p_x < this.lowerBound.x || this.upperBound.x < p_x) return false; + } else { + var inv_d = 1 / d_x; + var t1 = (this.lowerBound.x - p_x) * inv_d; + var t2 = (this.upperBound.x - p_x) * inv_d; + var s = -1; + if (t1 > t2) { + var t3 = t1; + t1 = t2; + t2 = t3; + s = 1; + } + if (t1 > tmin) { + normal.x = s; + normal.y = 0; + tmin = t1; + } + tmax = b2Min(tmax, t2); + if (tmin > tmax) return false; + } + if (absD_y < b2_epsilon) { + if (p_y < this.lowerBound.y || this.upperBound.y < p_y) return false; + } else { + var inv_d = 1 / d_y; + var t1 = (this.lowerBound.y - p_y) * inv_d; + var t2 = (this.upperBound.y - p_y) * inv_d; + var s = -1; + if (t1 > t2) { + var t3 = t1; + t1 = t2; + t2 = t3; + s = 1; + } + if (t1 > tmin) { + normal.x = 0; + normal.y = s; + tmin = t1; + } + tmax = b2Min(tmax, t2); + if (tmin > tmax) return false; + } + if (tmin < 0 || input.maxFraction < tmin) return false; + output.fraction = tmin; + return true; + }; + b2AABB.prototype.TestContain = function (point) { + if (point.x < this.lowerBound.x || this.upperBound.x < point.x) return false; + if (point.y < this.lowerBound.y || this.upperBound.y < point.y) return false; + return true; + }; + b2AABB.prototype.TestOverlap = function (other) { + var d1_x = other.lowerBound.x - this.upperBound.x; + var d1_y = other.lowerBound.y - this.upperBound.y; + var d2_x = this.lowerBound.x - other.upperBound.x; + var d2_y = this.lowerBound.y - other.upperBound.y; + if (d1_x > 0 || d1_y > 0) return false; + if (d2_x > 0 || d2_y > 0) return false; + return true; + }; + return b2AABB; + })(); + function b2TestOverlapAABB(a, b) { + var d1_x = b.lowerBound.x - a.upperBound.x; + var d1_y = b.lowerBound.y - a.upperBound.y; + var d2_x = a.lowerBound.x - b.upperBound.x; + var d2_y = a.lowerBound.y - b.upperBound.y; + if (d1_x > 0 || d1_y > 0) return false; + if (d2_x > 0 || d2_y > 0) return false; + return true; + } + function b2ClipSegmentToLine(vOut, vIn, normal, offset, vertexIndexA) { + var numOut = 0; + var vIn0 = vIn[0]; + var vIn1 = vIn[1]; + var distance0 = b2Vec2.DotVV(normal, vIn0.v) - offset; + var distance1 = b2Vec2.DotVV(normal, vIn1.v) - offset; + distance0 <= 0 && vOut[numOut++].Copy(vIn0); + distance1 <= 0 && vOut[numOut++].Copy(vIn1); + if (distance0 * distance1 < 0) { + var interp = distance0 / (distance0 - distance1); + var v = vOut[numOut].v; + v.x = vIn0.v.x + interp * (vIn1.v.x - vIn0.v.x); + v.y = vIn0.v.y + interp * (vIn1.v.y - vIn0.v.y); + var id = vOut[numOut].id; + id.cf.indexA = vertexIndexA; + id.cf.indexB = vIn0.id.cf.indexB; + id.cf.typeA = exports.b2ContactFeatureType.e_vertex; + id.cf.typeB = exports.b2ContactFeatureType.e_face; + ++numOut; + } + return numOut; + } + var b2TestOverlapShape_s_input = new b2DistanceInput(); + var b2TestOverlapShape_s_simplexCache = new b2SimplexCache(); + var b2TestOverlapShape_s_output = new b2DistanceOutput(); + function b2TestOverlapShape(shapeA, indexA, shapeB, indexB, xfA, xfB) { + var input = b2TestOverlapShape_s_input.Reset(); + input.proxyA.SetShape(shapeA, indexA); + input.proxyB.SetShape(shapeB, indexB); + input.transformA.Copy(xfA); + input.transformB.Copy(xfB); + input.useRadii = true; + var simplexCache = b2TestOverlapShape_s_simplexCache.Reset(); + simplexCache.count = 0; + var output = b2TestOverlapShape_s_output.Reset(); + b2Distance(output, simplexCache, input); + return output.distance < 10 * b2_epsilon; + } + function verify(value) { + if (null === value) throw new Error(); + return value; + } + var b2TreeNode = (function () { + function b2TreeNode(id) { + void 0 === id && (id = 0); + this.m_id = 0; + this.aabb = new b2AABB(); + this.parent = null; + this.child1 = null; + this.child2 = null; + this.height = 0; + this.m_id = id; + } + b2TreeNode.prototype.IsLeaf = function () { + return null === this.child1; + }; + return b2TreeNode; + })(); + var b2DynamicTree = (function () { + function b2DynamicTree() { + this.m_root = null; + this.m_freeList = null; + this.m_path = 0; + this.m_insertionCount = 0; + this.m_stack = new b2GrowableStack(256); + } + b2DynamicTree.prototype.Query = function (aabb, callback) { + if (null === this.m_root) return; + var stack = this.m_stack.Reset(); + stack.Push(this.m_root); + while (stack.GetCount() > 0) { + var node = stack.Pop(); + if (node.aabb.TestOverlap(aabb)) if (node.IsLeaf()) { + var proceed = callback(node); + if (!proceed) return; + } else { + stack.Push(verify(node.child1)); + stack.Push(verify(node.child2)); + } + } + }; + b2DynamicTree.prototype.QueryPoint = function (point, callback) { + if (null === this.m_root) return; + var stack = this.m_stack.Reset(); + stack.Push(this.m_root); + while (stack.GetCount() > 0) { + var node = stack.Pop(); + if (node.aabb.TestContain(point)) if (node.IsLeaf()) { + var proceed = callback(node); + if (!proceed) return; + } else { + stack.Push(verify(node.child1)); + stack.Push(verify(node.child2)); + } + } + }; + b2DynamicTree.prototype.RayCast = function (input, callback) { + if (null === this.m_root) return; + var p1 = input.p1; + var p2 = input.p2; + var r = b2Vec2.SubVV(p2, p1, b2DynamicTree.s_r); + r.Normalize(); + var v = b2Vec2.CrossOneV(r, b2DynamicTree.s_v); + var abs_v = b2Vec2.AbsV(v, b2DynamicTree.s_abs_v); + var maxFraction = input.maxFraction; + var segmentAABB = b2DynamicTree.s_segmentAABB; + var t_x = p1.x + maxFraction * (p2.x - p1.x); + var t_y = p1.y + maxFraction * (p2.y - p1.y); + segmentAABB.lowerBound.x = b2Min(p1.x, t_x); + segmentAABB.lowerBound.y = b2Min(p1.y, t_y); + segmentAABB.upperBound.x = b2Max(p1.x, t_x); + segmentAABB.upperBound.y = b2Max(p1.y, t_y); + var stack = this.m_stack.Reset(); + stack.Push(this.m_root); + while (stack.GetCount() > 0) { + var node = stack.Pop(); + if (!b2TestOverlapAABB(node.aabb, segmentAABB)) continue; + var c = node.aabb.GetCenter(); + var h = node.aabb.GetExtents(); + var separation = b2Abs(b2Vec2.DotVV(v, b2Vec2.SubVV(p1, c, b2Vec2.s_t0))) - b2Vec2.DotVV(abs_v, h); + if (separation > 0) continue; + if (node.IsLeaf()) { + var subInput = b2DynamicTree.s_subInput; + subInput.p1.Copy(input.p1); + subInput.p2.Copy(input.p2); + subInput.maxFraction = maxFraction; + var value = callback(subInput, node); + if (0 === value) return; + if (value > 0) { + maxFraction = value; + t_x = p1.x + maxFraction * (p2.x - p1.x); + t_y = p1.y + maxFraction * (p2.y - p1.y); + segmentAABB.lowerBound.x = b2Min(p1.x, t_x); + segmentAABB.lowerBound.y = b2Min(p1.y, t_y); + segmentAABB.upperBound.x = b2Max(p1.x, t_x); + segmentAABB.upperBound.y = b2Max(p1.y, t_y); + } + } else { + stack.Push(verify(node.child1)); + stack.Push(verify(node.child2)); + } + } + }; + b2DynamicTree.prototype.AllocateNode = function () { + if (this.m_freeList) { + var node = this.m_freeList; + this.m_freeList = node.parent; + node.parent = null; + node.child1 = null; + node.child2 = null; + node.height = 0; + delete node.userData; + return node; + } + return new b2TreeNode(b2DynamicTree.s_node_id++); + }; + b2DynamicTree.prototype.FreeNode = function (node) { + node.parent = this.m_freeList; + node.child1 = null; + node.child2 = null; + node.height = -1; + delete node.userData; + this.m_freeList = node; + }; + b2DynamicTree.prototype.CreateProxy = function (aabb, userData) { + var node = this.AllocateNode(); + var r_x = b2_aabbExtension; + var r_y = b2_aabbExtension; + node.aabb.lowerBound.x = aabb.lowerBound.x - r_x; + node.aabb.lowerBound.y = aabb.lowerBound.y - r_y; + node.aabb.upperBound.x = aabb.upperBound.x + r_x; + node.aabb.upperBound.y = aabb.upperBound.y + r_y; + node.userData = userData; + node.height = 0; + this.InsertLeaf(node); + return node; + }; + b2DynamicTree.prototype.DestroyProxy = function (proxy) { + this.RemoveLeaf(proxy); + this.FreeNode(proxy); + }; + b2DynamicTree.prototype.MoveProxy = function (proxy, aabb, displacement) { + if (proxy.aabb.Contains(aabb)) return false; + this.RemoveLeaf(proxy); + var r_x = b2_aabbExtension + b2_aabbMultiplier * (displacement.x > 0 ? displacement.x : -displacement.x); + var r_y = b2_aabbExtension + b2_aabbMultiplier * (displacement.y > 0 ? displacement.y : -displacement.y); + proxy.aabb.lowerBound.x = aabb.lowerBound.x - r_x; + proxy.aabb.lowerBound.y = aabb.lowerBound.y - r_y; + proxy.aabb.upperBound.x = aabb.upperBound.x + r_x; + proxy.aabb.upperBound.y = aabb.upperBound.y + r_y; + this.InsertLeaf(proxy); + return true; + }; + b2DynamicTree.prototype.InsertLeaf = function (leaf) { + ++this.m_insertionCount; + if (null === this.m_root) { + this.m_root = leaf; + this.m_root.parent = null; + return; + } + var leafAABB = leaf.aabb; + var index = this.m_root; + while (!index.IsLeaf()) { + var child1 = verify(index.child1); + var child2 = verify(index.child2); + var area = index.aabb.GetPerimeter(); + var combinedAABB = b2DynamicTree.s_combinedAABB; + combinedAABB.Combine2(index.aabb, leafAABB); + var combinedArea = combinedAABB.GetPerimeter(); + var cost = 2 * combinedArea; + var inheritanceCost = 2 * (combinedArea - area); + var cost1 = void 0; + var aabb = b2DynamicTree.s_aabb; + var oldArea = void 0; + var newArea = void 0; + if (child1.IsLeaf()) { + aabb.Combine2(leafAABB, child1.aabb); + cost1 = aabb.GetPerimeter() + inheritanceCost; + } else { + aabb.Combine2(leafAABB, child1.aabb); + oldArea = child1.aabb.GetPerimeter(); + newArea = aabb.GetPerimeter(); + cost1 = newArea - oldArea + inheritanceCost; + } + var cost2 = void 0; + if (child2.IsLeaf()) { + aabb.Combine2(leafAABB, child2.aabb); + cost2 = aabb.GetPerimeter() + inheritanceCost; + } else { + aabb.Combine2(leafAABB, child2.aabb); + oldArea = child2.aabb.GetPerimeter(); + newArea = aabb.GetPerimeter(); + cost2 = newArea - oldArea + inheritanceCost; + } + if (cost < cost1 && cost < cost2) break; + index = cost1 < cost2 ? child1 : child2; + } + var sibling = index; + var oldParent = sibling.parent; + var newParent = this.AllocateNode(); + newParent.parent = oldParent; + delete newParent.userData; + newParent.aabb.Combine2(leafAABB, sibling.aabb); + newParent.height = sibling.height + 1; + if (oldParent) { + oldParent.child1 === sibling ? oldParent.child1 = newParent : oldParent.child2 = newParent; + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + } else { + newParent.child1 = sibling; + newParent.child2 = leaf; + sibling.parent = newParent; + leaf.parent = newParent; + this.m_root = newParent; + } + var index2 = leaf.parent; + while (null !== index2) { + index2 = this.Balance(index2); + var child1 = verify(index2.child1); + var child2 = verify(index2.child2); + index2.height = 1 + b2Max(child1.height, child2.height); + index2.aabb.Combine2(child1.aabb, child2.aabb); + index2 = index2.parent; + } + }; + b2DynamicTree.prototype.RemoveLeaf = function (leaf) { + if (leaf === this.m_root) { + this.m_root = null; + return; + } + var parent = verify(leaf.parent); + var grandParent = parent && parent.parent; + var sibling; + sibling = parent.child1 === leaf ? verify(parent.child2) : verify(parent.child1); + if (grandParent) { + grandParent.child1 === parent ? grandParent.child1 = sibling : grandParent.child2 = sibling; + sibling.parent = grandParent; + this.FreeNode(parent); + var index = grandParent; + while (index) { + index = this.Balance(index); + var child1 = verify(index.child1); + var child2 = verify(index.child2); + index.aabb.Combine2(child1.aabb, child2.aabb); + index.height = 1 + b2Max(child1.height, child2.height); + index = index.parent; + } + } else { + this.m_root = sibling; + sibling.parent = null; + this.FreeNode(parent); + } + }; + b2DynamicTree.prototype.Balance = function (A) { + if (A.IsLeaf() || A.height < 2) return A; + var B = verify(A.child1); + var C = verify(A.child2); + var balance = C.height - B.height; + if (balance > 1) { + var F = verify(C.child1); + var G = verify(C.child2); + C.child1 = A; + C.parent = A.parent; + A.parent = C; + null !== C.parent ? C.parent.child1 === A ? C.parent.child1 = C : C.parent.child2 = C : this.m_root = C; + if (F.height > G.height) { + C.child2 = F; + A.child2 = G; + G.parent = A; + A.aabb.Combine2(B.aabb, G.aabb); + C.aabb.Combine2(A.aabb, F.aabb); + A.height = 1 + b2Max(B.height, G.height); + C.height = 1 + b2Max(A.height, F.height); + } else { + C.child2 = G; + A.child2 = F; + F.parent = A; + A.aabb.Combine2(B.aabb, F.aabb); + C.aabb.Combine2(A.aabb, G.aabb); + A.height = 1 + b2Max(B.height, F.height); + C.height = 1 + b2Max(A.height, G.height); + } + return C; + } + if (balance < -1) { + var D = verify(B.child1); + var E = verify(B.child2); + B.child1 = A; + B.parent = A.parent; + A.parent = B; + null !== B.parent ? B.parent.child1 === A ? B.parent.child1 = B : B.parent.child2 = B : this.m_root = B; + if (D.height > E.height) { + B.child2 = D; + A.child1 = E; + E.parent = A; + A.aabb.Combine2(C.aabb, E.aabb); + B.aabb.Combine2(A.aabb, D.aabb); + A.height = 1 + b2Max(C.height, E.height); + B.height = 1 + b2Max(A.height, D.height); + } else { + B.child2 = E; + A.child1 = D; + D.parent = A; + A.aabb.Combine2(C.aabb, D.aabb); + B.aabb.Combine2(A.aabb, E.aabb); + A.height = 1 + b2Max(C.height, D.height); + B.height = 1 + b2Max(A.height, E.height); + } + return B; + } + return A; + }; + b2DynamicTree.prototype.GetHeight = function () { + if (null === this.m_root) return 0; + return this.m_root.height; + }; + b2DynamicTree.GetAreaNode = function (node) { + if (null === node) return 0; + if (node.IsLeaf()) return 0; + var area = node.aabb.GetPerimeter(); + area += b2DynamicTree.GetAreaNode(node.child1); + area += b2DynamicTree.GetAreaNode(node.child2); + return area; + }; + b2DynamicTree.prototype.GetAreaRatio = function () { + if (null === this.m_root) return 0; + var root = this.m_root; + var rootArea = root.aabb.GetPerimeter(); + var totalArea = b2DynamicTree.GetAreaNode(this.m_root); + return totalArea / rootArea; + }; + b2DynamicTree.prototype.ComputeHeightNode = function (node) { + if (!node || node.IsLeaf()) return 0; + var height1 = this.ComputeHeightNode(node.child1); + var height2 = this.ComputeHeightNode(node.child2); + return 1 + b2Max(height1, height2); + }; + b2DynamicTree.prototype.ComputeHeight = function () { + var height = this.ComputeHeightNode(this.m_root); + return height; + }; + b2DynamicTree.prototype.ValidateStructure = function (index) { + if (null === index) return; + index === this.m_root; + var node = index; + if (node.IsLeaf()) return; + var child1 = verify(node.child1); + var child2 = verify(node.child2); + this.ValidateStructure(child1); + this.ValidateStructure(child2); + }; + b2DynamicTree.prototype.ValidateMetrics = function (index) { + if (null === index) return; + var node = index; + if (node.IsLeaf()) return; + var child1 = verify(node.child1); + var child2 = verify(node.child2); + var aabb = b2DynamicTree.s_aabb; + aabb.Combine2(child1.aabb, child2.aabb); + this.ValidateMetrics(child1); + this.ValidateMetrics(child2); + }; + b2DynamicTree.prototype.Validate = function () { }; + b2DynamicTree.GetMaxBalanceNode = function (node, maxBalance) { + if (null === node) return maxBalance; + if (node.height <= 1) return maxBalance; + var child1 = verify(node.child1); + var child2 = verify(node.child2); + var balance = b2Abs(child2.height - child1.height); + return b2Max(maxBalance, balance); + }; + b2DynamicTree.prototype.GetMaxBalance = function () { + var maxBalance = b2DynamicTree.GetMaxBalanceNode(this.m_root, 0); + return maxBalance; + }; + b2DynamicTree.prototype.RebuildBottomUp = function () { + this.Validate(); + }; + b2DynamicTree.ShiftOriginNode = function (node, newOrigin) { + if (null === node) return; + if (node.height <= 1) return; + var child1 = node.child1; + var child2 = node.child2; + b2DynamicTree.ShiftOriginNode(child1, newOrigin); + b2DynamicTree.ShiftOriginNode(child2, newOrigin); + node.aabb.lowerBound.SelfSub(newOrigin); + node.aabb.upperBound.SelfSub(newOrigin); + }; + b2DynamicTree.prototype.ShiftOrigin = function (newOrigin) { + b2DynamicTree.ShiftOriginNode(this.m_root, newOrigin); + }; + b2DynamicTree.s_r = new b2Vec2(); + b2DynamicTree.s_v = new b2Vec2(); + b2DynamicTree.s_abs_v = new b2Vec2(); + b2DynamicTree.s_segmentAABB = new b2AABB(); + b2DynamicTree.s_subInput = new b2RayCastInput(); + b2DynamicTree.s_combinedAABB = new b2AABB(); + b2DynamicTree.s_aabb = new b2AABB(); + b2DynamicTree.s_node_id = 0; + return b2DynamicTree; + })(); + var b2Pair = (function () { + function b2Pair(proxyA, proxyB) { + this.proxyA = proxyA; + this.proxyB = proxyB; + } + return b2Pair; + })(); + var b2BroadPhase = (function () { + function b2BroadPhase() { + this.m_tree = new b2DynamicTree(); + this.m_proxyCount = 0; + this.m_moveCount = 0; + this.m_moveBuffer = []; + this.m_pairCount = 0; + this.m_pairBuffer = []; + } + b2BroadPhase.prototype.CreateProxy = function (aabb, userData) { + var proxy = this.m_tree.CreateProxy(aabb, userData); + ++this.m_proxyCount; + this.BufferMove(proxy); + return proxy; + }; + b2BroadPhase.prototype.DestroyProxy = function (proxy) { + this.UnBufferMove(proxy); + --this.m_proxyCount; + this.m_tree.DestroyProxy(proxy); + }; + b2BroadPhase.prototype.MoveProxy = function (proxy, aabb, displacement) { + var buffer = this.m_tree.MoveProxy(proxy, aabb, displacement); + buffer && this.BufferMove(proxy); + }; + b2BroadPhase.prototype.TouchProxy = function (proxy) { + this.BufferMove(proxy); + }; + b2BroadPhase.prototype.GetProxyCount = function () { + return this.m_proxyCount; + }; + b2BroadPhase.prototype.UpdatePairs = function (callback) { + var _this = this; + this.m_pairCount = 0; + var _loop_1 = function _loop_1(i_1) { + var queryProxy = this_1.m_moveBuffer[i_1]; + if (null === queryProxy) return "continue"; + var fatAABB = queryProxy.aabb; + this_1.m_tree.Query(fatAABB, (function (proxy) { + if (proxy.m_id === queryProxy.m_id) return true; + var proxyA; + var proxyB; + if (proxy.m_id < queryProxy.m_id) { + proxyA = proxy; + proxyB = queryProxy; + } else { + proxyA = queryProxy; + proxyB = proxy; + } + if (_this.m_pairCount === _this.m_pairBuffer.length) _this.m_pairBuffer[_this.m_pairCount] = new b2Pair(proxyA, proxyB); else { + var pair = _this.m_pairBuffer[_this.m_pairCount]; + pair.proxyA = proxyA; + pair.proxyB = proxyB; + } + ++_this.m_pairCount; + return true; + })); + }; + var this_1 = this; + for (var i_1 = 0; i_1 < this.m_moveCount; ++i_1) _loop_1(i_1); + this.m_moveCount = 0; + this.m_pairBuffer.length = this.m_pairCount; + this.m_pairBuffer.sort(b2PairLessThan); + var i = 0; + while (i < this.m_pairCount) { + var primaryPair = this.m_pairBuffer[i]; + var userDataA = primaryPair.proxyA.userData; + var userDataB = primaryPair.proxyB.userData; + userDataA && userDataB && callback(userDataA, userDataB); + ++i; + while (i < this.m_pairCount) { + var pair = this.m_pairBuffer[i]; + if (pair.proxyA.m_id !== primaryPair.proxyA.m_id || pair.proxyB.m_id !== primaryPair.proxyB.m_id) break; + ++i; + } + } + }; + b2BroadPhase.prototype.Query = function (aabb, callback) { + this.m_tree.Query(aabb, callback); + }; + b2BroadPhase.prototype.QueryPoint = function (point, callback) { + this.m_tree.QueryPoint(point, callback); + }; + b2BroadPhase.prototype.RayCast = function (input, callback) { + this.m_tree.RayCast(input, callback); + }; + b2BroadPhase.prototype.GetTreeHeight = function () { + return this.m_tree.GetHeight(); + }; + b2BroadPhase.prototype.GetTreeBalance = function () { + return this.m_tree.GetMaxBalance(); + }; + b2BroadPhase.prototype.GetTreeQuality = function () { + return this.m_tree.GetAreaRatio(); + }; + b2BroadPhase.prototype.ShiftOrigin = function (newOrigin) { + this.m_tree.ShiftOrigin(newOrigin); + }; + b2BroadPhase.prototype.BufferMove = function (proxy) { + this.m_moveBuffer[this.m_moveCount] = proxy; + ++this.m_moveCount; + }; + b2BroadPhase.prototype.UnBufferMove = function (proxy) { + var i = this.m_moveBuffer.indexOf(proxy); + this.m_moveBuffer[i] = null; + }; + return b2BroadPhase; + })(); + function b2PairLessThan(pair1, pair2) { + if (pair1.proxyA.m_id === pair2.proxyA.m_id) return pair1.proxyB.m_id - pair2.proxyB.m_id; + return pair1.proxyA.m_id - pair2.proxyA.m_id; + } + exports.b2_toiTime = 0; + exports.b2_toiMaxTime = 0; + exports.b2_toiCalls = 0; + exports.b2_toiIters = 0; + exports.b2_toiMaxIters = 0; + exports.b2_toiRootIters = 0; + exports.b2_toiMaxRootIters = 0; + function b2_toi_reset() { + exports.b2_toiTime = 0; + exports.b2_toiMaxTime = 0; + exports.b2_toiCalls = 0; + exports.b2_toiIters = 0; + exports.b2_toiMaxIters = 0; + exports.b2_toiRootIters = 0; + exports.b2_toiMaxRootIters = 0; + } + var b2TimeOfImpact_s_xfA = new b2Transform(); + var b2TimeOfImpact_s_xfB = new b2Transform(); + var b2TimeOfImpact_s_pointA = new b2Vec2(); + var b2TimeOfImpact_s_pointB = new b2Vec2(); + var b2TimeOfImpact_s_normal = new b2Vec2(); + var b2TimeOfImpact_s_axisA = new b2Vec2(); + var b2TimeOfImpact_s_axisB = new b2Vec2(); + var b2TOIInput = (function () { + function b2TOIInput() { + this.proxyA = new b2DistanceProxy(); + this.proxyB = new b2DistanceProxy(); + this.sweepA = new b2Sweep(); + this.sweepB = new b2Sweep(); + this.tMax = 0; + } + return b2TOIInput; + })(); + (function (b2TOIOutputState) { + b2TOIOutputState[b2TOIOutputState["e_unknown"] = 0] = "e_unknown"; + b2TOIOutputState[b2TOIOutputState["e_failed"] = 1] = "e_failed"; + b2TOIOutputState[b2TOIOutputState["e_overlapped"] = 2] = "e_overlapped"; + b2TOIOutputState[b2TOIOutputState["e_touching"] = 3] = "e_touching"; + b2TOIOutputState[b2TOIOutputState["e_separated"] = 4] = "e_separated"; + })(exports.b2TOIOutputState || (exports.b2TOIOutputState = {})); + var b2TOIOutput = (function () { + function b2TOIOutput() { + this.state = exports.b2TOIOutputState.e_unknown; + this.t = 0; + } + return b2TOIOutput; + })(); + (function (b2SeparationFunctionType) { + b2SeparationFunctionType[b2SeparationFunctionType["e_unknown"] = -1] = "e_unknown"; + b2SeparationFunctionType[b2SeparationFunctionType["e_points"] = 0] = "e_points"; + b2SeparationFunctionType[b2SeparationFunctionType["e_faceA"] = 1] = "e_faceA"; + b2SeparationFunctionType[b2SeparationFunctionType["e_faceB"] = 2] = "e_faceB"; + })(exports.b2SeparationFunctionType || (exports.b2SeparationFunctionType = {})); + var b2SeparationFunction = (function () { + function b2SeparationFunction() { + this.m_sweepA = new b2Sweep(); + this.m_sweepB = new b2Sweep(); + this.m_type = exports.b2SeparationFunctionType.e_unknown; + this.m_localPoint = new b2Vec2(); + this.m_axis = new b2Vec2(); + } + b2SeparationFunction.prototype.Initialize = function (cache, proxyA, sweepA, proxyB, sweepB, t1) { + this.m_proxyA = proxyA; + this.m_proxyB = proxyB; + var count = cache.count; + this.m_sweepA.Copy(sweepA); + this.m_sweepB.Copy(sweepB); + var xfA = b2TimeOfImpact_s_xfA; + var xfB = b2TimeOfImpact_s_xfB; + this.m_sweepA.GetTransform(xfA, t1); + this.m_sweepB.GetTransform(xfB, t1); + if (1 === count) { + this.m_type = exports.b2SeparationFunctionType.e_points; + var localPointA = this.m_proxyA.GetVertex(cache.indexA[0]); + var localPointB = this.m_proxyB.GetVertex(cache.indexB[0]); + var pointA = b2Transform.MulXV(xfA, localPointA, b2TimeOfImpact_s_pointA); + var pointB = b2Transform.MulXV(xfB, localPointB, b2TimeOfImpact_s_pointB); + b2Vec2.SubVV(pointB, pointA, this.m_axis); + var s = this.m_axis.Normalize(); + this.m_localPoint.SetZero(); + return s; + } + if (cache.indexA[0] === cache.indexA[1]) { + this.m_type = exports.b2SeparationFunctionType.e_faceB; + var localPointB1 = this.m_proxyB.GetVertex(cache.indexB[0]); + var localPointB2 = this.m_proxyB.GetVertex(cache.indexB[1]); + b2Vec2.CrossVOne(b2Vec2.SubVV(localPointB2, localPointB1, b2Vec2.s_t0), this.m_axis).SelfNormalize(); + var normal = b2Rot.MulRV(xfB.q, this.m_axis, b2TimeOfImpact_s_normal); + b2Vec2.MidVV(localPointB1, localPointB2, this.m_localPoint); + var pointB = b2Transform.MulXV(xfB, this.m_localPoint, b2TimeOfImpact_s_pointB); + var localPointA = this.m_proxyA.GetVertex(cache.indexA[0]); + var pointA = b2Transform.MulXV(xfA, localPointA, b2TimeOfImpact_s_pointA); + var s = b2Vec2.DotVV(b2Vec2.SubVV(pointA, pointB, b2Vec2.s_t0), normal); + if (s < 0) { + this.m_axis.SelfNeg(); + s = -s; + } + return s; + } + this.m_type = exports.b2SeparationFunctionType.e_faceA; + var localPointA1 = this.m_proxyA.GetVertex(cache.indexA[0]); + var localPointA2 = this.m_proxyA.GetVertex(cache.indexA[1]); + b2Vec2.CrossVOne(b2Vec2.SubVV(localPointA2, localPointA1, b2Vec2.s_t0), this.m_axis).SelfNormalize(); + var normal = b2Rot.MulRV(xfA.q, this.m_axis, b2TimeOfImpact_s_normal); + b2Vec2.MidVV(localPointA1, localPointA2, this.m_localPoint); + var pointA = b2Transform.MulXV(xfA, this.m_localPoint, b2TimeOfImpact_s_pointA); + var localPointB = this.m_proxyB.GetVertex(cache.indexB[0]); + var pointB = b2Transform.MulXV(xfB, localPointB, b2TimeOfImpact_s_pointB); + var s = b2Vec2.DotVV(b2Vec2.SubVV(pointB, pointA, b2Vec2.s_t0), normal); + if (s < 0) { + this.m_axis.SelfNeg(); + s = -s; + } + return s; + }; + b2SeparationFunction.prototype.FindMinSeparation = function (indexA, indexB, t) { + var xfA = b2TimeOfImpact_s_xfA; + var xfB = b2TimeOfImpact_s_xfB; + this.m_sweepA.GetTransform(xfA, t); + this.m_sweepB.GetTransform(xfB, t); + switch (this.m_type) { + case exports.b2SeparationFunctionType.e_points: + var axisA = b2Rot.MulTRV(xfA.q, this.m_axis, b2TimeOfImpact_s_axisA); + var axisB = b2Rot.MulTRV(xfB.q, b2Vec2.NegV(this.m_axis, b2Vec2.s_t0), b2TimeOfImpact_s_axisB); + indexA[0] = this.m_proxyA.GetSupport(axisA); + indexB[0] = this.m_proxyB.GetSupport(axisB); + var localPointA = this.m_proxyA.GetVertex(indexA[0]); + var localPointB = this.m_proxyB.GetVertex(indexB[0]); + var pointA = b2Transform.MulXV(xfA, localPointA, b2TimeOfImpact_s_pointA); + var pointB = b2Transform.MulXV(xfB, localPointB, b2TimeOfImpact_s_pointB); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(pointB, pointA, b2Vec2.s_t0), this.m_axis); + return separation; + + case exports.b2SeparationFunctionType.e_faceA: + var normal = b2Rot.MulRV(xfA.q, this.m_axis, b2TimeOfImpact_s_normal); + var pointA = b2Transform.MulXV(xfA, this.m_localPoint, b2TimeOfImpact_s_pointA); + var axisB = b2Rot.MulTRV(xfB.q, b2Vec2.NegV(normal, b2Vec2.s_t0), b2TimeOfImpact_s_axisB); + indexA[0] = -1; + indexB[0] = this.m_proxyB.GetSupport(axisB); + var localPointB = this.m_proxyB.GetVertex(indexB[0]); + var pointB = b2Transform.MulXV(xfB, localPointB, b2TimeOfImpact_s_pointB); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(pointB, pointA, b2Vec2.s_t0), normal); + return separation; + + case exports.b2SeparationFunctionType.e_faceB: + var normal = b2Rot.MulRV(xfB.q, this.m_axis, b2TimeOfImpact_s_normal); + var pointB = b2Transform.MulXV(xfB, this.m_localPoint, b2TimeOfImpact_s_pointB); + var axisA = b2Rot.MulTRV(xfA.q, b2Vec2.NegV(normal, b2Vec2.s_t0), b2TimeOfImpact_s_axisA); + indexB[0] = -1; + indexA[0] = this.m_proxyA.GetSupport(axisA); + var localPointA = this.m_proxyA.GetVertex(indexA[0]); + var pointA = b2Transform.MulXV(xfA, localPointA, b2TimeOfImpact_s_pointA); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(pointA, pointB, b2Vec2.s_t0), normal); + return separation; + + default: + indexA[0] = -1; + indexB[0] = -1; + return 0; + } + }; + b2SeparationFunction.prototype.Evaluate = function (indexA, indexB, t) { + var xfA = b2TimeOfImpact_s_xfA; + var xfB = b2TimeOfImpact_s_xfB; + this.m_sweepA.GetTransform(xfA, t); + this.m_sweepB.GetTransform(xfB, t); + switch (this.m_type) { + case exports.b2SeparationFunctionType.e_points: + var localPointA = this.m_proxyA.GetVertex(indexA); + var localPointB = this.m_proxyB.GetVertex(indexB); + var pointA = b2Transform.MulXV(xfA, localPointA, b2TimeOfImpact_s_pointA); + var pointB = b2Transform.MulXV(xfB, localPointB, b2TimeOfImpact_s_pointB); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(pointB, pointA, b2Vec2.s_t0), this.m_axis); + return separation; + + case exports.b2SeparationFunctionType.e_faceA: + var normal = b2Rot.MulRV(xfA.q, this.m_axis, b2TimeOfImpact_s_normal); + var pointA = b2Transform.MulXV(xfA, this.m_localPoint, b2TimeOfImpact_s_pointA); + var localPointB = this.m_proxyB.GetVertex(indexB); + var pointB = b2Transform.MulXV(xfB, localPointB, b2TimeOfImpact_s_pointB); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(pointB, pointA, b2Vec2.s_t0), normal); + return separation; + + case exports.b2SeparationFunctionType.e_faceB: + var normal = b2Rot.MulRV(xfB.q, this.m_axis, b2TimeOfImpact_s_normal); + var pointB = b2Transform.MulXV(xfB, this.m_localPoint, b2TimeOfImpact_s_pointB); + var localPointA = this.m_proxyA.GetVertex(indexA); + var pointA = b2Transform.MulXV(xfA, localPointA, b2TimeOfImpact_s_pointA); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(pointA, pointB, b2Vec2.s_t0), normal); + return separation; + + default: + return 0; + } + }; + return b2SeparationFunction; + })(); + var b2TimeOfImpact_s_timer = new b2Timer(); + var b2TimeOfImpact_s_cache = new b2SimplexCache(); + var b2TimeOfImpact_s_distanceInput = new b2DistanceInput(); + var b2TimeOfImpact_s_distanceOutput = new b2DistanceOutput(); + var b2TimeOfImpact_s_fcn = new b2SeparationFunction(); + var b2TimeOfImpact_s_indexA = [0]; + var b2TimeOfImpact_s_indexB = [0]; + var b2TimeOfImpact_s_sweepA = new b2Sweep(); + var b2TimeOfImpact_s_sweepB = new b2Sweep(); + function b2TimeOfImpact(output, input) { + var timer = b2TimeOfImpact_s_timer.Reset(); + ++exports.b2_toiCalls; + output.state = exports.b2TOIOutputState.e_unknown; + output.t = input.tMax; + var proxyA = input.proxyA; + var proxyB = input.proxyB; + var sweepA = b2TimeOfImpact_s_sweepA.Copy(input.sweepA); + var sweepB = b2TimeOfImpact_s_sweepB.Copy(input.sweepB); + sweepA.Normalize(); + sweepB.Normalize(); + var tMax = input.tMax; + var totalRadius = proxyA.m_radius + proxyB.m_radius; + var target = b2Max(b2_linearSlop, totalRadius - 3 * b2_linearSlop); + var tolerance = .25 * b2_linearSlop; + var t1 = 0; + var k_maxIterations = 20; + var iter = 0; + var cache = b2TimeOfImpact_s_cache; + cache.count = 0; + var distanceInput = b2TimeOfImpact_s_distanceInput; + distanceInput.proxyA.Copy(input.proxyA); + distanceInput.proxyB.Copy(input.proxyB); + distanceInput.useRadii = false; + for (; ;) { + var xfA = b2TimeOfImpact_s_xfA; + var xfB = b2TimeOfImpact_s_xfB; + sweepA.GetTransform(xfA, t1); + sweepB.GetTransform(xfB, t1); + distanceInput.transformA.Copy(xfA); + distanceInput.transformB.Copy(xfB); + var distanceOutput = b2TimeOfImpact_s_distanceOutput; + b2Distance(distanceOutput, cache, distanceInput); + if (distanceOutput.distance <= 0) { + output.state = exports.b2TOIOutputState.e_overlapped; + output.t = 0; + break; + } + if (distanceOutput.distance < target + tolerance) { + output.state = exports.b2TOIOutputState.e_touching; + output.t = t1; + break; + } + var fcn = b2TimeOfImpact_s_fcn; + fcn.Initialize(cache, proxyA, sweepA, proxyB, sweepB, t1); + var done = false; + var t2 = tMax; + var pushBackIter = 0; + for (; ;) { + var indexA = b2TimeOfImpact_s_indexA; + var indexB = b2TimeOfImpact_s_indexB; + var s2 = fcn.FindMinSeparation(indexA, indexB, t2); + if (s2 > target + tolerance) { + output.state = exports.b2TOIOutputState.e_separated; + output.t = tMax; + done = true; + break; + } + if (s2 > target - tolerance) { + t1 = t2; + break; + } + var s1 = fcn.Evaluate(indexA[0], indexB[0], t1); + if (s1 < target - tolerance) { + output.state = exports.b2TOIOutputState.e_failed; + output.t = t1; + done = true; + break; + } + if (s1 <= target + tolerance) { + output.state = exports.b2TOIOutputState.e_touching; + output.t = t1; + done = true; + break; + } + var rootIterCount = 0; + var a1 = t1; + var a2 = t2; + for (; ;) { + var t = 0; + t = 1 & rootIterCount ? a1 + (target - s1) * (a2 - a1) / (s2 - s1) : .5 * (a1 + a2); + ++rootIterCount; + ++exports.b2_toiRootIters; + var s = fcn.Evaluate(indexA[0], indexB[0], t); + if (b2Abs(s - target) < tolerance) { + t2 = t; + break; + } + if (s > target) { + a1 = t; + s1 = s; + } else { + a2 = t; + s2 = s; + } + if (50 === rootIterCount) break; + } + exports.b2_toiMaxRootIters = b2Max(exports.b2_toiMaxRootIters, rootIterCount); + ++pushBackIter; + if (pushBackIter === b2_maxPolygonVertices) break; + } + ++iter; + ++exports.b2_toiIters; + if (done) break; + if (iter === k_maxIterations) { + output.state = exports.b2TOIOutputState.e_failed; + output.t = t1; + break; + } + } + exports.b2_toiMaxIters = b2Max(exports.b2_toiMaxIters, iter); + var time = timer.GetMilliseconds(); + exports.b2_toiMaxTime = b2Max(exports.b2_toiMaxTime, time); + exports.b2_toiTime += time; + } + var b2CollideCircles_s_pA = new b2Vec2(); + var b2CollideCircles_s_pB = new b2Vec2(); + function b2CollideCircles(manifold, circleA, xfA, circleB, xfB) { + manifold.pointCount = 0; + var pA = b2Transform.MulXV(xfA, circleA.m_p, b2CollideCircles_s_pA); + var pB = b2Transform.MulXV(xfB, circleB.m_p, b2CollideCircles_s_pB); + var distSqr = b2Vec2.DistanceSquaredVV(pA, pB); + var radius = circleA.m_radius + circleB.m_radius; + if (distSqr > radius * radius) return; + manifold.type = exports.b2ManifoldType.e_circles; + manifold.localPoint.Copy(circleA.m_p); + manifold.localNormal.SetZero(); + manifold.pointCount = 1; + manifold.points[0].localPoint.Copy(circleB.m_p); + manifold.points[0].id.key = 0; + } + var b2CollidePolygonAndCircle_s_c = new b2Vec2(); + var b2CollidePolygonAndCircle_s_cLocal = new b2Vec2(); + var b2CollidePolygonAndCircle_s_faceCenter = new b2Vec2(); + function b2CollidePolygonAndCircle(manifold, polygonA, xfA, circleB, xfB) { + manifold.pointCount = 0; + var c = b2Transform.MulXV(xfB, circleB.m_p, b2CollidePolygonAndCircle_s_c); + var cLocal = b2Transform.MulTXV(xfA, c, b2CollidePolygonAndCircle_s_cLocal); + var normalIndex = 0; + var separation = -b2_maxFloat; + var radius = polygonA.m_radius + circleB.m_radius; + var vertexCount = polygonA.m_count; + var vertices = polygonA.m_vertices; + var normals = polygonA.m_normals; + for (var i = 0; i < vertexCount; ++i) { + var s = b2Vec2.DotVV(normals[i], b2Vec2.SubVV(cLocal, vertices[i], b2Vec2.s_t0)); + if (s > radius) return; + if (s > separation) { + separation = s; + normalIndex = i; + } + } + var vertIndex1 = normalIndex; + var vertIndex2 = (vertIndex1 + 1) % vertexCount; + var v1 = vertices[vertIndex1]; + var v2 = vertices[vertIndex2]; + if (separation < b2_epsilon) { + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_faceA; + manifold.localNormal.Copy(normals[normalIndex]); + b2Vec2.MidVV(v1, v2, manifold.localPoint); + manifold.points[0].localPoint.Copy(circleB.m_p); + manifold.points[0].id.key = 0; + return; + } + var u1 = b2Vec2.DotVV(b2Vec2.SubVV(cLocal, v1, b2Vec2.s_t0), b2Vec2.SubVV(v2, v1, b2Vec2.s_t1)); + var u2 = b2Vec2.DotVV(b2Vec2.SubVV(cLocal, v2, b2Vec2.s_t0), b2Vec2.SubVV(v1, v2, b2Vec2.s_t1)); + if (u1 <= 0) { + if (b2Vec2.DistanceSquaredVV(cLocal, v1) > radius * radius) return; + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_faceA; + b2Vec2.SubVV(cLocal, v1, manifold.localNormal).SelfNormalize(); + manifold.localPoint.Copy(v1); + manifold.points[0].localPoint.Copy(circleB.m_p); + manifold.points[0].id.key = 0; + } else if (u2 <= 0) { + if (b2Vec2.DistanceSquaredVV(cLocal, v2) > radius * radius) return; + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_faceA; + b2Vec2.SubVV(cLocal, v2, manifold.localNormal).SelfNormalize(); + manifold.localPoint.Copy(v2); + manifold.points[0].localPoint.Copy(circleB.m_p); + manifold.points[0].id.key = 0; + } else { + var faceCenter = b2Vec2.MidVV(v1, v2, b2CollidePolygonAndCircle_s_faceCenter); + var separation_1 = b2Vec2.DotVV(b2Vec2.SubVV(cLocal, faceCenter, b2Vec2.s_t1), normals[vertIndex1]); + if (separation_1 > radius) return; + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_faceA; + manifold.localNormal.Copy(normals[vertIndex1]).SelfNormalize(); + manifold.localPoint.Copy(faceCenter); + manifold.points[0].localPoint.Copy(circleB.m_p); + manifold.points[0].id.key = 0; + } + } + var b2EdgeSeparation_s_normal1World = new b2Vec2(); + var b2EdgeSeparation_s_normal1 = new b2Vec2(); + var b2EdgeSeparation_s_v1 = new b2Vec2(); + var b2EdgeSeparation_s_v2 = new b2Vec2(); + function b2EdgeSeparation(poly1, xf1, edge1, poly2, xf2) { + var vertices1 = poly1.m_vertices; + var normals1 = poly1.m_normals; + var count2 = poly2.m_count; + var vertices2 = poly2.m_vertices; + var normal1World = b2Rot.MulRV(xf1.q, normals1[edge1], b2EdgeSeparation_s_normal1World); + var normal1 = b2Rot.MulTRV(xf2.q, normal1World, b2EdgeSeparation_s_normal1); + var index = 0; + var minDot = b2_maxFloat; + for (var i = 0; i < count2; ++i) { + var dot = b2Vec2.DotVV(vertices2[i], normal1); + if (dot < minDot) { + minDot = dot; + index = i; + } + } + var v1 = b2Transform.MulXV(xf1, vertices1[edge1], b2EdgeSeparation_s_v1); + var v2 = b2Transform.MulXV(xf2, vertices2[index], b2EdgeSeparation_s_v2); + var separation = b2Vec2.DotVV(b2Vec2.SubVV(v2, v1, b2Vec2.s_t0), normal1World); + return separation; + } + var b2FindMaxSeparation_s_d = new b2Vec2(); + var b2FindMaxSeparation_s_dLocal1 = new b2Vec2(); + function b2FindMaxSeparation(edgeIndex, poly1, xf1, poly2, xf2) { + var count1 = poly1.m_count; + var normals1 = poly1.m_normals; + var d = b2Vec2.SubVV(b2Transform.MulXV(xf2, poly2.m_centroid, b2Vec2.s_t0), b2Transform.MulXV(xf1, poly1.m_centroid, b2Vec2.s_t1), b2FindMaxSeparation_s_d); + var dLocal1 = b2Rot.MulTRV(xf1.q, d, b2FindMaxSeparation_s_dLocal1); + var edge = 0; + var maxDot = -b2_maxFloat; + for (var i = 0; i < count1; ++i) { + var dot = b2Vec2.DotVV(normals1[i], dLocal1); + if (dot > maxDot) { + maxDot = dot; + edge = i; + } + } + var s = b2EdgeSeparation(poly1, xf1, edge, poly2, xf2); + var prevEdge = (edge + count1 - 1) % count1; + var sPrev = b2EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2); + var nextEdge = (edge + 1) % count1; + var sNext = b2EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2); + var bestEdge = 0; + var bestSeparation = 0; + var increment = 0; + if (sPrev > s && sPrev > sNext) { + increment = -1; + bestEdge = prevEdge; + bestSeparation = sPrev; + } else { + if (!(sNext > s)) { + edgeIndex[0] = edge; + return s; + } + increment = 1; + bestEdge = nextEdge; + bestSeparation = sNext; + } + while (true) { + edge = -1 === increment ? (bestEdge + count1 - 1) % count1 : (bestEdge + 1) % count1; + s = b2EdgeSeparation(poly1, xf1, edge, poly2, xf2); + if (!(s > bestSeparation)) break; + bestEdge = edge; + bestSeparation = s; + } + edgeIndex[0] = bestEdge; + return bestSeparation; + } + var b2FindIncidentEdge_s_normal1 = new b2Vec2(); + function b2FindIncidentEdge(c, poly1, xf1, edge1, poly2, xf2) { + var normals1 = poly1.m_normals; + var count2 = poly2.m_count; + var vertices2 = poly2.m_vertices; + var normals2 = poly2.m_normals; + var normal1 = b2Rot.MulTRV(xf2.q, b2Rot.MulRV(xf1.q, normals1[edge1], b2Vec2.s_t0), b2FindIncidentEdge_s_normal1); + var index = 0; + var minDot = b2_maxFloat; + for (var i = 0; i < count2; ++i) { + var dot = b2Vec2.DotVV(normal1, normals2[i]); + if (dot < minDot) { + minDot = dot; + index = i; + } + } + var i1 = index; + var i2 = (i1 + 1) % count2; + var c0 = c[0]; + b2Transform.MulXV(xf2, vertices2[i1], c0.v); + var cf0 = c0.id.cf; + cf0.indexA = edge1; + cf0.indexB = i1; + cf0.typeA = exports.b2ContactFeatureType.e_face; + cf0.typeB = exports.b2ContactFeatureType.e_vertex; + var c1 = c[1]; + b2Transform.MulXV(xf2, vertices2[i2], c1.v); + var cf1 = c1.id.cf; + cf1.indexA = edge1; + cf1.indexB = i2; + cf1.typeA = exports.b2ContactFeatureType.e_face; + cf1.typeB = exports.b2ContactFeatureType.e_vertex; + } + var b2CollidePolygons_s_incidentEdge = b2ClipVertex.MakeArray(2); + var b2CollidePolygons_s_clipPoints1 = b2ClipVertex.MakeArray(2); + var b2CollidePolygons_s_clipPoints2 = b2ClipVertex.MakeArray(2); + var b2CollidePolygons_s_edgeA = [0]; + var b2CollidePolygons_s_edgeB = [0]; + var b2CollidePolygons_s_localTangent = new b2Vec2(); + var b2CollidePolygons_s_localNormal = new b2Vec2(); + var b2CollidePolygons_s_planePoint = new b2Vec2(); + var b2CollidePolygons_s_normal = new b2Vec2(); + var b2CollidePolygons_s_tangent = new b2Vec2(); + var b2CollidePolygons_s_ntangent = new b2Vec2(); + var b2CollidePolygons_s_v11 = new b2Vec2(); + var b2CollidePolygons_s_v12 = new b2Vec2(); + function b2CollidePolygons(manifold, polyA, xfA, polyB, xfB) { + manifold.pointCount = 0; + var totalRadius = polyA.m_radius + polyB.m_radius; + var edgeA = b2CollidePolygons_s_edgeA; + edgeA[0] = 0; + var separationA = b2FindMaxSeparation(edgeA, polyA, xfA, polyB, xfB); + if (separationA > totalRadius) return; + var edgeB = b2CollidePolygons_s_edgeB; + edgeB[0] = 0; + var separationB = b2FindMaxSeparation(edgeB, polyB, xfB, polyA, xfA); + if (separationB > totalRadius) return; + var poly1; + var poly2; + var xf1, xf2; + var edge1 = 0; + var flip = 0; + var k_relativeTol = .98; + var k_absoluteTol = .001; + if (separationB > k_relativeTol * separationA + k_absoluteTol) { + poly1 = polyB; + poly2 = polyA; + xf1 = xfB; + xf2 = xfA; + edge1 = edgeB[0]; + manifold.type = exports.b2ManifoldType.e_faceB; + flip = 1; + } else { + poly1 = polyA; + poly2 = polyB; + xf1 = xfA; + xf2 = xfB; + edge1 = edgeA[0]; + manifold.type = exports.b2ManifoldType.e_faceA; + flip = 0; + } + var incidentEdge = b2CollidePolygons_s_incidentEdge; + b2FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2); + var count1 = poly1.m_count; + var vertices1 = poly1.m_vertices; + var iv1 = edge1; + var iv2 = (edge1 + 1) % count1; + var local_v11 = vertices1[iv1]; + var local_v12 = vertices1[iv2]; + var localTangent = b2Vec2.SubVV(local_v12, local_v11, b2CollidePolygons_s_localTangent); + localTangent.Normalize(); + var localNormal = b2Vec2.CrossVOne(localTangent, b2CollidePolygons_s_localNormal); + var planePoint = b2Vec2.MidVV(local_v11, local_v12, b2CollidePolygons_s_planePoint); + var tangent = b2Rot.MulRV(xf1.q, localTangent, b2CollidePolygons_s_tangent); + var normal = b2Vec2.CrossVOne(tangent, b2CollidePolygons_s_normal); + var v11 = b2Transform.MulXV(xf1, local_v11, b2CollidePolygons_s_v11); + var v12 = b2Transform.MulXV(xf1, local_v12, b2CollidePolygons_s_v12); + var frontOffset = b2Vec2.DotVV(normal, v11); + var sideOffset1 = -b2Vec2.DotVV(tangent, v11) + totalRadius; + var sideOffset2 = b2Vec2.DotVV(tangent, v12) + totalRadius; + var clipPoints1 = b2CollidePolygons_s_clipPoints1; + var clipPoints2 = b2CollidePolygons_s_clipPoints2; + var np; + var ntangent = b2Vec2.NegV(tangent, b2CollidePolygons_s_ntangent); + np = b2ClipSegmentToLine(clipPoints1, incidentEdge, ntangent, sideOffset1, iv1); + if (np < 2) return; + np = b2ClipSegmentToLine(clipPoints2, clipPoints1, tangent, sideOffset2, iv2); + if (np < 2) return; + manifold.localNormal.Copy(localNormal); + manifold.localPoint.Copy(planePoint); + var pointCount = 0; + for (var i = 0; i < b2_maxManifoldPoints; ++i) { + var cv = clipPoints2[i]; + var separation = b2Vec2.DotVV(normal, cv.v) - frontOffset; + if (separation <= totalRadius) { + var cp = manifold.points[pointCount]; + b2Transform.MulTXV(xf2, cv.v, cp.localPoint); + cp.id.Copy(cv.id); + if (flip) { + var cf = cp.id.cf; + cp.id.cf.indexA = cf.indexB; + cp.id.cf.indexB = cf.indexA; + cp.id.cf.typeA = cf.typeB; + cp.id.cf.typeB = cf.typeA; + } + ++pointCount; + } + } + manifold.pointCount = pointCount; + } + var b2CollideEdgeAndCircle_s_Q = new b2Vec2(); + var b2CollideEdgeAndCircle_s_e = new b2Vec2(); + var b2CollideEdgeAndCircle_s_d = new b2Vec2(); + var b2CollideEdgeAndCircle_s_e1 = new b2Vec2(); + var b2CollideEdgeAndCircle_s_e2 = new b2Vec2(); + var b2CollideEdgeAndCircle_s_P = new b2Vec2(); + var b2CollideEdgeAndCircle_s_n = new b2Vec2(); + var b2CollideEdgeAndCircle_s_id = new b2ContactID(); + function b2CollideEdgeAndCircle(manifold, edgeA, xfA, circleB, xfB) { + manifold.pointCount = 0; + var Q = b2Transform.MulTXV(xfA, b2Transform.MulXV(xfB, circleB.m_p, b2Vec2.s_t0), b2CollideEdgeAndCircle_s_Q); + var A = edgeA.m_vertex1; + var B = edgeA.m_vertex2; + var e = b2Vec2.SubVV(B, A, b2CollideEdgeAndCircle_s_e); + var u = b2Vec2.DotVV(e, b2Vec2.SubVV(B, Q, b2Vec2.s_t0)); + var v = b2Vec2.DotVV(e, b2Vec2.SubVV(Q, A, b2Vec2.s_t0)); + var radius = edgeA.m_radius + circleB.m_radius; + var id = b2CollideEdgeAndCircle_s_id; + id.cf.indexB = 0; + id.cf.typeB = exports.b2ContactFeatureType.e_vertex; + if (v <= 0) { + var P_1 = A; + var d_1 = b2Vec2.SubVV(Q, P_1, b2CollideEdgeAndCircle_s_d); + var dd_1 = b2Vec2.DotVV(d_1, d_1); + if (dd_1 > radius * radius) return; + if (edgeA.m_hasVertex0) { + var A1 = edgeA.m_vertex0; + var B1 = A; + var e1 = b2Vec2.SubVV(B1, A1, b2CollideEdgeAndCircle_s_e1); + var u1 = b2Vec2.DotVV(e1, b2Vec2.SubVV(B1, Q, b2Vec2.s_t0)); + if (u1 > 0) return; + } + id.cf.indexA = 0; + id.cf.typeA = exports.b2ContactFeatureType.e_vertex; + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_circles; + manifold.localNormal.SetZero(); + manifold.localPoint.Copy(P_1); + manifold.points[0].id.Copy(id); + manifold.points[0].localPoint.Copy(circleB.m_p); + return; + } + if (u <= 0) { + var P_2 = B; + var d_2 = b2Vec2.SubVV(Q, P_2, b2CollideEdgeAndCircle_s_d); + var dd_2 = b2Vec2.DotVV(d_2, d_2); + if (dd_2 > radius * radius) return; + if (edgeA.m_hasVertex3) { + var B2 = edgeA.m_vertex3; + var A2 = B; + var e2 = b2Vec2.SubVV(B2, A2, b2CollideEdgeAndCircle_s_e2); + var v2 = b2Vec2.DotVV(e2, b2Vec2.SubVV(Q, A2, b2Vec2.s_t0)); + if (v2 > 0) return; + } + id.cf.indexA = 1; + id.cf.typeA = exports.b2ContactFeatureType.e_vertex; + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_circles; + manifold.localNormal.SetZero(); + manifold.localPoint.Copy(P_2); + manifold.points[0].id.Copy(id); + manifold.points[0].localPoint.Copy(circleB.m_p); + return; + } + var den = b2Vec2.DotVV(e, e); + var P = b2CollideEdgeAndCircle_s_P; + P.x = 1 / den * (u * A.x + v * B.x); + P.y = 1 / den * (u * A.y + v * B.y); + var d = b2Vec2.SubVV(Q, P, b2CollideEdgeAndCircle_s_d); + var dd = b2Vec2.DotVV(d, d); + if (dd > radius * radius) return; + var n = b2CollideEdgeAndCircle_s_n.Set(-e.y, e.x); + b2Vec2.DotVV(n, b2Vec2.SubVV(Q, A, b2Vec2.s_t0)) < 0 && n.Set(-n.x, -n.y); + n.Normalize(); + id.cf.indexA = 0; + id.cf.typeA = exports.b2ContactFeatureType.e_face; + manifold.pointCount = 1; + manifold.type = exports.b2ManifoldType.e_faceA; + manifold.localNormal.Copy(n); + manifold.localPoint.Copy(A); + manifold.points[0].id.Copy(id); + manifold.points[0].localPoint.Copy(circleB.m_p); + } + var b2EPAxis = (function () { + function b2EPAxis() { + this.type = 0; + this.index = 0; + this.separation = 0; + } + return b2EPAxis; + })(); + var b2TempPolygon = (function () { + function b2TempPolygon() { + this.vertices = b2Vec2.MakeArray(b2_maxPolygonVertices); + this.normals = b2Vec2.MakeArray(b2_maxPolygonVertices); + this.count = 0; + } + return b2TempPolygon; + })(); + var b2ReferenceFace = (function () { + function b2ReferenceFace() { + this.i1 = 0; + this.i2 = 0; + this.v1 = new b2Vec2(); + this.v2 = new b2Vec2(); + this.normal = new b2Vec2(); + this.sideNormal1 = new b2Vec2(); + this.sideOffset1 = 0; + this.sideNormal2 = new b2Vec2(); + this.sideOffset2 = 0; + } + return b2ReferenceFace; + })(); + var b2EPCollider = (function () { + function b2EPCollider() { + this.m_polygonB = new b2TempPolygon(); + this.m_xf = new b2Transform(); + this.m_centroidB = new b2Vec2(); + this.m_v0 = new b2Vec2(); + this.m_v1 = new b2Vec2(); + this.m_v2 = new b2Vec2(); + this.m_v3 = new b2Vec2(); + this.m_normal0 = new b2Vec2(); + this.m_normal1 = new b2Vec2(); + this.m_normal2 = new b2Vec2(); + this.m_normal = new b2Vec2(); + this.m_type1 = 0; + this.m_type2 = 0; + this.m_lowerLimit = new b2Vec2(); + this.m_upperLimit = new b2Vec2(); + this.m_radius = 0; + this.m_front = false; + } + b2EPCollider.prototype.Collide = function (manifold, edgeA, xfA, polygonB, xfB) { + b2Transform.MulTXX(xfA, xfB, this.m_xf); + b2Transform.MulXV(this.m_xf, polygonB.m_centroid, this.m_centroidB); + this.m_v0.Copy(edgeA.m_vertex0); + this.m_v1.Copy(edgeA.m_vertex1); + this.m_v2.Copy(edgeA.m_vertex2); + this.m_v3.Copy(edgeA.m_vertex3); + var hasVertex0 = edgeA.m_hasVertex0; + var hasVertex3 = edgeA.m_hasVertex3; + var edge1 = b2Vec2.SubVV(this.m_v2, this.m_v1, b2EPCollider.s_edge1); + edge1.Normalize(); + this.m_normal1.Set(edge1.y, -edge1.x); + var offset1 = b2Vec2.DotVV(this.m_normal1, b2Vec2.SubVV(this.m_centroidB, this.m_v1, b2Vec2.s_t0)); + var offset0 = 0; + var offset2 = 0; + var convex1 = false; + var convex2 = false; + if (hasVertex0) { + var edge0 = b2Vec2.SubVV(this.m_v1, this.m_v0, b2EPCollider.s_edge0); + edge0.Normalize(); + this.m_normal0.Set(edge0.y, -edge0.x); + convex1 = b2Vec2.CrossVV(edge0, edge1) >= 0; + offset0 = b2Vec2.DotVV(this.m_normal0, b2Vec2.SubVV(this.m_centroidB, this.m_v0, b2Vec2.s_t0)); + } + if (hasVertex3) { + var edge2 = b2Vec2.SubVV(this.m_v3, this.m_v2, b2EPCollider.s_edge2); + edge2.Normalize(); + this.m_normal2.Set(edge2.y, -edge2.x); + convex2 = b2Vec2.CrossVV(edge1, edge2) > 0; + offset2 = b2Vec2.DotVV(this.m_normal2, b2Vec2.SubVV(this.m_centroidB, this.m_v2, b2Vec2.s_t0)); + } + if (hasVertex0 && hasVertex3) if (convex1 && convex2) { + this.m_front = offset0 >= 0 || offset1 >= 0 || offset2 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal0); + this.m_upperLimit.Copy(this.m_normal2); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal1).SelfNeg(); + } + } else if (convex1) { + this.m_front = offset0 >= 0 || offset1 >= 0 && offset2 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal0); + this.m_upperLimit.Copy(this.m_normal1); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal1).SelfNeg(); + } + } else if (convex2) { + this.m_front = offset2 >= 0 || offset0 >= 0 && offset1 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal1); + this.m_upperLimit.Copy(this.m_normal2); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal0).SelfNeg(); + } + } else { + this.m_front = offset0 >= 0 && offset1 >= 0 && offset2 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal1); + this.m_upperLimit.Copy(this.m_normal1); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal0).SelfNeg(); + } + } else if (hasVertex0) if (convex1) { + this.m_front = offset0 >= 0 || offset1 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal0); + this.m_upperLimit.Copy(this.m_normal1).SelfNeg(); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal1); + this.m_upperLimit.Copy(this.m_normal1).SelfNeg(); + } + } else { + this.m_front = offset0 >= 0 && offset1 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal1); + this.m_upperLimit.Copy(this.m_normal1).SelfNeg(); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal1); + this.m_upperLimit.Copy(this.m_normal0).SelfNeg(); + } + } else if (hasVertex3) if (convex2) { + this.m_front = offset1 >= 0 || offset2 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal2); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal1); + } + } else { + this.m_front = offset1 >= 0 && offset2 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal1); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal1); + } + } else { + this.m_front = offset1 >= 0; + if (this.m_front) { + this.m_normal.Copy(this.m_normal1); + this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(); + this.m_upperLimit.Copy(this.m_normal1).SelfNeg(); + } else { + this.m_normal.Copy(this.m_normal1).SelfNeg(); + this.m_lowerLimit.Copy(this.m_normal1); + this.m_upperLimit.Copy(this.m_normal1); + } + } + this.m_polygonB.count = polygonB.m_count; + for (var i = 0; i < polygonB.m_count; ++i) { + b2Transform.MulXV(this.m_xf, polygonB.m_vertices[i], this.m_polygonB.vertices[i]); + b2Rot.MulRV(this.m_xf.q, polygonB.m_normals[i], this.m_polygonB.normals[i]); + } + this.m_radius = polygonB.m_radius + edgeA.m_radius; + manifold.pointCount = 0; + var edgeAxis = this.ComputeEdgeSeparation(b2EPCollider.s_edgeAxis); + if (0 === edgeAxis.type) return; + if (edgeAxis.separation > this.m_radius) return; + var polygonAxis = this.ComputePolygonSeparation(b2EPCollider.s_polygonAxis); + if (0 !== polygonAxis.type && polygonAxis.separation > this.m_radius) return; + var k_relativeTol = .98; + var k_absoluteTol = .001; + var primaryAxis; + primaryAxis = 0 === polygonAxis.type ? edgeAxis : polygonAxis.separation > k_relativeTol * edgeAxis.separation + k_absoluteTol ? polygonAxis : edgeAxis; + var ie = b2EPCollider.s_ie; + var rf = b2EPCollider.s_rf; + if (1 === primaryAxis.type) { + manifold.type = exports.b2ManifoldType.e_faceA; + var bestIndex = 0; + var bestValue = b2Vec2.DotVV(this.m_normal, this.m_polygonB.normals[0]); + for (var i = 1; i < this.m_polygonB.count; ++i) { + var value = b2Vec2.DotVV(this.m_normal, this.m_polygonB.normals[i]); + if (value < bestValue) { + bestValue = value; + bestIndex = i; + } + } + var i1 = bestIndex; + var i2 = (i1 + 1) % this.m_polygonB.count; + var ie0 = ie[0]; + ie0.v.Copy(this.m_polygonB.vertices[i1]); + ie0.id.cf.indexA = 0; + ie0.id.cf.indexB = i1; + ie0.id.cf.typeA = exports.b2ContactFeatureType.e_face; + ie0.id.cf.typeB = exports.b2ContactFeatureType.e_vertex; + var ie1 = ie[1]; + ie1.v.Copy(this.m_polygonB.vertices[i2]); + ie1.id.cf.indexA = 0; + ie1.id.cf.indexB = i2; + ie1.id.cf.typeA = exports.b2ContactFeatureType.e_face; + ie1.id.cf.typeB = exports.b2ContactFeatureType.e_vertex; + if (this.m_front) { + rf.i1 = 0; + rf.i2 = 1; + rf.v1.Copy(this.m_v1); + rf.v2.Copy(this.m_v2); + rf.normal.Copy(this.m_normal1); + } else { + rf.i1 = 1; + rf.i2 = 0; + rf.v1.Copy(this.m_v2); + rf.v2.Copy(this.m_v1); + rf.normal.Copy(this.m_normal1).SelfNeg(); + } + } else { + manifold.type = exports.b2ManifoldType.e_faceB; + var ie0 = ie[0]; + ie0.v.Copy(this.m_v1); + ie0.id.cf.indexA = 0; + ie0.id.cf.indexB = primaryAxis.index; + ie0.id.cf.typeA = exports.b2ContactFeatureType.e_vertex; + ie0.id.cf.typeB = exports.b2ContactFeatureType.e_face; + var ie1 = ie[1]; + ie1.v.Copy(this.m_v2); + ie1.id.cf.indexA = 0; + ie1.id.cf.indexB = primaryAxis.index; + ie1.id.cf.typeA = exports.b2ContactFeatureType.e_vertex; + ie1.id.cf.typeB = exports.b2ContactFeatureType.e_face; + rf.i1 = primaryAxis.index; + rf.i2 = (rf.i1 + 1) % this.m_polygonB.count; + rf.v1.Copy(this.m_polygonB.vertices[rf.i1]); + rf.v2.Copy(this.m_polygonB.vertices[rf.i2]); + rf.normal.Copy(this.m_polygonB.normals[rf.i1]); + } + rf.sideNormal1.Set(rf.normal.y, -rf.normal.x); + rf.sideNormal2.Copy(rf.sideNormal1).SelfNeg(); + rf.sideOffset1 = b2Vec2.DotVV(rf.sideNormal1, rf.v1); + rf.sideOffset2 = b2Vec2.DotVV(rf.sideNormal2, rf.v2); + var clipPoints1 = b2EPCollider.s_clipPoints1; + var clipPoints2 = b2EPCollider.s_clipPoints2; + var np = 0; + np = b2ClipSegmentToLine(clipPoints1, ie, rf.sideNormal1, rf.sideOffset1, rf.i1); + if (np < b2_maxManifoldPoints) return; + np = b2ClipSegmentToLine(clipPoints2, clipPoints1, rf.sideNormal2, rf.sideOffset2, rf.i2); + if (np < b2_maxManifoldPoints) return; + if (1 === primaryAxis.type) { + manifold.localNormal.Copy(rf.normal); + manifold.localPoint.Copy(rf.v1); + } else { + manifold.localNormal.Copy(polygonB.m_normals[rf.i1]); + manifold.localPoint.Copy(polygonB.m_vertices[rf.i1]); + } + var pointCount = 0; + for (var i = 0; i < b2_maxManifoldPoints; ++i) { + var separation = void 0; + separation = b2Vec2.DotVV(rf.normal, b2Vec2.SubVV(clipPoints2[i].v, rf.v1, b2Vec2.s_t0)); + if (separation <= this.m_radius) { + var cp = manifold.points[pointCount]; + if (1 === primaryAxis.type) { + b2Transform.MulTXV(this.m_xf, clipPoints2[i].v, cp.localPoint); + cp.id = clipPoints2[i].id; + } else { + cp.localPoint.Copy(clipPoints2[i].v); + cp.id.cf.typeA = clipPoints2[i].id.cf.typeB; + cp.id.cf.typeB = clipPoints2[i].id.cf.typeA; + cp.id.cf.indexA = clipPoints2[i].id.cf.indexB; + cp.id.cf.indexB = clipPoints2[i].id.cf.indexA; + } + ++pointCount; + } + } + manifold.pointCount = pointCount; + }; + b2EPCollider.prototype.ComputeEdgeSeparation = function (out) { + var axis = out; + axis.type = 1; + axis.index = this.m_front ? 0 : 1; + axis.separation = b2_maxFloat; + for (var i = 0; i < this.m_polygonB.count; ++i) { + var s = b2Vec2.DotVV(this.m_normal, b2Vec2.SubVV(this.m_polygonB.vertices[i], this.m_v1, b2Vec2.s_t0)); + s < axis.separation && (axis.separation = s); + } + return axis; + }; + b2EPCollider.prototype.ComputePolygonSeparation = function (out) { + var axis = out; + axis.type = 0; + axis.index = -1; + axis.separation = -b2_maxFloat; + var perp = b2EPCollider.s_perp.Set(-this.m_normal.y, this.m_normal.x); + for (var i = 0; i < this.m_polygonB.count; ++i) { + var n = b2Vec2.NegV(this.m_polygonB.normals[i], b2EPCollider.s_n); + var s1 = b2Vec2.DotVV(n, b2Vec2.SubVV(this.m_polygonB.vertices[i], this.m_v1, b2Vec2.s_t0)); + var s2 = b2Vec2.DotVV(n, b2Vec2.SubVV(this.m_polygonB.vertices[i], this.m_v2, b2Vec2.s_t0)); + var s = b2Min(s1, s2); + if (s > this.m_radius) { + axis.type = 2; + axis.index = i; + axis.separation = s; + return axis; + } + if (b2Vec2.DotVV(n, perp) >= 0) { + if (b2Vec2.DotVV(b2Vec2.SubVV(n, this.m_upperLimit, b2Vec2.s_t0), this.m_normal) < -b2_angularSlop) continue; + } else if (b2Vec2.DotVV(b2Vec2.SubVV(n, this.m_lowerLimit, b2Vec2.s_t0), this.m_normal) < -b2_angularSlop) continue; + if (s > axis.separation) { + axis.type = 2; + axis.index = i; + axis.separation = s; + } + } + return axis; + }; + b2EPCollider.s_edge1 = new b2Vec2(); + b2EPCollider.s_edge0 = new b2Vec2(); + b2EPCollider.s_edge2 = new b2Vec2(); + b2EPCollider.s_ie = b2ClipVertex.MakeArray(2); + b2EPCollider.s_rf = new b2ReferenceFace(); + b2EPCollider.s_clipPoints1 = b2ClipVertex.MakeArray(2); + b2EPCollider.s_clipPoints2 = b2ClipVertex.MakeArray(2); + b2EPCollider.s_edgeAxis = new b2EPAxis(); + b2EPCollider.s_polygonAxis = new b2EPAxis(); + b2EPCollider.s_n = new b2Vec2(); + b2EPCollider.s_perp = new b2Vec2(); + return b2EPCollider; + })(); + var b2CollideEdgeAndPolygon_s_collider = new b2EPCollider(); + function b2CollideEdgeAndPolygon(manifold, edgeA, xfA, polygonB, xfB) { + var collider = b2CollideEdgeAndPolygon_s_collider; + collider.Collide(manifold, edgeA, xfA, polygonB, xfB); + } + var b2MassData = (function () { + function b2MassData() { + this.mass = 0; + this.center = new b2Vec2(0, 0); + this.I = 0; + } + return b2MassData; + })(); + (function (b2ShapeType) { + b2ShapeType[b2ShapeType["e_unknown"] = -1] = "e_unknown"; + b2ShapeType[b2ShapeType["e_circleShape"] = 0] = "e_circleShape"; + b2ShapeType[b2ShapeType["e_edgeShape"] = 1] = "e_edgeShape"; + b2ShapeType[b2ShapeType["e_polygonShape"] = 2] = "e_polygonShape"; + b2ShapeType[b2ShapeType["e_chainShape"] = 3] = "e_chainShape"; + b2ShapeType[b2ShapeType["e_shapeTypeCount"] = 4] = "e_shapeTypeCount"; + })(exports.b2ShapeType || (exports.b2ShapeType = {})); + var b2Shape = (function () { + function b2Shape(type, radius) { + this.m_type = exports.b2ShapeType.e_unknown; + this.m_radius = 0; + this.m_type = type; + this.m_radius = radius; + } + b2Shape.prototype.Copy = function (other) { + this.m_radius = other.m_radius; + return this; + }; + b2Shape.prototype.GetType = function () { + return this.m_type; + }; + return b2Shape; + })(); + 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]); + }; + function __extends(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = null === b ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var b2CircleShape = (function (_super) { + __extends(b2CircleShape, _super); + function b2CircleShape(radius) { + void 0 === radius && (radius = 0); + var _this = _super.call(this, exports.b2ShapeType.e_circleShape, radius) || this; + _this.m_p = new b2Vec2(); + return _this; + } + b2CircleShape.prototype.Set = function (position, radius) { + void 0 === radius && (radius = this.m_radius); + this.m_p.Copy(position); + this.m_radius = radius; + return this; + }; + b2CircleShape.prototype.Clone = function () { + return new b2CircleShape().Copy(this); + }; + b2CircleShape.prototype.Copy = function (other) { + _super.prototype.Copy.call(this, other); + this.m_p.Copy(other.m_p); + return this; + }; + b2CircleShape.prototype.GetChildCount = function () { + return 1; + }; + b2CircleShape.prototype.TestPoint = function (transform, p) { + var center = b2Transform.MulXV(transform, this.m_p, b2CircleShape.TestPoint_s_center); + var d = b2Vec2.SubVV(p, center, b2CircleShape.TestPoint_s_d); + return b2Vec2.DotVV(d, d) <= b2Sq(this.m_radius); + }; + b2CircleShape.prototype.ComputeDistance = function (xf, p, normal, childIndex) { + var center = b2Transform.MulXV(xf, this.m_p, b2CircleShape.ComputeDistance_s_center); + b2Vec2.SubVV(p, center, normal); + return normal.Normalize() - this.m_radius; + }; + b2CircleShape.prototype.RayCast = function (output, input, transform, childIndex) { + var position = b2Transform.MulXV(transform, this.m_p, b2CircleShape.RayCast_s_position); + var s = b2Vec2.SubVV(input.p1, position, b2CircleShape.RayCast_s_s); + var b = b2Vec2.DotVV(s, s) - b2Sq(this.m_radius); + var r = b2Vec2.SubVV(input.p2, input.p1, b2CircleShape.RayCast_s_r); + var c = b2Vec2.DotVV(s, r); + var rr = b2Vec2.DotVV(r, r); + var sigma = c * c - rr * b; + if (sigma < 0 || rr < b2_epsilon) return false; + var a = -(c + b2Sqrt(sigma)); + if (0 <= a && a <= input.maxFraction * rr) { + a /= rr; + output.fraction = a; + b2Vec2.AddVMulSV(s, a, r, output.normal).SelfNormalize(); + return true; + } + return false; + }; + b2CircleShape.prototype.ComputeAABB = function (aabb, transform, childIndex) { + var p = b2Transform.MulXV(transform, this.m_p, b2CircleShape.ComputeAABB_s_p); + aabb.lowerBound.Set(p.x - this.m_radius, p.y - this.m_radius); + aabb.upperBound.Set(p.x + this.m_radius, p.y + this.m_radius); + }; + b2CircleShape.prototype.ComputeMass = function (massData, density) { + var radius_sq = b2Sq(this.m_radius); + massData.mass = density * b2_pi * radius_sq; + massData.center.Copy(this.m_p); + massData.I = massData.mass * (.5 * radius_sq + b2Vec2.DotVV(this.m_p, this.m_p)); + }; + b2CircleShape.prototype.SetupDistanceProxy = function (proxy, index) { + proxy.m_vertices = proxy.m_buffer; + proxy.m_vertices[0].Copy(this.m_p); + proxy.m_count = 1; + proxy.m_radius = this.m_radius; + }; + b2CircleShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) { + var p = b2Transform.MulXV(xf, this.m_p, new b2Vec2()); + var l = -(b2Vec2.DotVV(normal, p) - offset); + if (l < -this.m_radius + b2_epsilon) return 0; + if (l > this.m_radius) { + c.Copy(p); + return b2_pi * this.m_radius * this.m_radius; + } + var r2 = this.m_radius * this.m_radius; + var l2 = l * l; + var area = r2 * (b2Asin(l / this.m_radius) + b2_pi / 2) + l * b2Sqrt(r2 - l2); + var com = -2 / 3 * b2Pow(r2 - l2, 1.5) / area; + c.x = p.x + normal.x * com; + c.y = p.y + normal.y * com; + return area; + }; + b2CircleShape.prototype.Dump = function (log) { + log(" const shape: b2CircleShape = new b2CircleShape();\n"); + log(" shape.m_radius = %.15f;\n", this.m_radius); + log(" shape.m_p.Set(%.15f, %.15f);\n", this.m_p.x, this.m_p.y); + }; + b2CircleShape.TestPoint_s_center = new b2Vec2(); + b2CircleShape.TestPoint_s_d = new b2Vec2(); + b2CircleShape.ComputeDistance_s_center = new b2Vec2(); + b2CircleShape.RayCast_s_position = new b2Vec2(); + b2CircleShape.RayCast_s_s = new b2Vec2(); + b2CircleShape.RayCast_s_r = new b2Vec2(); + b2CircleShape.ComputeAABB_s_p = new b2Vec2(); + return b2CircleShape; + })(b2Shape); + var b2PolygonShape = (function (_super) { + __extends(b2PolygonShape, _super); + function b2PolygonShape() { + var _this = _super.call(this, exports.b2ShapeType.e_polygonShape, b2_polygonRadius) || this; + _this.m_centroid = new b2Vec2(0, 0); + _this.m_vertices = []; + _this.m_normals = []; + _this.m_count = 0; + return _this; + } + b2PolygonShape.prototype.Clone = function () { + return new b2PolygonShape().Copy(this); + }; + b2PolygonShape.prototype.Copy = function (other) { + _super.prototype.Copy.call(this, other); + this.m_centroid.Copy(other.m_centroid); + this.m_count = other.m_count; + this.m_vertices = b2Vec2.MakeArray(this.m_count); + this.m_normals = b2Vec2.MakeArray(this.m_count); + for (var i = 0; i < this.m_count; ++i) { + this.m_vertices[i].Copy(other.m_vertices[i]); + this.m_normals[i].Copy(other.m_normals[i]); + } + return this; + }; + b2PolygonShape.prototype.GetChildCount = function () { + return 1; + }; + b2PolygonShape.prototype.Set = function (vertices, count, start) { + void 0 === count && (count = vertices.length); + void 0 === start && (start = 0); + if (count < 3) return this.SetAsBox(1, 1); + var n = b2Min(count, b2_maxPolygonVertices); + var ps = b2PolygonShape.Set_s_ps; + var tempCount = 0; + for (var i = 0; i < n; ++i) { + var v = vertices[start + i]; + var unique = true; + for (var j = 0; j < tempCount; ++j) if (b2Vec2.DistanceSquaredVV(v, ps[j]) < .5 * b2_linearSlop * (.5 * b2_linearSlop)) { + unique = false; + break; + } + unique && ps[tempCount++].Copy(v); + } + n = tempCount; + if (n < 3) return this.SetAsBox(1, 1); + var i0 = 0; + var x0 = ps[0].x; + for (var i = 1; i < n; ++i) { + var x = ps[i].x; + if (x > x0 || x === x0 && ps[i].y < ps[i0].y) { + i0 = i; + x0 = x; + } + } + var hull = b2PolygonShape.Set_s_hull; + var m = 0; + var ih = i0; + for (; ;) { + hull[m] = ih; + var ie = 0; + for (var j = 1; j < n; ++j) { + if (ie === ih) { + ie = j; + continue; + } + var r = b2Vec2.SubVV(ps[ie], ps[hull[m]], b2PolygonShape.Set_s_r); + var v = b2Vec2.SubVV(ps[j], ps[hull[m]], b2PolygonShape.Set_s_v); + var c = b2Vec2.CrossVV(r, v); + c < 0 && (ie = j); + 0 === c && v.LengthSquared() > r.LengthSquared() && (ie = j); + } + ++m; + ih = ie; + if (ie === i0) break; + } + this.m_count = m; + this.m_vertices = b2Vec2.MakeArray(this.m_count); + this.m_normals = b2Vec2.MakeArray(this.m_count); + for (var i = 0; i < m; ++i) this.m_vertices[i].Copy(ps[hull[i]]); + for (var i = 0; i < m; ++i) { + var vertexi1 = this.m_vertices[i]; + var vertexi2 = this.m_vertices[(i + 1) % m]; + var edge = b2Vec2.SubVV(vertexi2, vertexi1, b2Vec2.s_t0); + b2Vec2.CrossVOne(edge, this.m_normals[i]).SelfNormalize(); + } + b2PolygonShape.ComputeCentroid(this.m_vertices, m, this.m_centroid); + return this; + }; + b2PolygonShape.prototype.SetAsArray = function (vertices, count) { + void 0 === count && (count = vertices.length); + return this.Set(vertices, count); + }; + b2PolygonShape.prototype.SetAsBox = function (hx, hy, center, angle) { + void 0 === angle && (angle = 0); + this.m_count = 4; + this.m_vertices = b2Vec2.MakeArray(this.m_count); + this.m_normals = b2Vec2.MakeArray(this.m_count); + this.m_vertices[0].Set(-hx, -hy); + this.m_vertices[1].Set(hx, -hy); + this.m_vertices[2].Set(hx, hy); + this.m_vertices[3].Set(-hx, hy); + this.m_normals[0].Set(0, -1); + this.m_normals[1].Set(1, 0); + this.m_normals[2].Set(0, 1); + this.m_normals[3].Set(-1, 0); + this.m_centroid.SetZero(); + if (center) { + this.m_centroid.Copy(center); + var xf = new b2Transform(); + xf.SetPosition(center); + xf.SetRotationAngle(angle); + for (var i = 0; i < this.m_count; ++i) { + b2Transform.MulXV(xf, this.m_vertices[i], this.m_vertices[i]); + b2Rot.MulRV(xf.q, this.m_normals[i], this.m_normals[i]); + } + } + return this; + }; + b2PolygonShape.prototype.TestPoint = function (xf, p) { + var pLocal = b2Transform.MulTXV(xf, p, b2PolygonShape.TestPoint_s_pLocal); + for (var i = 0; i < this.m_count; ++i) { + var dot = b2Vec2.DotVV(this.m_normals[i], b2Vec2.SubVV(pLocal, this.m_vertices[i], b2Vec2.s_t0)); + if (dot > 0) return false; + } + return true; + }; + b2PolygonShape.prototype.ComputeDistance = function (xf, p, normal, childIndex) { + var pLocal = b2Transform.MulTXV(xf, p, b2PolygonShape.ComputeDistance_s_pLocal); + var maxDistance = -b2_maxFloat; + var normalForMaxDistance = b2PolygonShape.ComputeDistance_s_normalForMaxDistance.Copy(pLocal); + for (var i = 0; i < this.m_count; ++i) { + var dot = b2Vec2.DotVV(this.m_normals[i], b2Vec2.SubVV(pLocal, this.m_vertices[i], b2Vec2.s_t0)); + if (dot > maxDistance) { + maxDistance = dot; + normalForMaxDistance.Copy(this.m_normals[i]); + } + } + if (maxDistance > 0) { + var minDistance = b2PolygonShape.ComputeDistance_s_minDistance.Copy(normalForMaxDistance); + var minDistance2 = maxDistance * maxDistance; + for (var i = 0; i < this.m_count; ++i) { + var distance = b2Vec2.SubVV(pLocal, this.m_vertices[i], b2PolygonShape.ComputeDistance_s_distance); + var distance2 = distance.LengthSquared(); + if (minDistance2 > distance2) { + minDistance.Copy(distance); + minDistance2 = distance2; + } + } + b2Rot.MulRV(xf.q, minDistance, normal); + normal.Normalize(); + return Math.sqrt(minDistance2); + } + b2Rot.MulRV(xf.q, normalForMaxDistance, normal); + return maxDistance; + }; + b2PolygonShape.prototype.RayCast = function (output, input, xf, childIndex) { + var p1 = b2Transform.MulTXV(xf, input.p1, b2PolygonShape.RayCast_s_p1); + var p2 = b2Transform.MulTXV(xf, input.p2, b2PolygonShape.RayCast_s_p2); + var d = b2Vec2.SubVV(p2, p1, b2PolygonShape.RayCast_s_d); + var lower = 0, upper = input.maxFraction; + var index = -1; + for (var i = 0; i < this.m_count; ++i) { + var numerator = b2Vec2.DotVV(this.m_normals[i], b2Vec2.SubVV(this.m_vertices[i], p1, b2Vec2.s_t0)); + var denominator = b2Vec2.DotVV(this.m_normals[i], d); + if (0 === denominator) { + if (numerator < 0) return false; + } else if (denominator < 0 && numerator < lower * denominator) { + lower = numerator / denominator; + index = i; + } else denominator > 0 && numerator < upper * denominator && (upper = numerator / denominator); + if (upper < lower) return false; + } + if (index >= 0) { + output.fraction = lower; + b2Rot.MulRV(xf.q, this.m_normals[index], output.normal); + return true; + } + return false; + }; + b2PolygonShape.prototype.ComputeAABB = function (aabb, xf, childIndex) { + var lower = b2Transform.MulXV(xf, this.m_vertices[0], aabb.lowerBound); + var upper = aabb.upperBound.Copy(lower); + for (var i = 0; i < this.m_count; ++i) { + var v = b2Transform.MulXV(xf, this.m_vertices[i], b2PolygonShape.ComputeAABB_s_v); + b2Vec2.MinV(v, lower, lower); + b2Vec2.MaxV(v, upper, upper); + } + var r = this.m_radius; + lower.SelfSubXY(r, r); + upper.SelfAddXY(r, r); + }; + b2PolygonShape.prototype.ComputeMass = function (massData, density) { + var center = b2PolygonShape.ComputeMass_s_center.SetZero(); + var area = 0; + var I = 0; + var s = b2PolygonShape.ComputeMass_s_s.SetZero(); + for (var i = 0; i < this.m_count; ++i) s.SelfAdd(this.m_vertices[i]); + s.SelfMul(1 / this.m_count); + var k_inv3 = 1 / 3; + for (var i = 0; i < this.m_count; ++i) { + var e1 = b2Vec2.SubVV(this.m_vertices[i], s, b2PolygonShape.ComputeMass_s_e1); + var e2 = b2Vec2.SubVV(this.m_vertices[(i + 1) % this.m_count], s, b2PolygonShape.ComputeMass_s_e2); + var D = b2Vec2.CrossVV(e1, e2); + var triangleArea = .5 * D; + area += triangleArea; + center.SelfAdd(b2Vec2.MulSV(triangleArea * k_inv3, b2Vec2.AddVV(e1, e2, b2Vec2.s_t0), b2Vec2.s_t1)); + var ex1 = e1.x; + var ey1 = e1.y; + var ex2 = e2.x; + var ey2 = e2.y; + var intx2 = ex1 * ex1 + ex2 * ex1 + ex2 * ex2; + var inty2 = ey1 * ey1 + ey2 * ey1 + ey2 * ey2; + I += .25 * k_inv3 * D * (intx2 + inty2); + } + massData.mass = density * area; + center.SelfMul(1 / area); + b2Vec2.AddVV(center, s, massData.center); + massData.I = density * I; + massData.I += massData.mass * (b2Vec2.DotVV(massData.center, massData.center) - b2Vec2.DotVV(center, center)); + }; + b2PolygonShape.prototype.Validate = function () { + for (var i = 0; i < this.m_count; ++i) { + var i1 = i; + var i2 = (i + 1) % this.m_count; + var p = this.m_vertices[i1]; + var e = b2Vec2.SubVV(this.m_vertices[i2], p, b2PolygonShape.Validate_s_e); + for (var j = 0; j < this.m_count; ++j) { + if (j === i1 || j === i2) continue; + var v = b2Vec2.SubVV(this.m_vertices[j], p, b2PolygonShape.Validate_s_v); + var c = b2Vec2.CrossVV(e, v); + if (c < 0) return false; + } + } + return true; + }; + b2PolygonShape.prototype.SetupDistanceProxy = function (proxy, index) { + proxy.m_vertices = this.m_vertices; + proxy.m_count = this.m_count; + proxy.m_radius = this.m_radius; + }; + b2PolygonShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) { + var normalL = b2Rot.MulTRV(xf.q, normal, b2PolygonShape.ComputeSubmergedArea_s_normalL); + var offsetL = offset - b2Vec2.DotVV(normal, xf.p); + var depths = b2PolygonShape.ComputeSubmergedArea_s_depths; + var diveCount = 0; + var intoIndex = -1; + var outoIndex = -1; + var lastSubmerged = false; + for (var i_1 = 0; i_1 < this.m_count; ++i_1) { + depths[i_1] = b2Vec2.DotVV(normalL, this.m_vertices[i_1]) - offsetL; + var isSubmerged = depths[i_1] < -b2_epsilon; + if (i_1 > 0) if (isSubmerged) { + if (!lastSubmerged) { + intoIndex = i_1 - 1; + diveCount++; + } + } else if (lastSubmerged) { + outoIndex = i_1 - 1; + diveCount++; + } + lastSubmerged = isSubmerged; + } + switch (diveCount) { + case 0: + if (lastSubmerged) { + var md = b2PolygonShape.ComputeSubmergedArea_s_md; + this.ComputeMass(md, 1); + b2Transform.MulXV(xf, md.center, c); + return md.mass; + } + return 0; + + case 1: + -1 === intoIndex ? intoIndex = this.m_count - 1 : outoIndex = this.m_count - 1; + } + var intoIndex2 = (intoIndex + 1) % this.m_count; + var outoIndex2 = (outoIndex + 1) % this.m_count; + var intoLamdda = (0 - depths[intoIndex]) / (depths[intoIndex2] - depths[intoIndex]); + var outoLamdda = (0 - depths[outoIndex]) / (depths[outoIndex2] - depths[outoIndex]); + var intoVec = b2PolygonShape.ComputeSubmergedArea_s_intoVec.Set(this.m_vertices[intoIndex].x * (1 - intoLamdda) + this.m_vertices[intoIndex2].x * intoLamdda, this.m_vertices[intoIndex].y * (1 - intoLamdda) + this.m_vertices[intoIndex2].y * intoLamdda); + var outoVec = b2PolygonShape.ComputeSubmergedArea_s_outoVec.Set(this.m_vertices[outoIndex].x * (1 - outoLamdda) + this.m_vertices[outoIndex2].x * outoLamdda, this.m_vertices[outoIndex].y * (1 - outoLamdda) + this.m_vertices[outoIndex2].y * outoLamdda); + var area = 0; + var center = b2PolygonShape.ComputeSubmergedArea_s_center.SetZero(); + var p2 = this.m_vertices[intoIndex2]; + var p3; + var i = intoIndex2; + while (i !== outoIndex2) { + i = (i + 1) % this.m_count; + p3 = i === outoIndex2 ? outoVec : this.m_vertices[i]; + var triangleArea = .5 * ((p2.x - intoVec.x) * (p3.y - intoVec.y) - (p2.y - intoVec.y) * (p3.x - intoVec.x)); + area += triangleArea; + center.x += triangleArea * (intoVec.x + p2.x + p3.x) / 3; + center.y += triangleArea * (intoVec.y + p2.y + p3.y) / 3; + p2 = p3; + } + center.SelfMul(1 / area); + b2Transform.MulXV(xf, center, c); + return area; + }; + b2PolygonShape.prototype.Dump = function (log) { + log(" const shape: b2PolygonShape = new b2PolygonShape();\n"); + log(" const vs: b2Vec2[] = b2Vec2.MakeArray(%d);\n", b2_maxPolygonVertices); + for (var i = 0; i < this.m_count; ++i) log(" vs[%d].Set(%.15f, %.15f);\n", i, this.m_vertices[i].x, this.m_vertices[i].y); + log(" shape.Set(vs, %d);\n", this.m_count); + }; + b2PolygonShape.ComputeCentroid = function (vs, count, out) { + var c = out; + c.SetZero(); + var area = 0; + var pRef = b2PolygonShape.ComputeCentroid_s_pRef.SetZero(); + var inv3 = 1 / 3; + for (var i = 0; i < count; ++i) { + var p1 = pRef; + var p2 = vs[i]; + var p3 = vs[(i + 1) % count]; + var e1 = b2Vec2.SubVV(p2, p1, b2PolygonShape.ComputeCentroid_s_e1); + var e2 = b2Vec2.SubVV(p3, p1, b2PolygonShape.ComputeCentroid_s_e2); + var D = b2Vec2.CrossVV(e1, e2); + var triangleArea = .5 * D; + area += triangleArea; + c.x += triangleArea * inv3 * (p1.x + p2.x + p3.x); + c.y += triangleArea * inv3 * (p1.y + p2.y + p3.y); + } + c.SelfMul(1 / area); + return c; + }; + b2PolygonShape.Set_s_ps = b2Vec2.MakeArray(b2_maxPolygonVertices); + b2PolygonShape.Set_s_hull = b2MakeNumberArray(b2_maxPolygonVertices); + b2PolygonShape.Set_s_r = new b2Vec2(); + b2PolygonShape.Set_s_v = new b2Vec2(); + b2PolygonShape.TestPoint_s_pLocal = new b2Vec2(); + b2PolygonShape.ComputeDistance_s_pLocal = new b2Vec2(); + b2PolygonShape.ComputeDistance_s_normalForMaxDistance = new b2Vec2(); + b2PolygonShape.ComputeDistance_s_minDistance = new b2Vec2(); + b2PolygonShape.ComputeDistance_s_distance = new b2Vec2(); + b2PolygonShape.RayCast_s_p1 = new b2Vec2(); + b2PolygonShape.RayCast_s_p2 = new b2Vec2(); + b2PolygonShape.RayCast_s_d = new b2Vec2(); + b2PolygonShape.ComputeAABB_s_v = new b2Vec2(); + b2PolygonShape.ComputeMass_s_center = new b2Vec2(); + b2PolygonShape.ComputeMass_s_s = new b2Vec2(); + b2PolygonShape.ComputeMass_s_e1 = new b2Vec2(); + b2PolygonShape.ComputeMass_s_e2 = new b2Vec2(); + b2PolygonShape.Validate_s_e = new b2Vec2(); + b2PolygonShape.Validate_s_v = new b2Vec2(); + b2PolygonShape.ComputeSubmergedArea_s_normalL = new b2Vec2(); + b2PolygonShape.ComputeSubmergedArea_s_depths = b2MakeNumberArray(b2_maxPolygonVertices); + b2PolygonShape.ComputeSubmergedArea_s_md = new b2MassData(); + b2PolygonShape.ComputeSubmergedArea_s_intoVec = new b2Vec2(); + b2PolygonShape.ComputeSubmergedArea_s_outoVec = new b2Vec2(); + b2PolygonShape.ComputeSubmergedArea_s_center = new b2Vec2(); + b2PolygonShape.ComputeCentroid_s_pRef = new b2Vec2(); + b2PolygonShape.ComputeCentroid_s_e1 = new b2Vec2(); + b2PolygonShape.ComputeCentroid_s_e2 = new b2Vec2(); + return b2PolygonShape; + })(b2Shape); + var b2EdgeShape = (function (_super) { + __extends(b2EdgeShape, _super); + function b2EdgeShape() { + var _this = _super.call(this, exports.b2ShapeType.e_edgeShape, b2_polygonRadius) || this; + _this.m_vertex1 = new b2Vec2(); + _this.m_vertex2 = new b2Vec2(); + _this.m_vertex0 = new b2Vec2(); + _this.m_vertex3 = new b2Vec2(); + _this.m_hasVertex0 = false; + _this.m_hasVertex3 = false; + return _this; + } + b2EdgeShape.prototype.Set = function (v1, v2) { + this.m_vertex1.Copy(v1); + this.m_vertex2.Copy(v2); + this.m_hasVertex0 = false; + this.m_hasVertex3 = false; + return this; + }; + b2EdgeShape.prototype.Clone = function () { + return new b2EdgeShape().Copy(this); + }; + b2EdgeShape.prototype.Copy = function (other) { + _super.prototype.Copy.call(this, other); + this.m_vertex1.Copy(other.m_vertex1); + this.m_vertex2.Copy(other.m_vertex2); + this.m_vertex0.Copy(other.m_vertex0); + this.m_vertex3.Copy(other.m_vertex3); + this.m_hasVertex0 = other.m_hasVertex0; + this.m_hasVertex3 = other.m_hasVertex3; + return this; + }; + b2EdgeShape.prototype.GetChildCount = function () { + return 1; + }; + b2EdgeShape.prototype.TestPoint = function (xf, p) { + return false; + }; + b2EdgeShape.prototype.ComputeDistance = function (xf, p, normal, childIndex) { + var v1 = b2Transform.MulXV(xf, this.m_vertex1, b2EdgeShape.ComputeDistance_s_v1); + var v2 = b2Transform.MulXV(xf, this.m_vertex2, b2EdgeShape.ComputeDistance_s_v2); + var d = b2Vec2.SubVV(p, v1, b2EdgeShape.ComputeDistance_s_d); + var s = b2Vec2.SubVV(v2, v1, b2EdgeShape.ComputeDistance_s_s); + var ds = b2Vec2.DotVV(d, s); + if (ds > 0) { + var s2 = b2Vec2.DotVV(s, s); + ds > s2 ? b2Vec2.SubVV(p, v2, d) : d.SelfMulSub(ds / s2, s); + } + normal.Copy(d); + return normal.Normalize(); + }; + b2EdgeShape.prototype.RayCast = function (output, input, xf, childIndex) { + var p1 = b2Transform.MulTXV(xf, input.p1, b2EdgeShape.RayCast_s_p1); + var p2 = b2Transform.MulTXV(xf, input.p2, b2EdgeShape.RayCast_s_p2); + var d = b2Vec2.SubVV(p2, p1, b2EdgeShape.RayCast_s_d); + var v1 = this.m_vertex1; + var v2 = this.m_vertex2; + var e = b2Vec2.SubVV(v2, v1, b2EdgeShape.RayCast_s_e); + var normal = output.normal.Set(e.y, -e.x).SelfNormalize(); + var numerator = b2Vec2.DotVV(normal, b2Vec2.SubVV(v1, p1, b2Vec2.s_t0)); + var denominator = b2Vec2.DotVV(normal, d); + if (0 === denominator) return false; + var t = numerator / denominator; + if (t < 0 || input.maxFraction < t) return false; + var q = b2Vec2.AddVMulSV(p1, t, d, b2EdgeShape.RayCast_s_q); + var r = b2Vec2.SubVV(v2, v1, b2EdgeShape.RayCast_s_r); + var rr = b2Vec2.DotVV(r, r); + if (0 === rr) return false; + var s = b2Vec2.DotVV(b2Vec2.SubVV(q, v1, b2Vec2.s_t0), r) / rr; + if (s < 0 || 1 < s) return false; + output.fraction = t; + b2Rot.MulRV(xf.q, output.normal, output.normal); + numerator > 0 && output.normal.SelfNeg(); + return true; + }; + b2EdgeShape.prototype.ComputeAABB = function (aabb, xf, childIndex) { + var v1 = b2Transform.MulXV(xf, this.m_vertex1, b2EdgeShape.ComputeAABB_s_v1); + var v2 = b2Transform.MulXV(xf, this.m_vertex2, b2EdgeShape.ComputeAABB_s_v2); + b2Vec2.MinV(v1, v2, aabb.lowerBound); + b2Vec2.MaxV(v1, v2, aabb.upperBound); + var r = this.m_radius; + aabb.lowerBound.SelfSubXY(r, r); + aabb.upperBound.SelfAddXY(r, r); + }; + b2EdgeShape.prototype.ComputeMass = function (massData, density) { + massData.mass = 0; + b2Vec2.MidVV(this.m_vertex1, this.m_vertex2, massData.center); + massData.I = 0; + }; + b2EdgeShape.prototype.SetupDistanceProxy = function (proxy, index) { + proxy.m_vertices = proxy.m_buffer; + proxy.m_vertices[0].Copy(this.m_vertex1); + proxy.m_vertices[1].Copy(this.m_vertex2); + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + b2EdgeShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) { + c.SetZero(); + return 0; + }; + b2EdgeShape.prototype.Dump = function (log) { + log(" const shape: b2EdgeShape = new b2EdgeShape();\n"); + log(" shape.m_radius = %.15f;\n", this.m_radius); + log(" shape.m_vertex0.Set(%.15f, %.15f);\n", this.m_vertex0.x, this.m_vertex0.y); + log(" shape.m_vertex1.Set(%.15f, %.15f);\n", this.m_vertex1.x, this.m_vertex1.y); + log(" shape.m_vertex2.Set(%.15f, %.15f);\n", this.m_vertex2.x, this.m_vertex2.y); + log(" shape.m_vertex3.Set(%.15f, %.15f);\n", this.m_vertex3.x, this.m_vertex3.y); + log(" shape.m_hasVertex0 = %s;\n", this.m_hasVertex0); + log(" shape.m_hasVertex3 = %s;\n", this.m_hasVertex3); + }; + b2EdgeShape.ComputeDistance_s_v1 = new b2Vec2(); + b2EdgeShape.ComputeDistance_s_v2 = new b2Vec2(); + b2EdgeShape.ComputeDistance_s_d = new b2Vec2(); + b2EdgeShape.ComputeDistance_s_s = new b2Vec2(); + b2EdgeShape.RayCast_s_p1 = new b2Vec2(); + b2EdgeShape.RayCast_s_p2 = new b2Vec2(); + b2EdgeShape.RayCast_s_d = new b2Vec2(); + b2EdgeShape.RayCast_s_e = new b2Vec2(); + b2EdgeShape.RayCast_s_q = new b2Vec2(); + b2EdgeShape.RayCast_s_r = new b2Vec2(); + b2EdgeShape.ComputeAABB_s_v1 = new b2Vec2(); + b2EdgeShape.ComputeAABB_s_v2 = new b2Vec2(); + return b2EdgeShape; + })(b2Shape); + var b2ChainShape = (function (_super) { + __extends(b2ChainShape, _super); + function b2ChainShape() { + var _this = _super.call(this, exports.b2ShapeType.e_chainShape, b2_polygonRadius) || this; + _this.m_vertices = []; + _this.m_count = 0; + _this.m_prevVertex = new b2Vec2(); + _this.m_nextVertex = new b2Vec2(); + _this.m_hasPrevVertex = false; + _this.m_hasNextVertex = false; + return _this; + } + b2ChainShape.prototype.CreateLoop = function (vertices, count, start) { + void 0 === count && (count = vertices.length); + void 0 === start && (start = 0); + if (count < 3) return this; + this.m_count = count + 1; + this.m_vertices = b2Vec2.MakeArray(this.m_count); + for (var i = 0; i < count; ++i) this.m_vertices[i].Copy(vertices[start + i]); + this.m_vertices[count].Copy(this.m_vertices[0]); + this.m_prevVertex.Copy(this.m_vertices[this.m_count - 2]); + this.m_nextVertex.Copy(this.m_vertices[1]); + this.m_hasPrevVertex = true; + this.m_hasNextVertex = true; + return this; + }; + b2ChainShape.prototype.CreateChain = function (vertices, count, start) { + void 0 === count && (count = vertices.length); + void 0 === start && (start = 0); + this.m_count = count; + this.m_vertices = b2Vec2.MakeArray(count); + for (var i = 0; i < count; ++i) this.m_vertices[i].Copy(vertices[start + i]); + this.m_hasPrevVertex = false; + this.m_hasNextVertex = false; + this.m_prevVertex.SetZero(); + this.m_nextVertex.SetZero(); + return this; + }; + b2ChainShape.prototype.SetPrevVertex = function (prevVertex) { + this.m_prevVertex.Copy(prevVertex); + this.m_hasPrevVertex = true; + return this; + }; + b2ChainShape.prototype.SetNextVertex = function (nextVertex) { + this.m_nextVertex.Copy(nextVertex); + this.m_hasNextVertex = true; + return this; + }; + b2ChainShape.prototype.Clone = function () { + return new b2ChainShape().Copy(this); + }; + b2ChainShape.prototype.Copy = function (other) { + _super.prototype.Copy.call(this, other); + this.CreateChain(other.m_vertices, other.m_count); + this.m_prevVertex.Copy(other.m_prevVertex); + this.m_nextVertex.Copy(other.m_nextVertex); + this.m_hasPrevVertex = other.m_hasPrevVertex; + this.m_hasNextVertex = other.m_hasNextVertex; + return this; + }; + b2ChainShape.prototype.GetChildCount = function () { + return this.m_count - 1; + }; + b2ChainShape.prototype.GetChildEdge = function (edge, index) { + edge.m_type = exports.b2ShapeType.e_edgeShape; + edge.m_radius = this.m_radius; + edge.m_vertex1.Copy(this.m_vertices[index]); + edge.m_vertex2.Copy(this.m_vertices[index + 1]); + if (index > 0) { + edge.m_vertex0.Copy(this.m_vertices[index - 1]); + edge.m_hasVertex0 = true; + } else { + edge.m_vertex0.Copy(this.m_prevVertex); + edge.m_hasVertex0 = this.m_hasPrevVertex; + } + if (index < this.m_count - 2) { + edge.m_vertex3.Copy(this.m_vertices[index + 2]); + edge.m_hasVertex3 = true; + } else { + edge.m_vertex3.Copy(this.m_nextVertex); + edge.m_hasVertex3 = this.m_hasNextVertex; + } + }; + b2ChainShape.prototype.TestPoint = function (xf, p) { + return false; + }; + b2ChainShape.prototype.ComputeDistance = function (xf, p, normal, childIndex) { + var edge = b2ChainShape.ComputeDistance_s_edgeShape; + this.GetChildEdge(edge, childIndex); + return edge.ComputeDistance(xf, p, normal, 0); + }; + b2ChainShape.prototype.RayCast = function (output, input, xf, childIndex) { + var edgeShape = b2ChainShape.RayCast_s_edgeShape; + edgeShape.m_vertex1.Copy(this.m_vertices[childIndex]); + edgeShape.m_vertex2.Copy(this.m_vertices[(childIndex + 1) % this.m_count]); + return edgeShape.RayCast(output, input, xf, 0); + }; + b2ChainShape.prototype.ComputeAABB = function (aabb, xf, childIndex) { + var vertexi1 = this.m_vertices[childIndex]; + var vertexi2 = this.m_vertices[(childIndex + 1) % this.m_count]; + var v1 = b2Transform.MulXV(xf, vertexi1, b2ChainShape.ComputeAABB_s_v1); + var v2 = b2Transform.MulXV(xf, vertexi2, b2ChainShape.ComputeAABB_s_v2); + b2Vec2.MinV(v1, v2, aabb.lowerBound); + b2Vec2.MaxV(v1, v2, aabb.upperBound); + }; + b2ChainShape.prototype.ComputeMass = function (massData, density) { + massData.mass = 0; + massData.center.SetZero(); + massData.I = 0; + }; + b2ChainShape.prototype.SetupDistanceProxy = function (proxy, index) { + proxy.m_vertices = proxy.m_buffer; + proxy.m_vertices[0].Copy(this.m_vertices[index]); + index + 1 < this.m_count ? proxy.m_vertices[1].Copy(this.m_vertices[index + 1]) : proxy.m_vertices[1].Copy(this.m_vertices[0]); + proxy.m_count = 2; + proxy.m_radius = this.m_radius; + }; + b2ChainShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) { + c.SetZero(); + return 0; + }; + b2ChainShape.prototype.Dump = function (log) { + log(" const shape: b2ChainShape = new b2ChainShape();\n"); + log(" const vs: b2Vec2[] = b2Vec2.MakeArray(%d);\n", b2_maxPolygonVertices); + for (var i = 0; i < this.m_count; ++i) log(" vs[%d].Set(%.15f, %.15f);\n", i, this.m_vertices[i].x, this.m_vertices[i].y); + log(" shape.CreateChain(vs, %d);\n", this.m_count); + log(" shape.m_prevVertex.Set(%.15f, %.15f);\n", this.m_prevVertex.x, this.m_prevVertex.y); + log(" shape.m_nextVertex.Set(%.15f, %.15f);\n", this.m_nextVertex.x, this.m_nextVertex.y); + log(" shape.m_hasPrevVertex = %s;\n", this.m_hasPrevVertex ? "true" : "false"); + log(" shape.m_hasNextVertex = %s;\n", this.m_hasNextVertex ? "true" : "false"); + }; + b2ChainShape.ComputeDistance_s_edgeShape = new b2EdgeShape(); + b2ChainShape.RayCast_s_edgeShape = new b2EdgeShape(); + b2ChainShape.ComputeAABB_s_v1 = new b2Vec2(); + b2ChainShape.ComputeAABB_s_v2 = new b2Vec2(); + return b2ChainShape; + })(b2Shape); + var b2Filter = (function () { + function b2Filter() { + this.categoryBits = 1; + this.maskBits = 65535; + this.groupIndex = 0; + } + b2Filter.prototype.Clone = function () { + return new b2Filter().Copy(this); + }; + b2Filter.prototype.Copy = function (other) { + this.categoryBits = other.categoryBits; + this.maskBits = other.maskBits; + this.groupIndex = other.groupIndex || 0; + return this; + }; + b2Filter.DEFAULT = new b2Filter(); + return b2Filter; + })(); + var b2FixtureDef = (function () { + function b2FixtureDef() { + this.userData = null; + this.friction = .2; + this.restitution = 0; + this.density = 0; + this.isSensor = false; + this.filter = new b2Filter(); + } + return b2FixtureDef; + })(); + var b2FixtureProxy = (function () { + function b2FixtureProxy(fixture) { + this.aabb = new b2AABB(); + this.childIndex = 0; + this.fixture = fixture; + } + return b2FixtureProxy; + })(); + var b2Fixture = (function () { + function b2Fixture(def, body) { + this.m_density = 0; + this.m_next = null; + this.m_friction = 0; + this.m_restitution = 0; + this.m_proxies = []; + this.m_proxyCount = 0; + this.m_filter = new b2Filter(); + this.m_isSensor = false; + this.m_userData = null; + this.m_body = body; + this.m_shape = def.shape.Clone(); + } + b2Fixture.prototype.GetType = function () { + return this.m_shape.GetType(); + }; + b2Fixture.prototype.GetShape = function () { + return this.m_shape; + }; + b2Fixture.prototype.SetSensor = function (sensor) { + if (sensor !== this.m_isSensor) { + this.m_body.SetAwake(true); + this.m_isSensor = sensor; + } + }; + b2Fixture.prototype.IsSensor = function () { + return this.m_isSensor; + }; + b2Fixture.prototype.SetFilterData = function (filter) { + this.m_filter.Copy(filter); + this.Refilter(); + }; + b2Fixture.prototype.GetFilterData = function () { + return this.m_filter; + }; + b2Fixture.prototype.Refilter = function () { + var edge = this.m_body.GetContactList(); + while (edge) { + var contact = edge.contact; + var fixtureA = contact.GetFixtureA(); + var fixtureB = contact.GetFixtureB(); + fixtureA !== this && fixtureB !== this || contact.FlagForFiltering(); + edge = edge.next; + } + var world = this.m_body.GetWorld(); + if (null === world) return; + var broadPhase = world.m_contactManager.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) broadPhase.TouchProxy(this.m_proxies[i].treeNode); + }; + b2Fixture.prototype.GetBody = function () { + return this.m_body; + }; + b2Fixture.prototype.GetNext = function () { + return this.m_next; + }; + b2Fixture.prototype.GetUserData = function () { + return this.m_userData; + }; + b2Fixture.prototype.SetUserData = function (data) { + this.m_userData = data; + }; + b2Fixture.prototype.TestPoint = function (p) { + return this.m_shape.TestPoint(this.m_body.GetTransform(), p); + }; + b2Fixture.prototype.ComputeDistance = function (p, normal, childIndex) { + return this.m_shape.ComputeDistance(this.m_body.GetTransform(), p, normal, childIndex); + }; + b2Fixture.prototype.RayCast = function (output, input, childIndex) { + return this.m_shape.RayCast(output, input, this.m_body.GetTransform(), childIndex); + }; + b2Fixture.prototype.GetMassData = function (massData) { + void 0 === massData && (massData = new b2MassData()); + this.m_shape.ComputeMass(massData, this.m_density); + return massData; + }; + b2Fixture.prototype.SetDensity = function (density) { + this.m_density = density; + }; + b2Fixture.prototype.GetDensity = function () { + return this.m_density; + }; + b2Fixture.prototype.GetFriction = function () { + return this.m_friction; + }; + b2Fixture.prototype.SetFriction = function (friction) { + this.m_friction = friction; + }; + b2Fixture.prototype.GetRestitution = function () { + return this.m_restitution; + }; + b2Fixture.prototype.SetRestitution = function (restitution) { + this.m_restitution = restitution; + }; + b2Fixture.prototype.GetAABB = function (childIndex) { + return this.m_proxies[childIndex].aabb; + }; + b2Fixture.prototype.Dump = function (log, bodyIndex) { + log(" const fd: b2FixtureDef = new b2FixtureDef();\n"); + log(" fd.friction = %.15f;\n", this.m_friction); + log(" fd.restitution = %.15f;\n", this.m_restitution); + log(" fd.density = %.15f;\n", this.m_density); + log(" fd.isSensor = %s;\n", this.m_isSensor ? "true" : "false"); + log(" fd.filter.categoryBits = %d;\n", this.m_filter.categoryBits); + log(" fd.filter.maskBits = %d;\n", this.m_filter.maskBits); + log(" fd.filter.groupIndex = %d;\n", this.m_filter.groupIndex); + this.m_shape.Dump(log); + log("\n"); + log(" fd.shape = shape;\n"); + log("\n"); + log(" bodies[%d].CreateFixture(fd);\n", bodyIndex); + }; + b2Fixture.prototype.Create = function (def) { + var _this = this; + this.m_userData = def.userData; + this.m_friction = b2Maybe(def.friction, .2); + this.m_restitution = b2Maybe(def.restitution, 0); + this.m_next = null; + this.m_filter.Copy(b2Maybe(def.filter, b2Filter.DEFAULT)); + this.m_isSensor = b2Maybe(def.isSensor, false); + this.m_proxies = b2MakeArray(this.m_shape.GetChildCount(), (function (i) { + return new b2FixtureProxy(_this); + })); + this.m_proxyCount = 0; + this.m_density = b2Maybe(def.density, 0); + }; + b2Fixture.prototype.Destroy = function () { }; + b2Fixture.prototype.CreateProxies = function (xf) { + var broadPhase = this.m_body.m_world.m_contactManager.m_broadPhase; + this.m_proxyCount = this.m_shape.GetChildCount(); + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i] = new b2FixtureProxy(this); + this.m_shape.ComputeAABB(proxy.aabb, xf, i); + proxy.treeNode = broadPhase.CreateProxy(proxy.aabb, proxy); + proxy.childIndex = i; + } + }; + b2Fixture.prototype.DestroyProxies = function () { + var broadPhase = this.m_body.m_world.m_contactManager.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + delete proxy.treeNode.userData; + broadPhase.DestroyProxy(proxy.treeNode); + delete proxy.treeNode; + } + this.m_proxyCount = 0; + }; + b2Fixture.prototype.TouchProxies = function () { + var broadPhase = this.m_body.m_world.m_contactManager.m_broadPhase; + var proxyCount = this.m_proxyCount; + for (var i = 0; i < proxyCount; ++i) broadPhase.TouchProxy(this.m_proxies[i].treeNode); + }; + b2Fixture.prototype.Synchronize = function (transform1, transform2) { + if (0 === this.m_proxyCount) return; + var broadPhase = this.m_body.m_world.m_contactManager.m_broadPhase; + for (var i = 0; i < this.m_proxyCount; ++i) { + var proxy = this.m_proxies[i]; + var aabb1 = b2Fixture.Synchronize_s_aabb1; + var aabb2 = b2Fixture.Synchronize_s_aabb2; + this.m_shape.ComputeAABB(aabb1, transform1, i); + this.m_shape.ComputeAABB(aabb2, transform2, i); + proxy.aabb.Combine2(aabb1, aabb2); + var displacement = b2Vec2.SubVV(transform2.p, transform1.p, b2Fixture.Synchronize_s_displacement); + broadPhase.MoveProxy(proxy.treeNode, proxy.aabb, displacement); + } + }; + b2Fixture.Synchronize_s_aabb1 = new b2AABB(); + b2Fixture.Synchronize_s_aabb2 = new b2AABB(); + b2Fixture.Synchronize_s_displacement = new b2Vec2(); + return b2Fixture; + })(); + (function (b2BodyType) { + b2BodyType[b2BodyType["b2_unknown"] = -1] = "b2_unknown"; + b2BodyType[b2BodyType["b2_staticBody"] = 0] = "b2_staticBody"; + b2BodyType[b2BodyType["b2_kinematicBody"] = 1] = "b2_kinematicBody"; + b2BodyType[b2BodyType["b2_dynamicBody"] = 2] = "b2_dynamicBody"; + })(exports.b2BodyType || (exports.b2BodyType = {})); + var b2BodyDef = (function () { + function b2BodyDef() { + this.type = exports.b2BodyType.b2_staticBody; + this.position = new b2Vec2(0, 0); + this.angle = 0; + this.linearVelocity = new b2Vec2(0, 0); + this.angularVelocity = 0; + this.linearDamping = 0; + this.angularDamping = 0; + this.allowSleep = true; + this.awake = true; + this.fixedRotation = false; + this.bullet = false; + this.active = true; + this.userData = null; + this.gravityScale = 1; + } + return b2BodyDef; + })(); + var b2Body = (function () { + function b2Body(bd, world) { + this.m_type = exports.b2BodyType.b2_staticBody; + this.m_islandFlag = false; + this.m_awakeFlag = false; + this.m_autoSleepFlag = false; + this.m_bulletFlag = false; + this.m_fixedRotationFlag = false; + this.m_activeFlag = false; + this.m_toiFlag = false; + this.m_islandIndex = 0; + this.m_xf = new b2Transform(); + this.m_xf0 = new b2Transform(); + this.m_sweep = new b2Sweep(); + this.m_linearVelocity = new b2Vec2(); + this.m_angularVelocity = 0; + this.m_force = new b2Vec2(); + this.m_torque = 0; + this.m_prev = null; + this.m_next = null; + this.m_fixtureList = null; + this.m_fixtureCount = 0; + this.m_jointList = null; + this.m_contactList = null; + this.m_mass = 1; + this.m_invMass = 1; + this.m_I = 0; + this.m_invI = 0; + this.m_linearDamping = 0; + this.m_angularDamping = 0; + this.m_gravityScale = 1; + this.m_sleepTime = 0; + this.m_userData = null; + this.m_controllerList = null; + this.m_controllerCount = 0; + this.m_bulletFlag = b2Maybe(bd.bullet, false); + this.m_fixedRotationFlag = b2Maybe(bd.fixedRotation, false); + this.m_autoSleepFlag = b2Maybe(bd.allowSleep, true); + this.m_awakeFlag = b2Maybe(bd.awake, true); + this.m_activeFlag = b2Maybe(bd.active, true); + this.m_world = world; + this.m_xf.p.Copy(b2Maybe(bd.position, b2Vec2.ZERO)); + this.m_xf.q.SetAngle(b2Maybe(bd.angle, 0)); + this.m_xf0.Copy(this.m_xf); + this.m_sweep.localCenter.SetZero(); + this.m_sweep.c0.Copy(this.m_xf.p); + this.m_sweep.c.Copy(this.m_xf.p); + this.m_sweep.a0 = this.m_sweep.a = this.m_xf.q.GetAngle(); + this.m_sweep.alpha0 = 0; + this.m_linearVelocity.Copy(b2Maybe(bd.linearVelocity, b2Vec2.ZERO)); + this.m_angularVelocity = b2Maybe(bd.angularVelocity, 0); + this.m_linearDamping = b2Maybe(bd.linearDamping, 0); + this.m_angularDamping = b2Maybe(bd.angularDamping, 0); + this.m_gravityScale = b2Maybe(bd.gravityScale, 1); + this.m_force.SetZero(); + this.m_torque = 0; + this.m_sleepTime = 0; + this.m_type = b2Maybe(bd.type, exports.b2BodyType.b2_staticBody); + if (bd.type === exports.b2BodyType.b2_dynamicBody) { + this.m_mass = 1; + this.m_invMass = 1; + } else { + this.m_mass = 0; + this.m_invMass = 0; + } + this.m_I = 0; + this.m_invI = 0; + this.m_userData = bd.userData; + this.m_fixtureList = null; + this.m_fixtureCount = 0; + this.m_controllerList = null; + this.m_controllerCount = 0; + } + b2Body.prototype.CreateFixture = function (a, b) { + void 0 === b && (b = 0); + return a instanceof b2Shape ? this.CreateFixtureShapeDensity(a, b) : this.CreateFixtureDef(a); + }; + b2Body.prototype.CreateFixtureDef = function (def) { + if (this.m_world.IsLocked()) throw new Error(); + var fixture = new b2Fixture(def, this); + fixture.Create(def); + this.m_activeFlag && fixture.CreateProxies(this.m_xf); + fixture.m_next = this.m_fixtureList; + this.m_fixtureList = fixture; + ++this.m_fixtureCount; + fixture.m_density > 0 && this.ResetMassData(); + this.m_world.m_newFixture = true; + return fixture; + }; + b2Body.prototype.CreateFixtureShapeDensity = function (shape, density) { + void 0 === density && (density = 0); + var def = b2Body.CreateFixtureShapeDensity_s_def; + def.shape = shape; + def.density = density; + return this.CreateFixtureDef(def); + }; + b2Body.prototype.DestroyFixture = function (fixture) { + if (this.m_world.IsLocked()) throw new Error(); + var node = this.m_fixtureList; + var ppF = null; + while (null !== node) { + if (node === fixture) { + ppF ? ppF.m_next = fixture.m_next : this.m_fixtureList = fixture.m_next; + break; + } + ppF = node; + node = node.m_next; + } + var edge = this.m_contactList; + while (edge) { + var c = edge.contact; + edge = edge.next; + var fixtureA = c.GetFixtureA(); + var fixtureB = c.GetFixtureB(); + fixture !== fixtureA && fixture !== fixtureB || this.m_world.m_contactManager.Destroy(c); + } + this.m_activeFlag && fixture.DestroyProxies(); + fixture.m_next = null; + fixture.Destroy(); + --this.m_fixtureCount; + this.ResetMassData(); + }; + b2Body.prototype.SetTransformVec = function (position, angle) { + this.SetTransformXY(position.x, position.y, angle); + }; + b2Body.prototype.SetTransformXY = function (x, y, angle) { + if (this.m_world.IsLocked()) throw new Error(); + this.m_xf.q.SetAngle(angle); + this.m_xf.p.Set(x, y); + this.m_xf0.Copy(this.m_xf); + b2Transform.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c); + this.m_sweep.a = angle; + this.m_sweep.c0.Copy(this.m_sweep.c); + this.m_sweep.a0 = angle; + for (var f = this.m_fixtureList; f; f = f.m_next) f.Synchronize(this.m_xf, this.m_xf); + this.m_world.m_contactManager.FindNewContacts(); + }; + b2Body.prototype.SetTransform = function (xf) { + this.SetTransformVec(xf.p, xf.GetAngle()); + }; + b2Body.prototype.GetTransform = function () { + return this.m_xf; + }; + b2Body.prototype.GetPosition = function () { + return this.m_xf.p; + }; + b2Body.prototype.SetPosition = function (position) { + this.SetTransformVec(position, this.GetAngle()); + }; + b2Body.prototype.SetPositionXY = function (x, y) { + this.SetTransformXY(x, y, this.GetAngle()); + }; + b2Body.prototype.GetAngle = function () { + return this.m_sweep.a; + }; + b2Body.prototype.SetAngle = function (angle) { + this.SetTransformVec(this.GetPosition(), angle); + }; + b2Body.prototype.GetWorldCenter = function () { + return this.m_sweep.c; + }; + b2Body.prototype.GetLocalCenter = function () { + return this.m_sweep.localCenter; + }; + b2Body.prototype.SetLinearVelocity = function (v) { + if (this.m_type === exports.b2BodyType.b2_staticBody) return; + b2Vec2.DotVV(v, v) > 0 && this.SetAwake(true); + this.m_linearVelocity.Copy(v); + }; + b2Body.prototype.GetLinearVelocity = function () { + return this.m_linearVelocity; + }; + b2Body.prototype.SetAngularVelocity = function (w) { + if (this.m_type === exports.b2BodyType.b2_staticBody) return; + w * w > 0 && this.SetAwake(true); + this.m_angularVelocity = w; + }; + b2Body.prototype.GetAngularVelocity = function () { + return this.m_angularVelocity; + }; + b2Body.prototype.GetDefinition = function (bd) { + bd.type = this.GetType(); + bd.allowSleep = this.m_autoSleepFlag; + bd.angle = this.GetAngle(); + bd.angularDamping = this.m_angularDamping; + bd.gravityScale = this.m_gravityScale; + bd.angularVelocity = this.m_angularVelocity; + bd.fixedRotation = this.m_fixedRotationFlag; + bd.bullet = this.m_bulletFlag; + bd.awake = this.m_awakeFlag; + bd.linearDamping = this.m_linearDamping; + bd.linearVelocity.Copy(this.GetLinearVelocity()); + bd.position.Copy(this.GetPosition()); + bd.userData = this.GetUserData(); + return bd; + }; + b2Body.prototype.ApplyForce = function (force, point, wake) { + void 0 === wake && (wake = true); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + wake && !this.m_awakeFlag && this.SetAwake(true); + if (this.m_awakeFlag) { + this.m_force.x += force.x; + this.m_force.y += force.y; + this.m_torque += (point.x - this.m_sweep.c.x) * force.y - (point.y - this.m_sweep.c.y) * force.x; + } + }; + b2Body.prototype.ApplyForceToCenter = function (force, wake) { + void 0 === wake && (wake = true); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + wake && !this.m_awakeFlag && this.SetAwake(true); + if (this.m_awakeFlag) { + this.m_force.x += force.x; + this.m_force.y += force.y; + } + }; + b2Body.prototype.ApplyTorque = function (torque, wake) { + void 0 === wake && (wake = true); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + wake && !this.m_awakeFlag && this.SetAwake(true); + this.m_awakeFlag && (this.m_torque += torque); + }; + b2Body.prototype.ApplyLinearImpulse = function (impulse, point, wake) { + void 0 === wake && (wake = true); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + wake && !this.m_awakeFlag && this.SetAwake(true); + if (this.m_awakeFlag) { + this.m_linearVelocity.x += this.m_invMass * impulse.x; + this.m_linearVelocity.y += this.m_invMass * impulse.y; + this.m_angularVelocity += this.m_invI * ((point.x - this.m_sweep.c.x) * impulse.y - (point.y - this.m_sweep.c.y) * impulse.x); + } + }; + b2Body.prototype.ApplyLinearImpulseToCenter = function (impulse, wake) { + void 0 === wake && (wake = true); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + wake && !this.m_awakeFlag && this.SetAwake(true); + if (this.m_awakeFlag) { + this.m_linearVelocity.x += this.m_invMass * impulse.x; + this.m_linearVelocity.y += this.m_invMass * impulse.y; + } + }; + b2Body.prototype.ApplyAngularImpulse = function (impulse, wake) { + void 0 === wake && (wake = true); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + wake && !this.m_awakeFlag && this.SetAwake(true); + this.m_awakeFlag && (this.m_angularVelocity += this.m_invI * impulse); + }; + b2Body.prototype.GetMass = function () { + return this.m_mass; + }; + b2Body.prototype.GetInertia = function () { + return this.m_I + this.m_mass * b2Vec2.DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter); + }; + b2Body.prototype.GetMassData = function (data) { + data.mass = this.m_mass; + data.I = this.m_I + this.m_mass * b2Vec2.DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter); + data.center.Copy(this.m_sweep.localCenter); + return data; + }; + b2Body.prototype.SetMassData = function (massData) { + if (this.m_world.IsLocked()) throw new Error(); + if (this.m_type !== exports.b2BodyType.b2_dynamicBody) return; + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + this.m_mass = massData.mass; + this.m_mass <= 0 && (this.m_mass = 1); + this.m_invMass = 1 / this.m_mass; + if (massData.I > 0 && !this.m_fixedRotationFlag) { + this.m_I = massData.I - this.m_mass * b2Vec2.DotVV(massData.center, massData.center); + this.m_invI = 1 / this.m_I; + } + var oldCenter = b2Body.SetMassData_s_oldCenter.Copy(this.m_sweep.c); + this.m_sweep.localCenter.Copy(massData.center); + b2Transform.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c); + this.m_sweep.c0.Copy(this.m_sweep.c); + b2Vec2.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, b2Vec2.SubVV(this.m_sweep.c, oldCenter, b2Vec2.s_t0), this.m_linearVelocity); + }; + b2Body.prototype.ResetMassData = function () { + this.m_mass = 0; + this.m_invMass = 0; + this.m_I = 0; + this.m_invI = 0; + this.m_sweep.localCenter.SetZero(); + if (this.m_type === exports.b2BodyType.b2_staticBody || this.m_type === exports.b2BodyType.b2_kinematicBody) { + this.m_sweep.c0.Copy(this.m_xf.p); + this.m_sweep.c.Copy(this.m_xf.p); + this.m_sweep.a0 = this.m_sweep.a; + return; + } + var localCenter = b2Body.ResetMassData_s_localCenter.SetZero(); + for (var f = this.m_fixtureList; f; f = f.m_next) { + if (0 === f.m_density) continue; + var massData = f.GetMassData(b2Body.ResetMassData_s_massData); + this.m_mass += massData.mass; + localCenter.x += massData.center.x * massData.mass; + localCenter.y += massData.center.y * massData.mass; + this.m_I += massData.I; + } + if (this.m_mass > 0) { + this.m_invMass = 1 / this.m_mass; + localCenter.x *= this.m_invMass; + localCenter.y *= this.m_invMass; + } else { + this.m_mass = 1; + this.m_invMass = 1; + } + if (this.m_I > 0 && !this.m_fixedRotationFlag) { + this.m_I -= this.m_mass * b2Vec2.DotVV(localCenter, localCenter); + this.m_invI = 1 / this.m_I; + } else { + this.m_I = 0; + this.m_invI = 0; + } + var oldCenter = b2Body.ResetMassData_s_oldCenter.Copy(this.m_sweep.c); + this.m_sweep.localCenter.Copy(localCenter); + b2Transform.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c); + this.m_sweep.c0.Copy(this.m_sweep.c); + b2Vec2.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, b2Vec2.SubVV(this.m_sweep.c, oldCenter, b2Vec2.s_t0), this.m_linearVelocity); + }; + b2Body.prototype.GetWorldPoint = function (localPoint, out) { + return b2Transform.MulXV(this.m_xf, localPoint, out); + }; + b2Body.prototype.GetWorldVector = function (localVector, out) { + return b2Rot.MulRV(this.m_xf.q, localVector, out); + }; + b2Body.prototype.GetLocalPoint = function (worldPoint, out) { + return b2Transform.MulTXV(this.m_xf, worldPoint, out); + }; + b2Body.prototype.GetLocalVector = function (worldVector, out) { + return b2Rot.MulTRV(this.m_xf.q, worldVector, out); + }; + b2Body.prototype.GetLinearVelocityFromWorldPoint = function (worldPoint, out) { + return b2Vec2.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, b2Vec2.SubVV(worldPoint, this.m_sweep.c, b2Vec2.s_t0), out); + }; + b2Body.prototype.GetLinearVelocityFromLocalPoint = function (localPoint, out) { + return this.GetLinearVelocityFromWorldPoint(this.GetWorldPoint(localPoint, out), out); + }; + b2Body.prototype.GetLinearDamping = function () { + return this.m_linearDamping; + }; + b2Body.prototype.SetLinearDamping = function (linearDamping) { + this.m_linearDamping = linearDamping; + }; + b2Body.prototype.GetAngularDamping = function () { + return this.m_angularDamping; + }; + b2Body.prototype.SetAngularDamping = function (angularDamping) { + this.m_angularDamping = angularDamping; + }; + b2Body.prototype.GetGravityScale = function () { + return this.m_gravityScale; + }; + b2Body.prototype.SetGravityScale = function (scale) { + this.m_gravityScale = scale; + }; + b2Body.prototype.SetType = function (type) { + if (this.m_world.IsLocked()) throw new Error(); + if (this.m_type === type) return; + this.m_type = type; + this.ResetMassData(); + if (this.m_type === exports.b2BodyType.b2_staticBody) { + this.m_linearVelocity.SetZero(); + this.m_angularVelocity = 0; + this.m_sweep.a0 = this.m_sweep.a; + this.m_sweep.c0.Copy(this.m_sweep.c); + this.SynchronizeFixtures(); + } + this.SetAwake(true); + this.m_force.SetZero(); + this.m_torque = 0; + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.m_contactManager.Destroy(ce0.contact); + } + this.m_contactList = null; + for (var f = this.m_fixtureList; f; f = f.m_next) f.TouchProxies(); + }; + b2Body.prototype.GetType = function () { + return this.m_type; + }; + b2Body.prototype.SetBullet = function (flag) { + this.m_bulletFlag = flag; + }; + b2Body.prototype.IsBullet = function () { + return this.m_bulletFlag; + }; + b2Body.prototype.SetSleepingAllowed = function (flag) { + this.m_autoSleepFlag = flag; + flag || this.SetAwake(true); + }; + b2Body.prototype.IsSleepingAllowed = function () { + return this.m_autoSleepFlag; + }; + b2Body.prototype.SetAwake = function (flag) { + if (flag) { + this.m_awakeFlag = true; + this.m_sleepTime = 0; + } else { + this.m_awakeFlag = false; + this.m_sleepTime = 0; + this.m_linearVelocity.SetZero(); + this.m_angularVelocity = 0; + this.m_force.SetZero(); + this.m_torque = 0; + } + }; + b2Body.prototype.IsAwake = function () { + return this.m_awakeFlag; + }; + b2Body.prototype.SetActive = function (flag) { + if (this.m_world.IsLocked()) throw new Error(); + if (flag === this.IsActive()) return; + this.m_activeFlag = flag; + if (flag) for (var f = this.m_fixtureList; f; f = f.m_next) f.CreateProxies(this.m_xf); else { + for (var f = this.m_fixtureList; f; f = f.m_next) f.DestroyProxies(); + var ce = this.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_world.m_contactManager.Destroy(ce0.contact); + } + this.m_contactList = null; + } + }; + b2Body.prototype.IsActive = function () { + return this.m_activeFlag; + }; + b2Body.prototype.SetFixedRotation = function (flag) { + if (this.m_fixedRotationFlag === flag) return; + this.m_fixedRotationFlag = flag; + this.m_angularVelocity = 0; + this.ResetMassData(); + }; + b2Body.prototype.IsFixedRotation = function () { + return this.m_fixedRotationFlag; + }; + b2Body.prototype.GetFixtureList = function () { + return this.m_fixtureList; + }; + b2Body.prototype.GetJointList = function () { + return this.m_jointList; + }; + b2Body.prototype.GetContactList = function () { + return this.m_contactList; + }; + b2Body.prototype.GetNext = function () { + return this.m_next; + }; + b2Body.prototype.GetUserData = function () { + return this.m_userData; + }; + b2Body.prototype.SetUserData = function (data) { + this.m_userData = data; + }; + b2Body.prototype.GetWorld = function () { + return this.m_world; + }; + b2Body.prototype.Dump = function (log) { + var bodyIndex = this.m_islandIndex; + log("{\n"); + log(" const bd: b2BodyDef = new b2BodyDef();\n"); + var type_str = ""; + switch (this.m_type) { + case exports.b2BodyType.b2_staticBody: + type_str = "b2BodyType.b2_staticBody"; + break; + + case exports.b2BodyType.b2_kinematicBody: + type_str = "b2BodyType.b2_kinematicBody"; + break; + + case exports.b2BodyType.b2_dynamicBody: + type_str = "b2BodyType.b2_dynamicBody"; + } + log(" bd.type = %s;\n", type_str); + log(" bd.position.Set(%.15f, %.15f);\n", this.m_xf.p.x, this.m_xf.p.y); + log(" bd.angle = %.15f;\n", this.m_sweep.a); + log(" bd.linearVelocity.Set(%.15f, %.15f);\n", this.m_linearVelocity.x, this.m_linearVelocity.y); + log(" bd.angularVelocity = %.15f;\n", this.m_angularVelocity); + log(" bd.linearDamping = %.15f;\n", this.m_linearDamping); + log(" bd.angularDamping = %.15f;\n", this.m_angularDamping); + log(" bd.allowSleep = %s;\n", this.m_autoSleepFlag ? "true" : "false"); + log(" bd.awake = %s;\n", this.m_awakeFlag ? "true" : "false"); + log(" bd.fixedRotation = %s;\n", this.m_fixedRotationFlag ? "true" : "false"); + log(" bd.bullet = %s;\n", this.m_bulletFlag ? "true" : "false"); + log(" bd.active = %s;\n", this.m_activeFlag ? "true" : "false"); + log(" bd.gravityScale = %.15f;\n", this.m_gravityScale); + log("\n"); + log(" bodies[%d] = this.m_world.CreateBody(bd);\n", this.m_islandIndex); + log("\n"); + for (var f = this.m_fixtureList; f; f = f.m_next) { + log(" {\n"); + f.Dump(log, bodyIndex); + log(" }\n"); + } + log("}\n"); + }; + b2Body.prototype.SynchronizeFixtures = function () { + var xf1 = b2Body.SynchronizeFixtures_s_xf1; + xf1.q.SetAngle(this.m_sweep.a0); + b2Rot.MulRV(xf1.q, this.m_sweep.localCenter, xf1.p); + b2Vec2.SubVV(this.m_sweep.c0, xf1.p, xf1.p); + for (var f = this.m_fixtureList; f; f = f.m_next) f.Synchronize(xf1, this.m_xf); + }; + b2Body.prototype.SynchronizeTransform = function () { + this.m_xf.q.SetAngle(this.m_sweep.a); + b2Rot.MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p); + b2Vec2.SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p); + }; + b2Body.prototype.ShouldCollide = function (other) { + if (this.m_type === exports.b2BodyType.b2_staticBody && other.m_type === exports.b2BodyType.b2_staticBody) return false; + return this.ShouldCollideConnected(other); + }; + b2Body.prototype.ShouldCollideConnected = function (other) { + for (var jn = this.m_jointList; jn; jn = jn.next) if (jn.other === other && !jn.joint.m_collideConnected) return false; + return true; + }; + b2Body.prototype.Advance = function (alpha) { + this.m_sweep.Advance(alpha); + this.m_sweep.c.Copy(this.m_sweep.c0); + this.m_sweep.a = this.m_sweep.a0; + this.m_xf.q.SetAngle(this.m_sweep.a); + b2Rot.MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p); + b2Vec2.SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p); + }; + b2Body.prototype.GetControllerList = function () { + return this.m_controllerList; + }; + b2Body.prototype.GetControllerCount = function () { + return this.m_controllerCount; + }; + b2Body.CreateFixtureShapeDensity_s_def = new b2FixtureDef(); + b2Body.SetMassData_s_oldCenter = new b2Vec2(); + b2Body.ResetMassData_s_localCenter = new b2Vec2(); + b2Body.ResetMassData_s_oldCenter = new b2Vec2(); + b2Body.ResetMassData_s_massData = new b2MassData(); + b2Body.SynchronizeFixtures_s_xf1 = new b2Transform(); + return b2Body; + })(); + (function (b2JointType) { + b2JointType[b2JointType["e_unknownJoint"] = 0] = "e_unknownJoint"; + b2JointType[b2JointType["e_revoluteJoint"] = 1] = "e_revoluteJoint"; + b2JointType[b2JointType["e_prismaticJoint"] = 2] = "e_prismaticJoint"; + b2JointType[b2JointType["e_distanceJoint"] = 3] = "e_distanceJoint"; + b2JointType[b2JointType["e_pulleyJoint"] = 4] = "e_pulleyJoint"; + b2JointType[b2JointType["e_mouseJoint"] = 5] = "e_mouseJoint"; + b2JointType[b2JointType["e_gearJoint"] = 6] = "e_gearJoint"; + b2JointType[b2JointType["e_wheelJoint"] = 7] = "e_wheelJoint"; + b2JointType[b2JointType["e_weldJoint"] = 8] = "e_weldJoint"; + b2JointType[b2JointType["e_frictionJoint"] = 9] = "e_frictionJoint"; + b2JointType[b2JointType["e_ropeJoint"] = 10] = "e_ropeJoint"; + b2JointType[b2JointType["e_motorJoint"] = 11] = "e_motorJoint"; + b2JointType[b2JointType["e_areaJoint"] = 12] = "e_areaJoint"; + })(exports.b2JointType || (exports.b2JointType = {})); + (function (b2LimitState) { + b2LimitState[b2LimitState["e_inactiveLimit"] = 0] = "e_inactiveLimit"; + b2LimitState[b2LimitState["e_atLowerLimit"] = 1] = "e_atLowerLimit"; + b2LimitState[b2LimitState["e_atUpperLimit"] = 2] = "e_atUpperLimit"; + b2LimitState[b2LimitState["e_equalLimits"] = 3] = "e_equalLimits"; + })(exports.b2LimitState || (exports.b2LimitState = {})); + var b2Jacobian = (function () { + function b2Jacobian() { + this.linear = new b2Vec2(); + this.angularA = 0; + this.angularB = 0; + } + b2Jacobian.prototype.SetZero = function () { + this.linear.SetZero(); + this.angularA = 0; + this.angularB = 0; + return this; + }; + b2Jacobian.prototype.Set = function (x, a1, a2) { + this.linear.Copy(x); + this.angularA = a1; + this.angularB = a2; + return this; + }; + return b2Jacobian; + })(); + var b2JointEdge = (function () { + function b2JointEdge(joint, other) { + this.prev = null; + this.next = null; + this.joint = joint; + this.other = other; + } + return b2JointEdge; + })(); + var b2JointDef = (function () { + function b2JointDef(type) { + this.type = exports.b2JointType.e_unknownJoint; + this.userData = null; + this.collideConnected = false; + this.type = type; + } + return b2JointDef; + })(); + var b2Joint = (function () { + function b2Joint(def) { + this.m_type = exports.b2JointType.e_unknownJoint; + this.m_prev = null; + this.m_next = null; + this.m_index = 0; + this.m_islandFlag = false; + this.m_collideConnected = false; + this.m_userData = null; + this.m_type = def.type; + this.m_edgeA = new b2JointEdge(this, def.bodyB); + this.m_edgeB = new b2JointEdge(this, def.bodyA); + this.m_bodyA = def.bodyA; + this.m_bodyB = def.bodyB; + this.m_collideConnected = b2Maybe(def.collideConnected, false); + this.m_userData = def.userData; + } + b2Joint.prototype.GetType = function () { + return this.m_type; + }; + b2Joint.prototype.GetBodyA = function () { + return this.m_bodyA; + }; + b2Joint.prototype.GetBodyB = function () { + return this.m_bodyB; + }; + b2Joint.prototype.GetNext = function () { + return this.m_next; + }; + b2Joint.prototype.GetUserData = function () { + return this.m_userData; + }; + b2Joint.prototype.SetUserData = function (data) { + this.m_userData = data; + }; + b2Joint.prototype.IsActive = function () { + return this.m_bodyA.IsActive() && this.m_bodyB.IsActive(); + }; + b2Joint.prototype.GetCollideConnected = function () { + return this.m_collideConnected; + }; + b2Joint.prototype.Dump = function (log) { + log("// Dump is not supported for this joint type.\n"); + }; + b2Joint.prototype.ShiftOrigin = function (newOrigin) { }; + return b2Joint; + })(); + var b2DistanceJointDef = (function (_super) { + __extends(b2DistanceJointDef, _super); + function b2DistanceJointDef() { + var _this = _super.call(this, exports.b2JointType.e_distanceJoint) || this; + _this.localAnchorA = new b2Vec2(); + _this.localAnchorB = new b2Vec2(); + _this.length = 1; + _this.frequencyHz = 0; + _this.dampingRatio = 0; + return _this; + } + b2DistanceJointDef.prototype.Initialize = function (b1, b2, anchor1, anchor2) { + this.bodyA = b1; + this.bodyB = b2; + this.bodyA.GetLocalPoint(anchor1, this.localAnchorA); + this.bodyB.GetLocalPoint(anchor2, this.localAnchorB); + this.length = b2Vec2.DistanceVV(anchor1, anchor2); + this.frequencyHz = 0; + this.dampingRatio = 0; + }; + return b2DistanceJointDef; + })(b2JointDef); + var b2DistanceJoint = (function (_super) { + __extends(b2DistanceJoint, _super); + function b2DistanceJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_frequencyHz = 0; + _this.m_dampingRatio = 0; + _this.m_bias = 0; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_gamma = 0; + _this.m_impulse = 0; + _this.m_length = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_u = new b2Vec2(); + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_mass = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_frequencyHz = b2Maybe(def.frequencyHz, 0); + _this.m_dampingRatio = b2Maybe(def.dampingRatio, 0); + _this.m_localAnchorA.Copy(def.localAnchorA); + _this.m_localAnchorB.Copy(def.localAnchorB); + _this.m_length = def.length; + return _this; + } + b2DistanceJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2DistanceJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2DistanceJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * this.m_impulse * this.m_u.x; + out.y = inv_dt * this.m_impulse * this.m_u.y; + return out; + }; + b2DistanceJoint.prototype.GetReactionTorque = function (inv_dt) { + return 0; + }; + b2DistanceJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2DistanceJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2DistanceJoint.prototype.SetLength = function (length) { + this.m_length = length; + }; + b2DistanceJoint.prototype.Length = function () { + return this.m_length; + }; + b2DistanceJoint.prototype.SetFrequency = function (hz) { + this.m_frequencyHz = hz; + }; + b2DistanceJoint.prototype.GetFrequency = function () { + return this.m_frequencyHz; + }; + b2DistanceJoint.prototype.SetDampingRatio = function (ratio) { + this.m_dampingRatio = ratio; + }; + b2DistanceJoint.prototype.GetDampingRatio = function () { + return this.m_dampingRatio; + }; + b2DistanceJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2DistanceJointDef = new b2DistanceJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.length = %.15f;\n", this.m_length); + log(" jd.frequencyHz = %.15f;\n", this.m_frequencyHz); + log(" jd.dampingRatio = %.15f;\n", this.m_dampingRatio); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2DistanceJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + this.m_u.x = cB.x + this.m_rB.x - cA.x - this.m_rA.x; + this.m_u.y = cB.y + this.m_rB.y - cA.y - this.m_rA.y; + var length = this.m_u.Length(); + length > b2_linearSlop ? this.m_u.SelfMul(1 / length) : this.m_u.SetZero(); + var crAu = b2Vec2.CrossVV(this.m_rA, this.m_u); + var crBu = b2Vec2.CrossVV(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crAu * crAu + this.m_invMassB + this.m_invIB * crBu * crBu; + this.m_mass = 0 !== invMass ? 1 / invMass : 0; + if (this.m_frequencyHz > 0) { + var C = length - this.m_length; + var omega = 2 * b2_pi * this.m_frequencyHz; + var d = 2 * this.m_mass * this.m_dampingRatio * omega; + var k = this.m_mass * omega * omega; + var h = data.step.dt; + this.m_gamma = h * (d + h * k); + this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invMass += this.m_gamma; + this.m_mass = 0 !== invMass ? 1 / invMass : 0; + } else { + this.m_gamma = 0; + this.m_bias = 0; + } + if (data.step.warmStarting) { + this.m_impulse *= data.step.dtRatio; + var P = b2Vec2.MulSV(this.m_impulse, this.m_u, b2DistanceJoint.InitVelocityConstraints_s_P); + vA.SelfMulSub(this.m_invMassA, P); + wA -= this.m_invIA * b2Vec2.CrossVV(this.m_rA, P); + vB.SelfMulAdd(this.m_invMassB, P); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, P); + } else this.m_impulse = 0; + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2DistanceJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var vpA = b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2DistanceJoint.SolveVelocityConstraints_s_vpA); + var vpB = b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2DistanceJoint.SolveVelocityConstraints_s_vpB); + var Cdot = b2Vec2.DotVV(this.m_u, b2Vec2.SubVV(vpB, vpA, b2Vec2.s_t0)); + var impulse = -this.m_mass * (Cdot + this.m_bias + this.m_gamma * this.m_impulse); + this.m_impulse += impulse; + var P = b2Vec2.MulSV(impulse, this.m_u, b2DistanceJoint.SolveVelocityConstraints_s_P); + vA.SelfMulSub(this.m_invMassA, P); + wA -= this.m_invIA * b2Vec2.CrossVV(this.m_rA, P); + vB.SelfMulAdd(this.m_invMassB, P); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, P); + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2DistanceJoint.prototype.SolvePositionConstraints = function (data) { + if (this.m_frequencyHz > 0) return true; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var u = this.m_u; + u.x = cB.x + rB.x - cA.x - rA.x; + u.y = cB.y + rB.y - cA.y - rA.y; + var length = this.m_u.Normalize(); + var C = length - this.m_length; + C = b2Clamp(C, -b2_maxLinearCorrection, b2_maxLinearCorrection); + var impulse = -this.m_mass * C; + var P = b2Vec2.MulSV(impulse, u, b2DistanceJoint.SolvePositionConstraints_s_P); + cA.SelfMulSub(this.m_invMassA, P); + aA -= this.m_invIA * b2Vec2.CrossVV(rA, P); + cB.SelfMulAdd(this.m_invMassB, P); + aB += this.m_invIB * b2Vec2.CrossVV(rB, P); + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return b2Abs(C) < b2_linearSlop; + }; + b2DistanceJoint.InitVelocityConstraints_s_P = new b2Vec2(); + b2DistanceJoint.SolveVelocityConstraints_s_vpA = new b2Vec2(); + b2DistanceJoint.SolveVelocityConstraints_s_vpB = new b2Vec2(); + b2DistanceJoint.SolveVelocityConstraints_s_P = new b2Vec2(); + b2DistanceJoint.SolvePositionConstraints_s_P = new b2Vec2(); + return b2DistanceJoint; + })(b2Joint); + var b2AreaJointDef = (function (_super) { + __extends(b2AreaJointDef, _super); + function b2AreaJointDef() { + var _this = _super.call(this, exports.b2JointType.e_areaJoint) || this; + _this.bodies = []; + _this.frequencyHz = 0; + _this.dampingRatio = 0; + return _this; + } + b2AreaJointDef.prototype.AddBody = function (body) { + this.bodies.push(body); + 1 === this.bodies.length ? this.bodyA = body : 2 === this.bodies.length && (this.bodyB = body); + }; + return b2AreaJointDef; + })(b2JointDef); + var b2AreaJoint = (function (_super) { + __extends(b2AreaJoint, _super); + function b2AreaJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_frequencyHz = 0; + _this.m_dampingRatio = 0; + _this.m_impulse = 0; + _this.m_targetArea = 0; + _this.m_bodies = def.bodies; + _this.m_frequencyHz = b2Maybe(def.frequencyHz, 0); + _this.m_dampingRatio = b2Maybe(def.dampingRatio, 0); + _this.m_targetLengths = b2MakeNumberArray(def.bodies.length); + _this.m_normals = b2Vec2.MakeArray(def.bodies.length); + _this.m_joints = []; + _this.m_deltas = b2Vec2.MakeArray(def.bodies.length); + _this.m_delta = new b2Vec2(); + var djd = new b2DistanceJointDef(); + djd.frequencyHz = _this.m_frequencyHz; + djd.dampingRatio = _this.m_dampingRatio; + _this.m_targetArea = 0; + for (var i = 0; i < _this.m_bodies.length; ++i) { + var body = _this.m_bodies[i]; + var next = _this.m_bodies[(i + 1) % _this.m_bodies.length]; + var body_c = body.GetWorldCenter(); + var next_c = next.GetWorldCenter(); + _this.m_targetLengths[i] = b2Vec2.DistanceVV(body_c, next_c); + _this.m_targetArea += b2Vec2.CrossVV(body_c, next_c); + djd.Initialize(body, next, body_c, next_c); + _this.m_joints[i] = body.GetWorld().CreateJoint(djd); + } + _this.m_targetArea *= .5; + return _this; + } + b2AreaJoint.prototype.GetAnchorA = function (out) { + return out; + }; + b2AreaJoint.prototype.GetAnchorB = function (out) { + return out; + }; + b2AreaJoint.prototype.GetReactionForce = function (inv_dt, out) { + return out; + }; + b2AreaJoint.prototype.GetReactionTorque = function (inv_dt) { + return 0; + }; + b2AreaJoint.prototype.SetFrequency = function (hz) { + this.m_frequencyHz = hz; + for (var i = 0; i < this.m_joints.length; ++i) this.m_joints[i].SetFrequency(hz); + }; + b2AreaJoint.prototype.GetFrequency = function () { + return this.m_frequencyHz; + }; + b2AreaJoint.prototype.SetDampingRatio = function (ratio) { + this.m_dampingRatio = ratio; + for (var i = 0; i < this.m_joints.length; ++i) this.m_joints[i].SetDampingRatio(ratio); + }; + b2AreaJoint.prototype.GetDampingRatio = function () { + return this.m_dampingRatio; + }; + b2AreaJoint.prototype.Dump = function (log) { + log("Area joint dumping is not supported.\n"); + }; + b2AreaJoint.prototype.InitVelocityConstraints = function (data) { + for (var i = 0; i < this.m_bodies.length; ++i) { + var prev = this.m_bodies[(i + this.m_bodies.length - 1) % this.m_bodies.length]; + var next = this.m_bodies[(i + 1) % this.m_bodies.length]; + var prev_c = data.positions[prev.m_islandIndex].c; + var next_c = data.positions[next.m_islandIndex].c; + var delta = this.m_deltas[i]; + b2Vec2.SubVV(next_c, prev_c, delta); + } + if (data.step.warmStarting) { + this.m_impulse *= data.step.dtRatio; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + var body_v = data.velocities[body.m_islandIndex].v; + var delta = this.m_deltas[i]; + body_v.x += body.m_invMass * delta.y * .5 * this.m_impulse; + body_v.y += body.m_invMass * -delta.x * .5 * this.m_impulse; + } + } else this.m_impulse = 0; + }; + b2AreaJoint.prototype.SolveVelocityConstraints = function (data) { + var dotMassSum = 0; + var crossMassSum = 0; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + var body_v = data.velocities[body.m_islandIndex].v; + var delta = this.m_deltas[i]; + dotMassSum += delta.LengthSquared() / body.GetMass(); + crossMassSum += b2Vec2.CrossVV(body_v, delta); + } + var lambda = -2 * crossMassSum / dotMassSum; + this.m_impulse += lambda; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + var body_v = data.velocities[body.m_islandIndex].v; + var delta = this.m_deltas[i]; + body_v.x += body.m_invMass * delta.y * .5 * lambda; + body_v.y += body.m_invMass * -delta.x * .5 * lambda; + } + }; + b2AreaJoint.prototype.SolvePositionConstraints = function (data) { + var perimeter = 0; + var area = 0; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + var next = this.m_bodies[(i + 1) % this.m_bodies.length]; + var body_c = data.positions[body.m_islandIndex].c; + var next_c = data.positions[next.m_islandIndex].c; + var delta = b2Vec2.SubVV(next_c, body_c, this.m_delta); + var dist = delta.Length(); + dist < b2_epsilon && (dist = 1); + this.m_normals[i].x = delta.y / dist; + this.m_normals[i].y = -delta.x / dist; + perimeter += dist; + area += b2Vec2.CrossVV(body_c, next_c); + } + area *= .5; + var deltaArea = this.m_targetArea - area; + var toExtrude = .5 * deltaArea / perimeter; + var done = true; + for (var i = 0; i < this.m_bodies.length; ++i) { + var body = this.m_bodies[i]; + var body_c = data.positions[body.m_islandIndex].c; + var next_i = (i + 1) % this.m_bodies.length; + var delta = b2Vec2.AddVV(this.m_normals[i], this.m_normals[next_i], this.m_delta); + delta.SelfMul(toExtrude); + var norm_sq = delta.LengthSquared(); + norm_sq > b2Sq(b2_maxLinearCorrection) && delta.SelfMul(b2_maxLinearCorrection / b2Sqrt(norm_sq)); + norm_sq > b2Sq(b2_linearSlop) && (done = false); + body_c.x += delta.x; + body_c.y += delta.y; + } + return done; + }; + return b2AreaJoint; + })(b2Joint); + var b2FrictionJointDef = (function (_super) { + __extends(b2FrictionJointDef, _super); + function b2FrictionJointDef() { + var _this = _super.call(this, exports.b2JointType.e_frictionJoint) || this; + _this.localAnchorA = new b2Vec2(); + _this.localAnchorB = new b2Vec2(); + _this.maxForce = 0; + _this.maxTorque = 0; + return _this; + } + b2FrictionJointDef.prototype.Initialize = function (bA, bB, anchor) { + this.bodyA = bA; + this.bodyB = bB; + this.bodyA.GetLocalPoint(anchor, this.localAnchorA); + this.bodyB.GetLocalPoint(anchor, this.localAnchorB); + }; + return b2FrictionJointDef; + })(b2JointDef); + var b2FrictionJoint = (function (_super) { + __extends(b2FrictionJoint, _super); + function b2FrictionJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_linearImpulse = new b2Vec2(); + _this.m_angularImpulse = 0; + _this.m_maxForce = 0; + _this.m_maxTorque = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_linearMass = new b2Mat22(); + _this.m_angularMass = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_K = new b2Mat22(); + _this.m_localAnchorA.Copy(def.localAnchorA); + _this.m_localAnchorB.Copy(def.localAnchorB); + _this.m_linearImpulse.SetZero(); + _this.m_maxForce = b2Maybe(def.maxForce, 0); + _this.m_maxTorque = b2Maybe(def.maxTorque, 0); + _this.m_linearMass.SetZero(); + return _this; + } + b2FrictionJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var K = this.m_K; + K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; + K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; + K.GetInverse(this.m_linearMass); + this.m_angularMass = iA + iB; + this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass); + if (data.step.warmStarting) { + this.m_linearImpulse.SelfMul(data.step.dtRatio); + this.m_angularImpulse *= data.step.dtRatio; + var P = this.m_linearImpulse; + vA.SelfMulSub(mA, P); + wA -= iA * (b2Vec2.CrossVV(this.m_rA, P) + this.m_angularImpulse); + vB.SelfMulAdd(mB, P); + wB += iB * (b2Vec2.CrossVV(this.m_rB, P) + this.m_angularImpulse); + } else { + this.m_linearImpulse.SetZero(); + this.m_angularImpulse = 0; + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2FrictionJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var h = data.step.dt; + var Cdot = wB - wA; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = b2Clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + var Cdot_v2 = b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2Vec2.s_t1), b2FrictionJoint.SolveVelocityConstraints_s_Cdot_v2); + var impulseV = b2Mat22.MulMV(this.m_linearMass, Cdot_v2, b2FrictionJoint.SolveVelocityConstraints_s_impulseV).SelfNeg(); + var oldImpulseV = b2FrictionJoint.SolveVelocityConstraints_s_oldImpulseV.Copy(this.m_linearImpulse); + this.m_linearImpulse.SelfAdd(impulseV); + var maxImpulse = h * this.m_maxForce; + if (this.m_linearImpulse.LengthSquared() > maxImpulse * maxImpulse) { + this.m_linearImpulse.Normalize(); + this.m_linearImpulse.SelfMul(maxImpulse); + } + b2Vec2.SubVV(this.m_linearImpulse, oldImpulseV, impulseV); + vA.SelfMulSub(mA, impulseV); + wA -= iA * b2Vec2.CrossVV(this.m_rA, impulseV); + vB.SelfMulAdd(mB, impulseV); + wB += iB * b2Vec2.CrossVV(this.m_rB, impulseV); + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2FrictionJoint.prototype.SolvePositionConstraints = function (data) { + return true; + }; + b2FrictionJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2FrictionJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2FrictionJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * this.m_linearImpulse.x; + out.y = inv_dt * this.m_linearImpulse.y; + return out; + }; + b2FrictionJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + b2FrictionJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2FrictionJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2FrictionJoint.prototype.SetMaxForce = function (force) { + this.m_maxForce = force; + }; + b2FrictionJoint.prototype.GetMaxForce = function () { + return this.m_maxForce; + }; + b2FrictionJoint.prototype.SetMaxTorque = function (torque) { + this.m_maxTorque = torque; + }; + b2FrictionJoint.prototype.GetMaxTorque = function () { + return this.m_maxTorque; + }; + b2FrictionJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2FrictionJointDef = new b2FrictionJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.maxForce = %.15f;\n", this.m_maxForce); + log(" jd.maxTorque = %.15f;\n", this.m_maxTorque); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2FrictionJoint.SolveVelocityConstraints_s_Cdot_v2 = new b2Vec2(); + b2FrictionJoint.SolveVelocityConstraints_s_impulseV = new b2Vec2(); + b2FrictionJoint.SolveVelocityConstraints_s_oldImpulseV = new b2Vec2(); + return b2FrictionJoint; + })(b2Joint); + var b2GearJointDef = (function (_super) { + __extends(b2GearJointDef, _super); + function b2GearJointDef() { + var _this = _super.call(this, exports.b2JointType.e_gearJoint) || this; + _this.ratio = 1; + return _this; + } + return b2GearJointDef; + })(b2JointDef); + var b2GearJoint = (function (_super) { + __extends(b2GearJoint, _super); + function b2GearJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_typeA = exports.b2JointType.e_unknownJoint; + _this.m_typeB = exports.b2JointType.e_unknownJoint; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_localAnchorC = new b2Vec2(); + _this.m_localAnchorD = new b2Vec2(); + _this.m_localAxisC = new b2Vec2(); + _this.m_localAxisD = new b2Vec2(); + _this.m_referenceAngleA = 0; + _this.m_referenceAngleB = 0; + _this.m_constant = 0; + _this.m_ratio = 0; + _this.m_impulse = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_indexC = 0; + _this.m_indexD = 0; + _this.m_lcA = new b2Vec2(); + _this.m_lcB = new b2Vec2(); + _this.m_lcC = new b2Vec2(); + _this.m_lcD = new b2Vec2(); + _this.m_mA = 0; + _this.m_mB = 0; + _this.m_mC = 0; + _this.m_mD = 0; + _this.m_iA = 0; + _this.m_iB = 0; + _this.m_iC = 0; + _this.m_iD = 0; + _this.m_JvAC = new b2Vec2(); + _this.m_JvBD = new b2Vec2(); + _this.m_JwA = 0; + _this.m_JwB = 0; + _this.m_JwC = 0; + _this.m_JwD = 0; + _this.m_mass = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_qC = new b2Rot(); + _this.m_qD = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_lalcC = new b2Vec2(); + _this.m_lalcD = new b2Vec2(); + _this.m_joint1 = def.joint1; + _this.m_joint2 = def.joint2; + _this.m_typeA = _this.m_joint1.GetType(); + _this.m_typeB = _this.m_joint2.GetType(); + var coordinateA, coordinateB; + _this.m_bodyC = _this.m_joint1.GetBodyA(); + _this.m_bodyA = _this.m_joint1.GetBodyB(); + var xfA = _this.m_bodyA.m_xf; + var aA = _this.m_bodyA.m_sweep.a; + var xfC = _this.m_bodyC.m_xf; + var aC = _this.m_bodyC.m_sweep.a; + if (_this.m_typeA === exports.b2JointType.e_revoluteJoint) { + var revolute = def.joint1; + _this.m_localAnchorC.Copy(revolute.m_localAnchorA); + _this.m_localAnchorA.Copy(revolute.m_localAnchorB); + _this.m_referenceAngleA = revolute.m_referenceAngle; + _this.m_localAxisC.SetZero(); + coordinateA = aA - aC - _this.m_referenceAngleA; + } else { + var prismatic = def.joint1; + _this.m_localAnchorC.Copy(prismatic.m_localAnchorA); + _this.m_localAnchorA.Copy(prismatic.m_localAnchorB); + _this.m_referenceAngleA = prismatic.m_referenceAngle; + _this.m_localAxisC.Copy(prismatic.m_localXAxisA); + var pC = _this.m_localAnchorC; + var pA = b2Rot.MulTRV(xfC.q, b2Vec2.AddVV(b2Rot.MulRV(xfA.q, _this.m_localAnchorA, b2Vec2.s_t0), b2Vec2.SubVV(xfA.p, xfC.p, b2Vec2.s_t1), b2Vec2.s_t0), b2Vec2.s_t0); + coordinateA = b2Vec2.DotVV(b2Vec2.SubVV(pA, pC, b2Vec2.s_t0), _this.m_localAxisC); + } + _this.m_bodyD = _this.m_joint2.GetBodyA(); + _this.m_bodyB = _this.m_joint2.GetBodyB(); + var xfB = _this.m_bodyB.m_xf; + var aB = _this.m_bodyB.m_sweep.a; + var xfD = _this.m_bodyD.m_xf; + var aD = _this.m_bodyD.m_sweep.a; + if (_this.m_typeB === exports.b2JointType.e_revoluteJoint) { + var revolute = def.joint2; + _this.m_localAnchorD.Copy(revolute.m_localAnchorA); + _this.m_localAnchorB.Copy(revolute.m_localAnchorB); + _this.m_referenceAngleB = revolute.m_referenceAngle; + _this.m_localAxisD.SetZero(); + coordinateB = aB - aD - _this.m_referenceAngleB; + } else { + var prismatic = def.joint2; + _this.m_localAnchorD.Copy(prismatic.m_localAnchorA); + _this.m_localAnchorB.Copy(prismatic.m_localAnchorB); + _this.m_referenceAngleB = prismatic.m_referenceAngle; + _this.m_localAxisD.Copy(prismatic.m_localXAxisA); + var pD = _this.m_localAnchorD; + var pB = b2Rot.MulTRV(xfD.q, b2Vec2.AddVV(b2Rot.MulRV(xfB.q, _this.m_localAnchorB, b2Vec2.s_t0), b2Vec2.SubVV(xfB.p, xfD.p, b2Vec2.s_t1), b2Vec2.s_t0), b2Vec2.s_t0); + coordinateB = b2Vec2.DotVV(b2Vec2.SubVV(pB, pD, b2Vec2.s_t0), _this.m_localAxisD); + } + _this.m_ratio = b2Maybe(def.ratio, 1); + _this.m_constant = coordinateA + _this.m_ratio * coordinateB; + _this.m_impulse = 0; + return _this; + } + b2GearJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_indexC = this.m_bodyC.m_islandIndex; + this.m_indexD = this.m_bodyD.m_islandIndex; + this.m_lcA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_lcB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_lcC.Copy(this.m_bodyC.m_sweep.localCenter); + this.m_lcD.Copy(this.m_bodyD.m_sweep.localCenter); + this.m_mA = this.m_bodyA.m_invMass; + this.m_mB = this.m_bodyB.m_invMass; + this.m_mC = this.m_bodyC.m_invMass; + this.m_mD = this.m_bodyD.m_invMass; + this.m_iA = this.m_bodyA.m_invI; + this.m_iB = this.m_bodyB.m_invI; + this.m_iC = this.m_bodyC.m_invI; + this.m_iD = this.m_bodyD.m_invI; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var aC = data.positions[this.m_indexC].a; + var vC = data.velocities[this.m_indexC].v; + var wC = data.velocities[this.m_indexC].w; + var aD = data.positions[this.m_indexD].a; + var vD = data.velocities[this.m_indexD].v; + var wD = data.velocities[this.m_indexD].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB), qC = this.m_qC.SetAngle(aC), qD = this.m_qD.SetAngle(aD); + this.m_mass = 0; + if (this.m_typeA === exports.b2JointType.e_revoluteJoint) { + this.m_JvAC.SetZero(); + this.m_JwA = 1; + this.m_JwC = 1; + this.m_mass += this.m_iA + this.m_iC; + } else { + var u = b2Rot.MulRV(qC, this.m_localAxisC, b2GearJoint.InitVelocityConstraints_s_u); + b2Vec2.SubVV(this.m_localAnchorC, this.m_lcC, this.m_lalcC); + var rC = b2Rot.MulRV(qC, this.m_lalcC, b2GearJoint.InitVelocityConstraints_s_rC); + b2Vec2.SubVV(this.m_localAnchorA, this.m_lcA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, b2GearJoint.InitVelocityConstraints_s_rA); + this.m_JvAC.Copy(u); + this.m_JwC = b2Vec2.CrossVV(rC, u); + this.m_JwA = b2Vec2.CrossVV(rA, u); + this.m_mass += this.m_mC + this.m_mA + this.m_iC * this.m_JwC * this.m_JwC + this.m_iA * this.m_JwA * this.m_JwA; + } + if (this.m_typeB === exports.b2JointType.e_revoluteJoint) { + this.m_JvBD.SetZero(); + this.m_JwB = this.m_ratio; + this.m_JwD = this.m_ratio; + this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + } else { + var u = b2Rot.MulRV(qD, this.m_localAxisD, b2GearJoint.InitVelocityConstraints_s_u); + b2Vec2.SubVV(this.m_localAnchorD, this.m_lcD, this.m_lalcD); + var rD = b2Rot.MulRV(qD, this.m_lalcD, b2GearJoint.InitVelocityConstraints_s_rD); + b2Vec2.SubVV(this.m_localAnchorB, this.m_lcB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, b2GearJoint.InitVelocityConstraints_s_rB); + b2Vec2.MulSV(this.m_ratio, u, this.m_JvBD); + this.m_JwD = this.m_ratio * b2Vec2.CrossVV(rD, u); + this.m_JwB = this.m_ratio * b2Vec2.CrossVV(rB, u); + this.m_mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * this.m_JwD * this.m_JwD + this.m_iB * this.m_JwB * this.m_JwB; + } + this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0; + if (data.step.warmStarting) { + vA.SelfMulAdd(this.m_mA * this.m_impulse, this.m_JvAC); + wA += this.m_iA * this.m_impulse * this.m_JwA; + vB.SelfMulAdd(this.m_mB * this.m_impulse, this.m_JvBD); + wB += this.m_iB * this.m_impulse * this.m_JwB; + vC.SelfMulSub(this.m_mC * this.m_impulse, this.m_JvAC); + wC -= this.m_iC * this.m_impulse * this.m_JwC; + vD.SelfMulSub(this.m_mD * this.m_impulse, this.m_JvBD); + wD -= this.m_iD * this.m_impulse * this.m_JwD; + } else this.m_impulse = 0; + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + data.velocities[this.m_indexC].w = wC; + data.velocities[this.m_indexD].w = wD; + }; + b2GearJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var vC = data.velocities[this.m_indexC].v; + var wC = data.velocities[this.m_indexC].w; + var vD = data.velocities[this.m_indexD].v; + var wD = data.velocities[this.m_indexD].w; + var Cdot = b2Vec2.DotVV(this.m_JvAC, b2Vec2.SubVV(vA, vC, b2Vec2.s_t0)) + b2Vec2.DotVV(this.m_JvBD, b2Vec2.SubVV(vB, vD, b2Vec2.s_t0)); + Cdot += this.m_JwA * wA - this.m_JwC * wC + (this.m_JwB * wB - this.m_JwD * wD); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + vA.SelfMulAdd(this.m_mA * impulse, this.m_JvAC); + wA += this.m_iA * impulse * this.m_JwA; + vB.SelfMulAdd(this.m_mB * impulse, this.m_JvBD); + wB += this.m_iB * impulse * this.m_JwB; + vC.SelfMulSub(this.m_mC * impulse, this.m_JvAC); + wC -= this.m_iC * impulse * this.m_JwC; + vD.SelfMulSub(this.m_mD * impulse, this.m_JvBD); + wD -= this.m_iD * impulse * this.m_JwD; + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + data.velocities[this.m_indexC].w = wC; + data.velocities[this.m_indexD].w = wD; + }; + b2GearJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var cC = data.positions[this.m_indexC].c; + var aC = data.positions[this.m_indexC].a; + var cD = data.positions[this.m_indexD].c; + var aD = data.positions[this.m_indexD].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB), qC = this.m_qC.SetAngle(aC), qD = this.m_qD.SetAngle(aD); + var linearError = 0; + var coordinateA, coordinateB; + var JvAC = this.m_JvAC, JvBD = this.m_JvBD; + var JwA, JwB, JwC, JwD; + var mass = 0; + if (this.m_typeA === exports.b2JointType.e_revoluteJoint) { + JvAC.SetZero(); + JwA = 1; + JwC = 1; + mass += this.m_iA + this.m_iC; + coordinateA = aA - aC - this.m_referenceAngleA; + } else { + var u = b2Rot.MulRV(qC, this.m_localAxisC, b2GearJoint.SolvePositionConstraints_s_u); + var rC = b2Rot.MulRV(qC, this.m_lalcC, b2GearJoint.SolvePositionConstraints_s_rC); + var rA = b2Rot.MulRV(qA, this.m_lalcA, b2GearJoint.SolvePositionConstraints_s_rA); + JvAC.Copy(u); + JwC = b2Vec2.CrossVV(rC, u); + JwA = b2Vec2.CrossVV(rA, u); + mass += this.m_mC + this.m_mA + this.m_iC * JwC * JwC + this.m_iA * JwA * JwA; + var pC = this.m_lalcC; + var pA = b2Rot.MulTRV(qC, b2Vec2.AddVV(rA, b2Vec2.SubVV(cA, cC, b2Vec2.s_t0), b2Vec2.s_t0), b2Vec2.s_t0); + coordinateA = b2Vec2.DotVV(b2Vec2.SubVV(pA, pC, b2Vec2.s_t0), this.m_localAxisC); + } + if (this.m_typeB === exports.b2JointType.e_revoluteJoint) { + JvBD.SetZero(); + JwB = this.m_ratio; + JwD = this.m_ratio; + mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); + coordinateB = aB - aD - this.m_referenceAngleB; + } else { + var u = b2Rot.MulRV(qD, this.m_localAxisD, b2GearJoint.SolvePositionConstraints_s_u); + var rD = b2Rot.MulRV(qD, this.m_lalcD, b2GearJoint.SolvePositionConstraints_s_rD); + var rB = b2Rot.MulRV(qB, this.m_lalcB, b2GearJoint.SolvePositionConstraints_s_rB); + b2Vec2.MulSV(this.m_ratio, u, JvBD); + JwD = this.m_ratio * b2Vec2.CrossVV(rD, u); + JwB = this.m_ratio * b2Vec2.CrossVV(rB, u); + mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * JwD * JwD + this.m_iB * JwB * JwB; + var pD = this.m_lalcD; + var pB = b2Rot.MulTRV(qD, b2Vec2.AddVV(rB, b2Vec2.SubVV(cB, cD, b2Vec2.s_t0), b2Vec2.s_t0), b2Vec2.s_t0); + coordinateB = b2Vec2.DotVV(b2Vec2.SubVV(pB, pD, b2Vec2.s_t0), this.m_localAxisD); + } + var C = coordinateA + this.m_ratio * coordinateB - this.m_constant; + var impulse = 0; + mass > 0 && (impulse = -C / mass); + cA.SelfMulAdd(this.m_mA * impulse, JvAC); + aA += this.m_iA * impulse * JwA; + cB.SelfMulAdd(this.m_mB * impulse, JvBD); + aB += this.m_iB * impulse * JwB; + cC.SelfMulSub(this.m_mC * impulse, JvAC); + aC -= this.m_iC * impulse * JwC; + cD.SelfMulSub(this.m_mD * impulse, JvBD); + aD -= this.m_iD * impulse * JwD; + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + data.positions[this.m_indexC].a = aC; + data.positions[this.m_indexD].a = aD; + return linearError < b2_linearSlop; + }; + b2GearJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2GearJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2GearJoint.prototype.GetReactionForce = function (inv_dt, out) { + return b2Vec2.MulSV(inv_dt * this.m_impulse, this.m_JvAC, out); + }; + b2GearJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_impulse * this.m_JwA; + }; + b2GearJoint.prototype.GetJoint1 = function () { + return this.m_joint1; + }; + b2GearJoint.prototype.GetJoint2 = function () { + return this.m_joint2; + }; + b2GearJoint.prototype.GetRatio = function () { + return this.m_ratio; + }; + b2GearJoint.prototype.SetRatio = function (ratio) { + this.m_ratio = ratio; + }; + b2GearJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + var index1 = this.m_joint1.m_index; + var index2 = this.m_joint2.m_index; + log(" const jd: b2GearJointDef = new b2GearJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.joint1 = joints[%d];\n", index1); + log(" jd.joint2 = joints[%d];\n", index2); + log(" jd.ratio = %.15f;\n", this.m_ratio); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2GearJoint.InitVelocityConstraints_s_u = new b2Vec2(); + b2GearJoint.InitVelocityConstraints_s_rA = new b2Vec2(); + b2GearJoint.InitVelocityConstraints_s_rB = new b2Vec2(); + b2GearJoint.InitVelocityConstraints_s_rC = new b2Vec2(); + b2GearJoint.InitVelocityConstraints_s_rD = new b2Vec2(); + b2GearJoint.SolvePositionConstraints_s_u = new b2Vec2(); + b2GearJoint.SolvePositionConstraints_s_rA = new b2Vec2(); + b2GearJoint.SolvePositionConstraints_s_rB = new b2Vec2(); + b2GearJoint.SolvePositionConstraints_s_rC = new b2Vec2(); + b2GearJoint.SolvePositionConstraints_s_rD = new b2Vec2(); + return b2GearJoint; + })(b2Joint); + var b2MotorJointDef = (function (_super) { + __extends(b2MotorJointDef, _super); + function b2MotorJointDef() { + var _this = _super.call(this, exports.b2JointType.e_motorJoint) || this; + _this.linearOffset = new b2Vec2(0, 0); + _this.angularOffset = 0; + _this.maxForce = 1; + _this.maxTorque = 1; + _this.correctionFactor = .3; + return _this; + } + b2MotorJointDef.prototype.Initialize = function (bA, bB) { + this.bodyA = bA; + this.bodyB = bB; + this.bodyA.GetLocalPoint(this.bodyB.GetPosition(), this.linearOffset); + var angleA = this.bodyA.GetAngle(); + var angleB = this.bodyB.GetAngle(); + this.angularOffset = angleB - angleA; + }; + return b2MotorJointDef; + })(b2JointDef); + var b2MotorJoint = (function (_super) { + __extends(b2MotorJoint, _super); + function b2MotorJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_linearOffset = new b2Vec2(); + _this.m_angularOffset = 0; + _this.m_linearImpulse = new b2Vec2(); + _this.m_angularImpulse = 0; + _this.m_maxForce = 0; + _this.m_maxTorque = 0; + _this.m_correctionFactor = .3; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_linearError = new b2Vec2(); + _this.m_angularError = 0; + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_linearMass = new b2Mat22(); + _this.m_angularMass = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_K = new b2Mat22(); + _this.m_linearOffset.Copy(b2Maybe(def.linearOffset, b2Vec2.ZERO)); + _this.m_linearImpulse.SetZero(); + _this.m_maxForce = b2Maybe(def.maxForce, 0); + _this.m_maxTorque = b2Maybe(def.maxTorque, 0); + _this.m_correctionFactor = b2Maybe(def.correctionFactor, .3); + return _this; + } + b2MotorJoint.prototype.GetAnchorA = function (out) { + var pos = this.m_bodyA.GetPosition(); + out.x = pos.x; + out.y = pos.y; + return out; + }; + b2MotorJoint.prototype.GetAnchorB = function (out) { + var pos = this.m_bodyB.GetPosition(); + out.x = pos.x; + out.y = pos.y; + return out; + }; + b2MotorJoint.prototype.GetReactionForce = function (inv_dt, out) { + return b2Vec2.MulSV(inv_dt, this.m_linearImpulse, out); + }; + b2MotorJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_angularImpulse; + }; + b2MotorJoint.prototype.SetLinearOffset = function (linearOffset) { + if (!b2Vec2.IsEqualToV(linearOffset, this.m_linearOffset)) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_linearOffset.Copy(linearOffset); + } + }; + b2MotorJoint.prototype.GetLinearOffset = function () { + return this.m_linearOffset; + }; + b2MotorJoint.prototype.SetAngularOffset = function (angularOffset) { + if (angularOffset !== this.m_angularOffset) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_angularOffset = angularOffset; + } + }; + b2MotorJoint.prototype.GetAngularOffset = function () { + return this.m_angularOffset; + }; + b2MotorJoint.prototype.SetMaxForce = function (force) { + this.m_maxForce = force; + }; + b2MotorJoint.prototype.GetMaxForce = function () { + return this.m_maxForce; + }; + b2MotorJoint.prototype.SetMaxTorque = function (torque) { + this.m_maxTorque = torque; + }; + b2MotorJoint.prototype.GetMaxTorque = function () { + return this.m_maxTorque; + }; + b2MotorJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + var rA = b2Rot.MulRV(qA, b2Vec2.SubVV(this.m_linearOffset, this.m_localCenterA, b2Vec2.s_t0), this.m_rA); + var rB = b2Rot.MulRV(qB, b2Vec2.NegV(this.m_localCenterB, b2Vec2.s_t0), this.m_rB); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var K = this.m_K; + K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; + K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; + K.GetInverse(this.m_linearMass); + this.m_angularMass = iA + iB; + this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass); + b2Vec2.SubVV(b2Vec2.AddVV(cB, rB, b2Vec2.s_t0), b2Vec2.AddVV(cA, rA, b2Vec2.s_t1), this.m_linearError); + this.m_angularError = aB - aA - this.m_angularOffset; + if (data.step.warmStarting) { + this.m_linearImpulse.SelfMul(data.step.dtRatio); + this.m_angularImpulse *= data.step.dtRatio; + var P = this.m_linearImpulse; + vA.SelfMulSub(mA, P); + wA -= iA * (b2Vec2.CrossVV(rA, P) + this.m_angularImpulse); + vB.SelfMulAdd(mB, P); + wB += iB * (b2Vec2.CrossVV(rB, P) + this.m_angularImpulse); + } else { + this.m_linearImpulse.SetZero(); + this.m_angularImpulse = 0; + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2MotorJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var h = data.step.dt; + var inv_h = data.step.inv_dt; + var Cdot = wB - wA + inv_h * this.m_correctionFactor * this.m_angularError; + var impulse = -this.m_angularMass * Cdot; + var oldImpulse = this.m_angularImpulse; + var maxImpulse = h * this.m_maxTorque; + this.m_angularImpulse = b2Clamp(this.m_angularImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_angularImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + var rA = this.m_rA; + var rB = this.m_rB; + var Cdot_v2 = b2Vec2.AddVV(b2Vec2.SubVV(b2Vec2.AddVV(vB, b2Vec2.CrossSV(wB, rB, b2Vec2.s_t0), b2Vec2.s_t0), b2Vec2.AddVV(vA, b2Vec2.CrossSV(wA, rA, b2Vec2.s_t1), b2Vec2.s_t1), b2Vec2.s_t2), b2Vec2.MulSV(inv_h * this.m_correctionFactor, this.m_linearError, b2Vec2.s_t3), b2MotorJoint.SolveVelocityConstraints_s_Cdot_v2); + var impulse_v2 = b2Mat22.MulMV(this.m_linearMass, Cdot_v2, b2MotorJoint.SolveVelocityConstraints_s_impulse_v2).SelfNeg(); + var oldImpulse_v2 = b2MotorJoint.SolveVelocityConstraints_s_oldImpulse_v2.Copy(this.m_linearImpulse); + this.m_linearImpulse.SelfAdd(impulse_v2); + var maxImpulse = h * this.m_maxForce; + if (this.m_linearImpulse.LengthSquared() > maxImpulse * maxImpulse) { + this.m_linearImpulse.Normalize(); + this.m_linearImpulse.SelfMul(maxImpulse); + } + b2Vec2.SubVV(this.m_linearImpulse, oldImpulse_v2, impulse_v2); + vA.SelfMulSub(mA, impulse_v2); + wA -= iA * b2Vec2.CrossVV(rA, impulse_v2); + vB.SelfMulAdd(mB, impulse_v2); + wB += iB * b2Vec2.CrossVV(rB, impulse_v2); + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2MotorJoint.prototype.SolvePositionConstraints = function (data) { + return true; + }; + b2MotorJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2MotorJointDef = new b2MotorJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.linearOffset.Set(%.15f, %.15f);\n", this.m_linearOffset.x, this.m_linearOffset.y); + log(" jd.angularOffset = %.15f;\n", this.m_angularOffset); + log(" jd.maxForce = %.15f;\n", this.m_maxForce); + log(" jd.maxTorque = %.15f;\n", this.m_maxTorque); + log(" jd.correctionFactor = %.15f;\n", this.m_correctionFactor); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2MotorJoint.SolveVelocityConstraints_s_Cdot_v2 = new b2Vec2(); + b2MotorJoint.SolveVelocityConstraints_s_impulse_v2 = new b2Vec2(); + b2MotorJoint.SolveVelocityConstraints_s_oldImpulse_v2 = new b2Vec2(); + return b2MotorJoint; + })(b2Joint); + var b2MouseJointDef = (function (_super) { + __extends(b2MouseJointDef, _super); + function b2MouseJointDef() { + var _this = _super.call(this, exports.b2JointType.e_mouseJoint) || this; + _this.target = new b2Vec2(); + _this.maxForce = 0; + _this.frequencyHz = 5; + _this.dampingRatio = .7; + return _this; + } + return b2MouseJointDef; + })(b2JointDef); + var b2MouseJoint = (function (_super) { + __extends(b2MouseJoint, _super); + function b2MouseJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_localAnchorB = new b2Vec2(); + _this.m_targetA = new b2Vec2(); + _this.m_frequencyHz = 0; + _this.m_dampingRatio = 0; + _this.m_beta = 0; + _this.m_impulse = new b2Vec2(); + _this.m_maxForce = 0; + _this.m_gamma = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_rB = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassB = 0; + _this.m_invIB = 0; + _this.m_mass = new b2Mat22(); + _this.m_C = new b2Vec2(); + _this.m_qB = new b2Rot(); + _this.m_lalcB = new b2Vec2(); + _this.m_K = new b2Mat22(); + _this.m_targetA.Copy(b2Maybe(def.target, b2Vec2.ZERO)); + b2Transform.MulTXV(_this.m_bodyB.GetTransform(), _this.m_targetA, _this.m_localAnchorB); + _this.m_maxForce = b2Maybe(def.maxForce, 0); + _this.m_impulse.SetZero(); + _this.m_frequencyHz = b2Maybe(def.frequencyHz, 0); + _this.m_dampingRatio = b2Maybe(def.dampingRatio, 0); + _this.m_beta = 0; + _this.m_gamma = 0; + return _this; + } + b2MouseJoint.prototype.SetTarget = function (target) { + this.m_bodyB.IsAwake() || this.m_bodyB.SetAwake(true); + this.m_targetA.Copy(target); + }; + b2MouseJoint.prototype.GetTarget = function () { + return this.m_targetA; + }; + b2MouseJoint.prototype.SetMaxForce = function (maxForce) { + this.m_maxForce = maxForce; + }; + b2MouseJoint.prototype.GetMaxForce = function () { + return this.m_maxForce; + }; + b2MouseJoint.prototype.SetFrequency = function (hz) { + this.m_frequencyHz = hz; + }; + b2MouseJoint.prototype.GetFrequency = function () { + return this.m_frequencyHz; + }; + b2MouseJoint.prototype.SetDampingRatio = function (ratio) { + this.m_dampingRatio = ratio; + }; + b2MouseJoint.prototype.GetDampingRatio = function () { + return this.m_dampingRatio; + }; + b2MouseJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIB = this.m_bodyB.m_invI; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qB = this.m_qB.SetAngle(aB); + var mass = this.m_bodyB.GetMass(); + var omega = 2 * b2_pi * this.m_frequencyHz; + var d = 2 * mass * this.m_dampingRatio * omega; + var k = mass * (omega * omega); + var h = data.step.dt; + this.m_gamma = h * (d + h * k); + 0 !== this.m_gamma && (this.m_gamma = 1 / this.m_gamma); + this.m_beta = h * k * this.m_gamma; + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var K = this.m_K; + K.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma; + K.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y; + K.ey.x = K.ex.y; + K.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma; + K.GetInverse(this.m_mass); + this.m_C.x = cB.x + this.m_rB.x - this.m_targetA.x; + this.m_C.y = cB.y + this.m_rB.y - this.m_targetA.y; + this.m_C.SelfMul(this.m_beta); + wB *= .98; + if (data.step.warmStarting) { + this.m_impulse.SelfMul(data.step.dtRatio); + vB.x += this.m_invMassB * this.m_impulse.x; + vB.y += this.m_invMassB * this.m_impulse.y; + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, this.m_impulse); + } else this.m_impulse.SetZero(); + data.velocities[this.m_indexB].w = wB; + }; + b2MouseJoint.prototype.SolveVelocityConstraints = function (data) { + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var Cdot = b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2MouseJoint.SolveVelocityConstraints_s_Cdot); + var impulse = b2Mat22.MulMV(this.m_mass, b2Vec2.AddVV(Cdot, b2Vec2.AddVV(this.m_C, b2Vec2.MulSV(this.m_gamma, this.m_impulse, b2Vec2.s_t0), b2Vec2.s_t0), b2Vec2.s_t0).SelfNeg(), b2MouseJoint.SolveVelocityConstraints_s_impulse); + var oldImpulse = b2MouseJoint.SolveVelocityConstraints_s_oldImpulse.Copy(this.m_impulse); + this.m_impulse.SelfAdd(impulse); + var maxImpulse = data.step.dt * this.m_maxForce; + this.m_impulse.LengthSquared() > maxImpulse * maxImpulse && this.m_impulse.SelfMul(maxImpulse / this.m_impulse.Length()); + b2Vec2.SubVV(this.m_impulse, oldImpulse, impulse); + vB.SelfMulAdd(this.m_invMassB, impulse); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, impulse); + data.velocities[this.m_indexB].w = wB; + }; + b2MouseJoint.prototype.SolvePositionConstraints = function (data) { + return true; + }; + b2MouseJoint.prototype.GetAnchorA = function (out) { + out.x = this.m_targetA.x; + out.y = this.m_targetA.y; + return out; + }; + b2MouseJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2MouseJoint.prototype.GetReactionForce = function (inv_dt, out) { + return b2Vec2.MulSV(inv_dt, this.m_impulse, out); + }; + b2MouseJoint.prototype.GetReactionTorque = function (inv_dt) { + return 0; + }; + b2MouseJoint.prototype.Dump = function (log) { + log("Mouse joint dumping is not supported.\n"); + }; + b2MouseJoint.prototype.ShiftOrigin = function (newOrigin) { + this.m_targetA.SelfSub(newOrigin); + }; + b2MouseJoint.SolveVelocityConstraints_s_Cdot = new b2Vec2(); + b2MouseJoint.SolveVelocityConstraints_s_impulse = new b2Vec2(); + b2MouseJoint.SolveVelocityConstraints_s_oldImpulse = new b2Vec2(); + return b2MouseJoint; + })(b2Joint); + var b2PrismaticJointDef = (function (_super) { + __extends(b2PrismaticJointDef, _super); + function b2PrismaticJointDef() { + var _this = _super.call(this, exports.b2JointType.e_prismaticJoint) || this; + _this.localAnchorA = new b2Vec2(); + _this.localAnchorB = new b2Vec2(); + _this.localAxisA = new b2Vec2(1, 0); + _this.referenceAngle = 0; + _this.enableLimit = false; + _this.lowerTranslation = 0; + _this.upperTranslation = 0; + _this.enableMotor = false; + _this.maxMotorForce = 0; + _this.motorSpeed = 0; + return _this; + } + b2PrismaticJointDef.prototype.Initialize = function (bA, bB, anchor, axis) { + this.bodyA = bA; + this.bodyB = bB; + this.bodyA.GetLocalPoint(anchor, this.localAnchorA); + this.bodyB.GetLocalPoint(anchor, this.localAnchorB); + this.bodyA.GetLocalVector(axis, this.localAxisA); + this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); + }; + return b2PrismaticJointDef; + })(b2JointDef); + var b2PrismaticJoint = (function (_super) { + __extends(b2PrismaticJoint, _super); + function b2PrismaticJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_localXAxisA = new b2Vec2(); + _this.m_localYAxisA = new b2Vec2(); + _this.m_referenceAngle = 0; + _this.m_impulse = new b2Vec3(0, 0, 0); + _this.m_motorImpulse = 0; + _this.m_lowerTranslation = 0; + _this.m_upperTranslation = 0; + _this.m_maxMotorForce = 0; + _this.m_motorSpeed = 0; + _this.m_enableLimit = false; + _this.m_enableMotor = false; + _this.m_limitState = exports.b2LimitState.e_inactiveLimit; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_axis = new b2Vec2(0, 0); + _this.m_perp = new b2Vec2(0, 0); + _this.m_s1 = 0; + _this.m_s2 = 0; + _this.m_a1 = 0; + _this.m_a2 = 0; + _this.m_K = new b2Mat33(); + _this.m_K3 = new b2Mat33(); + _this.m_K2 = new b2Mat22(); + _this.m_motorMass = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localAnchorA.Copy(b2Maybe(def.localAnchorA, b2Vec2.ZERO)); + _this.m_localAnchorB.Copy(b2Maybe(def.localAnchorB, b2Vec2.ZERO)); + _this.m_localXAxisA.Copy(b2Maybe(def.localAxisA, new b2Vec2(1, 0))).SelfNormalize(); + b2Vec2.CrossOneV(_this.m_localXAxisA, _this.m_localYAxisA); + _this.m_referenceAngle = b2Maybe(def.referenceAngle, 0); + _this.m_lowerTranslation = b2Maybe(def.lowerTranslation, 0); + _this.m_upperTranslation = b2Maybe(def.upperTranslation, 0); + _this.m_maxMotorForce = b2Maybe(def.maxMotorForce, 0); + _this.m_motorSpeed = b2Maybe(def.motorSpeed, 0); + _this.m_enableLimit = b2Maybe(def.enableLimit, false); + _this.m_enableMotor = b2Maybe(def.enableMotor, false); + return _this; + } + b2PrismaticJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var d = b2Vec2.AddVV(b2Vec2.SubVV(cB, cA, b2Vec2.s_t0), b2Vec2.SubVV(rB, rA, b2Vec2.s_t1), b2PrismaticJoint.InitVelocityConstraints_s_d); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + b2Rot.MulRV(qA, this.m_localXAxisA, this.m_axis); + this.m_a1 = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), this.m_axis); + this.m_a2 = b2Vec2.CrossVV(rB, this.m_axis); + this.m_motorMass = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass); + b2Rot.MulRV(qA, this.m_localYAxisA, this.m_perp); + this.m_s1 = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), this.m_perp); + this.m_s2 = b2Vec2.CrossVV(rB, this.m_perp); + this.m_K.ex.x = mA + mB + iA * this.m_s1 * this.m_s1 + iB * this.m_s2 * this.m_s2; + this.m_K.ex.y = iA * this.m_s1 + iB * this.m_s2; + this.m_K.ex.z = iA * this.m_s1 * this.m_a1 + iB * this.m_s2 * this.m_a2; + this.m_K.ey.x = this.m_K.ex.y; + this.m_K.ey.y = iA + iB; + 0 === this.m_K.ey.y && (this.m_K.ey.y = 1); + this.m_K.ey.z = iA * this.m_a1 + iB * this.m_a2; + this.m_K.ez.x = this.m_K.ex.z; + this.m_K.ez.y = this.m_K.ey.z; + this.m_K.ez.z = mA + mB + iA * this.m_a1 * this.m_a1 + iB * this.m_a2 * this.m_a2; + if (this.m_enableLimit) { + var jointTranslation = b2Vec2.DotVV(this.m_axis, d); + if (b2Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * b2_linearSlop) this.m_limitState = exports.b2LimitState.e_equalLimits; else if (jointTranslation <= this.m_lowerTranslation) { + if (this.m_limitState !== exports.b2LimitState.e_atLowerLimit) { + this.m_limitState = exports.b2LimitState.e_atLowerLimit; + this.m_impulse.z = 0; + } + } else if (jointTranslation >= this.m_upperTranslation) { + if (this.m_limitState !== exports.b2LimitState.e_atUpperLimit) { + this.m_limitState = exports.b2LimitState.e_atUpperLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = exports.b2LimitState.e_inactiveLimit; + this.m_impulse.z = 0; + } + } else { + this.m_limitState = exports.b2LimitState.e_inactiveLimit; + this.m_impulse.z = 0; + } + this.m_enableMotor || (this.m_motorImpulse = 0); + if (data.step.warmStarting) { + this.m_impulse.SelfMul(data.step.dtRatio); + this.m_motorImpulse *= data.step.dtRatio; + var P = b2Vec2.AddVV(b2Vec2.MulSV(this.m_impulse.x, this.m_perp, b2Vec2.s_t0), b2Vec2.MulSV(this.m_motorImpulse + this.m_impulse.z, this.m_axis, b2Vec2.s_t1), b2PrismaticJoint.InitVelocityConstraints_s_P); + var LA = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1; + var LB = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; + vA.SelfMulSub(mA, P); + wA -= iA * LA; + vB.SelfMulAdd(mB, P); + wB += iB * LB; + } else { + this.m_impulse.SetZero(); + this.m_motorImpulse = 0; + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2PrismaticJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + if (this.m_enableMotor && this.m_limitState !== exports.b2LimitState.e_equalLimits) { + var Cdot = b2Vec2.DotVV(this.m_axis, b2Vec2.SubVV(vB, vA, b2Vec2.s_t0)) + this.m_a2 * wB - this.m_a1 * wA; + var impulse = this.m_motorMass * (this.m_motorSpeed - Cdot); + var oldImpulse = this.m_motorImpulse; + var maxImpulse = data.step.dt * this.m_maxMotorForce; + this.m_motorImpulse = b2Clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + var P = b2Vec2.MulSV(impulse, this.m_axis, b2PrismaticJoint.SolveVelocityConstraints_s_P); + var LA = impulse * this.m_a1; + var LB = impulse * this.m_a2; + vA.SelfMulSub(mA, P); + wA -= iA * LA; + vB.SelfMulAdd(mB, P); + wB += iB * LB; + } + var Cdot1_x = b2Vec2.DotVV(this.m_perp, b2Vec2.SubVV(vB, vA, b2Vec2.s_t0)) + this.m_s2 * wB - this.m_s1 * wA; + var Cdot1_y = wB - wA; + if (this.m_enableLimit && this.m_limitState !== exports.b2LimitState.e_inactiveLimit) { + var Cdot2 = b2Vec2.DotVV(this.m_axis, b2Vec2.SubVV(vB, vA, b2Vec2.s_t0)) + this.m_a2 * wB - this.m_a1 * wA; + var f1 = b2PrismaticJoint.SolveVelocityConstraints_s_f1.Copy(this.m_impulse); + var df3 = this.m_K.Solve33(-Cdot1_x, -Cdot1_y, -Cdot2, b2PrismaticJoint.SolveVelocityConstraints_s_df3); + this.m_impulse.SelfAdd(df3); + this.m_limitState === exports.b2LimitState.e_atLowerLimit ? this.m_impulse.z = b2Max(this.m_impulse.z, 0) : this.m_limitState === exports.b2LimitState.e_atUpperLimit && (this.m_impulse.z = b2Min(this.m_impulse.z, 0)); + var b_x = -Cdot1_x - (this.m_impulse.z - f1.z) * this.m_K.ez.x; + var b_y = -Cdot1_y - (this.m_impulse.z - f1.z) * this.m_K.ez.y; + var f2r = this.m_K.Solve22(b_x, b_y, b2PrismaticJoint.SolveVelocityConstraints_s_f2r); + f2r.x += f1.x; + f2r.y += f1.y; + this.m_impulse.x = f2r.x; + this.m_impulse.y = f2r.y; + df3.x = this.m_impulse.x - f1.x; + df3.y = this.m_impulse.y - f1.y; + df3.z = this.m_impulse.z - f1.z; + var P = b2Vec2.AddVV(b2Vec2.MulSV(df3.x, this.m_perp, b2Vec2.s_t0), b2Vec2.MulSV(df3.z, this.m_axis, b2Vec2.s_t1), b2PrismaticJoint.SolveVelocityConstraints_s_P); + var LA = df3.x * this.m_s1 + df3.y + df3.z * this.m_a1; + var LB = df3.x * this.m_s2 + df3.y + df3.z * this.m_a2; + vA.SelfMulSub(mA, P); + wA -= iA * LA; + vB.SelfMulAdd(mB, P); + wB += iB * LB; + } else { + var df2 = this.m_K.Solve22(-Cdot1_x, -Cdot1_y, b2PrismaticJoint.SolveVelocityConstraints_s_df2); + this.m_impulse.x += df2.x; + this.m_impulse.y += df2.y; + var P = b2Vec2.MulSV(df2.x, this.m_perp, b2PrismaticJoint.SolveVelocityConstraints_s_P); + var LA = df2.x * this.m_s1 + df2.y; + var LB = df2.x * this.m_s2 + df2.y; + vA.SelfMulSub(mA, P); + wA -= iA * LA; + vB.SelfMulAdd(mB, P); + wB += iB * LB; + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2PrismaticJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var d = b2Vec2.SubVV(b2Vec2.AddVV(cB, rB, b2Vec2.s_t0), b2Vec2.AddVV(cA, rA, b2Vec2.s_t1), b2PrismaticJoint.SolvePositionConstraints_s_d); + var axis = b2Rot.MulRV(qA, this.m_localXAxisA, this.m_axis); + var a1 = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), axis); + var a2 = b2Vec2.CrossVV(rB, axis); + var perp = b2Rot.MulRV(qA, this.m_localYAxisA, this.m_perp); + var s1 = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), perp); + var s2 = b2Vec2.CrossVV(rB, perp); + var impulse = b2PrismaticJoint.SolvePositionConstraints_s_impulse; + var C1_x = b2Vec2.DotVV(perp, d); + var C1_y = aB - aA - this.m_referenceAngle; + var linearError = b2Abs(C1_x); + var angularError = b2Abs(C1_y); + var active = false; + var C2 = 0; + if (this.m_enableLimit) { + var translation = b2Vec2.DotVV(axis, d); + if (b2Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * b2_linearSlop) { + C2 = b2Clamp(translation, -b2_maxLinearCorrection, b2_maxLinearCorrection); + linearError = b2Max(linearError, b2Abs(translation)); + active = true; + } else if (translation <= this.m_lowerTranslation) { + C2 = b2Clamp(translation - this.m_lowerTranslation + b2_linearSlop, -b2_maxLinearCorrection, 0); + linearError = b2Max(linearError, this.m_lowerTranslation - translation); + active = true; + } else if (translation >= this.m_upperTranslation) { + C2 = b2Clamp(translation - this.m_upperTranslation - b2_linearSlop, 0, b2_maxLinearCorrection); + linearError = b2Max(linearError, translation - this.m_upperTranslation); + active = true; + } + } + if (active) { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k13 = iA * s1 * a1 + iB * s2 * a2; + var k22 = iA + iB; + 0 === k22 && (k22 = 1); + var k23 = iA * a1 + iB * a2; + var k33 = mA + mB + iA * a1 * a1 + iB * a2 * a2; + var K = this.m_K3; + K.ex.SetXYZ(k11, k12, k13); + K.ey.SetXYZ(k12, k22, k23); + K.ez.SetXYZ(k13, k23, k33); + impulse = K.Solve33(-C1_x, -C1_y, -C2, impulse); + } else { + var k11 = mA + mB + iA * s1 * s1 + iB * s2 * s2; + var k12 = iA * s1 + iB * s2; + var k22 = iA + iB; + 0 === k22 && (k22 = 1); + var K2 = this.m_K2; + K2.ex.Set(k11, k12); + K2.ey.Set(k12, k22); + var impulse1 = K2.Solve(-C1_x, -C1_y, b2PrismaticJoint.SolvePositionConstraints_s_impulse1); + impulse.x = impulse1.x; + impulse.y = impulse1.y; + impulse.z = 0; + } + var P = b2Vec2.AddVV(b2Vec2.MulSV(impulse.x, perp, b2Vec2.s_t0), b2Vec2.MulSV(impulse.z, axis, b2Vec2.s_t1), b2PrismaticJoint.SolvePositionConstraints_s_P); + var LA = impulse.x * s1 + impulse.y + impulse.z * a1; + var LB = impulse.x * s2 + impulse.y + impulse.z * a2; + cA.SelfMulSub(mA, P); + aA -= iA * LA; + cB.SelfMulAdd(mB, P); + aB += iB * LB; + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return linearError <= b2_linearSlop && angularError <= b2_angularSlop; + }; + b2PrismaticJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2PrismaticJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2PrismaticJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x); + out.y = inv_dt * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y); + return out; + }; + b2PrismaticJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_impulse.y; + }; + b2PrismaticJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2PrismaticJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2PrismaticJoint.prototype.GetLocalAxisA = function () { + return this.m_localXAxisA; + }; + b2PrismaticJoint.prototype.GetReferenceAngle = function () { + return this.m_referenceAngle; + }; + b2PrismaticJoint.prototype.GetJointTranslation = function () { + var pA = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, b2PrismaticJoint.GetJointTranslation_s_pA); + var pB = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, b2PrismaticJoint.GetJointTranslation_s_pB); + var d = b2Vec2.SubVV(pB, pA, b2PrismaticJoint.GetJointTranslation_s_d); + var axis = this.m_bodyA.GetWorldVector(this.m_localXAxisA, b2PrismaticJoint.GetJointTranslation_s_axis); + var translation = b2Vec2.DotVV(d, axis); + return translation; + }; + b2PrismaticJoint.prototype.GetJointSpeed = function () { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + b2Vec2.SubVV(this.m_localAnchorA, bA.m_sweep.localCenter, this.m_lalcA); + var rA = b2Rot.MulRV(bA.m_xf.q, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, bB.m_sweep.localCenter, this.m_lalcB); + var rB = b2Rot.MulRV(bB.m_xf.q, this.m_lalcB, this.m_rB); + var pA = b2Vec2.AddVV(bA.m_sweep.c, rA, b2Vec2.s_t0); + var pB = b2Vec2.AddVV(bB.m_sweep.c, rB, b2Vec2.s_t1); + var d = b2Vec2.SubVV(pB, pA, b2Vec2.s_t2); + var axis = bA.GetWorldVector(this.m_localXAxisA, this.m_axis); + var vA = bA.m_linearVelocity; + var vB = bB.m_linearVelocity; + var wA = bA.m_angularVelocity; + var wB = bB.m_angularVelocity; + var speed = b2Vec2.DotVV(d, b2Vec2.CrossSV(wA, axis, b2Vec2.s_t0)) + b2Vec2.DotVV(axis, b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, rA, b2Vec2.s_t1), b2Vec2.s_t0)); + return speed; + }; + b2PrismaticJoint.prototype.IsLimitEnabled = function () { + return this.m_enableLimit; + }; + b2PrismaticJoint.prototype.EnableLimit = function (flag) { + if (flag !== this.m_enableLimit) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + b2PrismaticJoint.prototype.GetLowerLimit = function () { + return this.m_lowerTranslation; + }; + b2PrismaticJoint.prototype.GetUpperLimit = function () { + return this.m_upperTranslation; + }; + b2PrismaticJoint.prototype.SetLimits = function (lower, upper) { + if (lower !== this.m_lowerTranslation || upper !== this.m_upperTranslation) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_lowerTranslation = lower; + this.m_upperTranslation = upper; + this.m_impulse.z = 0; + } + }; + b2PrismaticJoint.prototype.IsMotorEnabled = function () { + return this.m_enableMotor; + }; + b2PrismaticJoint.prototype.EnableMotor = function (flag) { + if (flag !== this.m_enableMotor) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_enableMotor = flag; + } + }; + b2PrismaticJoint.prototype.SetMotorSpeed = function (speed) { + if (speed !== this.m_motorSpeed) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_motorSpeed = speed; + } + }; + b2PrismaticJoint.prototype.GetMotorSpeed = function () { + return this.m_motorSpeed; + }; + b2PrismaticJoint.prototype.SetMaxMotorForce = function (force) { + if (force !== this.m_maxMotorForce) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_maxMotorForce = force; + } + }; + b2PrismaticJoint.prototype.GetMaxMotorForce = function () { + return this.m_maxMotorForce; + }; + b2PrismaticJoint.prototype.GetMotorForce = function (inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + b2PrismaticJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2PrismaticJointDef = new b2PrismaticJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y); + log(" jd.referenceAngle = %.15f;\n", this.m_referenceAngle); + log(" jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"); + log(" jd.lowerTranslation = %.15f;\n", this.m_lowerTranslation); + log(" jd.upperTranslation = %.15f;\n", this.m_upperTranslation); + log(" jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"); + log(" jd.motorSpeed = %.15f;\n", this.m_motorSpeed); + log(" jd.maxMotorForce = %.15f;\n", this.m_maxMotorForce); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2PrismaticJoint.InitVelocityConstraints_s_d = new b2Vec2(); + b2PrismaticJoint.InitVelocityConstraints_s_P = new b2Vec2(); + b2PrismaticJoint.SolveVelocityConstraints_s_P = new b2Vec2(); + b2PrismaticJoint.SolveVelocityConstraints_s_f2r = new b2Vec2(); + b2PrismaticJoint.SolveVelocityConstraints_s_f1 = new b2Vec3(); + b2PrismaticJoint.SolveVelocityConstraints_s_df3 = new b2Vec3(); + b2PrismaticJoint.SolveVelocityConstraints_s_df2 = new b2Vec2(); + b2PrismaticJoint.SolvePositionConstraints_s_d = new b2Vec2(); + b2PrismaticJoint.SolvePositionConstraints_s_impulse = new b2Vec3(); + b2PrismaticJoint.SolvePositionConstraints_s_impulse1 = new b2Vec2(); + b2PrismaticJoint.SolvePositionConstraints_s_P = new b2Vec2(); + b2PrismaticJoint.GetJointTranslation_s_pA = new b2Vec2(); + b2PrismaticJoint.GetJointTranslation_s_pB = new b2Vec2(); + b2PrismaticJoint.GetJointTranslation_s_d = new b2Vec2(); + b2PrismaticJoint.GetJointTranslation_s_axis = new b2Vec2(); + return b2PrismaticJoint; + })(b2Joint); + var b2_minPulleyLength = 2; + var b2PulleyJointDef = (function (_super) { + __extends(b2PulleyJointDef, _super); + function b2PulleyJointDef() { + var _this = _super.call(this, exports.b2JointType.e_pulleyJoint) || this; + _this.groundAnchorA = new b2Vec2(-1, 1); + _this.groundAnchorB = new b2Vec2(1, 1); + _this.localAnchorA = new b2Vec2(-1, 0); + _this.localAnchorB = new b2Vec2(1, 0); + _this.lengthA = 0; + _this.lengthB = 0; + _this.ratio = 1; + _this.collideConnected = true; + return _this; + } + b2PulleyJointDef.prototype.Initialize = function (bA, bB, groundA, groundB, anchorA, anchorB, r) { + this.bodyA = bA; + this.bodyB = bB; + this.groundAnchorA.Copy(groundA); + this.groundAnchorB.Copy(groundB); + this.bodyA.GetLocalPoint(anchorA, this.localAnchorA); + this.bodyB.GetLocalPoint(anchorB, this.localAnchorB); + this.lengthA = b2Vec2.DistanceVV(anchorA, groundA); + this.lengthB = b2Vec2.DistanceVV(anchorB, groundB); + this.ratio = r; + }; + return b2PulleyJointDef; + })(b2JointDef); + var b2PulleyJoint = (function (_super) { + __extends(b2PulleyJoint, _super); + function b2PulleyJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_groundAnchorA = new b2Vec2(); + _this.m_groundAnchorB = new b2Vec2(); + _this.m_lengthA = 0; + _this.m_lengthB = 0; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_constant = 0; + _this.m_ratio = 0; + _this.m_impulse = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_uA = new b2Vec2(); + _this.m_uB = new b2Vec2(); + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_mass = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_groundAnchorA.Copy(b2Maybe(def.groundAnchorA, new b2Vec2(-1, 1))); + _this.m_groundAnchorB.Copy(b2Maybe(def.groundAnchorB, new b2Vec2(1, 0))); + _this.m_localAnchorA.Copy(b2Maybe(def.localAnchorA, new b2Vec2(-1, 0))); + _this.m_localAnchorB.Copy(b2Maybe(def.localAnchorB, new b2Vec2(1, 0))); + _this.m_lengthA = b2Maybe(def.lengthA, 0); + _this.m_lengthB = b2Maybe(def.lengthB, 0); + _this.m_ratio = b2Maybe(def.ratio, 1); + _this.m_constant = b2Maybe(def.lengthA, 0) + _this.m_ratio * b2Maybe(def.lengthB, 0); + _this.m_impulse = 0; + return _this; + } + b2PulleyJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + this.m_uA.Copy(cA).SelfAdd(this.m_rA).SelfSub(this.m_groundAnchorA); + this.m_uB.Copy(cB).SelfAdd(this.m_rB).SelfSub(this.m_groundAnchorB); + var lengthA = this.m_uA.Length(); + var lengthB = this.m_uB.Length(); + lengthA > 10 * b2_linearSlop ? this.m_uA.SelfMul(1 / lengthA) : this.m_uA.SetZero(); + lengthB > 10 * b2_linearSlop ? this.m_uB.SelfMul(1 / lengthB) : this.m_uB.SetZero(); + var ruA = b2Vec2.CrossVV(this.m_rA, this.m_uA); + var ruB = b2Vec2.CrossVV(this.m_rB, this.m_uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + this.m_mass = mA + this.m_ratio * this.m_ratio * mB; + this.m_mass > 0 && (this.m_mass = 1 / this.m_mass); + if (data.step.warmStarting) { + this.m_impulse *= data.step.dtRatio; + var PA = b2Vec2.MulSV(-this.m_impulse, this.m_uA, b2PulleyJoint.InitVelocityConstraints_s_PA); + var PB = b2Vec2.MulSV(-this.m_ratio * this.m_impulse, this.m_uB, b2PulleyJoint.InitVelocityConstraints_s_PB); + vA.SelfMulAdd(this.m_invMassA, PA); + wA += this.m_invIA * b2Vec2.CrossVV(this.m_rA, PA); + vB.SelfMulAdd(this.m_invMassB, PB); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, PB); + } else this.m_impulse = 0; + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2PulleyJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var vpA = b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2PulleyJoint.SolveVelocityConstraints_s_vpA); + var vpB = b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2PulleyJoint.SolveVelocityConstraints_s_vpB); + var Cdot = -b2Vec2.DotVV(this.m_uA, vpA) - this.m_ratio * b2Vec2.DotVV(this.m_uB, vpB); + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var PA = b2Vec2.MulSV(-impulse, this.m_uA, b2PulleyJoint.SolveVelocityConstraints_s_PA); + var PB = b2Vec2.MulSV(-this.m_ratio * impulse, this.m_uB, b2PulleyJoint.SolveVelocityConstraints_s_PB); + vA.SelfMulAdd(this.m_invMassA, PA); + wA += this.m_invIA * b2Vec2.CrossVV(this.m_rA, PA); + vB.SelfMulAdd(this.m_invMassB, PB); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, PB); + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2PulleyJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var uA = this.m_uA.Copy(cA).SelfAdd(rA).SelfSub(this.m_groundAnchorA); + var uB = this.m_uB.Copy(cB).SelfAdd(rB).SelfSub(this.m_groundAnchorB); + var lengthA = uA.Length(); + var lengthB = uB.Length(); + lengthA > 10 * b2_linearSlop ? uA.SelfMul(1 / lengthA) : uA.SetZero(); + lengthB > 10 * b2_linearSlop ? uB.SelfMul(1 / lengthB) : uB.SetZero(); + var ruA = b2Vec2.CrossVV(rA, uA); + var ruB = b2Vec2.CrossVV(rB, uB); + var mA = this.m_invMassA + this.m_invIA * ruA * ruA; + var mB = this.m_invMassB + this.m_invIB * ruB * ruB; + var mass = mA + this.m_ratio * this.m_ratio * mB; + mass > 0 && (mass = 1 / mass); + var C = this.m_constant - lengthA - this.m_ratio * lengthB; + var linearError = b2Abs(C); + var impulse = -mass * C; + var PA = b2Vec2.MulSV(-impulse, uA, b2PulleyJoint.SolvePositionConstraints_s_PA); + var PB = b2Vec2.MulSV(-this.m_ratio * impulse, uB, b2PulleyJoint.SolvePositionConstraints_s_PB); + cA.SelfMulAdd(this.m_invMassA, PA); + aA += this.m_invIA * b2Vec2.CrossVV(rA, PA); + cB.SelfMulAdd(this.m_invMassB, PB); + aB += this.m_invIB * b2Vec2.CrossVV(rB, PB); + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return linearError < b2_linearSlop; + }; + b2PulleyJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2PulleyJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2PulleyJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * this.m_impulse * this.m_uB.x; + out.y = inv_dt * this.m_impulse * this.m_uB.y; + return out; + }; + b2PulleyJoint.prototype.GetReactionTorque = function (inv_dt) { + return 0; + }; + b2PulleyJoint.prototype.GetGroundAnchorA = function () { + return this.m_groundAnchorA; + }; + b2PulleyJoint.prototype.GetGroundAnchorB = function () { + return this.m_groundAnchorB; + }; + b2PulleyJoint.prototype.GetLengthA = function () { + return this.m_lengthA; + }; + b2PulleyJoint.prototype.GetLengthB = function () { + return this.m_lengthB; + }; + b2PulleyJoint.prototype.GetRatio = function () { + return this.m_ratio; + }; + b2PulleyJoint.prototype.GetCurrentLengthA = function () { + var p = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, b2PulleyJoint.GetCurrentLengthA_s_p); + var s = this.m_groundAnchorA; + return b2Vec2.DistanceVV(p, s); + }; + b2PulleyJoint.prototype.GetCurrentLengthB = function () { + var p = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, b2PulleyJoint.GetCurrentLengthB_s_p); + var s = this.m_groundAnchorB; + return b2Vec2.DistanceVV(p, s); + }; + b2PulleyJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2PulleyJointDef = new b2PulleyJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.groundAnchorA.Set(%.15f, %.15f);\n", this.m_groundAnchorA.x, this.m_groundAnchorA.y); + log(" jd.groundAnchorB.Set(%.15f, %.15f);\n", this.m_groundAnchorB.x, this.m_groundAnchorB.y); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.lengthA = %.15f;\n", this.m_lengthA); + log(" jd.lengthB = %.15f;\n", this.m_lengthB); + log(" jd.ratio = %.15f;\n", this.m_ratio); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2PulleyJoint.prototype.ShiftOrigin = function (newOrigin) { + this.m_groundAnchorA.SelfSub(newOrigin); + this.m_groundAnchorB.SelfSub(newOrigin); + }; + b2PulleyJoint.InitVelocityConstraints_s_PA = new b2Vec2(); + b2PulleyJoint.InitVelocityConstraints_s_PB = new b2Vec2(); + b2PulleyJoint.SolveVelocityConstraints_s_vpA = new b2Vec2(); + b2PulleyJoint.SolveVelocityConstraints_s_vpB = new b2Vec2(); + b2PulleyJoint.SolveVelocityConstraints_s_PA = new b2Vec2(); + b2PulleyJoint.SolveVelocityConstraints_s_PB = new b2Vec2(); + b2PulleyJoint.SolvePositionConstraints_s_PA = new b2Vec2(); + b2PulleyJoint.SolvePositionConstraints_s_PB = new b2Vec2(); + b2PulleyJoint.GetCurrentLengthA_s_p = new b2Vec2(); + b2PulleyJoint.GetCurrentLengthB_s_p = new b2Vec2(); + return b2PulleyJoint; + })(b2Joint); + var b2RevoluteJointDef = (function (_super) { + __extends(b2RevoluteJointDef, _super); + function b2RevoluteJointDef() { + var _this = _super.call(this, exports.b2JointType.e_revoluteJoint) || this; + _this.localAnchorA = new b2Vec2(0, 0); + _this.localAnchorB = new b2Vec2(0, 0); + _this.referenceAngle = 0; + _this.enableLimit = false; + _this.lowerAngle = 0; + _this.upperAngle = 0; + _this.enableMotor = false; + _this.motorSpeed = 0; + _this.maxMotorTorque = 0; + return _this; + } + b2RevoluteJointDef.prototype.Initialize = function (bA, bB, anchor) { + this.bodyA = bA; + this.bodyB = bB; + this.bodyA.GetLocalPoint(anchor, this.localAnchorA); + this.bodyB.GetLocalPoint(anchor, this.localAnchorB); + this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); + }; + return b2RevoluteJointDef; + })(b2JointDef); + var b2RevoluteJoint = (function (_super) { + __extends(b2RevoluteJoint, _super); + function b2RevoluteJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_impulse = new b2Vec3(); + _this.m_motorImpulse = 0; + _this.m_enableMotor = false; + _this.m_maxMotorTorque = 0; + _this.m_motorSpeed = 0; + _this.m_enableLimit = false; + _this.m_referenceAngle = 0; + _this.m_lowerAngle = 0; + _this.m_upperAngle = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_mass = new b2Mat33(); + _this.m_motorMass = 0; + _this.m_limitState = exports.b2LimitState.e_inactiveLimit; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_K = new b2Mat22(); + _this.m_localAnchorA.Copy(b2Maybe(def.localAnchorA, b2Vec2.ZERO)); + _this.m_localAnchorB.Copy(b2Maybe(def.localAnchorB, b2Vec2.ZERO)); + _this.m_referenceAngle = b2Maybe(def.referenceAngle, 0); + _this.m_impulse.SetZero(); + _this.m_motorImpulse = 0; + _this.m_lowerAngle = b2Maybe(def.lowerAngle, 0); + _this.m_upperAngle = b2Maybe(def.upperAngle, 0); + _this.m_maxMotorTorque = b2Maybe(def.maxMotorTorque, 0); + _this.m_motorSpeed = b2Maybe(def.motorSpeed, 0); + _this.m_enableLimit = b2Maybe(def.enableLimit, false); + _this.m_enableMotor = b2Maybe(def.enableMotor, false); + _this.m_limitState = exports.b2LimitState.e_inactiveLimit; + return _this; + } + b2RevoluteJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + this.m_mass.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB; + this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + this.m_mass.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + this.m_mass.ex.y = this.m_mass.ey.x; + this.m_mass.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB; + this.m_mass.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + this.m_mass.ex.z = this.m_mass.ez.x; + this.m_mass.ey.z = this.m_mass.ez.y; + this.m_mass.ez.z = iA + iB; + this.m_motorMass = iA + iB; + this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass); + this.m_enableMotor && !fixedRotation || (this.m_motorImpulse = 0); + if (this.m_enableLimit && !fixedRotation) { + var jointAngle = aB - aA - this.m_referenceAngle; + if (b2Abs(this.m_upperAngle - this.m_lowerAngle) < 2 * b2_angularSlop) this.m_limitState = exports.b2LimitState.e_equalLimits; else if (jointAngle <= this.m_lowerAngle) { + this.m_limitState !== exports.b2LimitState.e_atLowerLimit && (this.m_impulse.z = 0); + this.m_limitState = exports.b2LimitState.e_atLowerLimit; + } else if (jointAngle >= this.m_upperAngle) { + this.m_limitState !== exports.b2LimitState.e_atUpperLimit && (this.m_impulse.z = 0); + this.m_limitState = exports.b2LimitState.e_atUpperLimit; + } else { + this.m_limitState = exports.b2LimitState.e_inactiveLimit; + this.m_impulse.z = 0; + } + } else this.m_limitState = exports.b2LimitState.e_inactiveLimit; + if (data.step.warmStarting) { + this.m_impulse.SelfMul(data.step.dtRatio); + this.m_motorImpulse *= data.step.dtRatio; + var P = b2RevoluteJoint.InitVelocityConstraints_s_P.Set(this.m_impulse.x, this.m_impulse.y); + vA.SelfMulSub(mA, P); + wA -= iA * (b2Vec2.CrossVV(this.m_rA, P) + this.m_motorImpulse + this.m_impulse.z); + vB.SelfMulAdd(mB, P); + wB += iB * (b2Vec2.CrossVV(this.m_rB, P) + this.m_motorImpulse + this.m_impulse.z); + } else { + this.m_impulse.SetZero(); + this.m_motorImpulse = 0; + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2RevoluteJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var fixedRotation = iA + iB === 0; + if (this.m_enableMotor && this.m_limitState !== exports.b2LimitState.e_equalLimits && !fixedRotation) { + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = data.step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = b2Clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + } + if (this.m_enableLimit && this.m_limitState !== exports.b2LimitState.e_inactiveLimit && !fixedRotation) { + var Cdot1 = b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2Vec2.s_t1), b2RevoluteJoint.SolveVelocityConstraints_s_Cdot1); + var Cdot2 = wB - wA; + var impulse_v3 = this.m_mass.Solve33(Cdot1.x, Cdot1.y, Cdot2, b2RevoluteJoint.SolveVelocityConstraints_s_impulse_v3).SelfNeg(); + if (this.m_limitState === exports.b2LimitState.e_equalLimits) this.m_impulse.SelfAdd(impulse_v3); else if (this.m_limitState === exports.b2LimitState.e_atLowerLimit) { + var newImpulse = this.m_impulse.z + impulse_v3.z; + if (newImpulse < 0) { + var rhs_x = -Cdot1.x + this.m_impulse.z * this.m_mass.ez.x; + var rhs_y = -Cdot1.y + this.m_impulse.z * this.m_mass.ez.y; + var reduced_v2 = this.m_mass.Solve22(rhs_x, rhs_y, b2RevoluteJoint.SolveVelocityConstraints_s_reduced_v2); + impulse_v3.x = reduced_v2.x; + impulse_v3.y = reduced_v2.y; + impulse_v3.z = -this.m_impulse.z; + this.m_impulse.x += reduced_v2.x; + this.m_impulse.y += reduced_v2.y; + this.m_impulse.z = 0; + } else this.m_impulse.SelfAdd(impulse_v3); + } else if (this.m_limitState === exports.b2LimitState.e_atUpperLimit) { + var newImpulse = this.m_impulse.z + impulse_v3.z; + if (newImpulse > 0) { + var rhs_x = -Cdot1.x + this.m_impulse.z * this.m_mass.ez.x; + var rhs_y = -Cdot1.y + this.m_impulse.z * this.m_mass.ez.y; + var reduced_v2 = this.m_mass.Solve22(rhs_x, rhs_y, b2RevoluteJoint.SolveVelocityConstraints_s_reduced_v2); + impulse_v3.x = reduced_v2.x; + impulse_v3.y = reduced_v2.y; + impulse_v3.z = -this.m_impulse.z; + this.m_impulse.x += reduced_v2.x; + this.m_impulse.y += reduced_v2.y; + this.m_impulse.z = 0; + } else this.m_impulse.SelfAdd(impulse_v3); + } + var P = b2RevoluteJoint.SolveVelocityConstraints_s_P.Set(impulse_v3.x, impulse_v3.y); + vA.SelfMulSub(mA, P); + wA -= iA * (b2Vec2.CrossVV(this.m_rA, P) + impulse_v3.z); + vB.SelfMulAdd(mB, P); + wB += iB * (b2Vec2.CrossVV(this.m_rB, P) + impulse_v3.z); + } else { + var Cdot_v2 = b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2Vec2.s_t1), b2RevoluteJoint.SolveVelocityConstraints_s_Cdot_v2); + var impulse_v2 = this.m_mass.Solve22(-Cdot_v2.x, -Cdot_v2.y, b2RevoluteJoint.SolveVelocityConstraints_s_impulse_v2); + this.m_impulse.x += impulse_v2.x; + this.m_impulse.y += impulse_v2.y; + vA.SelfMulSub(mA, impulse_v2); + wA -= iA * b2Vec2.CrossVV(this.m_rA, impulse_v2); + vB.SelfMulAdd(mB, impulse_v2); + wB += iB * b2Vec2.CrossVV(this.m_rB, impulse_v2); + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2RevoluteJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + var angularError = 0; + var positionError = 0; + var fixedRotation = this.m_invIA + this.m_invIB === 0; + if (this.m_enableLimit && this.m_limitState !== exports.b2LimitState.e_inactiveLimit && !fixedRotation) { + var angle = aB - aA - this.m_referenceAngle; + var limitImpulse = 0; + if (this.m_limitState === exports.b2LimitState.e_equalLimits) { + var C = b2Clamp(angle - this.m_lowerAngle, -b2_maxAngularCorrection, b2_maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + angularError = b2Abs(C); + } else if (this.m_limitState === exports.b2LimitState.e_atLowerLimit) { + var C = angle - this.m_lowerAngle; + angularError = -C; + C = b2Clamp(C + b2_angularSlop, -b2_maxAngularCorrection, 0); + limitImpulse = -this.m_motorMass * C; + } else if (this.m_limitState === exports.b2LimitState.e_atUpperLimit) { + var C = angle - this.m_upperAngle; + angularError = C; + C = b2Clamp(C - b2_angularSlop, 0, b2_maxAngularCorrection); + limitImpulse = -this.m_motorMass * C; + } + aA -= this.m_invIA * limitImpulse; + aB += this.m_invIB * limitImpulse; + } + qA.SetAngle(aA); + qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var C_v2 = b2Vec2.SubVV(b2Vec2.AddVV(cB, rB, b2Vec2.s_t0), b2Vec2.AddVV(cA, rA, b2Vec2.s_t1), b2RevoluteJoint.SolvePositionConstraints_s_C_v2); + positionError = C_v2.Length(); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var K = this.m_K; + K.ex.x = mA + mB + iA * rA.y * rA.y + iB * rB.y * rB.y; + K.ex.y = -iA * rA.x * rA.y - iB * rB.x * rB.y; + K.ey.x = K.ex.y; + K.ey.y = mA + mB + iA * rA.x * rA.x + iB * rB.x * rB.x; + var impulse = K.Solve(C_v2.x, C_v2.y, b2RevoluteJoint.SolvePositionConstraints_s_impulse).SelfNeg(); + cA.SelfMulSub(mA, impulse); + aA -= iA * b2Vec2.CrossVV(rA, impulse); + cB.SelfMulAdd(mB, impulse); + aB += iB * b2Vec2.CrossVV(rB, impulse); + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return positionError <= b2_linearSlop && angularError <= b2_angularSlop; + }; + b2RevoluteJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2RevoluteJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2RevoluteJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * this.m_impulse.x; + out.y = inv_dt * this.m_impulse.y; + return out; + }; + b2RevoluteJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_impulse.z; + }; + b2RevoluteJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2RevoluteJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2RevoluteJoint.prototype.GetReferenceAngle = function () { + return this.m_referenceAngle; + }; + b2RevoluteJoint.prototype.GetJointAngle = function () { + return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle; + }; + b2RevoluteJoint.prototype.GetJointSpeed = function () { + return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity; + }; + b2RevoluteJoint.prototype.IsMotorEnabled = function () { + return this.m_enableMotor; + }; + b2RevoluteJoint.prototype.EnableMotor = function (flag) { + if (flag !== this.m_enableMotor) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_enableMotor = flag; + } + }; + b2RevoluteJoint.prototype.GetMotorTorque = function (inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + b2RevoluteJoint.prototype.GetMotorSpeed = function () { + return this.m_motorSpeed; + }; + b2RevoluteJoint.prototype.SetMaxMotorTorque = function (torque) { + if (torque !== this.m_maxMotorTorque) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_maxMotorTorque = torque; + } + }; + b2RevoluteJoint.prototype.GetMaxMotorTorque = function () { + return this.m_maxMotorTorque; + }; + b2RevoluteJoint.prototype.IsLimitEnabled = function () { + return this.m_enableLimit; + }; + b2RevoluteJoint.prototype.EnableLimit = function (flag) { + if (flag !== this.m_enableLimit) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_enableLimit = flag; + this.m_impulse.z = 0; + } + }; + b2RevoluteJoint.prototype.GetLowerLimit = function () { + return this.m_lowerAngle; + }; + b2RevoluteJoint.prototype.GetUpperLimit = function () { + return this.m_upperAngle; + }; + b2RevoluteJoint.prototype.SetLimits = function (lower, upper) { + if (lower !== this.m_lowerAngle || upper !== this.m_upperAngle) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_impulse.z = 0; + this.m_lowerAngle = lower; + this.m_upperAngle = upper; + } + }; + b2RevoluteJoint.prototype.SetMotorSpeed = function (speed) { + if (speed !== this.m_motorSpeed) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_motorSpeed = speed; + } + }; + b2RevoluteJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2RevoluteJointDef = new b2RevoluteJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.referenceAngle = %.15f;\n", this.m_referenceAngle); + log(" jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"); + log(" jd.lowerAngle = %.15f;\n", this.m_lowerAngle); + log(" jd.upperAngle = %.15f;\n", this.m_upperAngle); + log(" jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"); + log(" jd.motorSpeed = %.15f;\n", this.m_motorSpeed); + log(" jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2RevoluteJoint.InitVelocityConstraints_s_P = new b2Vec2(); + b2RevoluteJoint.SolveVelocityConstraints_s_P = new b2Vec2(); + b2RevoluteJoint.SolveVelocityConstraints_s_Cdot_v2 = new b2Vec2(); + b2RevoluteJoint.SolveVelocityConstraints_s_Cdot1 = new b2Vec2(); + b2RevoluteJoint.SolveVelocityConstraints_s_impulse_v3 = new b2Vec3(); + b2RevoluteJoint.SolveVelocityConstraints_s_reduced_v2 = new b2Vec2(); + b2RevoluteJoint.SolveVelocityConstraints_s_impulse_v2 = new b2Vec2(); + b2RevoluteJoint.SolvePositionConstraints_s_C_v2 = new b2Vec2(); + b2RevoluteJoint.SolvePositionConstraints_s_impulse = new b2Vec2(); + return b2RevoluteJoint; + })(b2Joint); + var b2RopeJointDef = (function (_super) { + __extends(b2RopeJointDef, _super); + function b2RopeJointDef() { + var _this = _super.call(this, exports.b2JointType.e_ropeJoint) || this; + _this.localAnchorA = new b2Vec2(-1, 0); + _this.localAnchorB = new b2Vec2(1, 0); + _this.maxLength = 0; + return _this; + } + return b2RopeJointDef; + })(b2JointDef); + var b2RopeJoint = (function (_super) { + __extends(b2RopeJoint, _super); + function b2RopeJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_maxLength = 0; + _this.m_length = 0; + _this.m_impulse = 0; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_u = new b2Vec2(); + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_mass = 0; + _this.m_state = exports.b2LimitState.e_inactiveLimit; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_localAnchorA.Copy(b2Maybe(def.localAnchorA, new b2Vec2(-1, 0))); + _this.m_localAnchorB.Copy(b2Maybe(def.localAnchorB, new b2Vec2(1, 0))); + _this.m_maxLength = b2Maybe(def.maxLength, 0); + return _this; + } + b2RopeJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + this.m_u.Copy(cB).SelfAdd(this.m_rB).SelfSub(cA).SelfSub(this.m_rA); + this.m_length = this.m_u.Length(); + var C = this.m_length - this.m_maxLength; + this.m_state = C > 0 ? exports.b2LimitState.e_atUpperLimit : exports.b2LimitState.e_inactiveLimit; + if (!(this.m_length > b2_linearSlop)) { + this.m_u.SetZero(); + this.m_mass = 0; + this.m_impulse = 0; + return; + } + this.m_u.SelfMul(1 / this.m_length); + var crA = b2Vec2.CrossVV(this.m_rA, this.m_u); + var crB = b2Vec2.CrossVV(this.m_rB, this.m_u); + var invMass = this.m_invMassA + this.m_invIA * crA * crA + this.m_invMassB + this.m_invIB * crB * crB; + this.m_mass = 0 !== invMass ? 1 / invMass : 0; + if (data.step.warmStarting) { + this.m_impulse *= data.step.dtRatio; + var P = b2Vec2.MulSV(this.m_impulse, this.m_u, b2RopeJoint.InitVelocityConstraints_s_P); + vA.SelfMulSub(this.m_invMassA, P); + wA -= this.m_invIA * b2Vec2.CrossVV(this.m_rA, P); + vB.SelfMulAdd(this.m_invMassB, P); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, P); + } else this.m_impulse = 0; + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2RopeJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var vpA = b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2RopeJoint.SolveVelocityConstraints_s_vpA); + var vpB = b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2RopeJoint.SolveVelocityConstraints_s_vpB); + var C = this.m_length - this.m_maxLength; + var Cdot = b2Vec2.DotVV(this.m_u, b2Vec2.SubVV(vpB, vpA, b2Vec2.s_t0)); + C < 0 && (Cdot += data.step.inv_dt * C); + var impulse = -this.m_mass * Cdot; + var oldImpulse = this.m_impulse; + this.m_impulse = b2Min(0, this.m_impulse + impulse); + impulse = this.m_impulse - oldImpulse; + var P = b2Vec2.MulSV(impulse, this.m_u, b2RopeJoint.SolveVelocityConstraints_s_P); + vA.SelfMulSub(this.m_invMassA, P); + wA -= this.m_invIA * b2Vec2.CrossVV(this.m_rA, P); + vB.SelfMulAdd(this.m_invMassB, P); + wB += this.m_invIB * b2Vec2.CrossVV(this.m_rB, P); + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2RopeJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var u = this.m_u.Copy(cB).SelfAdd(rB).SelfSub(cA).SelfSub(rA); + var length = u.Normalize(); + var C = length - this.m_maxLength; + C = b2Clamp(C, 0, b2_maxLinearCorrection); + var impulse = -this.m_mass * C; + var P = b2Vec2.MulSV(impulse, u, b2RopeJoint.SolvePositionConstraints_s_P); + cA.SelfMulSub(this.m_invMassA, P); + aA -= this.m_invIA * b2Vec2.CrossVV(rA, P); + cB.SelfMulAdd(this.m_invMassB, P); + aB += this.m_invIB * b2Vec2.CrossVV(rB, P); + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return length - this.m_maxLength < b2_linearSlop; + }; + b2RopeJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2RopeJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2RopeJoint.prototype.GetReactionForce = function (inv_dt, out) { + return b2Vec2.MulSV(inv_dt * this.m_impulse, this.m_u, out); + }; + b2RopeJoint.prototype.GetReactionTorque = function (inv_dt) { + return 0; + }; + b2RopeJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2RopeJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2RopeJoint.prototype.SetMaxLength = function (length) { + this.m_maxLength = length; + }; + b2RopeJoint.prototype.GetMaxLength = function () { + return this.m_maxLength; + }; + b2RopeJoint.prototype.GetLimitState = function () { + return this.m_state; + }; + b2RopeJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2RopeJointDef = new b2RopeJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.maxLength = %.15f;\n", this.m_maxLength); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2RopeJoint.InitVelocityConstraints_s_P = new b2Vec2(); + b2RopeJoint.SolveVelocityConstraints_s_vpA = new b2Vec2(); + b2RopeJoint.SolveVelocityConstraints_s_vpB = new b2Vec2(); + b2RopeJoint.SolveVelocityConstraints_s_P = new b2Vec2(); + b2RopeJoint.SolvePositionConstraints_s_P = new b2Vec2(); + return b2RopeJoint; + })(b2Joint); + var b2WeldJointDef = (function (_super) { + __extends(b2WeldJointDef, _super); + function b2WeldJointDef() { + var _this = _super.call(this, exports.b2JointType.e_weldJoint) || this; + _this.localAnchorA = new b2Vec2(); + _this.localAnchorB = new b2Vec2(); + _this.referenceAngle = 0; + _this.frequencyHz = 0; + _this.dampingRatio = 0; + return _this; + } + b2WeldJointDef.prototype.Initialize = function (bA, bB, anchor) { + this.bodyA = bA; + this.bodyB = bB; + this.bodyA.GetLocalPoint(anchor, this.localAnchorA); + this.bodyB.GetLocalPoint(anchor, this.localAnchorB); + this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle(); + }; + return b2WeldJointDef; + })(b2JointDef); + var b2WeldJoint = (function (_super) { + __extends(b2WeldJoint, _super); + function b2WeldJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_frequencyHz = 0; + _this.m_dampingRatio = 0; + _this.m_bias = 0; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_referenceAngle = 0; + _this.m_gamma = 0; + _this.m_impulse = new b2Vec3(0, 0, 0); + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_mass = new b2Mat33(); + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_K = new b2Mat33(); + _this.m_frequencyHz = b2Maybe(def.frequencyHz, 0); + _this.m_dampingRatio = b2Maybe(def.dampingRatio, 0); + _this.m_localAnchorA.Copy(b2Maybe(def.localAnchorA, b2Vec2.ZERO)); + _this.m_localAnchorB.Copy(b2Maybe(def.localAnchorB, b2Vec2.ZERO)); + _this.m_referenceAngle = b2Maybe(def.referenceAngle, 0); + _this.m_impulse.SetZero(); + return _this; + } + b2WeldJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var K = this.m_K; + K.ex.x = mA + mB + this.m_rA.y * this.m_rA.y * iA + this.m_rB.y * this.m_rB.y * iB; + K.ey.x = -this.m_rA.y * this.m_rA.x * iA - this.m_rB.y * this.m_rB.x * iB; + K.ez.x = -this.m_rA.y * iA - this.m_rB.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + this.m_rA.x * this.m_rA.x * iA + this.m_rB.x * this.m_rB.x * iB; + K.ez.y = this.m_rA.x * iA + this.m_rB.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + K.GetInverse22(this.m_mass); + var invM = iA + iB; + var m = invM > 0 ? 1 / invM : 0; + var C = aB - aA - this.m_referenceAngle; + var omega = 2 * b2_pi * this.m_frequencyHz; + var d = 2 * m * this.m_dampingRatio * omega; + var k = m * omega * omega; + var h = data.step.dt; + this.m_gamma = h * (d + h * k); + this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0; + this.m_bias = C * h * k * this.m_gamma; + invM += this.m_gamma; + this.m_mass.ez.z = 0 !== invM ? 1 / invM : 0; + } else { + K.GetSymInverse33(this.m_mass); + this.m_gamma = 0; + this.m_bias = 0; + } + if (data.step.warmStarting) { + this.m_impulse.SelfMul(data.step.dtRatio); + var P = b2WeldJoint.InitVelocityConstraints_s_P.Set(this.m_impulse.x, this.m_impulse.y); + vA.SelfMulSub(mA, P); + wA -= iA * (b2Vec2.CrossVV(this.m_rA, P) + this.m_impulse.z); + vB.SelfMulAdd(mB, P); + wB += iB * (b2Vec2.CrossVV(this.m_rB, P) + this.m_impulse.z); + } else this.m_impulse.SetZero(); + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2WeldJoint.prototype.SolveVelocityConstraints = function (data) { + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + if (this.m_frequencyHz > 0) { + var Cdot2 = wB - wA; + var impulse2 = -this.m_mass.ez.z * (Cdot2 + this.m_bias + this.m_gamma * this.m_impulse.z); + this.m_impulse.z += impulse2; + wA -= iA * impulse2; + wB += iB * impulse2; + var Cdot1 = b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2Vec2.s_t1), b2WeldJoint.SolveVelocityConstraints_s_Cdot1); + var impulse1 = b2Mat33.MulM33XY(this.m_mass, Cdot1.x, Cdot1.y, b2WeldJoint.SolveVelocityConstraints_s_impulse1).SelfNeg(); + this.m_impulse.x += impulse1.x; + this.m_impulse.y += impulse1.y; + var P = impulse1; + vA.SelfMulSub(mA, P); + wA -= iA * b2Vec2.CrossVV(this.m_rA, P); + vB.SelfMulAdd(mB, P); + wB += iB * b2Vec2.CrossVV(this.m_rB, P); + } else { + var Cdot1 = b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, this.m_rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, this.m_rA, b2Vec2.s_t1), b2WeldJoint.SolveVelocityConstraints_s_Cdot1); + var Cdot2 = wB - wA; + var impulse = b2Mat33.MulM33XYZ(this.m_mass, Cdot1.x, Cdot1.y, Cdot2, b2WeldJoint.SolveVelocityConstraints_s_impulse).SelfNeg(); + this.m_impulse.SelfAdd(impulse); + var P = b2WeldJoint.SolveVelocityConstraints_s_P.Set(impulse.x, impulse.y); + vA.SelfMulSub(mA, P); + wA -= iA * (b2Vec2.CrossVV(this.m_rA, P) + impulse.z); + vB.SelfMulAdd(mB, P); + wB += iB * (b2Vec2.CrossVV(this.m_rB, P) + impulse.z); + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2WeldJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var positionError, angularError; + var K = this.m_K; + K.ex.x = mA + mB + rA.y * rA.y * iA + rB.y * rB.y * iB; + K.ey.x = -rA.y * rA.x * iA - rB.y * rB.x * iB; + K.ez.x = -rA.y * iA - rB.y * iB; + K.ex.y = K.ey.x; + K.ey.y = mA + mB + rA.x * rA.x * iA + rB.x * rB.x * iB; + K.ez.y = rA.x * iA + rB.x * iB; + K.ex.z = K.ez.x; + K.ey.z = K.ez.y; + K.ez.z = iA + iB; + if (this.m_frequencyHz > 0) { + var C1 = b2Vec2.SubVV(b2Vec2.AddVV(cB, rB, b2Vec2.s_t0), b2Vec2.AddVV(cA, rA, b2Vec2.s_t1), b2WeldJoint.SolvePositionConstraints_s_C1); + positionError = C1.Length(); + angularError = 0; + var P = K.Solve22(C1.x, C1.y, b2WeldJoint.SolvePositionConstraints_s_P).SelfNeg(); + cA.SelfMulSub(mA, P); + aA -= iA * b2Vec2.CrossVV(rA, P); + cB.SelfMulAdd(mB, P); + aB += iB * b2Vec2.CrossVV(rB, P); + } else { + var C1 = b2Vec2.SubVV(b2Vec2.AddVV(cB, rB, b2Vec2.s_t0), b2Vec2.AddVV(cA, rA, b2Vec2.s_t1), b2WeldJoint.SolvePositionConstraints_s_C1); + var C2 = aB - aA - this.m_referenceAngle; + positionError = C1.Length(); + angularError = b2Abs(C2); + var impulse = K.Solve33(C1.x, C1.y, C2, b2WeldJoint.SolvePositionConstraints_s_impulse).SelfNeg(); + var P = b2WeldJoint.SolvePositionConstraints_s_P.Set(impulse.x, impulse.y); + cA.SelfMulSub(mA, P); + aA -= iA * (b2Vec2.CrossVV(this.m_rA, P) + impulse.z); + cB.SelfMulAdd(mB, P); + aB += iB * (b2Vec2.CrossVV(this.m_rB, P) + impulse.z); + } + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return positionError <= b2_linearSlop && angularError <= b2_angularSlop; + }; + b2WeldJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2WeldJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2WeldJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * this.m_impulse.x; + out.y = inv_dt * this.m_impulse.y; + return out; + }; + b2WeldJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_impulse.z; + }; + b2WeldJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2WeldJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2WeldJoint.prototype.GetReferenceAngle = function () { + return this.m_referenceAngle; + }; + b2WeldJoint.prototype.SetFrequency = function (hz) { + this.m_frequencyHz = hz; + }; + b2WeldJoint.prototype.GetFrequency = function () { + return this.m_frequencyHz; + }; + b2WeldJoint.prototype.SetDampingRatio = function (ratio) { + this.m_dampingRatio = ratio; + }; + b2WeldJoint.prototype.GetDampingRatio = function () { + return this.m_dampingRatio; + }; + b2WeldJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2WeldJointDef = new b2WeldJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.referenceAngle = %.15f;\n", this.m_referenceAngle); + log(" jd.frequencyHz = %.15f;\n", this.m_frequencyHz); + log(" jd.dampingRatio = %.15f;\n", this.m_dampingRatio); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2WeldJoint.InitVelocityConstraints_s_P = new b2Vec2(); + b2WeldJoint.SolveVelocityConstraints_s_Cdot1 = new b2Vec2(); + b2WeldJoint.SolveVelocityConstraints_s_impulse1 = new b2Vec2(); + b2WeldJoint.SolveVelocityConstraints_s_impulse = new b2Vec3(); + b2WeldJoint.SolveVelocityConstraints_s_P = new b2Vec2(); + b2WeldJoint.SolvePositionConstraints_s_C1 = new b2Vec2(); + b2WeldJoint.SolvePositionConstraints_s_P = new b2Vec2(); + b2WeldJoint.SolvePositionConstraints_s_impulse = new b2Vec3(); + return b2WeldJoint; + })(b2Joint); + var b2WheelJointDef = (function (_super) { + __extends(b2WheelJointDef, _super); + function b2WheelJointDef() { + var _this = _super.call(this, exports.b2JointType.e_wheelJoint) || this; + _this.localAnchorA = new b2Vec2(0, 0); + _this.localAnchorB = new b2Vec2(0, 0); + _this.localAxisA = new b2Vec2(1, 0); + _this.enableMotor = false; + _this.maxMotorTorque = 0; + _this.motorSpeed = 0; + _this.frequencyHz = 2; + _this.dampingRatio = .7; + return _this; + } + b2WheelJointDef.prototype.Initialize = function (bA, bB, anchor, axis) { + this.bodyA = bA; + this.bodyB = bB; + this.bodyA.GetLocalPoint(anchor, this.localAnchorA); + this.bodyB.GetLocalPoint(anchor, this.localAnchorB); + this.bodyA.GetLocalVector(axis, this.localAxisA); + }; + return b2WheelJointDef; + })(b2JointDef); + var b2WheelJoint = (function (_super) { + __extends(b2WheelJoint, _super); + function b2WheelJoint(def) { + var _this = _super.call(this, def) || this; + _this.m_frequencyHz = 0; + _this.m_dampingRatio = 0; + _this.m_localAnchorA = new b2Vec2(); + _this.m_localAnchorB = new b2Vec2(); + _this.m_localXAxisA = new b2Vec2(); + _this.m_localYAxisA = new b2Vec2(); + _this.m_impulse = 0; + _this.m_motorImpulse = 0; + _this.m_springImpulse = 0; + _this.m_maxMotorTorque = 0; + _this.m_motorSpeed = 0; + _this.m_enableMotor = false; + _this.m_indexA = 0; + _this.m_indexB = 0; + _this.m_localCenterA = new b2Vec2(); + _this.m_localCenterB = new b2Vec2(); + _this.m_invMassA = 0; + _this.m_invMassB = 0; + _this.m_invIA = 0; + _this.m_invIB = 0; + _this.m_ax = new b2Vec2(); + _this.m_ay = new b2Vec2(); + _this.m_sAx = 0; + _this.m_sBx = 0; + _this.m_sAy = 0; + _this.m_sBy = 0; + _this.m_mass = 0; + _this.m_motorMass = 0; + _this.m_springMass = 0; + _this.m_bias = 0; + _this.m_gamma = 0; + _this.m_qA = new b2Rot(); + _this.m_qB = new b2Rot(); + _this.m_lalcA = new b2Vec2(); + _this.m_lalcB = new b2Vec2(); + _this.m_rA = new b2Vec2(); + _this.m_rB = new b2Vec2(); + _this.m_frequencyHz = b2Maybe(def.frequencyHz, 2); + _this.m_dampingRatio = b2Maybe(def.dampingRatio, .7); + _this.m_localAnchorA.Copy(b2Maybe(def.localAnchorA, b2Vec2.ZERO)); + _this.m_localAnchorB.Copy(b2Maybe(def.localAnchorB, b2Vec2.ZERO)); + _this.m_localXAxisA.Copy(b2Maybe(def.localAxisA, b2Vec2.UNITX)); + b2Vec2.CrossOneV(_this.m_localXAxisA, _this.m_localYAxisA); + _this.m_maxMotorTorque = b2Maybe(def.maxMotorTorque, 0); + _this.m_motorSpeed = b2Maybe(def.motorSpeed, 0); + _this.m_enableMotor = b2Maybe(def.enableMotor, false); + _this.m_ax.SetZero(); + _this.m_ay.SetZero(); + return _this; + } + b2WheelJoint.prototype.GetMotorSpeed = function () { + return this.m_motorSpeed; + }; + b2WheelJoint.prototype.GetMaxMotorTorque = function () { + return this.m_maxMotorTorque; + }; + b2WheelJoint.prototype.SetSpringFrequencyHz = function (hz) { + this.m_frequencyHz = hz; + }; + b2WheelJoint.prototype.GetSpringFrequencyHz = function () { + return this.m_frequencyHz; + }; + b2WheelJoint.prototype.SetSpringDampingRatio = function (ratio) { + this.m_dampingRatio = ratio; + }; + b2WheelJoint.prototype.GetSpringDampingRatio = function () { + return this.m_dampingRatio; + }; + b2WheelJoint.prototype.InitVelocityConstraints = function (data) { + this.m_indexA = this.m_bodyA.m_islandIndex; + this.m_indexB = this.m_bodyB.m_islandIndex; + this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter); + this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter); + this.m_invMassA = this.m_bodyA.m_invMass; + this.m_invMassB = this.m_bodyB.m_invMass; + this.m_invIA = this.m_bodyA.m_invI; + this.m_invIB = this.m_bodyB.m_invI; + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var d = b2Vec2.SubVV(b2Vec2.AddVV(cB, rB, b2Vec2.s_t0), b2Vec2.AddVV(cA, rA, b2Vec2.s_t1), b2WheelJoint.InitVelocityConstraints_s_d); + b2Rot.MulRV(qA, this.m_localYAxisA, this.m_ay); + this.m_sAy = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), this.m_ay); + this.m_sBy = b2Vec2.CrossVV(rB, this.m_ay); + this.m_mass = mA + mB + iA * this.m_sAy * this.m_sAy + iB * this.m_sBy * this.m_sBy; + this.m_mass > 0 && (this.m_mass = 1 / this.m_mass); + this.m_springMass = 0; + this.m_bias = 0; + this.m_gamma = 0; + if (this.m_frequencyHz > 0) { + b2Rot.MulRV(qA, this.m_localXAxisA, this.m_ax); + this.m_sAx = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), this.m_ax); + this.m_sBx = b2Vec2.CrossVV(rB, this.m_ax); + var invMass = mA + mB + iA * this.m_sAx * this.m_sAx + iB * this.m_sBx * this.m_sBx; + if (invMass > 0) { + this.m_springMass = 1 / invMass; + var C = b2Vec2.DotVV(d, this.m_ax); + var omega = 2 * b2_pi * this.m_frequencyHz; + var damp = 2 * this.m_springMass * this.m_dampingRatio * omega; + var k = this.m_springMass * omega * omega; + var h = data.step.dt; + this.m_gamma = h * (damp + h * k); + this.m_gamma > 0 && (this.m_gamma = 1 / this.m_gamma); + this.m_bias = C * h * k * this.m_gamma; + this.m_springMass = invMass + this.m_gamma; + this.m_springMass > 0 && (this.m_springMass = 1 / this.m_springMass); + } + } else this.m_springImpulse = 0; + if (this.m_enableMotor) { + this.m_motorMass = iA + iB; + this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass); + } else { + this.m_motorMass = 0; + this.m_motorImpulse = 0; + } + if (data.step.warmStarting) { + this.m_impulse *= data.step.dtRatio; + this.m_springImpulse *= data.step.dtRatio; + this.m_motorImpulse *= data.step.dtRatio; + var P = b2Vec2.AddVV(b2Vec2.MulSV(this.m_impulse, this.m_ay, b2Vec2.s_t0), b2Vec2.MulSV(this.m_springImpulse, this.m_ax, b2Vec2.s_t1), b2WheelJoint.InitVelocityConstraints_s_P); + var LA = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse; + var LB = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; + vA.SelfMulSub(this.m_invMassA, P); + wA -= this.m_invIA * LA; + vB.SelfMulAdd(this.m_invMassB, P); + wB += this.m_invIB * LB; + } else { + this.m_impulse = 0; + this.m_springImpulse = 0; + this.m_motorImpulse = 0; + } + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2WheelJoint.prototype.SolveVelocityConstraints = function (data) { + var mA = this.m_invMassA, mB = this.m_invMassB; + var iA = this.m_invIA, iB = this.m_invIB; + var vA = data.velocities[this.m_indexA].v; + var wA = data.velocities[this.m_indexA].w; + var vB = data.velocities[this.m_indexB].v; + var wB = data.velocities[this.m_indexB].w; + var Cdot = b2Vec2.DotVV(this.m_ax, b2Vec2.SubVV(vB, vA, b2Vec2.s_t0)) + this.m_sBx * wB - this.m_sAx * wA; + var impulse = -this.m_springMass * (Cdot + this.m_bias + this.m_gamma * this.m_springImpulse); + this.m_springImpulse += impulse; + var P = b2Vec2.MulSV(impulse, this.m_ax, b2WheelJoint.SolveVelocityConstraints_s_P); + var LA = impulse * this.m_sAx; + var LB = impulse * this.m_sBx; + vA.SelfMulSub(mA, P); + wA -= iA * LA; + vB.SelfMulAdd(mB, P); + wB += iB * LB; + var Cdot = wB - wA - this.m_motorSpeed; + var impulse = -this.m_motorMass * Cdot; + var oldImpulse = this.m_motorImpulse; + var maxImpulse = data.step.dt * this.m_maxMotorTorque; + this.m_motorImpulse = b2Clamp(this.m_motorImpulse + impulse, -maxImpulse, maxImpulse); + impulse = this.m_motorImpulse - oldImpulse; + wA -= iA * impulse; + wB += iB * impulse; + var Cdot = b2Vec2.DotVV(this.m_ay, b2Vec2.SubVV(vB, vA, b2Vec2.s_t0)) + this.m_sBy * wB - this.m_sAy * wA; + var impulse = -this.m_mass * Cdot; + this.m_impulse += impulse; + var P = b2Vec2.MulSV(impulse, this.m_ay, b2WheelJoint.SolveVelocityConstraints_s_P); + var LA = impulse * this.m_sAy; + var LB = impulse * this.m_sBy; + vA.SelfMulSub(mA, P); + wA -= iA * LA; + vB.SelfMulAdd(mB, P); + wB += iB * LB; + data.velocities[this.m_indexA].w = wA; + data.velocities[this.m_indexB].w = wB; + }; + b2WheelJoint.prototype.SolvePositionConstraints = function (data) { + var cA = data.positions[this.m_indexA].c; + var aA = data.positions[this.m_indexA].a; + var cB = data.positions[this.m_indexB].c; + var aB = data.positions[this.m_indexB].a; + var qA = this.m_qA.SetAngle(aA), qB = this.m_qB.SetAngle(aB); + b2Vec2.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); + var rA = b2Rot.MulRV(qA, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); + var rB = b2Rot.MulRV(qB, this.m_lalcB, this.m_rB); + var d = b2Vec2.AddVV(b2Vec2.SubVV(cB, cA, b2Vec2.s_t0), b2Vec2.SubVV(rB, rA, b2Vec2.s_t1), b2WheelJoint.SolvePositionConstraints_s_d); + var ay = b2Rot.MulRV(qA, this.m_localYAxisA, this.m_ay); + var sAy = b2Vec2.CrossVV(b2Vec2.AddVV(d, rA, b2Vec2.s_t0), ay); + var sBy = b2Vec2.CrossVV(rB, ay); + var C = b2Vec2.DotVV(d, this.m_ay); + var k = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_sAy * this.m_sAy + this.m_invIB * this.m_sBy * this.m_sBy; + var impulse; + impulse = 0 !== k ? -C / k : 0; + var P = b2Vec2.MulSV(impulse, ay, b2WheelJoint.SolvePositionConstraints_s_P); + var LA = impulse * sAy; + var LB = impulse * sBy; + cA.SelfMulSub(this.m_invMassA, P); + aA -= this.m_invIA * LA; + cB.SelfMulAdd(this.m_invMassB, P); + aB += this.m_invIB * LB; + data.positions[this.m_indexA].a = aA; + data.positions[this.m_indexB].a = aB; + return b2Abs(C) <= b2_linearSlop; + }; + b2WheelJoint.prototype.GetDefinition = function (def) { + return def; + }; + b2WheelJoint.prototype.GetAnchorA = function (out) { + return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, out); + }; + b2WheelJoint.prototype.GetAnchorB = function (out) { + return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, out); + }; + b2WheelJoint.prototype.GetReactionForce = function (inv_dt, out) { + out.x = inv_dt * (this.m_impulse * this.m_ay.x + this.m_springImpulse * this.m_ax.x); + out.y = inv_dt * (this.m_impulse * this.m_ay.y + this.m_springImpulse * this.m_ax.y); + return out; + }; + b2WheelJoint.prototype.GetReactionTorque = function (inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + b2WheelJoint.prototype.GetLocalAnchorA = function () { + return this.m_localAnchorA; + }; + b2WheelJoint.prototype.GetLocalAnchorB = function () { + return this.m_localAnchorB; + }; + b2WheelJoint.prototype.GetLocalAxisA = function () { + return this.m_localXAxisA; + }; + b2WheelJoint.prototype.GetJointTranslation = function () { + return this.GetPrismaticJointTranslation(); + }; + b2WheelJoint.prototype.GetJointLinearSpeed = function () { + return this.GetPrismaticJointSpeed(); + }; + b2WheelJoint.prototype.GetJointAngle = function () { + return this.GetRevoluteJointAngle(); + }; + b2WheelJoint.prototype.GetJointAngularSpeed = function () { + return this.GetRevoluteJointSpeed(); + }; + b2WheelJoint.prototype.GetPrismaticJointTranslation = function () { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + var pA = bA.GetWorldPoint(this.m_localAnchorA, new b2Vec2()); + var pB = bB.GetWorldPoint(this.m_localAnchorB, new b2Vec2()); + var d = b2Vec2.SubVV(pB, pA, new b2Vec2()); + var axis = bA.GetWorldVector(this.m_localXAxisA, new b2Vec2()); + var translation = b2Vec2.DotVV(d, axis); + return translation; + }; + b2WheelJoint.prototype.GetPrismaticJointSpeed = function () { + var bA = this.m_bodyA; + var bB = this.m_bodyB; + b2Vec2.SubVV(this.m_localAnchorA, bA.m_sweep.localCenter, this.m_lalcA); + var rA = b2Rot.MulRV(bA.m_xf.q, this.m_lalcA, this.m_rA); + b2Vec2.SubVV(this.m_localAnchorB, bB.m_sweep.localCenter, this.m_lalcB); + var rB = b2Rot.MulRV(bB.m_xf.q, this.m_lalcB, this.m_rB); + var pA = b2Vec2.AddVV(bA.m_sweep.c, rA, b2Vec2.s_t0); + var pB = b2Vec2.AddVV(bB.m_sweep.c, rB, b2Vec2.s_t1); + var d = b2Vec2.SubVV(pB, pA, b2Vec2.s_t2); + var axis = bA.GetWorldVector(this.m_localXAxisA, new b2Vec2()); + var vA = bA.m_linearVelocity; + var vB = bB.m_linearVelocity; + var wA = bA.m_angularVelocity; + var wB = bB.m_angularVelocity; + var speed = b2Vec2.DotVV(d, b2Vec2.CrossSV(wA, axis, b2Vec2.s_t0)) + b2Vec2.DotVV(axis, b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, rA, b2Vec2.s_t1), b2Vec2.s_t0)); + return speed; + }; + b2WheelJoint.prototype.GetRevoluteJointAngle = function () { + return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a; + }; + b2WheelJoint.prototype.GetRevoluteJointSpeed = function () { + var wA = this.m_bodyA.m_angularVelocity; + var wB = this.m_bodyB.m_angularVelocity; + return wB - wA; + }; + b2WheelJoint.prototype.IsMotorEnabled = function () { + return this.m_enableMotor; + }; + b2WheelJoint.prototype.EnableMotor = function (flag) { + if (flag !== this.m_enableMotor) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_enableMotor = flag; + } + }; + b2WheelJoint.prototype.SetMotorSpeed = function (speed) { + if (speed !== this.m_motorSpeed) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_motorSpeed = speed; + } + }; + b2WheelJoint.prototype.SetMaxMotorTorque = function (force) { + if (force !== this.m_maxMotorTorque) { + this.m_bodyA.SetAwake(true); + this.m_bodyB.SetAwake(true); + this.m_maxMotorTorque = force; + } + }; + b2WheelJoint.prototype.GetMotorTorque = function (inv_dt) { + return inv_dt * this.m_motorImpulse; + }; + b2WheelJoint.prototype.Dump = function (log) { + var indexA = this.m_bodyA.m_islandIndex; + var indexB = this.m_bodyB.m_islandIndex; + log(" const jd: b2WheelJointDef = new b2WheelJointDef();\n"); + log(" jd.bodyA = bodies[%d];\n", indexA); + log(" jd.bodyB = bodies[%d];\n", indexB); + log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"); + log(" jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y); + log(" jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y); + log(" jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y); + log(" jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"); + log(" jd.motorSpeed = %.15f;\n", this.m_motorSpeed); + log(" jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque); + log(" jd.frequencyHz = %.15f;\n", this.m_frequencyHz); + log(" jd.dampingRatio = %.15f;\n", this.m_dampingRatio); + log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index); + }; + b2WheelJoint.InitVelocityConstraints_s_d = new b2Vec2(); + b2WheelJoint.InitVelocityConstraints_s_P = new b2Vec2(); + b2WheelJoint.SolveVelocityConstraints_s_P = new b2Vec2(); + b2WheelJoint.SolvePositionConstraints_s_d = new b2Vec2(); + b2WheelJoint.SolvePositionConstraints_s_P = new b2Vec2(); + return b2WheelJoint; + })(b2Joint); + function b2MixFriction(friction1, friction2) { + return b2Sqrt(friction1 * friction2); + } + function b2MixRestitution(restitution1, restitution2) { + return restitution1 > restitution2 ? restitution1 : restitution2; + } + var b2ContactEdge = (function () { + function b2ContactEdge(contact) { + this.prev = null; + this.next = null; + this.contact = contact; + } + return b2ContactEdge; + })(); + var b2Contact = (function () { + function b2Contact() { + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_enabledFlag = false; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_toiFlag = false; + this.m_prev = null; + this.m_next = null; + this.m_indexA = 0; + this.m_indexB = 0; + this.m_manifold = new b2Manifold(); + this.m_toiCount = 0; + this.m_toi = 0; + this.m_friction = 0; + this.m_restitution = 0; + this.m_tangentSpeed = 0; + this.m_oldManifold = new b2Manifold(); + this.m_nodeA = new b2ContactEdge(this); + this.m_nodeB = new b2ContactEdge(this); + } + b2Contact.prototype.GetManifold = function () { + return this.m_manifold; + }; + b2Contact.prototype.GetWorldManifold = function (worldManifold) { + var bodyA = this.m_fixtureA.GetBody(); + var bodyB = this.m_fixtureB.GetBody(); + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + worldManifold.Initialize(this.m_manifold, bodyA.GetTransform(), shapeA.m_radius, bodyB.GetTransform(), shapeB.m_radius); + }; + b2Contact.prototype.IsTouching = function () { + return this.m_touchingFlag; + }; + b2Contact.prototype.SetEnabled = function (flag) { + this.m_enabledFlag = flag; + }; + b2Contact.prototype.IsEnabled = function () { + return this.m_enabledFlag; + }; + b2Contact.prototype.GetNext = function () { + return this.m_next; + }; + b2Contact.prototype.GetFixtureA = function () { + return this.m_fixtureA; + }; + b2Contact.prototype.GetChildIndexA = function () { + return this.m_indexA; + }; + b2Contact.prototype.GetFixtureB = function () { + return this.m_fixtureB; + }; + b2Contact.prototype.GetChildIndexB = function () { + return this.m_indexB; + }; + b2Contact.prototype.FlagForFiltering = function () { + this.m_filterFlag = true; + }; + b2Contact.prototype.SetFriction = function (friction) { + this.m_friction = friction; + }; + b2Contact.prototype.GetFriction = function () { + return this.m_friction; + }; + b2Contact.prototype.ResetFriction = function () { + this.m_friction = b2MixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); + }; + b2Contact.prototype.SetRestitution = function (restitution) { + this.m_restitution = restitution; + }; + b2Contact.prototype.GetRestitution = function () { + return this.m_restitution; + }; + b2Contact.prototype.ResetRestitution = function () { + this.m_restitution = b2MixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); + }; + b2Contact.prototype.SetTangentSpeed = function (speed) { + this.m_tangentSpeed = speed; + }; + b2Contact.prototype.GetTangentSpeed = function () { + return this.m_tangentSpeed; + }; + b2Contact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + this.m_islandFlag = false; + this.m_touchingFlag = false; + this.m_enabledFlag = true; + this.m_filterFlag = false; + this.m_bulletHitFlag = false; + this.m_toiFlag = false; + this.m_fixtureA = fixtureA; + this.m_fixtureB = fixtureB; + this.m_indexA = indexA; + this.m_indexB = indexB; + this.m_manifold.pointCount = 0; + this.m_prev = null; + this.m_next = null; + delete this.m_nodeA.contact; + this.m_nodeA.prev = null; + this.m_nodeA.next = null; + delete this.m_nodeA.other; + delete this.m_nodeB.contact; + this.m_nodeB.prev = null; + this.m_nodeB.next = null; + delete this.m_nodeB.other; + this.m_toiCount = 0; + this.m_friction = b2MixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction); + this.m_restitution = b2MixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution); + }; + b2Contact.prototype.Update = function (listener) { + var tManifold = this.m_oldManifold; + this.m_oldManifold = this.m_manifold; + this.m_manifold = tManifold; + this.m_enabledFlag = true; + var touching = false; + var wasTouching = this.m_touchingFlag; + var sensorA = this.m_fixtureA.IsSensor(); + var sensorB = this.m_fixtureB.IsSensor(); + var sensor = sensorA || sensorB; + var bodyA = this.m_fixtureA.GetBody(); + var bodyB = this.m_fixtureB.GetBody(); + var xfA = bodyA.GetTransform(); + var xfB = bodyB.GetTransform(); + if (sensor) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + touching = b2TestOverlapShape(shapeA, this.m_indexA, shapeB, this.m_indexB, xfA, xfB); + this.m_manifold.pointCount = 0; + } else { + this.Evaluate(this.m_manifold, xfA, xfB); + touching = this.m_manifold.pointCount > 0; + for (var i = 0; i < this.m_manifold.pointCount; ++i) { + var mp2 = this.m_manifold.points[i]; + mp2.normalImpulse = 0; + mp2.tangentImpulse = 0; + var id2 = mp2.id; + for (var j = 0; j < this.m_oldManifold.pointCount; ++j) { + var mp1 = this.m_oldManifold.points[j]; + if (mp1.id.key === id2.key) { + mp2.normalImpulse = mp1.normalImpulse; + mp2.tangentImpulse = mp1.tangentImpulse; + break; + } + } + } + if (touching !== wasTouching) { + bodyA.SetAwake(true); + bodyB.SetAwake(true); + } + } + this.m_touchingFlag = touching; + !wasTouching && touching && listener && listener.BeginContact(this); + wasTouching && !touching && listener && listener.EndContact(this); + !sensor && touching && listener && listener.PreSolve(this, this.m_oldManifold); + }; + b2Contact.prototype.ComputeTOI = function (sweepA, sweepB) { + var input = b2Contact.ComputeTOI_s_input; + input.proxyA.SetShape(this.m_fixtureA.GetShape(), this.m_indexA); + input.proxyB.SetShape(this.m_fixtureB.GetShape(), this.m_indexB); + input.sweepA.Copy(sweepA); + input.sweepB.Copy(sweepB); + input.tMax = b2_linearSlop; + var output = b2Contact.ComputeTOI_s_output; + b2TimeOfImpact(output, input); + return output.t; + }; + b2Contact.ComputeTOI_s_input = new b2TOIInput(); + b2Contact.ComputeTOI_s_output = new b2TOIOutput(); + return b2Contact; + })(); + var b2CircleContact = (function (_super) { + __extends(b2CircleContact, _super); + function b2CircleContact() { + return _super.call(this) || this; + } + b2CircleContact.Create = function (allocator) { + return new b2CircleContact(); + }; + b2CircleContact.Destroy = function (contact, allocator) { }; + b2CircleContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2CircleContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + b2CollideCircles(manifold, shapeA, xfA, shapeB, xfB); + }; + return b2CircleContact; + })(b2Contact); + var b2PolygonContact = (function (_super) { + __extends(b2PolygonContact, _super); + function b2PolygonContact() { + return _super.call(this) || this; + } + b2PolygonContact.Create = function (allocator) { + return new b2PolygonContact(); + }; + b2PolygonContact.Destroy = function (contact, allocator) { }; + b2PolygonContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2PolygonContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + b2CollidePolygons(manifold, shapeA, xfA, shapeB, xfB); + }; + return b2PolygonContact; + })(b2Contact); + var b2PolygonAndCircleContact = (function (_super) { + __extends(b2PolygonAndCircleContact, _super); + function b2PolygonAndCircleContact() { + return _super.call(this) || this; + } + b2PolygonAndCircleContact.Create = function (allocator) { + return new b2PolygonAndCircleContact(); + }; + b2PolygonAndCircleContact.Destroy = function (contact, allocator) { }; + b2PolygonAndCircleContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2PolygonAndCircleContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + b2CollidePolygonAndCircle(manifold, shapeA, xfA, shapeB, xfB); + }; + return b2PolygonAndCircleContact; + })(b2Contact); + var b2EdgeAndCircleContact = (function (_super) { + __extends(b2EdgeAndCircleContact, _super); + function b2EdgeAndCircleContact() { + return _super.call(this) || this; + } + b2EdgeAndCircleContact.Create = function (allocator) { + return new b2EdgeAndCircleContact(); + }; + b2EdgeAndCircleContact.Destroy = function (contact, allocator) { }; + b2EdgeAndCircleContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2EdgeAndCircleContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + b2CollideEdgeAndCircle(manifold, shapeA, xfA, shapeB, xfB); + }; + return b2EdgeAndCircleContact; + })(b2Contact); + var b2EdgeAndPolygonContact = (function (_super) { + __extends(b2EdgeAndPolygonContact, _super); + function b2EdgeAndPolygonContact() { + return _super.call(this) || this; + } + b2EdgeAndPolygonContact.Create = function (allocator) { + return new b2EdgeAndPolygonContact(); + }; + b2EdgeAndPolygonContact.Destroy = function (contact, allocator) { }; + b2EdgeAndPolygonContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2EdgeAndPolygonContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + b2CollideEdgeAndPolygon(manifold, shapeA, xfA, shapeB, xfB); + }; + return b2EdgeAndPolygonContact; + })(b2Contact); + var b2ChainAndCircleContact = (function (_super) { + __extends(b2ChainAndCircleContact, _super); + function b2ChainAndCircleContact() { + return _super.call(this) || this; + } + b2ChainAndCircleContact.Create = function (allocator) { + return new b2ChainAndCircleContact(); + }; + b2ChainAndCircleContact.Destroy = function (contact, allocator) { }; + b2ChainAndCircleContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2ChainAndCircleContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + var chain = shapeA; + var edge = b2ChainAndCircleContact.Evaluate_s_edge; + chain.GetChildEdge(edge, this.m_indexA); + b2CollideEdgeAndCircle(manifold, edge, xfA, shapeB, xfB); + }; + b2ChainAndCircleContact.Evaluate_s_edge = new b2EdgeShape(); + return b2ChainAndCircleContact; + })(b2Contact); + var b2ChainAndPolygonContact = (function (_super) { + __extends(b2ChainAndPolygonContact, _super); + function b2ChainAndPolygonContact() { + return _super.call(this) || this; + } + b2ChainAndPolygonContact.Create = function (allocator) { + return new b2ChainAndPolygonContact(); + }; + b2ChainAndPolygonContact.Destroy = function (contact, allocator) { }; + b2ChainAndPolygonContact.prototype.Reset = function (fixtureA, indexA, fixtureB, indexB) { + _super.prototype.Reset.call(this, fixtureA, indexA, fixtureB, indexB); + }; + b2ChainAndPolygonContact.prototype.Evaluate = function (manifold, xfA, xfB) { + var shapeA = this.m_fixtureA.GetShape(); + var shapeB = this.m_fixtureB.GetShape(); + var chain = shapeA; + var edge = b2ChainAndPolygonContact.Evaluate_s_edge; + chain.GetChildEdge(edge, this.m_indexA); + b2CollideEdgeAndPolygon(manifold, edge, xfA, shapeB, xfB); + }; + b2ChainAndPolygonContact.Evaluate_s_edge = new b2EdgeShape(); + return b2ChainAndPolygonContact; + })(b2Contact); + var b2ContactRegister = (function () { + function b2ContactRegister() { + this.createFcn = null; + this.destroyFcn = null; + this.primary = false; + } + return b2ContactRegister; + })(); + var b2ContactFactory = (function () { + function b2ContactFactory(allocator) { + this.m_allocator = null; + this.m_allocator = allocator; + this.InitializeRegisters(); + } + b2ContactFactory.prototype.AddType = function (createFcn, destroyFcn, type1, type2) { + var _this = this; + var pool = b2MakeArray(256, (function (i) { + return createFcn(_this.m_allocator); + })); + function poolCreateFcn(allocator) { + return pool.pop() || createFcn(allocator); + } + function poolDestroyFcn(contact, allocator) { + pool.push(contact); + } + this.m_registers[type1][type2].createFcn = poolCreateFcn; + this.m_registers[type1][type2].destroyFcn = poolDestroyFcn; + this.m_registers[type1][type2].primary = true; + if (type1 !== type2) { + this.m_registers[type2][type1].createFcn = poolCreateFcn; + this.m_registers[type2][type1].destroyFcn = poolDestroyFcn; + this.m_registers[type2][type1].primary = false; + } + }; + b2ContactFactory.prototype.InitializeRegisters = function () { + this.m_registers = []; + for (var i = 0; i < exports.b2ShapeType.e_shapeTypeCount; i++) { + this.m_registers[i] = []; + for (var j = 0; j < exports.b2ShapeType.e_shapeTypeCount; j++) this.m_registers[i][j] = new b2ContactRegister(); + } + this.AddType(b2CircleContact.Create, b2CircleContact.Destroy, exports.b2ShapeType.e_circleShape, exports.b2ShapeType.e_circleShape); + this.AddType(b2PolygonAndCircleContact.Create, b2PolygonAndCircleContact.Destroy, exports.b2ShapeType.e_polygonShape, exports.b2ShapeType.e_circleShape); + this.AddType(b2PolygonContact.Create, b2PolygonContact.Destroy, exports.b2ShapeType.e_polygonShape, exports.b2ShapeType.e_polygonShape); + this.AddType(b2EdgeAndCircleContact.Create, b2EdgeAndCircleContact.Destroy, exports.b2ShapeType.e_edgeShape, exports.b2ShapeType.e_circleShape); + this.AddType(b2EdgeAndPolygonContact.Create, b2EdgeAndPolygonContact.Destroy, exports.b2ShapeType.e_edgeShape, exports.b2ShapeType.e_polygonShape); + this.AddType(b2ChainAndCircleContact.Create, b2ChainAndCircleContact.Destroy, exports.b2ShapeType.e_chainShape, exports.b2ShapeType.e_circleShape); + this.AddType(b2ChainAndPolygonContact.Create, b2ChainAndPolygonContact.Destroy, exports.b2ShapeType.e_chainShape, exports.b2ShapeType.e_polygonShape); + }; + b2ContactFactory.prototype.Create = function (fixtureA, indexA, fixtureB, indexB) { + var type1 = fixtureA.GetType(); + var type2 = fixtureB.GetType(); + var reg = this.m_registers[type1][type2]; + if (reg.createFcn) { + var c = reg.createFcn(this.m_allocator); + reg.primary ? c.Reset(fixtureA, indexA, fixtureB, indexB) : c.Reset(fixtureB, indexB, fixtureA, indexA); + return c; + } + return null; + }; + b2ContactFactory.prototype.Destroy = function (contact) { + var fixtureA = contact.m_fixtureA; + var fixtureB = contact.m_fixtureB; + if (contact.m_manifold.pointCount > 0 && !fixtureA.IsSensor() && !fixtureB.IsSensor()) { + fixtureA.GetBody().SetAwake(true); + fixtureB.GetBody().SetAwake(true); + } + var typeA = fixtureA.GetType(); + var typeB = fixtureB.GetType(); + var reg = this.m_registers[typeA][typeB]; + reg.destroyFcn && reg.destroyFcn(contact, this.m_allocator); + }; + return b2ContactFactory; + })(); + var b2DestructionListener = (function () { + function b2DestructionListener() { } + b2DestructionListener.prototype.SayGoodbyeJoint = function (joint) { }; + b2DestructionListener.prototype.SayGoodbyeFixture = function (fixture) { }; + b2DestructionListener.prototype.SayGoodbyeParticleGroup = function (group) { }; + b2DestructionListener.prototype.SayGoodbyeParticle = function (system, index) { }; + return b2DestructionListener; + })(); + var b2ContactFilter = (function () { + function b2ContactFilter() { } + b2ContactFilter.prototype.ShouldCollide = function (fixtureA, fixtureB) { + var bodyA = fixtureA.GetBody(); + var bodyB = fixtureB.GetBody(); + if (bodyB.GetType() === exports.b2BodyType.b2_staticBody && bodyA.GetType() === exports.b2BodyType.b2_staticBody) return false; + if (!bodyB.ShouldCollideConnected(bodyA)) return false; + var filter1 = fixtureA.GetFilterData(); + var filter2 = fixtureB.GetFilterData(); + if (filter1.groupIndex === filter2.groupIndex && 0 !== filter1.groupIndex) return filter1.groupIndex > 0; + var collide = 0 !== (filter1.maskBits & filter2.categoryBits) && 0 !== (filter1.categoryBits & filter2.maskBits); + return collide; + }; + b2ContactFilter.prototype.ShouldCollideFixtureParticle = function (fixture, system, index) { + return true; + }; + b2ContactFilter.prototype.ShouldCollideParticleParticle = function (system, indexA, indexB) { + return true; + }; + b2ContactFilter.b2_defaultFilter = new b2ContactFilter(); + return b2ContactFilter; + })(); + var b2ContactImpulse = (function () { + function b2ContactImpulse() { + this.normalImpulses = b2MakeNumberArray(b2_maxManifoldPoints); + this.tangentImpulses = b2MakeNumberArray(b2_maxManifoldPoints); + this.count = 0; + } + return b2ContactImpulse; + })(); + var b2ContactListener = (function () { + function b2ContactListener() { } + b2ContactListener.prototype.BeginContact = function (contact) { }; + b2ContactListener.prototype.EndContact = function (contact) { }; + b2ContactListener.prototype.BeginContactFixtureParticle = function (system, contact) { }; + b2ContactListener.prototype.EndContactFixtureParticle = function (system, contact) { }; + b2ContactListener.prototype.BeginContactParticleParticle = function (system, contact) { }; + b2ContactListener.prototype.EndContactParticleParticle = function (system, contact) { }; + b2ContactListener.prototype.PreSolve = function (contact, oldManifold) { }; + b2ContactListener.prototype.PostSolve = function (contact, impulse) { }; + b2ContactListener.b2_defaultListener = new b2ContactListener(); + return b2ContactListener; + })(); + var b2QueryCallback = (function () { + function b2QueryCallback() { } + b2QueryCallback.prototype.ReportFixture = function (fixture) { + return true; + }; + b2QueryCallback.prototype.ReportParticle = function (system, index) { + return false; + }; + b2QueryCallback.prototype.ShouldQueryParticleSystem = function (system) { + return true; + }; + return b2QueryCallback; + })(); + var b2RayCastCallback = (function () { + function b2RayCastCallback() { } + b2RayCastCallback.prototype.ReportFixture = function (fixture, point, normal, fraction) { + return fraction; + }; + b2RayCastCallback.prototype.ReportParticle = function (system, index, point, normal, fraction) { + return 0; + }; + b2RayCastCallback.prototype.ShouldQueryParticleSystem = function (system) { + return true; + }; + return b2RayCastCallback; + })(); + var b2ContactManager = (function () { + function b2ContactManager() { + this.m_broadPhase = new b2BroadPhase(); + this.m_contactList = null; + this.m_contactCount = 0; + this.m_contactFilter = b2ContactFilter.b2_defaultFilter; + this.m_contactListener = b2ContactListener.b2_defaultListener; + this.m_allocator = null; + this.m_contactFactory = new b2ContactFactory(this.m_allocator); + } + b2ContactManager.prototype.AddPair = function (proxyA, proxyB) { + var fixtureA = proxyA.fixture; + var fixtureB = proxyB.fixture; + var indexA = proxyA.childIndex; + var indexB = proxyB.childIndex; + var bodyA = fixtureA.GetBody(); + var bodyB = fixtureB.GetBody(); + if (bodyA === bodyB) return; + var edge = bodyB.GetContactList(); + while (edge) { + if (edge.other === bodyA) { + var fA = edge.contact.GetFixtureA(); + var fB = edge.contact.GetFixtureB(); + var iA = edge.contact.GetChildIndexA(); + var iB = edge.contact.GetChildIndexB(); + if (fA === fixtureA && fB === fixtureB && iA === indexA && iB === indexB) return; + if (fA === fixtureB && fB === fixtureA && iA === indexB && iB === indexA) return; + } + edge = edge.next; + } + if (this.m_contactFilter && !this.m_contactFilter.ShouldCollide(fixtureA, fixtureB)) return; + var c = this.m_contactFactory.Create(fixtureA, indexA, fixtureB, indexB); + if (null === c) return; + fixtureA = c.GetFixtureA(); + fixtureB = c.GetFixtureB(); + indexA = c.GetChildIndexA(); + indexB = c.GetChildIndexB(); + bodyA = fixtureA.m_body; + bodyB = fixtureB.m_body; + c.m_prev = null; + c.m_next = this.m_contactList; + null !== this.m_contactList && (this.m_contactList.m_prev = c); + this.m_contactList = c; + c.m_nodeA.contact = c; + c.m_nodeA.other = bodyB; + c.m_nodeA.prev = null; + c.m_nodeA.next = bodyA.m_contactList; + null !== bodyA.m_contactList && (bodyA.m_contactList.prev = c.m_nodeA); + bodyA.m_contactList = c.m_nodeA; + c.m_nodeB.contact = c; + c.m_nodeB.other = bodyA; + c.m_nodeB.prev = null; + c.m_nodeB.next = bodyB.m_contactList; + null !== bodyB.m_contactList && (bodyB.m_contactList.prev = c.m_nodeB); + bodyB.m_contactList = c.m_nodeB; + if (!fixtureA.IsSensor() && !fixtureB.IsSensor()) { + bodyA.SetAwake(true); + bodyB.SetAwake(true); + } + ++this.m_contactCount; + }; + b2ContactManager.prototype.FindNewContacts = function () { + var _this = this; + this.m_broadPhase.UpdatePairs((function (proxyA, proxyB) { + _this.AddPair(proxyA, proxyB); + })); + }; + b2ContactManager.prototype.Destroy = function (c) { + var fixtureA = c.GetFixtureA(); + var fixtureB = c.GetFixtureB(); + var bodyA = fixtureA.GetBody(); + var bodyB = fixtureB.GetBody(); + this.m_contactListener && c.IsTouching() && this.m_contactListener.EndContact(c); + c.m_prev && (c.m_prev.m_next = c.m_next); + c.m_next && (c.m_next.m_prev = c.m_prev); + c === this.m_contactList && (this.m_contactList = c.m_next); + c.m_nodeA.prev && (c.m_nodeA.prev.next = c.m_nodeA.next); + c.m_nodeA.next && (c.m_nodeA.next.prev = c.m_nodeA.prev); + c.m_nodeA === bodyA.m_contactList && (bodyA.m_contactList = c.m_nodeA.next); + c.m_nodeB.prev && (c.m_nodeB.prev.next = c.m_nodeB.next); + c.m_nodeB.next && (c.m_nodeB.next.prev = c.m_nodeB.prev); + c.m_nodeB === bodyB.m_contactList && (bodyB.m_contactList = c.m_nodeB.next); + this.m_contactFactory.Destroy(c); + --this.m_contactCount; + }; + b2ContactManager.prototype.Collide = function () { + var c = this.m_contactList; + while (c) { + var fixtureA = c.GetFixtureA(); + var fixtureB = c.GetFixtureB(); + var indexA = c.GetChildIndexA(); + var indexB = c.GetChildIndexB(); + var bodyA = fixtureA.GetBody(); + var bodyB = fixtureB.GetBody(); + if (c.m_filterFlag) { + if (this.m_contactFilter && !this.m_contactFilter.ShouldCollide(fixtureA, fixtureB)) { + var cNuke = c; + c = cNuke.m_next; + this.Destroy(cNuke); + continue; + } + c.m_filterFlag = false; + } + var activeA = bodyA.IsAwake() && bodyA.m_type !== exports.b2BodyType.b2_staticBody; + var activeB = bodyB.IsAwake() && bodyB.m_type !== exports.b2BodyType.b2_staticBody; + if (!activeA && !activeB) { + c = c.m_next; + continue; + } + var proxyA = fixtureA.m_proxies[indexA].treeNode; + var proxyB = fixtureB.m_proxies[indexB].treeNode; + var overlap = b2TestOverlapAABB(proxyA.aabb, proxyB.aabb); + if (!overlap) { + var cNuke = c; + c = cNuke.m_next; + this.Destroy(cNuke); + continue; + } + c.Update(this.m_contactListener); + c = c.m_next; + } + }; + return b2ContactManager; + })(); + var b2Profile = (function () { + function b2Profile() { + this.step = 0; + this.collide = 0; + this.solve = 0; + this.solveInit = 0; + this.solveVelocity = 0; + this.solvePosition = 0; + this.broadphase = 0; + this.solveTOI = 0; + } + b2Profile.prototype.Reset = function () { + this.step = 0; + this.collide = 0; + this.solve = 0; + this.solveInit = 0; + this.solveVelocity = 0; + this.solvePosition = 0; + this.broadphase = 0; + this.solveTOI = 0; + return this; + }; + return b2Profile; + })(); + var b2TimeStep = (function () { + function b2TimeStep() { + this.dt = 0; + this.inv_dt = 0; + this.dtRatio = 0; + this.velocityIterations = 0; + this.positionIterations = 0; + this.particleIterations = 0; + this.warmStarting = false; + } + b2TimeStep.prototype.Copy = function (step) { + this.dt = step.dt; + this.inv_dt = step.inv_dt; + this.dtRatio = step.dtRatio; + this.positionIterations = step.positionIterations; + this.velocityIterations = step.velocityIterations; + this.particleIterations = step.particleIterations; + this.warmStarting = step.warmStarting; + return this; + }; + return b2TimeStep; + })(); + var b2Position = (function () { + function b2Position() { + this.c = new b2Vec2(); + this.a = 0; + } + b2Position.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2Position(); + })); + }; + return b2Position; + })(); + var b2Velocity = (function () { + function b2Velocity() { + this.v = new b2Vec2(); + this.w = 0; + } + b2Velocity.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2Velocity(); + })); + }; + return b2Velocity; + })(); + var b2SolverData = (function () { + function b2SolverData() { + this.step = new b2TimeStep(); + } + return b2SolverData; + })(); + var g_blockSolve = false; + var b2VelocityConstraintPoint = (function () { + function b2VelocityConstraintPoint() { + this.rA = new b2Vec2(); + this.rB = new b2Vec2(); + this.normalImpulse = 0; + this.tangentImpulse = 0; + this.normalMass = 0; + this.tangentMass = 0; + this.velocityBias = 0; + } + b2VelocityConstraintPoint.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2VelocityConstraintPoint(); + })); + }; + return b2VelocityConstraintPoint; + })(); + var b2ContactVelocityConstraint = (function () { + function b2ContactVelocityConstraint() { + this.points = b2VelocityConstraintPoint.MakeArray(b2_maxManifoldPoints); + this.normal = new b2Vec2(); + this.tangent = new b2Vec2(); + this.normalMass = new b2Mat22(); + this.K = new b2Mat22(); + this.indexA = 0; + this.indexB = 0; + this.invMassA = 0; + this.invMassB = 0; + this.invIA = 0; + this.invIB = 0; + this.friction = 0; + this.restitution = 0; + this.tangentSpeed = 0; + this.pointCount = 0; + this.contactIndex = 0; + } + b2ContactVelocityConstraint.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2ContactVelocityConstraint(); + })); + }; + return b2ContactVelocityConstraint; + })(); + var b2ContactPositionConstraint = (function () { + function b2ContactPositionConstraint() { + this.localPoints = b2Vec2.MakeArray(b2_maxManifoldPoints); + this.localNormal = new b2Vec2(); + this.localPoint = new b2Vec2(); + this.indexA = 0; + this.indexB = 0; + this.invMassA = 0; + this.invMassB = 0; + this.localCenterA = new b2Vec2(); + this.localCenterB = new b2Vec2(); + this.invIA = 0; + this.invIB = 0; + this.type = exports.b2ManifoldType.e_unknown; + this.radiusA = 0; + this.radiusB = 0; + this.pointCount = 0; + } + b2ContactPositionConstraint.MakeArray = function (length) { + return b2MakeArray(length, (function (i) { + return new b2ContactPositionConstraint(); + })); + }; + return b2ContactPositionConstraint; + })(); + var b2ContactSolverDef = (function () { + function b2ContactSolverDef() { + this.step = new b2TimeStep(); + this.count = 0; + this.allocator = null; + } + return b2ContactSolverDef; + })(); + var b2PositionSolverManifold = (function () { + function b2PositionSolverManifold() { + this.normal = new b2Vec2(); + this.point = new b2Vec2(); + this.separation = 0; + } + b2PositionSolverManifold.prototype.Initialize = function (pc, xfA, xfB, index) { + var pointA = b2PositionSolverManifold.Initialize_s_pointA; + var pointB = b2PositionSolverManifold.Initialize_s_pointB; + var planePoint = b2PositionSolverManifold.Initialize_s_planePoint; + var clipPoint = b2PositionSolverManifold.Initialize_s_clipPoint; + switch (pc.type) { + case exports.b2ManifoldType.e_circles: + b2Transform.MulXV(xfA, pc.localPoint, pointA); + b2Transform.MulXV(xfB, pc.localPoints[0], pointB); + b2Vec2.SubVV(pointB, pointA, this.normal).SelfNormalize(); + b2Vec2.MidVV(pointA, pointB, this.point); + this.separation = b2Vec2.DotVV(b2Vec2.SubVV(pointB, pointA, b2Vec2.s_t0), this.normal) - pc.radiusA - pc.radiusB; + break; + + case exports.b2ManifoldType.e_faceA: + b2Rot.MulRV(xfA.q, pc.localNormal, this.normal); + b2Transform.MulXV(xfA, pc.localPoint, planePoint); + b2Transform.MulXV(xfB, pc.localPoints[index], clipPoint); + this.separation = b2Vec2.DotVV(b2Vec2.SubVV(clipPoint, planePoint, b2Vec2.s_t0), this.normal) - pc.radiusA - pc.radiusB; + this.point.Copy(clipPoint); + break; + + case exports.b2ManifoldType.e_faceB: + b2Rot.MulRV(xfB.q, pc.localNormal, this.normal); + b2Transform.MulXV(xfB, pc.localPoint, planePoint); + b2Transform.MulXV(xfA, pc.localPoints[index], clipPoint); + this.separation = b2Vec2.DotVV(b2Vec2.SubVV(clipPoint, planePoint, b2Vec2.s_t0), this.normal) - pc.radiusA - pc.radiusB; + this.point.Copy(clipPoint); + this.normal.SelfNeg(); + } + }; + b2PositionSolverManifold.Initialize_s_pointA = new b2Vec2(); + b2PositionSolverManifold.Initialize_s_pointB = new b2Vec2(); + b2PositionSolverManifold.Initialize_s_planePoint = new b2Vec2(); + b2PositionSolverManifold.Initialize_s_clipPoint = new b2Vec2(); + return b2PositionSolverManifold; + })(); + var b2ContactSolver = (function () { + function b2ContactSolver() { + this.m_step = new b2TimeStep(); + this.m_allocator = null; + this.m_positionConstraints = b2ContactPositionConstraint.MakeArray(1024); + this.m_velocityConstraints = b2ContactVelocityConstraint.MakeArray(1024); + this.m_count = 0; + } + b2ContactSolver.prototype.Initialize = function (def) { + this.m_step.Copy(def.step); + this.m_allocator = def.allocator; + this.m_count = def.count; + if (this.m_positionConstraints.length < this.m_count) { + var new_length = b2Max(2 * this.m_positionConstraints.length, this.m_count); + while (this.m_positionConstraints.length < new_length) this.m_positionConstraints[this.m_positionConstraints.length] = new b2ContactPositionConstraint(); + } + if (this.m_velocityConstraints.length < this.m_count) { + var new_length = b2Max(2 * this.m_velocityConstraints.length, this.m_count); + while (this.m_velocityConstraints.length < new_length) this.m_velocityConstraints[this.m_velocityConstraints.length] = new b2ContactVelocityConstraint(); + } + this.m_positions = def.positions; + this.m_velocities = def.velocities; + this.m_contacts = def.contacts; + for (var i = 0; i < this.m_count; ++i) { + var contact = this.m_contacts[i]; + var fixtureA = contact.m_fixtureA; + var fixtureB = contact.m_fixtureB; + var shapeA = fixtureA.GetShape(); + var shapeB = fixtureB.GetShape(); + var radiusA = shapeA.m_radius; + var radiusB = shapeB.m_radius; + var bodyA = fixtureA.GetBody(); + var bodyB = fixtureB.GetBody(); + var manifold = contact.GetManifold(); + var pointCount = manifold.pointCount; + var vc = this.m_velocityConstraints[i]; + vc.friction = contact.m_friction; + vc.restitution = contact.m_restitution; + vc.tangentSpeed = contact.m_tangentSpeed; + vc.indexA = bodyA.m_islandIndex; + vc.indexB = bodyB.m_islandIndex; + vc.invMassA = bodyA.m_invMass; + vc.invMassB = bodyB.m_invMass; + vc.invIA = bodyA.m_invI; + vc.invIB = bodyB.m_invI; + vc.contactIndex = i; + vc.pointCount = pointCount; + vc.K.SetZero(); + vc.normalMass.SetZero(); + var pc = this.m_positionConstraints[i]; + pc.indexA = bodyA.m_islandIndex; + pc.indexB = bodyB.m_islandIndex; + pc.invMassA = bodyA.m_invMass; + pc.invMassB = bodyB.m_invMass; + pc.localCenterA.Copy(bodyA.m_sweep.localCenter); + pc.localCenterB.Copy(bodyB.m_sweep.localCenter); + pc.invIA = bodyA.m_invI; + pc.invIB = bodyB.m_invI; + pc.localNormal.Copy(manifold.localNormal); + pc.localPoint.Copy(manifold.localPoint); + pc.pointCount = pointCount; + pc.radiusA = radiusA; + pc.radiusB = radiusB; + pc.type = manifold.type; + for (var j = 0; j < pointCount; ++j) { + var cp = manifold.points[j]; + var vcp = vc.points[j]; + if (this.m_step.warmStarting) { + vcp.normalImpulse = this.m_step.dtRatio * cp.normalImpulse; + vcp.tangentImpulse = this.m_step.dtRatio * cp.tangentImpulse; + } else { + vcp.normalImpulse = 0; + vcp.tangentImpulse = 0; + } + vcp.rA.SetZero(); + vcp.rB.SetZero(); + vcp.normalMass = 0; + vcp.tangentMass = 0; + vcp.velocityBias = 0; + pc.localPoints[j].Copy(cp.localPoint); + } + } + return this; + }; + b2ContactSolver.prototype.InitializeVelocityConstraints = function () { + var xfA = b2ContactSolver.InitializeVelocityConstraints_s_xfA; + var xfB = b2ContactSolver.InitializeVelocityConstraints_s_xfB; + var worldManifold = b2ContactSolver.InitializeVelocityConstraints_s_worldManifold; + var k_maxConditionNumber = 1e3; + for (var i = 0; i < this.m_count; ++i) { + var vc = this.m_velocityConstraints[i]; + var pc = this.m_positionConstraints[i]; + var radiusA = pc.radiusA; + var radiusB = pc.radiusB; + var manifold = this.m_contacts[vc.contactIndex].GetManifold(); + var indexA = vc.indexA; + var indexB = vc.indexB; + var mA = vc.invMassA; + var mB = vc.invMassB; + var iA = vc.invIA; + var iB = vc.invIB; + var localCenterA = pc.localCenterA; + var localCenterB = pc.localCenterB; + var cA = this.m_positions[indexA].c; + var aA = this.m_positions[indexA].a; + var vA = this.m_velocities[indexA].v; + var wA = this.m_velocities[indexA].w; + var cB = this.m_positions[indexB].c; + var aB = this.m_positions[indexB].a; + var vB = this.m_velocities[indexB].v; + var wB = this.m_velocities[indexB].w; + xfA.q.SetAngle(aA); + xfB.q.SetAngle(aB); + b2Vec2.SubVV(cA, b2Rot.MulRV(xfA.q, localCenterA, b2Vec2.s_t0), xfA.p); + b2Vec2.SubVV(cB, b2Rot.MulRV(xfB.q, localCenterB, b2Vec2.s_t0), xfB.p); + worldManifold.Initialize(manifold, xfA, radiusA, xfB, radiusB); + vc.normal.Copy(worldManifold.normal); + b2Vec2.CrossVOne(vc.normal, vc.tangent); + var pointCount = vc.pointCount; + for (var j = 0; j < pointCount; ++j) { + var vcp = vc.points[j]; + b2Vec2.SubVV(worldManifold.points[j], cA, vcp.rA); + b2Vec2.SubVV(worldManifold.points[j], cB, vcp.rB); + var rnA = b2Vec2.CrossVV(vcp.rA, vc.normal); + var rnB = b2Vec2.CrossVV(vcp.rB, vc.normal); + var kNormal = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + vcp.normalMass = kNormal > 0 ? 1 / kNormal : 0; + var tangent = vc.tangent; + var rtA = b2Vec2.CrossVV(vcp.rA, tangent); + var rtB = b2Vec2.CrossVV(vcp.rB, tangent); + var kTangent = mA + mB + iA * rtA * rtA + iB * rtB * rtB; + vcp.tangentMass = kTangent > 0 ? 1 / kTangent : 0; + vcp.velocityBias = 0; + var vRel = b2Vec2.DotVV(vc.normal, b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, vcp.rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, vcp.rA, b2Vec2.s_t1), b2Vec2.s_t0)); + vRel < -b2_velocityThreshold && (vcp.velocityBias += -vc.restitution * vRel); + } + if (2 === vc.pointCount && g_blockSolve) { + var vcp1 = vc.points[0]; + var vcp2 = vc.points[1]; + var rn1A = b2Vec2.CrossVV(vcp1.rA, vc.normal); + var rn1B = b2Vec2.CrossVV(vcp1.rB, vc.normal); + var rn2A = b2Vec2.CrossVV(vcp2.rA, vc.normal); + var rn2B = b2Vec2.CrossVV(vcp2.rB, vc.normal); + var k11 = mA + mB + iA * rn1A * rn1A + iB * rn1B * rn1B; + var k22 = mA + mB + iA * rn2A * rn2A + iB * rn2B * rn2B; + var k12 = mA + mB + iA * rn1A * rn2A + iB * rn1B * rn2B; + if (k11 * k11 < k_maxConditionNumber * (k11 * k22 - k12 * k12)) { + vc.K.ex.Set(k11, k12); + vc.K.ey.Set(k12, k22); + vc.K.GetInverse(vc.normalMass); + } else vc.pointCount = 1; + } + } + }; + b2ContactSolver.prototype.WarmStart = function () { + var P = b2ContactSolver.WarmStart_s_P; + for (var i = 0; i < this.m_count; ++i) { + var vc = this.m_velocityConstraints[i]; + var indexA = vc.indexA; + var indexB = vc.indexB; + var mA = vc.invMassA; + var iA = vc.invIA; + var mB = vc.invMassB; + var iB = vc.invIB; + var pointCount = vc.pointCount; + var vA = this.m_velocities[indexA].v; + var wA = this.m_velocities[indexA].w; + var vB = this.m_velocities[indexB].v; + var wB = this.m_velocities[indexB].w; + var normal = vc.normal; + var tangent = vc.tangent; + for (var j = 0; j < pointCount; ++j) { + var vcp = vc.points[j]; + b2Vec2.AddVV(b2Vec2.MulSV(vcp.normalImpulse, normal, b2Vec2.s_t0), b2Vec2.MulSV(vcp.tangentImpulse, tangent, b2Vec2.s_t1), P); + wA -= iA * b2Vec2.CrossVV(vcp.rA, P); + vA.SelfMulSub(mA, P); + wB += iB * b2Vec2.CrossVV(vcp.rB, P); + vB.SelfMulAdd(mB, P); + } + this.m_velocities[indexA].w = wA; + this.m_velocities[indexB].w = wB; + } + }; + b2ContactSolver.prototype.SolveVelocityConstraints = function () { + var dv = b2ContactSolver.SolveVelocityConstraints_s_dv; + var dv1 = b2ContactSolver.SolveVelocityConstraints_s_dv1; + var dv2 = b2ContactSolver.SolveVelocityConstraints_s_dv2; + var P = b2ContactSolver.SolveVelocityConstraints_s_P; + var a = b2ContactSolver.SolveVelocityConstraints_s_a; + var b = b2ContactSolver.SolveVelocityConstraints_s_b; + var x = b2ContactSolver.SolveVelocityConstraints_s_x; + var d = b2ContactSolver.SolveVelocityConstraints_s_d; + var P1 = b2ContactSolver.SolveVelocityConstraints_s_P1; + var P2 = b2ContactSolver.SolveVelocityConstraints_s_P2; + var P1P2 = b2ContactSolver.SolveVelocityConstraints_s_P1P2; + for (var i = 0; i < this.m_count; ++i) { + var vc = this.m_velocityConstraints[i]; + var indexA = vc.indexA; + var indexB = vc.indexB; + var mA = vc.invMassA; + var iA = vc.invIA; + var mB = vc.invMassB; + var iB = vc.invIB; + var pointCount = vc.pointCount; + var vA = this.m_velocities[indexA].v; + var wA = this.m_velocities[indexA].w; + var vB = this.m_velocities[indexB].v; + var wB = this.m_velocities[indexB].w; + var normal = vc.normal; + var tangent = vc.tangent; + var friction = vc.friction; + for (var j = 0; j < pointCount; ++j) { + var vcp = vc.points[j]; + b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, vcp.rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, vcp.rA, b2Vec2.s_t1), dv); + var vt = b2Vec2.DotVV(dv, tangent) - vc.tangentSpeed; + var lambda = vcp.tangentMass * -vt; + var maxFriction = friction * vcp.normalImpulse; + var newImpulse = b2Clamp(vcp.tangentImpulse + lambda, -maxFriction, maxFriction); + lambda = newImpulse - vcp.tangentImpulse; + vcp.tangentImpulse = newImpulse; + b2Vec2.MulSV(lambda, tangent, P); + vA.SelfMulSub(mA, P); + wA -= iA * b2Vec2.CrossVV(vcp.rA, P); + vB.SelfMulAdd(mB, P); + wB += iB * b2Vec2.CrossVV(vcp.rB, P); + } + if (1 === vc.pointCount || false === g_blockSolve) for (var j = 0; j < pointCount; ++j) { + var vcp = vc.points[j]; + b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, vcp.rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, vcp.rA, b2Vec2.s_t1), dv); + var vn = b2Vec2.DotVV(dv, normal); + var lambda = -vcp.normalMass * (vn - vcp.velocityBias); + var newImpulse = b2Max(vcp.normalImpulse + lambda, 0); + lambda = newImpulse - vcp.normalImpulse; + vcp.normalImpulse = newImpulse; + b2Vec2.MulSV(lambda, normal, P); + vA.SelfMulSub(mA, P); + wA -= iA * b2Vec2.CrossVV(vcp.rA, P); + vB.SelfMulAdd(mB, P); + wB += iB * b2Vec2.CrossVV(vcp.rB, P); + } else { + var cp1 = vc.points[0]; + var cp2 = vc.points[1]; + a.Set(cp1.normalImpulse, cp2.normalImpulse); + b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, cp1.rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, cp1.rA, b2Vec2.s_t1), dv1); + b2Vec2.SubVV(b2Vec2.AddVCrossSV(vB, wB, cp2.rB, b2Vec2.s_t0), b2Vec2.AddVCrossSV(vA, wA, cp2.rA, b2Vec2.s_t1), dv2); + var vn1 = b2Vec2.DotVV(dv1, normal); + var vn2 = b2Vec2.DotVV(dv2, normal); + b.x = vn1 - cp1.velocityBias; + b.y = vn2 - cp2.velocityBias; + b.SelfSub(b2Mat22.MulMV(vc.K, a, b2Vec2.s_t0)); + for (; ;) { + b2Mat22.MulMV(vc.normalMass, b, x).SelfNeg(); + if (x.x >= 0 && x.y >= 0) { + b2Vec2.SubVV(x, a, d); + b2Vec2.MulSV(d.x, normal, P1); + b2Vec2.MulSV(d.y, normal, P2); + b2Vec2.AddVV(P1, P2, P1P2); + vA.SelfMulSub(mA, P1P2); + wA -= iA * (b2Vec2.CrossVV(cp1.rA, P1) + b2Vec2.CrossVV(cp2.rA, P2)); + vB.SelfMulAdd(mB, P1P2); + wB += iB * (b2Vec2.CrossVV(cp1.rB, P1) + b2Vec2.CrossVV(cp2.rB, P2)); + cp1.normalImpulse = x.x; + cp2.normalImpulse = x.y; + break; + } + x.x = -cp1.normalMass * b.x; + x.y = 0; + vn1 = 0; + vn2 = vc.K.ex.y * x.x + b.y; + if (x.x >= 0 && vn2 >= 0) { + b2Vec2.SubVV(x, a, d); + b2Vec2.MulSV(d.x, normal, P1); + b2Vec2.MulSV(d.y, normal, P2); + b2Vec2.AddVV(P1, P2, P1P2); + vA.SelfMulSub(mA, P1P2); + wA -= iA * (b2Vec2.CrossVV(cp1.rA, P1) + b2Vec2.CrossVV(cp2.rA, P2)); + vB.SelfMulAdd(mB, P1P2); + wB += iB * (b2Vec2.CrossVV(cp1.rB, P1) + b2Vec2.CrossVV(cp2.rB, P2)); + cp1.normalImpulse = x.x; + cp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = -cp2.normalMass * b.y; + vn1 = vc.K.ey.x * x.y + b.x; + vn2 = 0; + if (x.y >= 0 && vn1 >= 0) { + b2Vec2.SubVV(x, a, d); + b2Vec2.MulSV(d.x, normal, P1); + b2Vec2.MulSV(d.y, normal, P2); + b2Vec2.AddVV(P1, P2, P1P2); + vA.SelfMulSub(mA, P1P2); + wA -= iA * (b2Vec2.CrossVV(cp1.rA, P1) + b2Vec2.CrossVV(cp2.rA, P2)); + vB.SelfMulAdd(mB, P1P2); + wB += iB * (b2Vec2.CrossVV(cp1.rB, P1) + b2Vec2.CrossVV(cp2.rB, P2)); + cp1.normalImpulse = x.x; + cp2.normalImpulse = x.y; + break; + } + x.x = 0; + x.y = 0; + vn1 = b.x; + vn2 = b.y; + if (vn1 >= 0 && vn2 >= 0) { + b2Vec2.SubVV(x, a, d); + b2Vec2.MulSV(d.x, normal, P1); + b2Vec2.MulSV(d.y, normal, P2); + b2Vec2.AddVV(P1, P2, P1P2); + vA.SelfMulSub(mA, P1P2); + wA -= iA * (b2Vec2.CrossVV(cp1.rA, P1) + b2Vec2.CrossVV(cp2.rA, P2)); + vB.SelfMulAdd(mB, P1P2); + wB += iB * (b2Vec2.CrossVV(cp1.rB, P1) + b2Vec2.CrossVV(cp2.rB, P2)); + cp1.normalImpulse = x.x; + cp2.normalImpulse = x.y; + break; + } + break; + } + } + this.m_velocities[indexA].w = wA; + this.m_velocities[indexB].w = wB; + } + }; + b2ContactSolver.prototype.StoreImpulses = function () { + for (var i = 0; i < this.m_count; ++i) { + var vc = this.m_velocityConstraints[i]; + var manifold = this.m_contacts[vc.contactIndex].GetManifold(); + for (var j = 0; j < vc.pointCount; ++j) { + manifold.points[j].normalImpulse = vc.points[j].normalImpulse; + manifold.points[j].tangentImpulse = vc.points[j].tangentImpulse; + } + } + }; + b2ContactSolver.prototype.SolvePositionConstraints = function () { + var xfA = b2ContactSolver.SolvePositionConstraints_s_xfA; + var xfB = b2ContactSolver.SolvePositionConstraints_s_xfB; + var psm = b2ContactSolver.SolvePositionConstraints_s_psm; + var rA = b2ContactSolver.SolvePositionConstraints_s_rA; + var rB = b2ContactSolver.SolvePositionConstraints_s_rB; + var P = b2ContactSolver.SolvePositionConstraints_s_P; + var minSeparation = 0; + for (var i = 0; i < this.m_count; ++i) { + var pc = this.m_positionConstraints[i]; + var indexA = pc.indexA; + var indexB = pc.indexB; + var localCenterA = pc.localCenterA; + var mA = pc.invMassA; + var iA = pc.invIA; + var localCenterB = pc.localCenterB; + var mB = pc.invMassB; + var iB = pc.invIB; + var pointCount = pc.pointCount; + var cA = this.m_positions[indexA].c; + var aA = this.m_positions[indexA].a; + var cB = this.m_positions[indexB].c; + var aB = this.m_positions[indexB].a; + for (var j = 0; j < pointCount; ++j) { + xfA.q.SetAngle(aA); + xfB.q.SetAngle(aB); + b2Vec2.SubVV(cA, b2Rot.MulRV(xfA.q, localCenterA, b2Vec2.s_t0), xfA.p); + b2Vec2.SubVV(cB, b2Rot.MulRV(xfB.q, localCenterB, b2Vec2.s_t0), xfB.p); + psm.Initialize(pc, xfA, xfB, j); + var normal = psm.normal; + var point = psm.point; + var separation = psm.separation; + b2Vec2.SubVV(point, cA, rA); + b2Vec2.SubVV(point, cB, rB); + minSeparation = b2Min(minSeparation, separation); + var C = b2Clamp(b2_baumgarte * (separation + b2_linearSlop), -b2_maxLinearCorrection, 0); + var rnA = b2Vec2.CrossVV(rA, normal); + var rnB = b2Vec2.CrossVV(rB, normal); + var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + var impulse = K > 0 ? -C / K : 0; + b2Vec2.MulSV(impulse, normal, P); + cA.SelfMulSub(mA, P); + aA -= iA * b2Vec2.CrossVV(rA, P); + cB.SelfMulAdd(mB, P); + aB += iB * b2Vec2.CrossVV(rB, P); + } + this.m_positions[indexA].a = aA; + this.m_positions[indexB].a = aB; + } + return minSeparation > -3 * b2_linearSlop; + }; + b2ContactSolver.prototype.SolveTOIPositionConstraints = function (toiIndexA, toiIndexB) { + var xfA = b2ContactSolver.SolveTOIPositionConstraints_s_xfA; + var xfB = b2ContactSolver.SolveTOIPositionConstraints_s_xfB; + var psm = b2ContactSolver.SolveTOIPositionConstraints_s_psm; + var rA = b2ContactSolver.SolveTOIPositionConstraints_s_rA; + var rB = b2ContactSolver.SolveTOIPositionConstraints_s_rB; + var P = b2ContactSolver.SolveTOIPositionConstraints_s_P; + var minSeparation = 0; + for (var i = 0; i < this.m_count; ++i) { + var pc = this.m_positionConstraints[i]; + var indexA = pc.indexA; + var indexB = pc.indexB; + var localCenterA = pc.localCenterA; + var localCenterB = pc.localCenterB; + var pointCount = pc.pointCount; + var mA = 0; + var iA = 0; + if (indexA === toiIndexA || indexA === toiIndexB) { + mA = pc.invMassA; + iA = pc.invIA; + } + var mB = 0; + var iB = 0; + if (indexB === toiIndexA || indexB === toiIndexB) { + mB = pc.invMassB; + iB = pc.invIB; + } + var cA = this.m_positions[indexA].c; + var aA = this.m_positions[indexA].a; + var cB = this.m_positions[indexB].c; + var aB = this.m_positions[indexB].a; + for (var j = 0; j < pointCount; ++j) { + xfA.q.SetAngle(aA); + xfB.q.SetAngle(aB); + b2Vec2.SubVV(cA, b2Rot.MulRV(xfA.q, localCenterA, b2Vec2.s_t0), xfA.p); + b2Vec2.SubVV(cB, b2Rot.MulRV(xfB.q, localCenterB, b2Vec2.s_t0), xfB.p); + psm.Initialize(pc, xfA, xfB, j); + var normal = psm.normal; + var point = psm.point; + var separation = psm.separation; + b2Vec2.SubVV(point, cA, rA); + b2Vec2.SubVV(point, cB, rB); + minSeparation = b2Min(minSeparation, separation); + var C = b2Clamp(b2_toiBaumgarte * (separation + b2_linearSlop), -b2_maxLinearCorrection, 0); + var rnA = b2Vec2.CrossVV(rA, normal); + var rnB = b2Vec2.CrossVV(rB, normal); + var K = mA + mB + iA * rnA * rnA + iB * rnB * rnB; + var impulse = K > 0 ? -C / K : 0; + b2Vec2.MulSV(impulse, normal, P); + cA.SelfMulSub(mA, P); + aA -= iA * b2Vec2.CrossVV(rA, P); + cB.SelfMulAdd(mB, P); + aB += iB * b2Vec2.CrossVV(rB, P); + } + this.m_positions[indexA].a = aA; + this.m_positions[indexB].a = aB; + } + return minSeparation >= -1.5 * b2_linearSlop; + }; + b2ContactSolver.InitializeVelocityConstraints_s_xfA = new b2Transform(); + b2ContactSolver.InitializeVelocityConstraints_s_xfB = new b2Transform(); + b2ContactSolver.InitializeVelocityConstraints_s_worldManifold = new b2WorldManifold(); + b2ContactSolver.WarmStart_s_P = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_dv = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_dv1 = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_dv2 = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_P = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_a = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_b = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_x = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_d = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_P1 = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_P2 = new b2Vec2(); + b2ContactSolver.SolveVelocityConstraints_s_P1P2 = new b2Vec2(); + b2ContactSolver.SolvePositionConstraints_s_xfA = new b2Transform(); + b2ContactSolver.SolvePositionConstraints_s_xfB = new b2Transform(); + b2ContactSolver.SolvePositionConstraints_s_psm = new b2PositionSolverManifold(); + b2ContactSolver.SolvePositionConstraints_s_rA = new b2Vec2(); + b2ContactSolver.SolvePositionConstraints_s_rB = new b2Vec2(); + b2ContactSolver.SolvePositionConstraints_s_P = new b2Vec2(); + b2ContactSolver.SolveTOIPositionConstraints_s_xfA = new b2Transform(); + b2ContactSolver.SolveTOIPositionConstraints_s_xfB = new b2Transform(); + b2ContactSolver.SolveTOIPositionConstraints_s_psm = new b2PositionSolverManifold(); + b2ContactSolver.SolveTOIPositionConstraints_s_rA = new b2Vec2(); + b2ContactSolver.SolveTOIPositionConstraints_s_rB = new b2Vec2(); + b2ContactSolver.SolveTOIPositionConstraints_s_P = new b2Vec2(); + return b2ContactSolver; + })(); + var b2Island = (function () { + function b2Island() { + this.m_allocator = null; + this.m_bodies = []; + this.m_contacts = []; + this.m_joints = []; + this.m_positions = b2Position.MakeArray(1024); + this.m_velocities = b2Velocity.MakeArray(1024); + this.m_bodyCount = 0; + this.m_jointCount = 0; + this.m_contactCount = 0; + this.m_bodyCapacity = 0; + this.m_contactCapacity = 0; + this.m_jointCapacity = 0; + } + b2Island.prototype.Initialize = function (bodyCapacity, contactCapacity, jointCapacity, allocator, listener) { + this.m_bodyCapacity = bodyCapacity; + this.m_contactCapacity = contactCapacity; + this.m_jointCapacity = jointCapacity; + this.m_bodyCount = 0; + this.m_contactCount = 0; + this.m_jointCount = 0; + this.m_allocator = allocator; + this.m_listener = listener; + if (this.m_positions.length < bodyCapacity) { + var new_length = b2Max(2 * this.m_positions.length, bodyCapacity); + while (this.m_positions.length < new_length) this.m_positions[this.m_positions.length] = new b2Position(); + } + if (this.m_velocities.length < bodyCapacity) { + var new_length = b2Max(2 * this.m_velocities.length, bodyCapacity); + while (this.m_velocities.length < new_length) this.m_velocities[this.m_velocities.length] = new b2Velocity(); + } + }; + b2Island.prototype.Clear = function () { + this.m_bodyCount = 0; + this.m_contactCount = 0; + this.m_jointCount = 0; + }; + b2Island.prototype.AddBody = function (body) { + body.m_islandIndex = this.m_bodyCount; + this.m_bodies[this.m_bodyCount++] = body; + }; + b2Island.prototype.AddContact = function (contact) { + this.m_contacts[this.m_contactCount++] = contact; + }; + b2Island.prototype.AddJoint = function (joint) { + this.m_joints[this.m_jointCount++] = joint; + }; + b2Island.prototype.Solve = function (profile, step, gravity, allowSleep) { + var timer = b2Island.s_timer.Reset(); + var h = step.dt; + for (var i = 0; i < this.m_bodyCount; ++i) { + var b = this.m_bodies[i]; + this.m_positions[i].c.Copy(b.m_sweep.c); + var a = b.m_sweep.a; + var v = this.m_velocities[i].v.Copy(b.m_linearVelocity); + var w = b.m_angularVelocity; + b.m_sweep.c0.Copy(b.m_sweep.c); + b.m_sweep.a0 = b.m_sweep.a; + if (b.m_type === exports.b2BodyType.b2_dynamicBody) { + v.x += h * (b.m_gravityScale * gravity.x + b.m_invMass * b.m_force.x); + v.y += h * (b.m_gravityScale * gravity.y + b.m_invMass * b.m_force.y); + w += h * b.m_invI * b.m_torque; + v.SelfMul(1 / (1 + h * b.m_linearDamping)); + w *= 1 / (1 + h * b.m_angularDamping); + } + this.m_positions[i].a = a; + this.m_velocities[i].w = w; + } + timer.Reset(); + var solverData = b2Island.s_solverData; + solverData.step.Copy(step); + solverData.positions = this.m_positions; + solverData.velocities = this.m_velocities; + var contactSolverDef = b2Island.s_contactSolverDef; + contactSolverDef.step.Copy(step); + contactSolverDef.contacts = this.m_contacts; + contactSolverDef.count = this.m_contactCount; + contactSolverDef.positions = this.m_positions; + contactSolverDef.velocities = this.m_velocities; + contactSolverDef.allocator = this.m_allocator; + var contactSolver = b2Island.s_contactSolver.Initialize(contactSolverDef); + contactSolver.InitializeVelocityConstraints(); + step.warmStarting && contactSolver.WarmStart(); + for (var i = 0; i < this.m_jointCount; ++i) this.m_joints[i].InitVelocityConstraints(solverData); + profile.solveInit = timer.GetMilliseconds(); + timer.Reset(); + for (var i = 0; i < step.velocityIterations; ++i) { + for (var j = 0; j < this.m_jointCount; ++j) this.m_joints[j].SolveVelocityConstraints(solverData); + contactSolver.SolveVelocityConstraints(); + } + contactSolver.StoreImpulses(); + profile.solveVelocity = timer.GetMilliseconds(); + for (var i = 0; i < this.m_bodyCount; ++i) { + var c = this.m_positions[i].c; + var a = this.m_positions[i].a; + var v = this.m_velocities[i].v; + var w = this.m_velocities[i].w; + var translation = b2Vec2.MulSV(h, v, b2Island.s_translation); + if (b2Vec2.DotVV(translation, translation) > b2_maxTranslationSquared) { + var ratio = b2_maxTranslation / translation.Length(); + v.SelfMul(ratio); + } + var rotation = h * w; + if (rotation * rotation > b2_maxRotationSquared) { + var ratio = b2_maxRotation / b2Abs(rotation); + w *= ratio; + } + c.x += h * v.x; + c.y += h * v.y; + a += h * w; + this.m_positions[i].a = a; + this.m_velocities[i].w = w; + } + timer.Reset(); + var positionSolved = false; + for (var i = 0; i < step.positionIterations; ++i) { + var contactsOkay = contactSolver.SolvePositionConstraints(); + var jointsOkay = true; + for (var j = 0; j < this.m_jointCount; ++j) { + var jointOkay = this.m_joints[j].SolvePositionConstraints(solverData); + jointsOkay = jointsOkay && jointOkay; + } + if (contactsOkay && jointsOkay) { + positionSolved = true; + break; + } + } + for (var i = 0; i < this.m_bodyCount; ++i) { + var body = this.m_bodies[i]; + body.m_sweep.c.Copy(this.m_positions[i].c); + body.m_sweep.a = this.m_positions[i].a; + body.m_linearVelocity.Copy(this.m_velocities[i].v); + body.m_angularVelocity = this.m_velocities[i].w; + body.SynchronizeTransform(); + } + profile.solvePosition = timer.GetMilliseconds(); + this.Report(contactSolver.m_velocityConstraints); + if (allowSleep) { + var minSleepTime = b2_maxFloat; + var linTolSqr = b2_linearSleepTolerance * b2_linearSleepTolerance; + var angTolSqr = b2_angularSleepTolerance * b2_angularSleepTolerance; + for (var i = 0; i < this.m_bodyCount; ++i) { + var b = this.m_bodies[i]; + if (b.GetType() === exports.b2BodyType.b2_staticBody) continue; + if (!b.m_autoSleepFlag || b.m_angularVelocity * b.m_angularVelocity > angTolSqr || b2Vec2.DotVV(b.m_linearVelocity, b.m_linearVelocity) > linTolSqr) { + b.m_sleepTime = 0; + minSleepTime = 0; + } else { + b.m_sleepTime += h; + minSleepTime = b2Min(minSleepTime, b.m_sleepTime); + } + } + if (minSleepTime >= b2_timeToSleep && positionSolved) for (var i = 0; i < this.m_bodyCount; ++i) { + var b = this.m_bodies[i]; + b.SetAwake(false); + } + } + }; + b2Island.prototype.SolveTOI = function (subStep, toiIndexA, toiIndexB) { + for (var i = 0; i < this.m_bodyCount; ++i) { + var b = this.m_bodies[i]; + this.m_positions[i].c.Copy(b.m_sweep.c); + this.m_positions[i].a = b.m_sweep.a; + this.m_velocities[i].v.Copy(b.m_linearVelocity); + this.m_velocities[i].w = b.m_angularVelocity; + } + var contactSolverDef = b2Island.s_contactSolverDef; + contactSolverDef.contacts = this.m_contacts; + contactSolverDef.count = this.m_contactCount; + contactSolverDef.allocator = this.m_allocator; + contactSolverDef.step.Copy(subStep); + contactSolverDef.positions = this.m_positions; + contactSolverDef.velocities = this.m_velocities; + var contactSolver = b2Island.s_contactSolver.Initialize(contactSolverDef); + for (var i = 0; i < subStep.positionIterations; ++i) { + var contactsOkay = contactSolver.SolveTOIPositionConstraints(toiIndexA, toiIndexB); + if (contactsOkay) break; + } + this.m_bodies[toiIndexA].m_sweep.c0.Copy(this.m_positions[toiIndexA].c); + this.m_bodies[toiIndexA].m_sweep.a0 = this.m_positions[toiIndexA].a; + this.m_bodies[toiIndexB].m_sweep.c0.Copy(this.m_positions[toiIndexB].c); + this.m_bodies[toiIndexB].m_sweep.a0 = this.m_positions[toiIndexB].a; + contactSolver.InitializeVelocityConstraints(); + for (var i = 0; i < subStep.velocityIterations; ++i) contactSolver.SolveVelocityConstraints(); + var h = subStep.dt; + for (var i = 0; i < this.m_bodyCount; ++i) { + var c = this.m_positions[i].c; + var a = this.m_positions[i].a; + var v = this.m_velocities[i].v; + var w = this.m_velocities[i].w; + var translation = b2Vec2.MulSV(h, v, b2Island.s_translation); + if (b2Vec2.DotVV(translation, translation) > b2_maxTranslationSquared) { + var ratio = b2_maxTranslation / translation.Length(); + v.SelfMul(ratio); + } + var rotation = h * w; + if (rotation * rotation > b2_maxRotationSquared) { + var ratio = b2_maxRotation / b2Abs(rotation); + w *= ratio; + } + c.SelfMulAdd(h, v); + a += h * w; + this.m_positions[i].a = a; + this.m_velocities[i].w = w; + var body = this.m_bodies[i]; + body.m_sweep.c.Copy(c); + body.m_sweep.a = a; + body.m_linearVelocity.Copy(v); + body.m_angularVelocity = w; + body.SynchronizeTransform(); + } + this.Report(contactSolver.m_velocityConstraints); + }; + b2Island.prototype.Report = function (constraints) { + if (null === this.m_listener) return; + for (var i = 0; i < this.m_contactCount; ++i) { + var c = this.m_contacts[i]; + if (!c) continue; + var vc = constraints[i]; + var impulse = b2Island.s_impulse; + impulse.count = vc.pointCount; + for (var j = 0; j < vc.pointCount; ++j) { + impulse.normalImpulses[j] = vc.points[j].normalImpulse; + impulse.tangentImpulses[j] = vc.points[j].tangentImpulse; + } + this.m_listener.PostSolve(c, impulse); + } + }; + b2Island.s_timer = new b2Timer(); + b2Island.s_solverData = new b2SolverData(); + b2Island.s_contactSolverDef = new b2ContactSolverDef(); + b2Island.s_contactSolver = new b2ContactSolver(); + b2Island.s_translation = new b2Vec2(); + b2Island.s_impulse = new b2ContactImpulse(); + return b2Island; + })(); + (function (b2ParticleFlag) { + b2ParticleFlag[b2ParticleFlag["b2_waterParticle"] = 0] = "b2_waterParticle"; + b2ParticleFlag[b2ParticleFlag["b2_zombieParticle"] = 2] = "b2_zombieParticle"; + b2ParticleFlag[b2ParticleFlag["b2_wallParticle"] = 4] = "b2_wallParticle"; + b2ParticleFlag[b2ParticleFlag["b2_springParticle"] = 8] = "b2_springParticle"; + b2ParticleFlag[b2ParticleFlag["b2_elasticParticle"] = 16] = "b2_elasticParticle"; + b2ParticleFlag[b2ParticleFlag["b2_viscousParticle"] = 32] = "b2_viscousParticle"; + b2ParticleFlag[b2ParticleFlag["b2_powderParticle"] = 64] = "b2_powderParticle"; + b2ParticleFlag[b2ParticleFlag["b2_tensileParticle"] = 128] = "b2_tensileParticle"; + b2ParticleFlag[b2ParticleFlag["b2_colorMixingParticle"] = 256] = "b2_colorMixingParticle"; + b2ParticleFlag[b2ParticleFlag["b2_destructionListenerParticle"] = 512] = "b2_destructionListenerParticle"; + b2ParticleFlag[b2ParticleFlag["b2_barrierParticle"] = 1024] = "b2_barrierParticle"; + b2ParticleFlag[b2ParticleFlag["b2_staticPressureParticle"] = 2048] = "b2_staticPressureParticle"; + b2ParticleFlag[b2ParticleFlag["b2_reactiveParticle"] = 4096] = "b2_reactiveParticle"; + b2ParticleFlag[b2ParticleFlag["b2_repulsiveParticle"] = 8192] = "b2_repulsiveParticle"; + b2ParticleFlag[b2ParticleFlag["b2_fixtureContactListenerParticle"] = 16384] = "b2_fixtureContactListenerParticle"; + b2ParticleFlag[b2ParticleFlag["b2_particleContactListenerParticle"] = 32768] = "b2_particleContactListenerParticle"; + b2ParticleFlag[b2ParticleFlag["b2_fixtureContactFilterParticle"] = 65536] = "b2_fixtureContactFilterParticle"; + b2ParticleFlag[b2ParticleFlag["b2_particleContactFilterParticle"] = 131072] = "b2_particleContactFilterParticle"; + })(exports.b2ParticleFlag || (exports.b2ParticleFlag = {})); + var b2ParticleDef = (function () { + function b2ParticleDef() { + this.flags = 0; + this.position = new b2Vec2(); + this.velocity = new b2Vec2(); + this.color = new b2Color(0, 0, 0, 0); + this.lifetime = 0; + this.userData = null; + this.group = null; + } + return b2ParticleDef; + })(); + function b2CalculateParticleIterations(gravity, radius, timeStep) { + var B2_MAX_RECOMMENDED_PARTICLE_ITERATIONS = 8; + var B2_RADIUS_THRESHOLD = .01; + var iterations = Math.ceil(Math.sqrt(gravity / (B2_RADIUS_THRESHOLD * radius)) * timeStep); + return b2Clamp(iterations, 1, B2_MAX_RECOMMENDED_PARTICLE_ITERATIONS); + } + var b2ParticleHandle = (function () { + function b2ParticleHandle() { + this.m_index = b2_invalidParticleIndex; + } + b2ParticleHandle.prototype.GetIndex = function () { + return this.m_index; + }; + b2ParticleHandle.prototype.SetIndex = function (index) { + this.m_index = index; + }; + return b2ParticleHandle; + })(); + (function (b2ParticleGroupFlag) { + b2ParticleGroupFlag[b2ParticleGroupFlag["b2_solidParticleGroup"] = 1] = "b2_solidParticleGroup"; + b2ParticleGroupFlag[b2ParticleGroupFlag["b2_rigidParticleGroup"] = 2] = "b2_rigidParticleGroup"; + b2ParticleGroupFlag[b2ParticleGroupFlag["b2_particleGroupCanBeEmpty"] = 4] = "b2_particleGroupCanBeEmpty"; + b2ParticleGroupFlag[b2ParticleGroupFlag["b2_particleGroupWillBeDestroyed"] = 8] = "b2_particleGroupWillBeDestroyed"; + b2ParticleGroupFlag[b2ParticleGroupFlag["b2_particleGroupNeedsUpdateDepth"] = 16] = "b2_particleGroupNeedsUpdateDepth"; + b2ParticleGroupFlag[b2ParticleGroupFlag["b2_particleGroupInternalMask"] = 24] = "b2_particleGroupInternalMask"; + })(exports.b2ParticleGroupFlag || (exports.b2ParticleGroupFlag = {})); + var b2ParticleGroupDef = (function () { + function b2ParticleGroupDef() { + this.flags = 0; + this.groupFlags = 0; + this.position = new b2Vec2(); + this.angle = 0; + this.linearVelocity = new b2Vec2(); + this.angularVelocity = 0; + this.color = new b2Color(); + this.strength = 1; + this.shapeCount = 0; + this.stride = 0; + this.particleCount = 0; + this.lifetime = 0; + this.userData = null; + this.group = null; + } + return b2ParticleGroupDef; + })(); + var b2ParticleGroup = (function () { + function b2ParticleGroup(system) { + this.m_firstIndex = 0; + this.m_lastIndex = 0; + this.m_groupFlags = 0; + this.m_strength = 1; + this.m_prev = null; + this.m_next = null; + this.m_timestamp = -1; + this.m_mass = 0; + this.m_inertia = 0; + this.m_center = new b2Vec2(); + this.m_linearVelocity = new b2Vec2(); + this.m_angularVelocity = 0; + this.m_transform = new b2Transform(); + this.m_userData = null; + this.m_system = system; + } + b2ParticleGroup.prototype.GetNext = function () { + return this.m_next; + }; + b2ParticleGroup.prototype.GetParticleSystem = function () { + return this.m_system; + }; + b2ParticleGroup.prototype.GetParticleCount = function () { + return this.m_lastIndex - this.m_firstIndex; + }; + b2ParticleGroup.prototype.GetBufferIndex = function () { + return this.m_firstIndex; + }; + b2ParticleGroup.prototype.ContainsParticle = function (index) { + return this.m_firstIndex <= index && index < this.m_lastIndex; + }; + b2ParticleGroup.prototype.GetAllParticleFlags = function () { + if (!this.m_system.m_flagsBuffer.data) throw new Error(); + var flags = 0; + for (var i = this.m_firstIndex; i < this.m_lastIndex; i++) flags |= this.m_system.m_flagsBuffer.data[i]; + return flags; + }; + b2ParticleGroup.prototype.GetGroupFlags = function () { + return this.m_groupFlags; + }; + b2ParticleGroup.prototype.SetGroupFlags = function (flags) { + flags |= this.m_groupFlags & exports.b2ParticleGroupFlag.b2_particleGroupInternalMask; + this.m_system.SetGroupFlags(this, flags); + }; + b2ParticleGroup.prototype.GetMass = function () { + this.UpdateStatistics(); + return this.m_mass; + }; + b2ParticleGroup.prototype.GetInertia = function () { + this.UpdateStatistics(); + return this.m_inertia; + }; + b2ParticleGroup.prototype.GetCenter = function () { + this.UpdateStatistics(); + return this.m_center; + }; + b2ParticleGroup.prototype.GetLinearVelocity = function () { + this.UpdateStatistics(); + return this.m_linearVelocity; + }; + b2ParticleGroup.prototype.GetAngularVelocity = function () { + this.UpdateStatistics(); + return this.m_angularVelocity; + }; + b2ParticleGroup.prototype.GetTransform = function () { + return this.m_transform; + }; + b2ParticleGroup.prototype.GetPosition = function () { + return this.m_transform.p; + }; + b2ParticleGroup.prototype.GetAngle = function () { + return this.m_transform.q.GetAngle(); + }; + b2ParticleGroup.prototype.GetLinearVelocityFromWorldPoint = function (worldPoint, out) { + var s_t0 = b2ParticleGroup.GetLinearVelocityFromWorldPoint_s_t0; + this.UpdateStatistics(); + return b2Vec2.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, b2Vec2.SubVV(worldPoint, this.m_center, s_t0), out); + }; + b2ParticleGroup.prototype.GetUserData = function () { + return this.m_userData; + }; + b2ParticleGroup.prototype.SetUserData = function (data) { + this.m_userData = data; + }; + b2ParticleGroup.prototype.ApplyForce = function (force) { + this.m_system.ApplyForce(this.m_firstIndex, this.m_lastIndex, force); + }; + b2ParticleGroup.prototype.ApplyLinearImpulse = function (impulse) { + this.m_system.ApplyLinearImpulse(this.m_firstIndex, this.m_lastIndex, impulse); + }; + b2ParticleGroup.prototype.DestroyParticles = function (callDestructionListener) { + if (this.m_system.m_world.IsLocked()) throw new Error(); + for (var i = this.m_firstIndex; i < this.m_lastIndex; i++) this.m_system.DestroyParticle(i, callDestructionListener); + }; + b2ParticleGroup.prototype.UpdateStatistics = function () { + if (!this.m_system.m_positionBuffer.data) throw new Error(); + if (!this.m_system.m_velocityBuffer.data) throw new Error(); + var p = new b2Vec2(); + var v = new b2Vec2(); + if (this.m_timestamp !== this.m_system.m_timestamp) { + var m = this.m_system.GetParticleMass(); + this.m_mass = m * (this.m_lastIndex - this.m_firstIndex); + this.m_center.SetZero(); + this.m_linearVelocity.SetZero(); + for (var i = this.m_firstIndex; i < this.m_lastIndex; i++) { + this.m_center.SelfMulAdd(m, this.m_system.m_positionBuffer.data[i]); + this.m_linearVelocity.SelfMulAdd(m, this.m_system.m_velocityBuffer.data[i]); + } + if (this.m_mass > 0) { + var inv_mass = 1 / this.m_mass; + this.m_center.SelfMul(inv_mass); + this.m_linearVelocity.SelfMul(inv_mass); + } + this.m_inertia = 0; + this.m_angularVelocity = 0; + for (var i = this.m_firstIndex; i < this.m_lastIndex; i++) { + b2Vec2.SubVV(this.m_system.m_positionBuffer.data[i], this.m_center, p); + b2Vec2.SubVV(this.m_system.m_velocityBuffer.data[i], this.m_linearVelocity, v); + this.m_inertia += m * b2Vec2.DotVV(p, p); + this.m_angularVelocity += m * b2Vec2.CrossVV(p, v); + } + this.m_inertia > 0 && (this.m_angularVelocity *= 1 / this.m_inertia); + this.m_timestamp = this.m_system.m_timestamp; + } + }; + b2ParticleGroup.GetLinearVelocityFromWorldPoint_s_t0 = new b2Vec2(); + return b2ParticleGroup; + })(); + var b2StackQueue = (function () { + function b2StackQueue(capacity) { + this.m_front = 0; + this.m_back = 0; + this.m_capacity = 0; + this.m_buffer = b2MakeArray(capacity, (function (index) { + return null; + })); + this.m_capacity = capacity; + } + b2StackQueue.prototype.Push = function (item) { + if (this.m_back >= this.m_capacity) { + for (var i = this.m_front; i < this.m_back; i++) this.m_buffer[i - this.m_front] = this.m_buffer[i]; + this.m_back -= this.m_front; + this.m_front = 0; + if (this.m_back >= this.m_capacity) if (this.m_capacity > 0) { + this.m_buffer.concat(b2MakeArray(this.m_capacity, (function (index) { + return null; + }))); + this.m_capacity *= 2; + } else { + this.m_buffer.concat(b2MakeArray(1, (function (index) { + return null; + }))); + this.m_capacity = 1; + } + } + this.m_buffer[this.m_back] = item; + this.m_back++; + }; + b2StackQueue.prototype.Pop = function () { + this.m_buffer[this.m_front] = null; + this.m_front++; + }; + b2StackQueue.prototype.Empty = function () { + return this.m_front === this.m_back; + }; + b2StackQueue.prototype.Front = function () { + var item = this.m_buffer[this.m_front]; + if (!item) throw new Error(); + return item; + }; + return b2StackQueue; + })(); + var b2VoronoiDiagram = (function () { + function b2VoronoiDiagram(generatorCapacity) { + this.m_generatorCapacity = 0; + this.m_generatorCount = 0; + this.m_countX = 0; + this.m_countY = 0; + this.m_diagram = []; + this.m_generatorBuffer = b2MakeArray(generatorCapacity, (function (index) { + return new b2VoronoiDiagram.Generator(); + })); + this.m_generatorCapacity = generatorCapacity; + } + b2VoronoiDiagram.prototype.AddGenerator = function (center, tag, necessary) { + var g = this.m_generatorBuffer[this.m_generatorCount++]; + g.center.Copy(center); + g.tag = tag; + g.necessary = necessary; + }; + b2VoronoiDiagram.prototype.Generate = function (radius, margin) { + var inverseRadius = 1 / radius; + var lower = new b2Vec2(+b2_maxFloat, +b2_maxFloat); + var upper = new b2Vec2(-b2_maxFloat, -b2_maxFloat); + var necessary_count = 0; + for (var k = 0; k < this.m_generatorCount; k++) { + var g = this.m_generatorBuffer[k]; + if (g.necessary) { + b2Vec2.MinV(lower, g.center, lower); + b2Vec2.MaxV(upper, g.center, upper); + ++necessary_count; + } + } + if (0 === necessary_count) { + this.m_countX = 0; + this.m_countY = 0; + return; + } + lower.x -= margin; + lower.y -= margin; + upper.x += margin; + upper.y += margin; + this.m_countX = 1 + Math.floor(inverseRadius * (upper.x - lower.x)); + this.m_countY = 1 + Math.floor(inverseRadius * (upper.y - lower.y)); + this.m_diagram = []; + var queue = new b2StackQueue(4 * this.m_countX * this.m_countY); + for (var k = 0; k < this.m_generatorCount; k++) { + var g = this.m_generatorBuffer[k]; + g.center.SelfSub(lower).SelfMul(inverseRadius); + var x = Math.floor(g.center.x); + var y = Math.floor(g.center.y); + x >= 0 && y >= 0 && x < this.m_countX && y < this.m_countY && queue.Push(new b2VoronoiDiagram.Task(x, y, x + y * this.m_countX, g)); + } + while (!queue.Empty()) { + var task = queue.Front(); + var x = task.m_x; + var y = task.m_y; + var i = task.m_i; + var g = task.m_generator; + queue.Pop(); + if (!this.m_diagram[i]) { + this.m_diagram[i] = g; + x > 0 && queue.Push(new b2VoronoiDiagram.Task(x - 1, y, i - 1, g)); + y > 0 && queue.Push(new b2VoronoiDiagram.Task(x, y - 1, i - this.m_countX, g)); + x < this.m_countX - 1 && queue.Push(new b2VoronoiDiagram.Task(x + 1, y, i + 1, g)); + y < this.m_countY - 1 && queue.Push(new b2VoronoiDiagram.Task(x, y + 1, i + this.m_countX, g)); + } + } + for (var y = 0; y < this.m_countY; y++) for (var x = 0; x < this.m_countX - 1; x++) { + var i = x + y * this.m_countX; + var a = this.m_diagram[i]; + var b = this.m_diagram[i + 1]; + if (a !== b) { + queue.Push(new b2VoronoiDiagram.Task(x, y, i, b)); + queue.Push(new b2VoronoiDiagram.Task(x + 1, y, i + 1, a)); + } + } + for (var y = 0; y < this.m_countY - 1; y++) for (var x = 0; x < this.m_countX; x++) { + var i = x + y * this.m_countX; + var a = this.m_diagram[i]; + var b = this.m_diagram[i + this.m_countX]; + if (a !== b) { + queue.Push(new b2VoronoiDiagram.Task(x, y, i, b)); + queue.Push(new b2VoronoiDiagram.Task(x, y + 1, i + this.m_countX, a)); + } + } + while (!queue.Empty()) { + var task = queue.Front(); + var x = task.m_x; + var y = task.m_y; + var i = task.m_i; + var k = task.m_generator; + queue.Pop(); + var a = this.m_diagram[i]; + var b = k; + if (a !== b) { + var ax = a.center.x - x; + var ay = a.center.y - y; + var bx = b.center.x - x; + var by = b.center.y - y; + var a2 = ax * ax + ay * ay; + var b2 = bx * bx + by * by; + if (a2 > b2) { + this.m_diagram[i] = b; + x > 0 && queue.Push(new b2VoronoiDiagram.Task(x - 1, y, i - 1, b)); + y > 0 && queue.Push(new b2VoronoiDiagram.Task(x, y - 1, i - this.m_countX, b)); + x < this.m_countX - 1 && queue.Push(new b2VoronoiDiagram.Task(x + 1, y, i + 1, b)); + y < this.m_countY - 1 && queue.Push(new b2VoronoiDiagram.Task(x, y + 1, i + this.m_countX, b)); + } + } + } + }; + b2VoronoiDiagram.prototype.GetNodes = function (callback) { + for (var y = 0; y < this.m_countY - 1; y++) for (var x = 0; x < this.m_countX - 1; x++) { + var i = x + y * this.m_countX; + var a = this.m_diagram[i]; + var b = this.m_diagram[i + 1]; + var c = this.m_diagram[i + this.m_countX]; + var d = this.m_diagram[i + 1 + this.m_countX]; + if (b !== c) { + a !== b && a !== c && (a.necessary || b.necessary || c.necessary) && callback(a.tag, b.tag, c.tag); + d !== b && d !== c && (a.necessary || b.necessary || c.necessary) && callback(b.tag, d.tag, c.tag); + } + } + }; + return b2VoronoiDiagram; + })(); + (function (b2VoronoiDiagram) { + var Generator = (function () { + function Generator() { + this.center = new b2Vec2(); + this.tag = 0; + this.necessary = false; + } + return Generator; + })(); + b2VoronoiDiagram.Generator = Generator; + var Task = (function () { + function Task(x, y, i, g) { + this.m_x = x; + this.m_y = y; + this.m_i = i; + this.m_generator = g; + } + return Task; + })(); + b2VoronoiDiagram.Task = Task; + })(b2VoronoiDiagram || (b2VoronoiDiagram = {})); + function std_iter_swap(array, a, b) { + var tmp = array[a]; + array[a] = array[b]; + array[b] = tmp; + } + function default_compare(a, b) { + return a < b; + } + function std_sort(array, first, len, cmp) { + void 0 === first && (first = 0); + void 0 === len && (len = array.length - first); + void 0 === cmp && (cmp = default_compare); + var left = first; + var stack = []; + var pos = 0; + for (; ;) { + for (; left + 1 < len; len++) { + var pivot = array[left + Math.floor(Math.random() * (len - left))]; + stack[pos++] = len; + for (var right = left - 1; ;) { + while (cmp(array[++right], pivot)); + while (cmp(pivot, array[--len])); + if (right >= len) break; + std_iter_swap(array, right, len); + } + } + if (0 === pos) break; + left = len; + len = stack[--pos]; + } + return array; + } + function std_stable_sort(array, first, len, cmp) { + void 0 === first && (first = 0); + void 0 === len && (len = array.length - first); + void 0 === cmp && (cmp = default_compare); + return std_sort(array, first, len, cmp); + } + function std_remove_if(array, predicate, length) { + void 0 === length && (length = array.length); + var l = 0; + for (var c = 0; c < length; ++c) { + if (predicate(array[c])) continue; + if (c === l) { + ++l; + continue; + } + std_iter_swap(array, l++, c); + } + return l; + } + function std_lower_bound(array, first, last, val, cmp) { + void 0 === cmp && (cmp = default_compare); + var count = last - first; + while (count > 0) { + var step = Math.floor(count / 2); + var it = first + step; + if (cmp(array[it], val)) { + first = ++it; + count -= step + 1; + } else count = step; + } + return first; + } + function std_upper_bound(array, first, last, val, cmp) { + void 0 === cmp && (cmp = default_compare); + var count = last - first; + while (count > 0) { + var step = Math.floor(count / 2); + var it = first + step; + if (cmp(val, array[it])) count = step; else { + first = ++it; + count -= step + 1; + } + } + return first; + } + function std_rotate(array, first, n_first, last) { + var next = n_first; + while (first !== next) { + std_iter_swap(array, first++, next++); + next === last ? next = n_first : first === n_first && (n_first = next); + } + } + function std_unique(array, first, last, cmp) { + if (first === last) return last; + var result = first; + while (++first !== last) cmp(array[result], array[first]) || std_iter_swap(array, ++result, first); + return ++result; + } + var b2GrowableBuffer = (function () { + function b2GrowableBuffer(allocator) { + this.data = []; + this.count = 0; + this.capacity = 0; + this.allocator = allocator; + } + b2GrowableBuffer.prototype.Append = function () { + this.count >= this.capacity && this.Grow(); + return this.count++; + }; + b2GrowableBuffer.prototype.Reserve = function (newCapacity) { + if (this.capacity >= newCapacity) return; + for (var i = this.capacity; i < newCapacity; ++i) this.data[i] = this.allocator(); + this.capacity = newCapacity; + }; + b2GrowableBuffer.prototype.Grow = function () { + var newCapacity = this.capacity ? 2 * this.capacity : b2_minParticleSystemBufferCapacity; + this.Reserve(newCapacity); + }; + b2GrowableBuffer.prototype.Free = function () { + if (0 === this.data.length) return; + this.data = []; + this.capacity = 0; + this.count = 0; + }; + b2GrowableBuffer.prototype.Shorten = function (newEnd) { }; + b2GrowableBuffer.prototype.Data = function () { + return this.data; + }; + b2GrowableBuffer.prototype.GetCount = function () { + return this.count; + }; + b2GrowableBuffer.prototype.SetCount = function (newCount) { + this.count = newCount; + }; + b2GrowableBuffer.prototype.GetCapacity = function () { + return this.capacity; + }; + b2GrowableBuffer.prototype.RemoveIf = function (pred) { + this.count = std_remove_if(this.data, pred, this.count); + }; + b2GrowableBuffer.prototype.Unique = function (pred) { + this.count = std_unique(this.data, 0, this.count, pred); + }; + return b2GrowableBuffer; + })(); + var b2FixtureParticleQueryCallback = (function (_super) { + __extends(b2FixtureParticleQueryCallback, _super); + function b2FixtureParticleQueryCallback(system) { + var _this = _super.call(this) || this; + _this.m_system = system; + return _this; + } + b2FixtureParticleQueryCallback.prototype.ShouldQueryParticleSystem = function (system) { + return false; + }; + b2FixtureParticleQueryCallback.prototype.ReportFixture = function (fixture) { + if (fixture.IsSensor()) return true; + var shape = fixture.GetShape(); + var childCount = shape.GetChildCount(); + for (var childIndex = 0; childIndex < childCount; childIndex++) { + var aabb = fixture.GetAABB(childIndex); + var enumerator = this.m_system.GetInsideBoundsEnumerator(aabb); + var index = void 0; + while ((index = enumerator.GetNext()) >= 0) this.ReportFixtureAndParticle(fixture, childIndex, index); + } + return true; + }; + b2FixtureParticleQueryCallback.prototype.ReportParticle = function (system, index) { + return false; + }; + b2FixtureParticleQueryCallback.prototype.ReportFixtureAndParticle = function (fixture, childIndex, index) { }; + return b2FixtureParticleQueryCallback; + })(b2QueryCallback); + var b2ParticleContact = (function () { + function b2ParticleContact() { + this.indexA = 0; + this.indexB = 0; + this.weight = 0; + this.normal = new b2Vec2(); + this.flags = 0; + } + b2ParticleContact.prototype.SetIndices = function (a, b) { + this.indexA = a; + this.indexB = b; + }; + b2ParticleContact.prototype.SetWeight = function (w) { + this.weight = w; + }; + b2ParticleContact.prototype.SetNormal = function (n) { + this.normal.Copy(n); + }; + b2ParticleContact.prototype.SetFlags = function (f) { + this.flags = f; + }; + b2ParticleContact.prototype.GetIndexA = function () { + return this.indexA; + }; + b2ParticleContact.prototype.GetIndexB = function () { + return this.indexB; + }; + b2ParticleContact.prototype.GetWeight = function () { + return this.weight; + }; + b2ParticleContact.prototype.GetNormal = function () { + return this.normal; + }; + b2ParticleContact.prototype.GetFlags = function () { + return this.flags; + }; + b2ParticleContact.prototype.IsEqual = function (rhs) { + return this.indexA === rhs.indexA && this.indexB === rhs.indexB && this.flags === rhs.flags && this.weight === rhs.weight && this.normal.x === rhs.normal.x && this.normal.y === rhs.normal.y; + }; + b2ParticleContact.prototype.IsNotEqual = function (rhs) { + return !this.IsEqual(rhs); + }; + b2ParticleContact.prototype.ApproximatelyEqual = function (rhs) { + var MAX_WEIGHT_DIFF = .01; + var MAX_NORMAL_DIFF_SQ = 1e-4; + return this.indexA === rhs.indexA && this.indexB === rhs.indexB && this.flags === rhs.flags && b2Abs(this.weight - rhs.weight) < MAX_WEIGHT_DIFF && b2Vec2.DistanceSquaredVV(this.normal, rhs.normal) < MAX_NORMAL_DIFF_SQ; + }; + return b2ParticleContact; + })(); + var b2ParticleBodyContact = (function () { + function b2ParticleBodyContact() { + this.index = 0; + this.weight = 0; + this.normal = new b2Vec2(); + this.mass = 0; + } + return b2ParticleBodyContact; + })(); + var b2ParticlePair = (function () { + function b2ParticlePair() { + this.indexA = 0; + this.indexB = 0; + this.flags = 0; + this.strength = 0; + this.distance = 0; + } + return b2ParticlePair; + })(); + var b2ParticleTriad = (function () { + function b2ParticleTriad() { + this.indexA = 0; + this.indexB = 0; + this.indexC = 0; + this.flags = 0; + this.strength = 0; + this.pa = new b2Vec2(0, 0); + this.pb = new b2Vec2(0, 0); + this.pc = new b2Vec2(0, 0); + this.ka = 0; + this.kb = 0; + this.kc = 0; + this.s = 0; + } + return b2ParticleTriad; + })(); + var b2ParticleSystemDef = (function () { + function b2ParticleSystemDef() { + this.strictContactCheck = false; + this.density = 1; + this.gravityScale = 1; + this.radius = 1; + this.maxCount = 0; + this.pressureStrength = .005; + this.dampingStrength = 1; + this.elasticStrength = .25; + this.springStrength = .25; + this.viscousStrength = .25; + this.surfaceTensionPressureStrength = .2; + this.surfaceTensionNormalStrength = .2; + this.repulsiveStrength = 1; + this.powderStrength = .5; + this.ejectionStrength = .5; + this.staticPressureStrength = .2; + this.staticPressureRelaxation = .2; + this.staticPressureIterations = 8; + this.colorMixingStrength = .5; + this.destroyByAge = true; + this.lifetimeGranularity = 1 / 60; + } + b2ParticleSystemDef.prototype.Copy = function (def) { + this.strictContactCheck = def.strictContactCheck; + this.density = def.density; + this.gravityScale = def.gravityScale; + this.radius = def.radius; + this.maxCount = def.maxCount; + this.pressureStrength = def.pressureStrength; + this.dampingStrength = def.dampingStrength; + this.elasticStrength = def.elasticStrength; + this.springStrength = def.springStrength; + this.viscousStrength = def.viscousStrength; + this.surfaceTensionPressureStrength = def.surfaceTensionPressureStrength; + this.surfaceTensionNormalStrength = def.surfaceTensionNormalStrength; + this.repulsiveStrength = def.repulsiveStrength; + this.powderStrength = def.powderStrength; + this.ejectionStrength = def.ejectionStrength; + this.staticPressureStrength = def.staticPressureStrength; + this.staticPressureRelaxation = def.staticPressureRelaxation; + this.staticPressureIterations = def.staticPressureIterations; + this.colorMixingStrength = def.colorMixingStrength; + this.destroyByAge = def.destroyByAge; + this.lifetimeGranularity = def.lifetimeGranularity; + return this; + }; + b2ParticleSystemDef.prototype.Clone = function () { + return new b2ParticleSystemDef().Copy(this); + }; + return b2ParticleSystemDef; + })(); + exports.b2ParticleSystem = (function () { + function b2ParticleSystem(def, world) { + this.m_paused = false; + this.m_timestamp = 0; + this.m_allParticleFlags = 0; + this.m_needsUpdateAllParticleFlags = false; + this.m_allGroupFlags = 0; + this.m_needsUpdateAllGroupFlags = false; + this.m_hasForce = false; + this.m_iterationIndex = 0; + this.m_inverseDensity = 0; + this.m_particleDiameter = 0; + this.m_inverseDiameter = 0; + this.m_squaredDiameter = 0; + this.m_count = 0; + this.m_internalAllocatedCapacity = 0; + this.m_handleIndexBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_flagsBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_positionBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_velocityBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_forceBuffer = []; + this.m_weightBuffer = []; + this.m_staticPressureBuffer = []; + this.m_accumulationBuffer = []; + this.m_accumulation2Buffer = []; + this.m_depthBuffer = []; + this.m_colorBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_groupBuffer = []; + this.m_userDataBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_stuckThreshold = 0; + this.m_lastBodyContactStepBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_bodyContactCountBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_consecutiveContactStepsBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_stuckParticleBuffer = new b2GrowableBuffer(function () { + return 0; + }); + this.m_proxyBuffer = new b2GrowableBuffer(function () { + return new b2ParticleSystem.Proxy(); + }); + this.m_contactBuffer = new b2GrowableBuffer(function () { + return new b2ParticleContact(); + }); + this.m_bodyContactBuffer = new b2GrowableBuffer(function () { + return new b2ParticleBodyContact(); + }); + this.m_pairBuffer = new b2GrowableBuffer(function () { + return new b2ParticlePair(); + }); + this.m_triadBuffer = new b2GrowableBuffer(function () { + return new b2ParticleTriad(); + }); + this.m_expirationTimeBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_indexByExpirationTimeBuffer = new b2ParticleSystem.UserOverridableBuffer(); + this.m_timeElapsed = 0; + this.m_expirationTimeBufferRequiresSorting = false; + this.m_groupCount = 0; + this.m_groupList = null; + this.m_def = new b2ParticleSystemDef(); + this.m_prev = null; + this.m_next = null; + this.SetStrictContactCheck(def.strictContactCheck); + this.SetDensity(def.density); + this.SetGravityScale(def.gravityScale); + this.SetRadius(def.radius); + this.SetMaxParticleCount(def.maxCount); + this.m_def = def.Clone(); + this.m_world = world; + this.SetDestructionByAge(this.m_def.destroyByAge); + } + b2ParticleSystem.computeTag = function (x, y) { + return (y + b2ParticleSystem.yOffset >>> 0 << b2ParticleSystem.yShift) + (b2ParticleSystem.xScale * x + b2ParticleSystem.xOffset >>> 0) >>> 0; + }; + b2ParticleSystem.computeRelativeTag = function (tag, x, y) { + return tag + (y << b2ParticleSystem.yShift) + (x << b2ParticleSystem.xShift) >>> 0; + }; + b2ParticleSystem.prototype.Drop = function () { + while (this.m_groupList) this.DestroyParticleGroup(this.m_groupList); + this.FreeUserOverridableBuffer(this.m_handleIndexBuffer); + this.FreeUserOverridableBuffer(this.m_flagsBuffer); + this.FreeUserOverridableBuffer(this.m_lastBodyContactStepBuffer); + this.FreeUserOverridableBuffer(this.m_bodyContactCountBuffer); + this.FreeUserOverridableBuffer(this.m_consecutiveContactStepsBuffer); + this.FreeUserOverridableBuffer(this.m_positionBuffer); + this.FreeUserOverridableBuffer(this.m_velocityBuffer); + this.FreeUserOverridableBuffer(this.m_colorBuffer); + this.FreeUserOverridableBuffer(this.m_userDataBuffer); + this.FreeUserOverridableBuffer(this.m_expirationTimeBuffer); + this.FreeUserOverridableBuffer(this.m_indexByExpirationTimeBuffer); + this.FreeBuffer(this.m_forceBuffer, this.m_internalAllocatedCapacity); + this.FreeBuffer(this.m_weightBuffer, this.m_internalAllocatedCapacity); + this.FreeBuffer(this.m_staticPressureBuffer, this.m_internalAllocatedCapacity); + this.FreeBuffer(this.m_accumulationBuffer, this.m_internalAllocatedCapacity); + this.FreeBuffer(this.m_accumulation2Buffer, this.m_internalAllocatedCapacity); + this.FreeBuffer(this.m_depthBuffer, this.m_internalAllocatedCapacity); + this.FreeBuffer(this.m_groupBuffer, this.m_internalAllocatedCapacity); + }; + b2ParticleSystem.prototype.CreateParticle = function (def) { + if (this.m_world.IsLocked()) throw new Error(); + if (this.m_count >= this.m_internalAllocatedCapacity) { + var capacity = this.m_count ? 2 * this.m_count : b2_minParticleSystemBufferCapacity; + this.ReallocateInternalAllocatedBuffers(capacity); + } + if (this.m_count >= this.m_internalAllocatedCapacity) { + if (!this.m_def.destroyByAge) return b2_invalidParticleIndex; + this.DestroyOldestParticle(0, false); + this.SolveZombie(); + } + var index = this.m_count++; + if (!this.m_flagsBuffer.data) throw new Error(); + this.m_flagsBuffer.data[index] = 0; + this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[index] = 0); + this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[index] = 0); + this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[index] = 0); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + this.m_positionBuffer.data[index] = (this.m_positionBuffer.data[index] || new b2Vec2()).Copy(b2Maybe(def.position, b2Vec2.ZERO)); + this.m_velocityBuffer.data[index] = (this.m_velocityBuffer.data[index] || new b2Vec2()).Copy(b2Maybe(def.velocity, b2Vec2.ZERO)); + this.m_weightBuffer[index] = 0; + this.m_forceBuffer[index] = (this.m_forceBuffer[index] || new b2Vec2()).SetZero(); + this.m_staticPressureBuffer && (this.m_staticPressureBuffer[index] = 0); + this.m_depthBuffer && (this.m_depthBuffer[index] = 0); + var color = new b2Color().Copy(b2Maybe(def.color, b2Color.ZERO)); + if (this.m_colorBuffer.data || !color.IsZero()) { + this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data); + this.m_colorBuffer.data[index] = (this.m_colorBuffer.data[index] || new b2Color()).Copy(color); + } + if (this.m_userDataBuffer.data || def.userData) { + this.m_userDataBuffer.data = this.RequestBuffer(this.m_userDataBuffer.data); + this.m_userDataBuffer.data[index] = def.userData; + } + this.m_handleIndexBuffer.data && (this.m_handleIndexBuffer.data[index] = null); + var proxy = this.m_proxyBuffer.data[this.m_proxyBuffer.Append()]; + var lifetime = b2Maybe(def.lifetime, 0); + var finiteLifetime = lifetime > 0; + if (this.m_expirationTimeBuffer.data || finiteLifetime) { + this.SetParticleLifetime(index, finiteLifetime ? lifetime : this.ExpirationTimeToLifetime(-this.GetQuantizedTimeElapsed())); + if (!this.m_indexByExpirationTimeBuffer.data) throw new Error(); + this.m_indexByExpirationTimeBuffer.data[index] = index; + } + proxy.index = index; + var group = b2Maybe(def.group, null); + this.m_groupBuffer[index] = group; + if (group) if (group.m_firstIndex < group.m_lastIndex) { + this.RotateBuffer(group.m_firstIndex, group.m_lastIndex, index); + group.m_lastIndex = index + 1; + } else { + group.m_firstIndex = index; + group.m_lastIndex = index + 1; + } + this.SetParticleFlags(index, b2Maybe(def.flags, 0)); + return index; + }; + b2ParticleSystem.prototype.GetParticleHandleFromIndex = function (index) { + this.m_handleIndexBuffer.data = this.RequestBuffer(this.m_handleIndexBuffer.data); + var handle = this.m_handleIndexBuffer.data[index]; + if (handle) return handle; + handle = new b2ParticleHandle(); + handle.SetIndex(index); + this.m_handleIndexBuffer.data[index] = handle; + return handle; + }; + b2ParticleSystem.prototype.DestroyParticle = function (index, callDestructionListener) { + void 0 === callDestructionListener && (callDestructionListener = false); + if (!this.m_flagsBuffer.data) throw new Error(); + var flags = exports.b2ParticleFlag.b2_zombieParticle; + callDestructionListener && (flags |= exports.b2ParticleFlag.b2_destructionListenerParticle); + this.SetParticleFlags(index, this.m_flagsBuffer.data[index] | flags); + }; + b2ParticleSystem.prototype.DestroyOldestParticle = function (index, callDestructionListener) { + void 0 === callDestructionListener && (callDestructionListener = false); + var particleCount = this.GetParticleCount(); + if (!this.m_indexByExpirationTimeBuffer.data) throw new Error(); + if (!this.m_expirationTimeBuffer.data) throw new Error(); + var oldestFiniteLifetimeParticle = this.m_indexByExpirationTimeBuffer.data[particleCount - (index + 1)]; + var oldestInfiniteLifetimeParticle = this.m_indexByExpirationTimeBuffer.data[index]; + this.DestroyParticle(this.m_expirationTimeBuffer.data[oldestFiniteLifetimeParticle] > 0 ? oldestFiniteLifetimeParticle : oldestInfiniteLifetimeParticle, callDestructionListener); + }; + b2ParticleSystem.prototype.DestroyParticlesInShape = function (shape, xf, callDestructionListener) { + void 0 === callDestructionListener && (callDestructionListener = false); + var s_aabb = b2ParticleSystem.DestroyParticlesInShape_s_aabb; + if (this.m_world.IsLocked()) throw new Error(); + var callback = new b2ParticleSystem.DestroyParticlesInShapeCallback(this, shape, xf, callDestructionListener); + var aabb = s_aabb; + shape.ComputeAABB(aabb, xf, 0); + this.m_world.QueryAABB(callback, aabb); + return callback.Destroyed(); + }; + b2ParticleSystem.prototype.CreateParticleGroup = function (groupDef) { + var s_transform = b2ParticleSystem.CreateParticleGroup_s_transform; + if (this.m_world.IsLocked()) throw new Error(); + var transform = s_transform; + transform.SetPositionAngle(b2Maybe(groupDef.position, b2Vec2.ZERO), b2Maybe(groupDef.angle, 0)); + var firstIndex = this.m_count; + groupDef.shape && this.CreateParticlesWithShapeForGroup(groupDef.shape, groupDef, transform); + groupDef.shapes && this.CreateParticlesWithShapesForGroup(groupDef.shapes, b2Maybe(groupDef.shapeCount, groupDef.shapes.length), groupDef, transform); + if (groupDef.positionData) { + var count = b2Maybe(groupDef.particleCount, groupDef.positionData.length); + for (var i = 0; i < count; i++) { + var p = groupDef.positionData[i]; + this.CreateParticleForGroup(groupDef, transform, p); + } + } + var lastIndex = this.m_count; + var group = new b2ParticleGroup(this); + group.m_firstIndex = firstIndex; + group.m_lastIndex = lastIndex; + group.m_strength = b2Maybe(groupDef.strength, 1); + group.m_userData = groupDef.userData; + group.m_transform.Copy(transform); + group.m_prev = null; + group.m_next = this.m_groupList; + this.m_groupList && (this.m_groupList.m_prev = group); + this.m_groupList = group; + ++this.m_groupCount; + for (var i = firstIndex; i < lastIndex; i++) this.m_groupBuffer[i] = group; + this.SetGroupFlags(group, b2Maybe(groupDef.groupFlags, 0)); + var filter = new b2ParticleSystem.ConnectionFilter(); + this.UpdateContacts(true); + this.UpdatePairsAndTriads(firstIndex, lastIndex, filter); + if (groupDef.group) { + this.JoinParticleGroups(groupDef.group, group); + group = groupDef.group; + } + return group; + }; + b2ParticleSystem.prototype.JoinParticleGroups = function (groupA, groupB) { + if (this.m_world.IsLocked()) throw new Error(); + this.RotateBuffer(groupB.m_firstIndex, groupB.m_lastIndex, this.m_count); + this.RotateBuffer(groupA.m_firstIndex, groupA.m_lastIndex, groupB.m_firstIndex); + var filter = new b2ParticleSystem.JoinParticleGroupsFilter(groupB.m_firstIndex); + this.UpdateContacts(true); + this.UpdatePairsAndTriads(groupA.m_firstIndex, groupB.m_lastIndex, filter); + for (var i = groupB.m_firstIndex; i < groupB.m_lastIndex; i++) this.m_groupBuffer[i] = groupA; + var groupFlags = groupA.m_groupFlags | groupB.m_groupFlags; + this.SetGroupFlags(groupA, groupFlags); + groupA.m_lastIndex = groupB.m_lastIndex; + groupB.m_firstIndex = groupB.m_lastIndex; + this.DestroyParticleGroup(groupB); + }; + b2ParticleSystem.prototype.SplitParticleGroup = function (group) { + this.UpdateContacts(true); + var particleCount = group.GetParticleCount(); + var nodeBuffer = b2MakeArray(particleCount, (function (index) { + return new b2ParticleSystem.ParticleListNode(); + })); + b2ParticleSystem.InitializeParticleLists(group, nodeBuffer); + this.MergeParticleListsInContact(group, nodeBuffer); + var survivingList = b2ParticleSystem.FindLongestParticleList(group, nodeBuffer); + this.MergeZombieParticleListNodes(group, nodeBuffer, survivingList); + this.CreateParticleGroupsFromParticleList(group, nodeBuffer, survivingList); + this.UpdatePairsAndTriadsWithParticleList(group, nodeBuffer); + }; + b2ParticleSystem.prototype.GetParticleGroupList = function () { + return this.m_groupList; + }; + b2ParticleSystem.prototype.GetParticleGroupCount = function () { + return this.m_groupCount; + }; + b2ParticleSystem.prototype.GetParticleCount = function () { + return this.m_count; + }; + b2ParticleSystem.prototype.GetMaxParticleCount = function () { + return this.m_def.maxCount; + }; + b2ParticleSystem.prototype.SetMaxParticleCount = function (count) { + this.m_def.maxCount = count; + }; + b2ParticleSystem.prototype.GetAllParticleFlags = function () { + return this.m_allParticleFlags; + }; + b2ParticleSystem.prototype.GetAllGroupFlags = function () { + return this.m_allGroupFlags; + }; + b2ParticleSystem.prototype.SetPaused = function (paused) { + this.m_paused = paused; + }; + b2ParticleSystem.prototype.GetPaused = function () { + return this.m_paused; + }; + b2ParticleSystem.prototype.SetDensity = function (density) { + this.m_def.density = density; + this.m_inverseDensity = 1 / this.m_def.density; + }; + b2ParticleSystem.prototype.GetDensity = function () { + return this.m_def.density; + }; + b2ParticleSystem.prototype.SetGravityScale = function (gravityScale) { + this.m_def.gravityScale = gravityScale; + }; + b2ParticleSystem.prototype.GetGravityScale = function () { + return this.m_def.gravityScale; + }; + b2ParticleSystem.prototype.SetDamping = function (damping) { + this.m_def.dampingStrength = damping; + }; + b2ParticleSystem.prototype.GetDamping = function () { + return this.m_def.dampingStrength; + }; + b2ParticleSystem.prototype.SetStaticPressureIterations = function (iterations) { + this.m_def.staticPressureIterations = iterations; + }; + b2ParticleSystem.prototype.GetStaticPressureIterations = function () { + return this.m_def.staticPressureIterations; + }; + b2ParticleSystem.prototype.SetRadius = function (radius) { + this.m_particleDiameter = 2 * radius; + this.m_squaredDiameter = this.m_particleDiameter * this.m_particleDiameter; + this.m_inverseDiameter = 1 / this.m_particleDiameter; + }; + b2ParticleSystem.prototype.GetRadius = function () { + return this.m_particleDiameter / 2; + }; + b2ParticleSystem.prototype.GetPositionBuffer = function () { + if (!this.m_positionBuffer.data) throw new Error(); + return this.m_positionBuffer.data; + }; + b2ParticleSystem.prototype.GetVelocityBuffer = function () { + if (!this.m_velocityBuffer.data) throw new Error(); + return this.m_velocityBuffer.data; + }; + b2ParticleSystem.prototype.GetColorBuffer = function () { + this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data); + return this.m_colorBuffer.data; + }; + b2ParticleSystem.prototype.GetGroupBuffer = function () { + return this.m_groupBuffer; + }; + b2ParticleSystem.prototype.GetWeightBuffer = function () { + return this.m_weightBuffer; + }; + b2ParticleSystem.prototype.GetUserDataBuffer = function () { + this.m_userDataBuffer.data = this.RequestBuffer(this.m_userDataBuffer.data); + return this.m_userDataBuffer.data; + }; + b2ParticleSystem.prototype.GetFlagsBuffer = function () { + if (!this.m_flagsBuffer.data) throw new Error(); + return this.m_flagsBuffer.data; + }; + b2ParticleSystem.prototype.SetParticleFlags = function (index, newFlags) { + if (!this.m_flagsBuffer.data) throw new Error(); + var oldFlags = this.m_flagsBuffer.data[index]; + oldFlags & ~newFlags && (this.m_needsUpdateAllParticleFlags = true); + if (~this.m_allParticleFlags & newFlags) { + newFlags & exports.b2ParticleFlag.b2_tensileParticle && (this.m_accumulation2Buffer = this.RequestBuffer(this.m_accumulation2Buffer)); + newFlags & exports.b2ParticleFlag.b2_colorMixingParticle && (this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data)); + this.m_allParticleFlags |= newFlags; + } + this.m_flagsBuffer.data[index] = newFlags; + }; + b2ParticleSystem.prototype.GetParticleFlags = function (index) { + if (!this.m_flagsBuffer.data) throw new Error(); + return this.m_flagsBuffer.data[index]; + }; + b2ParticleSystem.prototype.SetFlagsBuffer = function (buffer, capacity) { + this.SetUserOverridableBuffer(this.m_flagsBuffer, buffer, capacity); + }; + b2ParticleSystem.prototype.SetPositionBuffer = function (buffer, capacity) { + this.SetUserOverridableBuffer(this.m_positionBuffer, buffer, capacity); + }; + b2ParticleSystem.prototype.SetVelocityBuffer = function (buffer, capacity) { + this.SetUserOverridableBuffer(this.m_velocityBuffer, buffer, capacity); + }; + b2ParticleSystem.prototype.SetColorBuffer = function (buffer, capacity) { + this.SetUserOverridableBuffer(this.m_colorBuffer, buffer, capacity); + }; + b2ParticleSystem.prototype.SetUserDataBuffer = function (buffer, capacity) { + this.SetUserOverridableBuffer(this.m_userDataBuffer, buffer, capacity); + }; + b2ParticleSystem.prototype.GetContacts = function () { + return this.m_contactBuffer.data; + }; + b2ParticleSystem.prototype.GetContactCount = function () { + return this.m_contactBuffer.count; + }; + b2ParticleSystem.prototype.GetBodyContacts = function () { + return this.m_bodyContactBuffer.data; + }; + b2ParticleSystem.prototype.GetBodyContactCount = function () { + return this.m_bodyContactBuffer.count; + }; + b2ParticleSystem.prototype.GetPairs = function () { + return this.m_pairBuffer.data; + }; + b2ParticleSystem.prototype.GetPairCount = function () { + return this.m_pairBuffer.count; + }; + b2ParticleSystem.prototype.GetTriads = function () { + return this.m_triadBuffer.data; + }; + b2ParticleSystem.prototype.GetTriadCount = function () { + return this.m_triadBuffer.count; + }; + b2ParticleSystem.prototype.SetStuckThreshold = function (steps) { + this.m_stuckThreshold = steps; + if (steps > 0) { + this.m_lastBodyContactStepBuffer.data = this.RequestBuffer(this.m_lastBodyContactStepBuffer.data); + this.m_bodyContactCountBuffer.data = this.RequestBuffer(this.m_bodyContactCountBuffer.data); + this.m_consecutiveContactStepsBuffer.data = this.RequestBuffer(this.m_consecutiveContactStepsBuffer.data); + } + }; + b2ParticleSystem.prototype.GetStuckCandidates = function () { + return this.m_stuckParticleBuffer.Data(); + }; + b2ParticleSystem.prototype.GetStuckCandidateCount = function () { + return this.m_stuckParticleBuffer.GetCount(); + }; + b2ParticleSystem.prototype.ComputeCollisionEnergy = function () { + if (!this.m_velocityBuffer.data) throw new Error(); + var s_v = b2ParticleSystem.ComputeCollisionEnergy_s_v; + var vel_data = this.m_velocityBuffer.data; + var sum_v2 = 0; + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var n = contact.normal; + var v = b2Vec2.SubVV(vel_data[b], vel_data[a], s_v); + var vn = b2Vec2.DotVV(v, n); + vn < 0 && (sum_v2 += vn * vn); + } + return .5 * this.GetParticleMass() * sum_v2; + }; + b2ParticleSystem.prototype.SetStrictContactCheck = function (enabled) { + this.m_def.strictContactCheck = enabled; + }; + b2ParticleSystem.prototype.GetStrictContactCheck = function () { + return this.m_def.strictContactCheck; + }; + b2ParticleSystem.prototype.SetParticleLifetime = function (index, lifetime) { + var initializeExpirationTimes = null === this.m_indexByExpirationTimeBuffer.data; + this.m_expirationTimeBuffer.data = this.RequestBuffer(this.m_expirationTimeBuffer.data); + this.m_indexByExpirationTimeBuffer.data = this.RequestBuffer(this.m_indexByExpirationTimeBuffer.data); + if (initializeExpirationTimes) { + var particleCount = this.GetParticleCount(); + for (var i = 0; i < particleCount; ++i) this.m_indexByExpirationTimeBuffer.data[i] = i; + } + var quantizedLifetime = lifetime / this.m_def.lifetimeGranularity; + var newExpirationTime = quantizedLifetime > 0 ? this.GetQuantizedTimeElapsed() + quantizedLifetime : quantizedLifetime; + if (newExpirationTime !== this.m_expirationTimeBuffer.data[index]) { + this.m_expirationTimeBuffer.data[index] = newExpirationTime; + this.m_expirationTimeBufferRequiresSorting = true; + } + }; + b2ParticleSystem.prototype.GetParticleLifetime = function (index) { + return this.ExpirationTimeToLifetime(this.GetExpirationTimeBuffer()[index]); + }; + b2ParticleSystem.prototype.SetDestructionByAge = function (enable) { + enable && this.GetExpirationTimeBuffer(); + this.m_def.destroyByAge = enable; + }; + b2ParticleSystem.prototype.GetDestructionByAge = function () { + return this.m_def.destroyByAge; + }; + b2ParticleSystem.prototype.GetExpirationTimeBuffer = function () { + this.m_expirationTimeBuffer.data = this.RequestBuffer(this.m_expirationTimeBuffer.data); + return this.m_expirationTimeBuffer.data; + }; + b2ParticleSystem.prototype.ExpirationTimeToLifetime = function (expirationTime) { + return (expirationTime > 0 ? expirationTime - this.GetQuantizedTimeElapsed() : expirationTime) * this.m_def.lifetimeGranularity; + }; + b2ParticleSystem.prototype.GetIndexByExpirationTimeBuffer = function () { + this.GetParticleCount() ? this.SetParticleLifetime(0, this.GetParticleLifetime(0)) : this.m_indexByExpirationTimeBuffer.data = this.RequestBuffer(this.m_indexByExpirationTimeBuffer.data); + if (!this.m_indexByExpirationTimeBuffer.data) throw new Error(); + return this.m_indexByExpirationTimeBuffer.data; + }; + b2ParticleSystem.prototype.ParticleApplyLinearImpulse = function (index, impulse) { + this.ApplyLinearImpulse(index, index + 1, impulse); + }; + b2ParticleSystem.prototype.ApplyLinearImpulse = function (firstIndex, lastIndex, impulse) { + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + var numParticles = lastIndex - firstIndex; + var totalMass = numParticles * this.GetParticleMass(); + var velocityDelta = new b2Vec2().Copy(impulse).SelfMul(1 / totalMass); + for (var i = firstIndex; i < lastIndex; i++) vel_data[i].SelfAdd(velocityDelta); + }; + b2ParticleSystem.IsSignificantForce = function (force) { + return 0 !== force.x || 0 !== force.y; + }; + b2ParticleSystem.prototype.ParticleApplyForce = function (index, force) { + if (!this.m_flagsBuffer.data) throw new Error(); + if (b2ParticleSystem.IsSignificantForce(force) && this.ForceCanBeApplied(this.m_flagsBuffer.data[index])) { + this.PrepareForceBuffer(); + this.m_forceBuffer[index].SelfAdd(force); + } + }; + b2ParticleSystem.prototype.ApplyForce = function (firstIndex, lastIndex, force) { + var distributedForce = new b2Vec2().Copy(force).SelfMul(1 / (lastIndex - firstIndex)); + if (b2ParticleSystem.IsSignificantForce(distributedForce)) { + this.PrepareForceBuffer(); + for (var i = firstIndex; i < lastIndex; i++) this.m_forceBuffer[i].SelfAdd(distributedForce); + } + }; + b2ParticleSystem.prototype.GetNext = function () { + return this.m_next; + }; + b2ParticleSystem.prototype.QueryAABB = function (callback, aabb) { + if (0 === this.m_proxyBuffer.count) return; + var beginProxy = 0; + var endProxy = this.m_proxyBuffer.count; + var firstProxy = std_lower_bound(this.m_proxyBuffer.data, beginProxy, endProxy, b2ParticleSystem.computeTag(this.m_inverseDiameter * aabb.lowerBound.x, this.m_inverseDiameter * aabb.lowerBound.y), b2ParticleSystem.Proxy.CompareProxyTag); + var lastProxy = std_upper_bound(this.m_proxyBuffer.data, firstProxy, endProxy, b2ParticleSystem.computeTag(this.m_inverseDiameter * aabb.upperBound.x, this.m_inverseDiameter * aabb.upperBound.y), b2ParticleSystem.Proxy.CompareTagProxy); + if (!this.m_positionBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + for (var k = firstProxy; k < lastProxy; ++k) { + var proxy = this.m_proxyBuffer.data[k]; + var i = proxy.index; + var p = pos_data[i]; + if (aabb.lowerBound.x < p.x && p.x < aabb.upperBound.x && aabb.lowerBound.y < p.y && p.y < aabb.upperBound.y && !callback.ReportParticle(this, i)) break; + } + }; + b2ParticleSystem.prototype.QueryShapeAABB = function (callback, shape, xf, childIndex) { + void 0 === childIndex && (childIndex = 0); + var s_aabb = b2ParticleSystem.QueryShapeAABB_s_aabb; + var aabb = s_aabb; + shape.ComputeAABB(aabb, xf, childIndex); + this.QueryAABB(callback, aabb); + }; + b2ParticleSystem.prototype.QueryPointAABB = function (callback, point, slop) { + void 0 === slop && (slop = b2_linearSlop); + var s_aabb = b2ParticleSystem.QueryPointAABB_s_aabb; + var aabb = s_aabb; + aabb.lowerBound.Set(point.x - slop, point.y - slop); + aabb.upperBound.Set(point.x + slop, point.y + slop); + this.QueryAABB(callback, aabb); + }; + b2ParticleSystem.prototype.RayCast = function (callback, point1, point2) { + var s_aabb = b2ParticleSystem.RayCast_s_aabb; + var s_p = b2ParticleSystem.RayCast_s_p; + var s_v = b2ParticleSystem.RayCast_s_v; + var s_n = b2ParticleSystem.RayCast_s_n; + var s_point = b2ParticleSystem.RayCast_s_point; + if (0 === this.m_proxyBuffer.count) return; + if (!this.m_positionBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var aabb = s_aabb; + b2Vec2.MinV(point1, point2, aabb.lowerBound); + b2Vec2.MaxV(point1, point2, aabb.upperBound); + var fraction = 1; + var v = b2Vec2.SubVV(point2, point1, s_v); + var v2 = b2Vec2.DotVV(v, v); + var enumerator = this.GetInsideBoundsEnumerator(aabb); + var i; + while ((i = enumerator.GetNext()) >= 0) { + var p = b2Vec2.SubVV(point1, pos_data[i], s_p); + var pv = b2Vec2.DotVV(p, v); + var p2 = b2Vec2.DotVV(p, p); + var determinant = pv * pv - v2 * (p2 - this.m_squaredDiameter); + if (determinant >= 0) { + var sqrtDeterminant = b2Sqrt(determinant); + var t = (-pv - sqrtDeterminant) / v2; + if (t > fraction) continue; + if (t < 0) { + t = (-pv + sqrtDeterminant) / v2; + if (t < 0 || t > fraction) continue; + } + var n = b2Vec2.AddVMulSV(p, t, v, s_n); + n.Normalize(); + var f = callback.ReportParticle(this, i, b2Vec2.AddVMulSV(point1, t, v, s_point), n, t); + fraction = b2Min(fraction, f); + if (fraction <= 0) break; + } + } + }; + b2ParticleSystem.prototype.ComputeAABB = function (aabb) { + var particleCount = this.GetParticleCount(); + aabb.lowerBound.x = +b2_maxFloat; + aabb.lowerBound.y = +b2_maxFloat; + aabb.upperBound.x = -b2_maxFloat; + aabb.upperBound.y = -b2_maxFloat; + if (!this.m_positionBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + for (var i = 0; i < particleCount; i++) { + var p = pos_data[i]; + b2Vec2.MinV(aabb.lowerBound, p, aabb.lowerBound); + b2Vec2.MaxV(aabb.upperBound, p, aabb.upperBound); + } + aabb.lowerBound.x -= this.m_particleDiameter; + aabb.lowerBound.y -= this.m_particleDiameter; + aabb.upperBound.x += this.m_particleDiameter; + aabb.upperBound.y += this.m_particleDiameter; + }; + b2ParticleSystem.prototype.FreeBuffer = function (b, capacity) { + if (null === b) return; + b.length = 0; + }; + b2ParticleSystem.prototype.FreeUserOverridableBuffer = function (b) { + 0 === b.userSuppliedCapacity && this.FreeBuffer(b.data, this.m_internalAllocatedCapacity); + }; + b2ParticleSystem.prototype.ReallocateBuffer3 = function (oldBuffer, oldCapacity, newCapacity) { + if (newCapacity <= oldCapacity) throw new Error(); + var newBuffer = oldBuffer ? oldBuffer.slice() : []; + newBuffer.length = newCapacity; + return newBuffer; + }; + b2ParticleSystem.prototype.ReallocateBuffer5 = function (buffer, userSuppliedCapacity, oldCapacity, newCapacity, deferred) { + if (newCapacity <= oldCapacity) throw new Error(); + if (!(!userSuppliedCapacity || newCapacity <= userSuppliedCapacity)) throw new Error(); + deferred && !buffer || userSuppliedCapacity || (buffer = this.ReallocateBuffer3(buffer, oldCapacity, newCapacity)); + return buffer; + }; + b2ParticleSystem.prototype.ReallocateBuffer4 = function (buffer, oldCapacity, newCapacity, deferred) { + return this.ReallocateBuffer5(buffer.data, buffer.userSuppliedCapacity, oldCapacity, newCapacity, deferred); + }; + b2ParticleSystem.prototype.RequestBuffer = function (buffer) { + if (!buffer) { + 0 === this.m_internalAllocatedCapacity && this.ReallocateInternalAllocatedBuffers(b2_minParticleSystemBufferCapacity); + buffer = []; + buffer.length = this.m_internalAllocatedCapacity; + } + return buffer; + }; + b2ParticleSystem.prototype.ReallocateHandleBuffers = function (newCapacity) { + this.m_handleIndexBuffer.data = this.ReallocateBuffer4(this.m_handleIndexBuffer, this.m_internalAllocatedCapacity, newCapacity, true); + }; + b2ParticleSystem.prototype.ReallocateInternalAllocatedBuffers = function (capacity) { + function LimitCapacity(capacity, maxCount) { + return maxCount && capacity > maxCount ? maxCount : capacity; + } + capacity = LimitCapacity(capacity, this.m_def.maxCount); + capacity = LimitCapacity(capacity, this.m_flagsBuffer.userSuppliedCapacity); + capacity = LimitCapacity(capacity, this.m_positionBuffer.userSuppliedCapacity); + capacity = LimitCapacity(capacity, this.m_velocityBuffer.userSuppliedCapacity); + capacity = LimitCapacity(capacity, this.m_colorBuffer.userSuppliedCapacity); + capacity = LimitCapacity(capacity, this.m_userDataBuffer.userSuppliedCapacity); + if (this.m_internalAllocatedCapacity < capacity) { + this.ReallocateHandleBuffers(capacity); + this.m_flagsBuffer.data = this.ReallocateBuffer4(this.m_flagsBuffer, this.m_internalAllocatedCapacity, capacity, false); + var stuck = this.m_stuckThreshold > 0; + this.m_lastBodyContactStepBuffer.data = this.ReallocateBuffer4(this.m_lastBodyContactStepBuffer, this.m_internalAllocatedCapacity, capacity, stuck); + this.m_bodyContactCountBuffer.data = this.ReallocateBuffer4(this.m_bodyContactCountBuffer, this.m_internalAllocatedCapacity, capacity, stuck); + this.m_consecutiveContactStepsBuffer.data = this.ReallocateBuffer4(this.m_consecutiveContactStepsBuffer, this.m_internalAllocatedCapacity, capacity, stuck); + this.m_positionBuffer.data = this.ReallocateBuffer4(this.m_positionBuffer, this.m_internalAllocatedCapacity, capacity, false); + this.m_velocityBuffer.data = this.ReallocateBuffer4(this.m_velocityBuffer, this.m_internalAllocatedCapacity, capacity, false); + this.m_forceBuffer = this.ReallocateBuffer5(this.m_forceBuffer, 0, this.m_internalAllocatedCapacity, capacity, false); + this.m_weightBuffer = this.ReallocateBuffer5(this.m_weightBuffer, 0, this.m_internalAllocatedCapacity, capacity, false); + this.m_staticPressureBuffer = this.ReallocateBuffer5(this.m_staticPressureBuffer, 0, this.m_internalAllocatedCapacity, capacity, true); + this.m_accumulationBuffer = this.ReallocateBuffer5(this.m_accumulationBuffer, 0, this.m_internalAllocatedCapacity, capacity, false); + this.m_accumulation2Buffer = this.ReallocateBuffer5(this.m_accumulation2Buffer, 0, this.m_internalAllocatedCapacity, capacity, true); + this.m_depthBuffer = this.ReallocateBuffer5(this.m_depthBuffer, 0, this.m_internalAllocatedCapacity, capacity, true); + this.m_colorBuffer.data = this.ReallocateBuffer4(this.m_colorBuffer, this.m_internalAllocatedCapacity, capacity, true); + this.m_groupBuffer = this.ReallocateBuffer5(this.m_groupBuffer, 0, this.m_internalAllocatedCapacity, capacity, false); + this.m_userDataBuffer.data = this.ReallocateBuffer4(this.m_userDataBuffer, this.m_internalAllocatedCapacity, capacity, true); + this.m_expirationTimeBuffer.data = this.ReallocateBuffer4(this.m_expirationTimeBuffer, this.m_internalAllocatedCapacity, capacity, true); + this.m_indexByExpirationTimeBuffer.data = this.ReallocateBuffer4(this.m_indexByExpirationTimeBuffer, this.m_internalAllocatedCapacity, capacity, false); + this.m_internalAllocatedCapacity = capacity; + } + }; + b2ParticleSystem.prototype.CreateParticleForGroup = function (groupDef, xf, p) { + var particleDef = new b2ParticleDef(); + particleDef.flags = b2Maybe(groupDef.flags, 0); + b2Transform.MulXV(xf, p, particleDef.position); + b2Vec2.AddVV(b2Maybe(groupDef.linearVelocity, b2Vec2.ZERO), b2Vec2.CrossSV(b2Maybe(groupDef.angularVelocity, 0), b2Vec2.SubVV(particleDef.position, b2Maybe(groupDef.position, b2Vec2.ZERO), b2Vec2.s_t0), b2Vec2.s_t0), particleDef.velocity); + particleDef.color.Copy(b2Maybe(groupDef.color, b2Color.ZERO)); + particleDef.lifetime = b2Maybe(groupDef.lifetime, 0); + particleDef.userData = groupDef.userData; + this.CreateParticle(particleDef); + }; + b2ParticleSystem.prototype.CreateParticlesStrokeShapeForGroup = function (shape, groupDef, xf) { + var s_edge = b2ParticleSystem.CreateParticlesStrokeShapeForGroup_s_edge; + var s_d = b2ParticleSystem.CreateParticlesStrokeShapeForGroup_s_d; + var s_p = b2ParticleSystem.CreateParticlesStrokeShapeForGroup_s_p; + var stride = b2Maybe(groupDef.stride, 0); + 0 === stride && (stride = this.GetParticleStride()); + var positionOnEdge = 0; + var childCount = shape.GetChildCount(); + for (var childIndex = 0; childIndex < childCount; childIndex++) { + var edge = null; + if (shape.GetType() === exports.b2ShapeType.e_edgeShape) edge = shape; else { + edge = s_edge; + shape.GetChildEdge(edge, childIndex); + } + var d = b2Vec2.SubVV(edge.m_vertex2, edge.m_vertex1, s_d); + var edgeLength = d.Length(); + while (positionOnEdge < edgeLength) { + var p = b2Vec2.AddVMulSV(edge.m_vertex1, positionOnEdge / edgeLength, d, s_p); + this.CreateParticleForGroup(groupDef, xf, p); + positionOnEdge += stride; + } + positionOnEdge -= edgeLength; + } + }; + b2ParticleSystem.prototype.CreateParticlesFillShapeForGroup = function (shape, groupDef, xf) { + var s_aabb = b2ParticleSystem.CreateParticlesFillShapeForGroup_s_aabb; + var s_p = b2ParticleSystem.CreateParticlesFillShapeForGroup_s_p; + var stride = b2Maybe(groupDef.stride, 0); + 0 === stride && (stride = this.GetParticleStride()); + var identity = b2Transform.IDENTITY; + var aabb = s_aabb; + shape.ComputeAABB(aabb, identity, 0); + for (var y = Math.floor(aabb.lowerBound.y / stride) * stride; y < aabb.upperBound.y; y += stride) for (var x = Math.floor(aabb.lowerBound.x / stride) * stride; x < aabb.upperBound.x; x += stride) { + var p = s_p.Set(x, y); + shape.TestPoint(identity, p) && this.CreateParticleForGroup(groupDef, xf, p); + } + }; + b2ParticleSystem.prototype.CreateParticlesWithShapeForGroup = function (shape, groupDef, xf) { + switch (shape.GetType()) { + case exports.b2ShapeType.e_edgeShape: + case exports.b2ShapeType.e_chainShape: + this.CreateParticlesStrokeShapeForGroup(shape, groupDef, xf); + break; + + case exports.b2ShapeType.e_polygonShape: + case exports.b2ShapeType.e_circleShape: + this.CreateParticlesFillShapeForGroup(shape, groupDef, xf); + } + }; + b2ParticleSystem.prototype.CreateParticlesWithShapesForGroup = function (shapes, shapeCount, groupDef, xf) { + var compositeShape = new b2ParticleSystem.CompositeShape(shapes, shapeCount); + this.CreateParticlesFillShapeForGroup(compositeShape, groupDef, xf); + }; + b2ParticleSystem.prototype.CloneParticle = function (oldIndex, group) { + var def = new b2ParticleDef(); + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + def.flags = this.m_flagsBuffer.data[oldIndex]; + def.position.Copy(this.m_positionBuffer.data[oldIndex]); + def.velocity.Copy(this.m_velocityBuffer.data[oldIndex]); + this.m_colorBuffer.data && def.color.Copy(this.m_colorBuffer.data[oldIndex]); + this.m_userDataBuffer.data && (def.userData = this.m_userDataBuffer.data[oldIndex]); + def.group = group; + var newIndex = this.CreateParticle(def); + if (this.m_handleIndexBuffer.data) { + var handle = this.m_handleIndexBuffer.data[oldIndex]; + handle && handle.SetIndex(newIndex); + this.m_handleIndexBuffer.data[newIndex] = handle; + this.m_handleIndexBuffer.data[oldIndex] = null; + } + this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[newIndex] = this.m_lastBodyContactStepBuffer.data[oldIndex]); + this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[newIndex] = this.m_bodyContactCountBuffer.data[oldIndex]); + this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[newIndex] = this.m_consecutiveContactStepsBuffer.data[oldIndex]); + this.m_hasForce && this.m_forceBuffer[newIndex].Copy(this.m_forceBuffer[oldIndex]); + this.m_staticPressureBuffer && (this.m_staticPressureBuffer[newIndex] = this.m_staticPressureBuffer[oldIndex]); + this.m_depthBuffer && (this.m_depthBuffer[newIndex] = this.m_depthBuffer[oldIndex]); + this.m_expirationTimeBuffer.data && (this.m_expirationTimeBuffer.data[newIndex] = this.m_expirationTimeBuffer.data[oldIndex]); + return newIndex; + }; + b2ParticleSystem.prototype.DestroyParticlesInGroup = function (group, callDestructionListener) { + void 0 === callDestructionListener && (callDestructionListener = false); + for (var i = group.m_firstIndex; i < group.m_lastIndex; i++) this.DestroyParticle(i, callDestructionListener); + }; + b2ParticleSystem.prototype.DestroyParticleGroup = function (group) { + this.m_world.m_destructionListener && this.m_world.m_destructionListener.SayGoodbyeParticleGroup(group); + this.SetGroupFlags(group, 0); + for (var i = group.m_firstIndex; i < group.m_lastIndex; i++) this.m_groupBuffer[i] = null; + group.m_prev && (group.m_prev.m_next = group.m_next); + group.m_next && (group.m_next.m_prev = group.m_prev); + group === this.m_groupList && (this.m_groupList = group.m_next); + --this.m_groupCount; + }; + b2ParticleSystem.ParticleCanBeConnected = function (flags, group) { + return 0 !== (flags & (exports.b2ParticleFlag.b2_wallParticle | exports.b2ParticleFlag.b2_springParticle | exports.b2ParticleFlag.b2_elasticParticle)) || null !== group && 0 !== (group.GetGroupFlags() & exports.b2ParticleGroupFlag.b2_rigidParticleGroup); + }; + b2ParticleSystem.prototype.UpdatePairsAndTriads = function (firstIndex, lastIndex, filter) { + var s_dab = b2ParticleSystem.UpdatePairsAndTriads_s_dab; + var s_dbc = b2ParticleSystem.UpdatePairsAndTriads_s_dbc; + var s_dca = b2ParticleSystem.UpdatePairsAndTriads_s_dca; + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var particleFlags = 0; + for (var i = firstIndex; i < lastIndex; i++) particleFlags |= this.m_flagsBuffer.data[i]; + if (particleFlags & b2ParticleSystem.k_pairFlags) for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var af = this.m_flagsBuffer.data[a]; + var bf = this.m_flagsBuffer.data[b]; + var groupA = this.m_groupBuffer[a]; + var groupB = this.m_groupBuffer[b]; + if (a >= firstIndex && a < lastIndex && b >= firstIndex && b < lastIndex && !((af | bf) & exports.b2ParticleFlag.b2_zombieParticle) && (af | bf) & b2ParticleSystem.k_pairFlags && (filter.IsNecessary(a) || filter.IsNecessary(b)) && b2ParticleSystem.ParticleCanBeConnected(af, groupA) && b2ParticleSystem.ParticleCanBeConnected(bf, groupB) && filter.ShouldCreatePair(a, b)) { + var pair = this.m_pairBuffer.data[this.m_pairBuffer.Append()]; + pair.indexA = a; + pair.indexB = b; + pair.flags = contact.flags; + pair.strength = b2Min(groupA ? groupA.m_strength : 1, groupB ? groupB.m_strength : 1); + pair.distance = b2Vec2.DistanceVV(pos_data[a], pos_data[b]); + } + std_stable_sort(this.m_pairBuffer.data, 0, this.m_pairBuffer.count, b2ParticleSystem.ComparePairIndices); + this.m_pairBuffer.Unique(b2ParticleSystem.MatchPairIndices); + } + if (particleFlags & b2ParticleSystem.k_triadFlags) { + var diagram = new b2VoronoiDiagram(lastIndex - firstIndex); + for (var i = firstIndex; i < lastIndex; i++) { + var flags = this.m_flagsBuffer.data[i]; + var group = this.m_groupBuffer[i]; + flags & exports.b2ParticleFlag.b2_zombieParticle || !b2ParticleSystem.ParticleCanBeConnected(flags, group) || diagram.AddGenerator(pos_data[i], i, filter.IsNecessary(i)); + } + var stride = this.GetParticleStride(); + diagram.Generate(stride / 2, 2 * stride); + var system_1 = this; + var callback = function callback(a, b, c) { + if (!system_1.m_flagsBuffer.data) throw new Error(); + var af = system_1.m_flagsBuffer.data[a]; + var bf = system_1.m_flagsBuffer.data[b]; + var cf = system_1.m_flagsBuffer.data[c]; + if ((af | bf | cf) & b2ParticleSystem.k_triadFlags && filter.ShouldCreateTriad(a, b, c)) { + var pa = pos_data[a]; + var pb = pos_data[b]; + var pc = pos_data[c]; + var dab = b2Vec2.SubVV(pa, pb, s_dab); + var dbc = b2Vec2.SubVV(pb, pc, s_dbc); + var dca = b2Vec2.SubVV(pc, pa, s_dca); + var maxDistanceSquared = b2_maxTriadDistanceSquared * system_1.m_squaredDiameter; + if (b2Vec2.DotVV(dab, dab) > maxDistanceSquared || b2Vec2.DotVV(dbc, dbc) > maxDistanceSquared || b2Vec2.DotVV(dca, dca) > maxDistanceSquared) return; + var groupA = system_1.m_groupBuffer[a]; + var groupB = system_1.m_groupBuffer[b]; + var groupC = system_1.m_groupBuffer[c]; + var triad = system_1.m_triadBuffer.data[system_1.m_triadBuffer.Append()]; + triad.indexA = a; + triad.indexB = b; + triad.indexC = c; + triad.flags = af | bf | cf; + triad.strength = b2Min(b2Min(groupA ? groupA.m_strength : 1, groupB ? groupB.m_strength : 1), groupC ? groupC.m_strength : 1); + var midPoint_x = (pa.x + pb.x + pc.x) / 3; + var midPoint_y = (pa.y + pb.y + pc.y) / 3; + triad.pa.x = pa.x - midPoint_x; + triad.pa.y = pa.y - midPoint_y; + triad.pb.x = pb.x - midPoint_x; + triad.pb.y = pb.y - midPoint_y; + triad.pc.x = pc.x - midPoint_x; + triad.pc.y = pc.y - midPoint_y; + triad.ka = -b2Vec2.DotVV(dca, dab); + triad.kb = -b2Vec2.DotVV(dab, dbc); + triad.kc = -b2Vec2.DotVV(dbc, dca); + triad.s = b2Vec2.CrossVV(pa, pb) + b2Vec2.CrossVV(pb, pc) + b2Vec2.CrossVV(pc, pa); + } + }; + diagram.GetNodes(callback); + std_stable_sort(this.m_triadBuffer.data, 0, this.m_triadBuffer.count, b2ParticleSystem.CompareTriadIndices); + this.m_triadBuffer.Unique(b2ParticleSystem.MatchTriadIndices); + } + }; + b2ParticleSystem.prototype.UpdatePairsAndTriadsWithReactiveParticles = function () { + var filter = new b2ParticleSystem.ReactiveFilter(this.m_flagsBuffer); + this.UpdatePairsAndTriads(0, this.m_count, filter); + if (!this.m_flagsBuffer.data) throw new Error(); + for (var i = 0; i < this.m_count; i++) this.m_flagsBuffer.data[i] &= ~exports.b2ParticleFlag.b2_reactiveParticle; + this.m_allParticleFlags &= ~exports.b2ParticleFlag.b2_reactiveParticle; + }; + b2ParticleSystem.ComparePairIndices = function (a, b) { + var diffA = a.indexA - b.indexA; + if (0 !== diffA) return diffA < 0; + return a.indexB < b.indexB; + }; + b2ParticleSystem.MatchPairIndices = function (a, b) { + return a.indexA === b.indexA && a.indexB === b.indexB; + }; + b2ParticleSystem.CompareTriadIndices = function (a, b) { + var diffA = a.indexA - b.indexA; + if (0 !== diffA) return diffA < 0; + var diffB = a.indexB - b.indexB; + if (0 !== diffB) return diffB < 0; + return a.indexC < b.indexC; + }; + b2ParticleSystem.MatchTriadIndices = function (a, b) { + return a.indexA === b.indexA && a.indexB === b.indexB && a.indexC === b.indexC; + }; + b2ParticleSystem.InitializeParticleLists = function (group, nodeBuffer) { + var bufferIndex = group.GetBufferIndex(); + var particleCount = group.GetParticleCount(); + for (var i = 0; i < particleCount; i++) { + var node = nodeBuffer[i]; + node.list = node; + node.next = null; + node.count = 1; + node.index = i + bufferIndex; + } + }; + b2ParticleSystem.prototype.MergeParticleListsInContact = function (group, nodeBuffer) { + var bufferIndex = group.GetBufferIndex(); + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + if (!group.ContainsParticle(a) || !group.ContainsParticle(b)) continue; + var listA = nodeBuffer[a - bufferIndex].list; + var listB = nodeBuffer[b - bufferIndex].list; + if (listA === listB) continue; + if (listA.count < listB.count) { + var _tmp = listA; + listA = listB; + listB = _tmp; + } + b2ParticleSystem.MergeParticleLists(listA, listB); + } + }; + b2ParticleSystem.MergeParticleLists = function (listA, listB) { + for (var b = listB; ;) { + b.list = listA; + var nextB = b.next; + if (!nextB) { + b.next = listA.next; + break; + } + b = nextB; + } + listA.next = listB; + listA.count += listB.count; + listB.count = 0; + }; + b2ParticleSystem.FindLongestParticleList = function (group, nodeBuffer) { + var particleCount = group.GetParticleCount(); + var result = nodeBuffer[0]; + for (var i = 0; i < particleCount; i++) { + var node = nodeBuffer[i]; + result.count < node.count && (result = node); + } + return result; + }; + b2ParticleSystem.prototype.MergeZombieParticleListNodes = function (group, nodeBuffer, survivingList) { + if (!this.m_flagsBuffer.data) throw new Error(); + var particleCount = group.GetParticleCount(); + for (var i = 0; i < particleCount; i++) { + var node = nodeBuffer[i]; + node !== survivingList && this.m_flagsBuffer.data[node.index] & exports.b2ParticleFlag.b2_zombieParticle && b2ParticleSystem.MergeParticleListAndNode(survivingList, node); + } + }; + b2ParticleSystem.MergeParticleListAndNode = function (list, node) { + node.list = list; + node.next = list.next; + list.next = node; + list.count++; + node.count = 0; + }; + b2ParticleSystem.prototype.CreateParticleGroupsFromParticleList = function (group, nodeBuffer, survivingList) { + if (!this.m_flagsBuffer.data) throw new Error(); + var particleCount = group.GetParticleCount(); + var def = new b2ParticleGroupDef(); + def.groupFlags = group.GetGroupFlags(); + def.userData = group.GetUserData(); + for (var i = 0; i < particleCount; i++) { + var list = nodeBuffer[i]; + if (!list.count || list === survivingList) continue; + var newGroup = this.CreateParticleGroup(def); + for (var node = list; node; node = node.next) { + var oldIndex = node.index; + var newIndex = this.CloneParticle(oldIndex, newGroup); + this.m_flagsBuffer.data[oldIndex] |= exports.b2ParticleFlag.b2_zombieParticle; + node.index = newIndex; + } + } + }; + b2ParticleSystem.prototype.UpdatePairsAndTriadsWithParticleList = function (group, nodeBuffer) { + var bufferIndex = group.GetBufferIndex(); + for (var k = 0; k < this.m_pairBuffer.count; k++) { + var pair = this.m_pairBuffer.data[k]; + var a = pair.indexA; + var b = pair.indexB; + group.ContainsParticle(a) && (pair.indexA = nodeBuffer[a - bufferIndex].index); + group.ContainsParticle(b) && (pair.indexB = nodeBuffer[b - bufferIndex].index); + } + for (var k = 0; k < this.m_triadBuffer.count; k++) { + var triad = this.m_triadBuffer.data[k]; + var a = triad.indexA; + var b = triad.indexB; + var c = triad.indexC; + group.ContainsParticle(a) && (triad.indexA = nodeBuffer[a - bufferIndex].index); + group.ContainsParticle(b) && (triad.indexB = nodeBuffer[b - bufferIndex].index); + group.ContainsParticle(c) && (triad.indexC = nodeBuffer[c - bufferIndex].index); + } + }; + b2ParticleSystem.prototype.ComputeDepth = function () { + var contactGroups = []; + var contactGroupsCount = 0; + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var groupA = this.m_groupBuffer[a]; + var groupB = this.m_groupBuffer[b]; + groupA && groupA === groupB && groupA.m_groupFlags & exports.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth && (contactGroups[contactGroupsCount++] = contact); + } + var groupsToUpdate = []; + var groupsToUpdateCount = 0; + for (var group = this.m_groupList; group; group = group.GetNext()) if (group.m_groupFlags & exports.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth) { + groupsToUpdate[groupsToUpdateCount++] = group; + this.SetGroupFlags(group, group.m_groupFlags & ~exports.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth); + for (var i = group.m_firstIndex; i < group.m_lastIndex; i++) this.m_accumulationBuffer[i] = 0; + } + for (var k = 0; k < contactGroupsCount; k++) { + var contact = contactGroups[k]; + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + this.m_accumulationBuffer[a] += w; + this.m_accumulationBuffer[b] += w; + } + for (var i = 0; i < groupsToUpdateCount; i++) { + var group = groupsToUpdate[i]; + for (var i_1 = group.m_firstIndex; i_1 < group.m_lastIndex; i_1++) { + var w = this.m_accumulationBuffer[i_1]; + this.m_depthBuffer[i_1] = w < .8 ? 0 : b2_maxFloat; + } + } + var iterationCount = b2Sqrt(this.m_count) >> 0; + for (var t = 0; t < iterationCount; t++) { + var updated = false; + for (var k = 0; k < contactGroupsCount; k++) { + var contact = contactGroups[k]; + var a = contact.indexA; + var b = contact.indexB; + var r = 1 - contact.weight; + var ap0 = this.m_depthBuffer[a]; + var bp0 = this.m_depthBuffer[b]; + var ap1 = bp0 + r; + var bp1 = ap0 + r; + if (ap0 > ap1) { + this.m_depthBuffer[a] = ap1; + updated = true; + } + if (bp0 > bp1) { + this.m_depthBuffer[b] = bp1; + updated = true; + } + } + if (!updated) break; + } + for (var i = 0; i < groupsToUpdateCount; i++) { + var group = groupsToUpdate[i]; + for (var i_2 = group.m_firstIndex; i_2 < group.m_lastIndex; i_2++) this.m_depthBuffer[i_2] < b2_maxFloat ? this.m_depthBuffer[i_2] *= this.m_particleDiameter : this.m_depthBuffer[i_2] = 0; + } + }; + b2ParticleSystem.prototype.GetInsideBoundsEnumerator = function (aabb) { + var lowerTag = b2ParticleSystem.computeTag(this.m_inverseDiameter * aabb.lowerBound.x - 1, this.m_inverseDiameter * aabb.lowerBound.y - 1); + var upperTag = b2ParticleSystem.computeTag(this.m_inverseDiameter * aabb.upperBound.x + 1, this.m_inverseDiameter * aabb.upperBound.y + 1); + var beginProxy = 0; + var endProxy = this.m_proxyBuffer.count; + var firstProxy = std_lower_bound(this.m_proxyBuffer.data, beginProxy, endProxy, lowerTag, b2ParticleSystem.Proxy.CompareProxyTag); + var lastProxy = std_upper_bound(this.m_proxyBuffer.data, beginProxy, endProxy, upperTag, b2ParticleSystem.Proxy.CompareTagProxy); + return new b2ParticleSystem.InsideBoundsEnumerator(this, lowerTag, upperTag, firstProxy, lastProxy); + }; + b2ParticleSystem.prototype.UpdateAllParticleFlags = function () { + if (!this.m_flagsBuffer.data) throw new Error(); + this.m_allParticleFlags = 0; + for (var i = 0; i < this.m_count; i++) this.m_allParticleFlags |= this.m_flagsBuffer.data[i]; + this.m_needsUpdateAllParticleFlags = false; + }; + b2ParticleSystem.prototype.UpdateAllGroupFlags = function () { + this.m_allGroupFlags = 0; + for (var group = this.m_groupList; group; group = group.GetNext()) this.m_allGroupFlags |= group.m_groupFlags; + this.m_needsUpdateAllGroupFlags = false; + }; + b2ParticleSystem.prototype.AddContact = function (a, b, contacts) { + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + var s_d = b2ParticleSystem.AddContact_s_d; + var pos_data = this.m_positionBuffer.data; + var d = b2Vec2.SubVV(pos_data[b], pos_data[a], s_d); + var distBtParticlesSq = b2Vec2.DotVV(d, d); + if (distBtParticlesSq < this.m_squaredDiameter) { + var invD = b2InvSqrt(distBtParticlesSq); + isFinite(invD) || (invD = 198177537e11); + var contact = this.m_contactBuffer.data[this.m_contactBuffer.Append()]; + contact.indexA = a; + contact.indexB = b; + contact.flags = this.m_flagsBuffer.data[a] | this.m_flagsBuffer.data[b]; + contact.weight = 1 - distBtParticlesSq * invD * this.m_inverseDiameter; + b2Vec2.MulSV(invD, d, contact.normal); + } + }; + b2ParticleSystem.prototype.FindContacts_Reference = function (contacts) { + var beginProxy = 0; + var endProxy = this.m_proxyBuffer.count; + this.m_contactBuffer.count = 0; + for (var a = beginProxy, c = beginProxy; a < endProxy; a++) { + var rightTag = b2ParticleSystem.computeRelativeTag(this.m_proxyBuffer.data[a].tag, 1, 0); + for (var b = a + 1; b < endProxy; b++) { + if (rightTag < this.m_proxyBuffer.data[b].tag) break; + this.AddContact(this.m_proxyBuffer.data[a].index, this.m_proxyBuffer.data[b].index, this.m_contactBuffer); + } + var bottomLeftTag = b2ParticleSystem.computeRelativeTag(this.m_proxyBuffer.data[a].tag, -1, 1); + for (; c < endProxy; c++) if (bottomLeftTag <= this.m_proxyBuffer.data[c].tag) break; + var bottomRightTag = b2ParticleSystem.computeRelativeTag(this.m_proxyBuffer.data[a].tag, 1, 1); + for (var b = c; b < endProxy; b++) { + if (bottomRightTag < this.m_proxyBuffer.data[b].tag) break; + this.AddContact(this.m_proxyBuffer.data[a].index, this.m_proxyBuffer.data[b].index, this.m_contactBuffer); + } + } + }; + b2ParticleSystem.prototype.FindContacts = function (contacts) { + this.FindContacts_Reference(contacts); + }; + b2ParticleSystem.prototype.UpdateProxies_Reference = function (proxies) { + if (!this.m_positionBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var inv_diam = this.m_inverseDiameter; + for (var k = 0; k < this.m_proxyBuffer.count; ++k) { + var proxy = this.m_proxyBuffer.data[k]; + var i = proxy.index; + var p = pos_data[i]; + proxy.tag = b2ParticleSystem.computeTag(inv_diam * p.x, inv_diam * p.y); + } + }; + b2ParticleSystem.prototype.UpdateProxies = function (proxies) { + this.UpdateProxies_Reference(proxies); + }; + b2ParticleSystem.prototype.SortProxies = function (proxies) { + std_sort(this.m_proxyBuffer.data, 0, this.m_proxyBuffer.count, b2ParticleSystem.Proxy.CompareProxyProxy); + }; + b2ParticleSystem.prototype.FilterContacts = function (contacts) { + var contactFilter = this.GetParticleContactFilter(); + if (null === contactFilter) return; + var system = this; + var predicate = function predicate(contact) { + return 0 !== (contact.flags & exports.b2ParticleFlag.b2_particleContactFilterParticle) && !contactFilter.ShouldCollideParticleParticle(system, contact.indexA, contact.indexB); + }; + this.m_contactBuffer.RemoveIf(predicate); + }; + b2ParticleSystem.prototype.NotifyContactListenerPreContact = function (particlePairs) { + var contactListener = this.GetParticleContactListener(); + if (null === contactListener) return; + particlePairs.Initialize(this.m_contactBuffer, this.m_flagsBuffer); + throw new Error(); + }; + b2ParticleSystem.prototype.NotifyContactListenerPostContact = function (particlePairs) { + var contactListener = this.GetParticleContactListener(); + if (null === contactListener) return; + for (var k = 0; k < this.m_contactBuffer.count; ++k) { + var contact = this.m_contactBuffer.data[k]; + contactListener.BeginContactParticleParticle(this, contact); + } + throw new Error(); + }; + b2ParticleSystem.b2ParticleContactIsZombie = function (contact) { + return (contact.flags & exports.b2ParticleFlag.b2_zombieParticle) === exports.b2ParticleFlag.b2_zombieParticle; + }; + b2ParticleSystem.prototype.UpdateContacts = function (exceptZombie) { + this.UpdateProxies(this.m_proxyBuffer); + this.SortProxies(this.m_proxyBuffer); + var particlePairs = new b2ParticleSystem.b2ParticlePairSet(); + this.NotifyContactListenerPreContact(particlePairs); + this.FindContacts(this.m_contactBuffer); + this.FilterContacts(this.m_contactBuffer); + this.NotifyContactListenerPostContact(particlePairs); + exceptZombie && this.m_contactBuffer.RemoveIf(b2ParticleSystem.b2ParticleContactIsZombie); + }; + b2ParticleSystem.prototype.NotifyBodyContactListenerPreContact = function (fixtureSet) { + var contactListener = this.GetFixtureContactListener(); + if (null === contactListener) return; + fixtureSet.Initialize(this.m_bodyContactBuffer, this.m_flagsBuffer); + throw new Error(); + }; + b2ParticleSystem.prototype.NotifyBodyContactListenerPostContact = function (fixtureSet) { + var contactListener = this.GetFixtureContactListener(); + if (null === contactListener) return; + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + contactListener.BeginContactFixtureParticle(this, contact); + } + throw new Error(); + }; + b2ParticleSystem.prototype.UpdateBodyContacts = function () { + var s_aabb = b2ParticleSystem.UpdateBodyContacts_s_aabb; + var fixtureSet = new b2ParticleSystem.FixtureParticleSet(); + this.NotifyBodyContactListenerPreContact(fixtureSet); + if (this.m_stuckThreshold > 0) { + if (!this.m_bodyContactCountBuffer.data) throw new Error(); + if (!this.m_lastBodyContactStepBuffer.data) throw new Error(); + if (!this.m_consecutiveContactStepsBuffer.data) throw new Error(); + var particleCount = this.GetParticleCount(); + for (var i = 0; i < particleCount; i++) { + this.m_bodyContactCountBuffer.data[i] = 0; + this.m_timestamp > this.m_lastBodyContactStepBuffer.data[i] + 1 && (this.m_consecutiveContactStepsBuffer.data[i] = 0); + } + } + this.m_bodyContactBuffer.SetCount(0); + this.m_stuckParticleBuffer.SetCount(0); + var aabb = s_aabb; + this.ComputeAABB(aabb); + var callback = new b2ParticleSystem.UpdateBodyContactsCallback(this, this.GetFixtureContactFilter()); + this.m_world.QueryAABB(callback, aabb); + this.m_def.strictContactCheck && this.RemoveSpuriousBodyContacts(); + this.NotifyBodyContactListenerPostContact(fixtureSet); + }; + b2ParticleSystem.prototype.Solve = function (step) { + var s_subStep = b2ParticleSystem.Solve_s_subStep; + if (0 === this.m_count) return; + this.m_expirationTimeBuffer.data && this.SolveLifetimes(step); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_zombieParticle && this.SolveZombie(); + this.m_needsUpdateAllParticleFlags && this.UpdateAllParticleFlags(); + this.m_needsUpdateAllGroupFlags && this.UpdateAllGroupFlags(); + if (this.m_paused) return; + for (this.m_iterationIndex = 0; this.m_iterationIndex < step.particleIterations; this.m_iterationIndex++) { + ++this.m_timestamp; + var subStep = s_subStep.Copy(step); + subStep.dt /= step.particleIterations; + subStep.inv_dt *= step.particleIterations; + this.UpdateContacts(false); + this.UpdateBodyContacts(); + this.ComputeWeight(); + this.m_allGroupFlags & exports.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth && this.ComputeDepth(); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_reactiveParticle && this.UpdatePairsAndTriadsWithReactiveParticles(); + this.m_hasForce && this.SolveForce(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_viscousParticle && this.SolveViscous(); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_repulsiveParticle && this.SolveRepulsive(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_powderParticle && this.SolvePowder(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_tensileParticle && this.SolveTensile(subStep); + this.m_allGroupFlags & exports.b2ParticleGroupFlag.b2_solidParticleGroup && this.SolveSolid(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_colorMixingParticle && this.SolveColorMixing(); + this.SolveGravity(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_staticPressureParticle && this.SolveStaticPressure(subStep); + this.SolvePressure(subStep); + this.SolveDamping(subStep); + this.m_allParticleFlags & b2ParticleSystem.k_extraDampingFlags && this.SolveExtraDamping(); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_elasticParticle && this.SolveElastic(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_springParticle && this.SolveSpring(subStep); + this.LimitVelocity(subStep); + this.m_allGroupFlags & exports.b2ParticleGroupFlag.b2_rigidParticleGroup && this.SolveRigidDamping(); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_barrierParticle && this.SolveBarrier(subStep); + this.SolveCollision(subStep); + this.m_allGroupFlags & exports.b2ParticleGroupFlag.b2_rigidParticleGroup && this.SolveRigid(subStep); + this.m_allParticleFlags & exports.b2ParticleFlag.b2_wallParticle && this.SolveWall(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + for (var i = 0; i < this.m_count; i++) this.m_positionBuffer.data[i].SelfMulAdd(subStep.dt, this.m_velocityBuffer.data[i]); + } + }; + b2ParticleSystem.prototype.SolveCollision = function (step) { + var s_aabb = b2ParticleSystem.SolveCollision_s_aabb; + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var aabb = s_aabb; + aabb.lowerBound.x = +b2_maxFloat; + aabb.lowerBound.y = +b2_maxFloat; + aabb.upperBound.x = -b2_maxFloat; + aabb.upperBound.y = -b2_maxFloat; + for (var i = 0; i < this.m_count; i++) { + var v = vel_data[i]; + var p1 = pos_data[i]; + var p2_x = p1.x + step.dt * v.x; + var p2_y = p1.y + step.dt * v.y; + aabb.lowerBound.x = b2Min(aabb.lowerBound.x, b2Min(p1.x, p2_x)); + aabb.lowerBound.y = b2Min(aabb.lowerBound.y, b2Min(p1.y, p2_y)); + aabb.upperBound.x = b2Max(aabb.upperBound.x, b2Max(p1.x, p2_x)); + aabb.upperBound.y = b2Max(aabb.upperBound.y, b2Max(p1.y, p2_y)); + } + var callback = new b2ParticleSystem.SolveCollisionCallback(this, step); + this.m_world.QueryAABB(callback, aabb); + }; + b2ParticleSystem.prototype.LimitVelocity = function (step) { + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + var criticalVelocitySquared = this.GetCriticalVelocitySquared(step); + for (var i = 0; i < this.m_count; i++) { + var v = vel_data[i]; + var v2 = b2Vec2.DotVV(v, v); + v2 > criticalVelocitySquared && v.SelfMul(b2Sqrt(criticalVelocitySquared / v2)); + } + }; + b2ParticleSystem.prototype.SolveGravity = function (step) { + if (!this.m_velocityBuffer.data) throw new Error(); + var s_gravity = b2ParticleSystem.SolveGravity_s_gravity; + var vel_data = this.m_velocityBuffer.data; + var gravity = b2Vec2.MulSV(step.dt * this.m_def.gravityScale, this.m_world.GetGravity(), s_gravity); + for (var i = 0; i < this.m_count; i++) vel_data[i].SelfAdd(gravity); + }; + b2ParticleSystem.prototype.SolveBarrier = function (step) { + var s_aabb = b2ParticleSystem.SolveBarrier_s_aabb; + var s_va = b2ParticleSystem.SolveBarrier_s_va; + var s_vb = b2ParticleSystem.SolveBarrier_s_vb; + var s_pba = b2ParticleSystem.SolveBarrier_s_pba; + var s_vba = b2ParticleSystem.SolveBarrier_s_vba; + var s_vc = b2ParticleSystem.SolveBarrier_s_vc; + var s_pca = b2ParticleSystem.SolveBarrier_s_pca; + var s_vca = b2ParticleSystem.SolveBarrier_s_vca; + var s_qba = b2ParticleSystem.SolveBarrier_s_qba; + var s_qca = b2ParticleSystem.SolveBarrier_s_qca; + var s_dv = b2ParticleSystem.SolveBarrier_s_dv; + var s_f = b2ParticleSystem.SolveBarrier_s_f; + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + for (var i = 0; i < this.m_count; i++) { + var flags = this.m_flagsBuffer.data[i]; + 0 !== (flags & b2ParticleSystem.k_barrierWallFlags) && vel_data[i].SetZero(); + } + var tmax = b2_barrierCollisionTime * step.dt; + var mass = this.GetParticleMass(); + for (var k = 0; k < this.m_pairBuffer.count; k++) { + var pair = this.m_pairBuffer.data[k]; + if (pair.flags & exports.b2ParticleFlag.b2_barrierParticle) { + var a = pair.indexA; + var b = pair.indexB; + var pa = pos_data[a]; + var pb = pos_data[b]; + var aabb = s_aabb; + b2Vec2.MinV(pa, pb, aabb.lowerBound); + b2Vec2.MaxV(pa, pb, aabb.upperBound); + var aGroup = this.m_groupBuffer[a]; + var bGroup = this.m_groupBuffer[b]; + var va = this.GetLinearVelocity(aGroup, a, pa, s_va); + var vb = this.GetLinearVelocity(bGroup, b, pb, s_vb); + var pba = b2Vec2.SubVV(pb, pa, s_pba); + var vba = b2Vec2.SubVV(vb, va, s_vba); + var enumerator = this.GetInsideBoundsEnumerator(aabb); + var c = void 0; + while ((c = enumerator.GetNext()) >= 0) { + var pc = pos_data[c]; + var cGroup = this.m_groupBuffer[c]; + if (aGroup !== cGroup && bGroup !== cGroup) { + var vc = this.GetLinearVelocity(cGroup, c, pc, s_vc); + var pca = b2Vec2.SubVV(pc, pa, s_pca); + var vca = b2Vec2.SubVV(vc, va, s_vca); + var e2 = b2Vec2.CrossVV(vba, vca); + var e1 = b2Vec2.CrossVV(pba, vca) - b2Vec2.CrossVV(pca, vba); + var e0 = b2Vec2.CrossVV(pba, pca); + var s = void 0, t = void 0; + var qba = s_qba, qca = s_qca; + if (0 === e2) { + if (0 === e1) continue; + t = -e0 / e1; + if (!(t >= 0 && t < tmax)) continue; + b2Vec2.AddVMulSV(pba, t, vba, qba); + b2Vec2.AddVMulSV(pca, t, vca, qca); + s = b2Vec2.DotVV(qba, qca) / b2Vec2.DotVV(qba, qba); + if (!(s >= 0 && s <= 1)) continue; + } else { + var det = e1 * e1 - 4 * e0 * e2; + if (det < 0) continue; + var sqrtDet = b2Sqrt(det); + var t1 = (-e1 - sqrtDet) / (2 * e2); + var t2 = (-e1 + sqrtDet) / (2 * e2); + if (t1 > t2) { + var tmp = t1; + t1 = t2; + t2 = tmp; + } + t = t1; + b2Vec2.AddVMulSV(pba, t, vba, qba); + b2Vec2.AddVMulSV(pca, t, vca, qca); + s = b2Vec2.DotVV(qba, qca) / b2Vec2.DotVV(qba, qba); + if (!(t >= 0 && t < tmax && s >= 0 && s <= 1)) { + t = t2; + if (!(t >= 0 && t < tmax)) continue; + b2Vec2.AddVMulSV(pba, t, vba, qba); + b2Vec2.AddVMulSV(pca, t, vca, qca); + s = b2Vec2.DotVV(qba, qca) / b2Vec2.DotVV(qba, qba); + if (!(s >= 0 && s <= 1)) continue; + } + } + var dv = s_dv; + dv.x = va.x + s * vba.x - vc.x; + dv.y = va.y + s * vba.y - vc.y; + var f = b2Vec2.MulSV(mass, dv, s_f); + if (cGroup && this.IsRigidGroup(cGroup)) { + var mass_1 = cGroup.GetMass(); + var inertia = cGroup.GetInertia(); + mass_1 > 0 && cGroup.m_linearVelocity.SelfMulAdd(1 / mass_1, f); + inertia > 0 && (cGroup.m_angularVelocity += b2Vec2.CrossVV(b2Vec2.SubVV(pc, cGroup.GetCenter(), b2Vec2.s_t0), f) / inertia); + } else vel_data[c].SelfAdd(dv); + this.ParticleApplyForce(c, f.SelfMul(-step.inv_dt)); + } + } + } + } + }; + b2ParticleSystem.prototype.SolveStaticPressure = function (step) { + if (!this.m_flagsBuffer.data) throw new Error(); + this.m_staticPressureBuffer = this.RequestBuffer(this.m_staticPressureBuffer); + var criticalPressure = this.GetCriticalPressure(step); + var pressurePerWeight = this.m_def.staticPressureStrength * criticalPressure; + var maxPressure = b2_maxParticlePressure * criticalPressure; + var relaxation = this.m_def.staticPressureRelaxation; + for (var t = 0; t < this.m_def.staticPressureIterations; t++) { + for (var i = 0; i < this.m_count; i++) this.m_accumulationBuffer[i] = 0; + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + if (contact.flags & exports.b2ParticleFlag.b2_staticPressureParticle) { + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + this.m_accumulationBuffer[a] += w * this.m_staticPressureBuffer[b]; + this.m_accumulationBuffer[b] += w * this.m_staticPressureBuffer[a]; + } + } + for (var i = 0; i < this.m_count; i++) { + var w = this.m_weightBuffer[i]; + if (this.m_flagsBuffer.data[i] & exports.b2ParticleFlag.b2_staticPressureParticle) { + var wh = this.m_accumulationBuffer[i]; + var h = (wh + pressurePerWeight * (w - b2_minParticleWeight)) / (w + relaxation); + this.m_staticPressureBuffer[i] = b2Clamp(h, 0, maxPressure); + } else this.m_staticPressureBuffer[i] = 0; + } + } + }; + b2ParticleSystem.prototype.ComputeWeight = function () { + for (var k = 0; k < this.m_count; k++) this.m_weightBuffer[k] = 0; + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + var w = contact.weight; + this.m_weightBuffer[a] += w; + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + this.m_weightBuffer[a] += w; + this.m_weightBuffer[b] += w; + } + }; + b2ParticleSystem.prototype.SolvePressure = function (step) { + var s_f = b2ParticleSystem.SolvePressure_s_f; + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var criticalPressure = this.GetCriticalPressure(step); + var pressurePerWeight = this.m_def.pressureStrength * criticalPressure; + var maxPressure = b2_maxParticlePressure * criticalPressure; + for (var i = 0; i < this.m_count; i++) { + var w = this.m_weightBuffer[i]; + var h = pressurePerWeight * b2Max(0, w - b2_minParticleWeight); + this.m_accumulationBuffer[i] = b2Min(h, maxPressure); + } + if (this.m_allParticleFlags & b2ParticleSystem.k_noPressureFlags) for (var i = 0; i < this.m_count; i++) this.m_flagsBuffer.data[i] & b2ParticleSystem.k_noPressureFlags && (this.m_accumulationBuffer[i] = 0); + if (this.m_allParticleFlags & exports.b2ParticleFlag.b2_staticPressureParticle) for (var i = 0; i < this.m_count; i++) this.m_flagsBuffer.data[i] & exports.b2ParticleFlag.b2_staticPressureParticle && (this.m_accumulationBuffer[i] += this.m_staticPressureBuffer[i]); + var velocityPerPressure = step.dt / (this.m_def.density * this.m_particleDiameter); + var inv_mass = this.GetParticleInvMass(); + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + var b = contact.body; + var w = contact.weight; + var m = contact.mass; + var n = contact.normal; + var p = pos_data[a]; + var h = this.m_accumulationBuffer[a] + pressurePerWeight * w; + var f = b2Vec2.MulSV(velocityPerPressure * w * m * h, n, s_f); + vel_data[a].SelfMulSub(inv_mass, f); + b.ApplyLinearImpulse(f, p, true); + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + var n = contact.normal; + var h = this.m_accumulationBuffer[a] + this.m_accumulationBuffer[b]; + var f = b2Vec2.MulSV(velocityPerPressure * w * h, n, s_f); + vel_data[a].SelfSub(f); + vel_data[b].SelfAdd(f); + } + }; + b2ParticleSystem.prototype.SolveDamping = function (step) { + var s_v = b2ParticleSystem.SolveDamping_s_v; + var s_f = b2ParticleSystem.SolveDamping_s_f; + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var linearDamping = this.m_def.dampingStrength; + var quadraticDamping = 1 / this.GetCriticalVelocity(step); + var inv_mass = this.GetParticleInvMass(); + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + var b = contact.body; + var w = contact.weight; + var m = contact.mass; + var n = contact.normal; + var p = pos_data[a]; + var v = b2Vec2.SubVV(b.GetLinearVelocityFromWorldPoint(p, b2Vec2.s_t0), vel_data[a], s_v); + var vn = b2Vec2.DotVV(v, n); + if (vn < 0) { + var damping = b2Max(linearDamping * w, b2Min(-quadraticDamping * vn, .5)); + var f = b2Vec2.MulSV(damping * m * vn, n, s_f); + vel_data[a].SelfMulAdd(inv_mass, f); + b.ApplyLinearImpulse(f.SelfNeg(), p, true); + } + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + var n = contact.normal; + var v = b2Vec2.SubVV(vel_data[b], vel_data[a], s_v); + var vn = b2Vec2.DotVV(v, n); + if (vn < 0) { + var damping = b2Max(linearDamping * w, b2Min(-quadraticDamping * vn, .5)); + var f = b2Vec2.MulSV(damping * vn, n, s_f); + vel_data[a].SelfAdd(f); + vel_data[b].SelfSub(f); + } + } + }; + b2ParticleSystem.prototype.SolveRigidDamping = function () { + var s_t0 = b2ParticleSystem.SolveRigidDamping_s_t0; + var s_t1 = b2ParticleSystem.SolveRigidDamping_s_t1; + var s_p = b2ParticleSystem.SolveRigidDamping_s_p; + var s_v = b2ParticleSystem.SolveRigidDamping_s_v; + var invMassA = [0], invInertiaA = [0], tangentDistanceA = [0]; + var invMassB = [0], invInertiaB = [0], tangentDistanceB = [0]; + if (!this.m_positionBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var damping = this.m_def.dampingStrength; + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + var aGroup = this.m_groupBuffer[a]; + if (aGroup && this.IsRigidGroup(aGroup)) { + var b = contact.body; + var n = contact.normal; + var w = contact.weight; + var p = pos_data[a]; + var v = b2Vec2.SubVV(b.GetLinearVelocityFromWorldPoint(p, s_t0), aGroup.GetLinearVelocityFromWorldPoint(p, s_t1), s_v); + var vn = b2Vec2.DotVV(v, n); + if (vn < 0) { + this.InitDampingParameterWithRigidGroupOrParticle(invMassA, invInertiaA, tangentDistanceA, true, aGroup, a, p, n); + this.InitDampingParameter(invMassB, invInertiaB, tangentDistanceB, b.GetMass(), b.GetInertia() - b.GetMass() * b.GetLocalCenter().LengthSquared(), b.GetWorldCenter(), p, n); + var f = damping * b2Min(w, 1) * this.ComputeDampingImpulse(invMassA[0], invInertiaA[0], tangentDistanceA[0], invMassB[0], invInertiaB[0], tangentDistanceB[0], vn); + this.ApplyDamping(invMassA[0], invInertiaA[0], tangentDistanceA[0], true, aGroup, a, f, n); + b.ApplyLinearImpulse(b2Vec2.MulSV(-f, n, b2Vec2.s_t0), p, true); + } + } + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + var n = contact.normal; + var w = contact.weight; + var aGroup = this.m_groupBuffer[a]; + var bGroup = this.m_groupBuffer[b]; + var aRigid = this.IsRigidGroup(aGroup); + var bRigid = this.IsRigidGroup(bGroup); + if (aGroup !== bGroup && (aRigid || bRigid)) { + var p = b2Vec2.MidVV(pos_data[a], pos_data[b], s_p); + var v = b2Vec2.SubVV(this.GetLinearVelocity(bGroup, b, p, s_t0), this.GetLinearVelocity(aGroup, a, p, s_t1), s_v); + var vn = b2Vec2.DotVV(v, n); + if (vn < 0) { + this.InitDampingParameterWithRigidGroupOrParticle(invMassA, invInertiaA, tangentDistanceA, aRigid, aGroup, a, p, n); + this.InitDampingParameterWithRigidGroupOrParticle(invMassB, invInertiaB, tangentDistanceB, bRigid, bGroup, b, p, n); + var f = damping * w * this.ComputeDampingImpulse(invMassA[0], invInertiaA[0], tangentDistanceA[0], invMassB[0], invInertiaB[0], tangentDistanceB[0], vn); + this.ApplyDamping(invMassA[0], invInertiaA[0], tangentDistanceA[0], aRigid, aGroup, a, f, n); + this.ApplyDamping(invMassB[0], invInertiaB[0], tangentDistanceB[0], bRigid, bGroup, b, -f, n); + } + } + } + }; + b2ParticleSystem.prototype.SolveExtraDamping = function () { + var s_v = b2ParticleSystem.SolveExtraDamping_s_v; + var s_f = b2ParticleSystem.SolveExtraDamping_s_f; + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + var pos_data = this.m_positionBuffer.data; + var inv_mass = this.GetParticleInvMass(); + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + if (this.m_flagsBuffer.data[a] & b2ParticleSystem.k_extraDampingFlags) { + var b = contact.body; + var m = contact.mass; + var n = contact.normal; + var p = pos_data[a]; + var v = b2Vec2.SubVV(b.GetLinearVelocityFromWorldPoint(p, b2Vec2.s_t0), vel_data[a], s_v); + var vn = b2Vec2.DotVV(v, n); + if (vn < 0) { + var f = b2Vec2.MulSV(.5 * m * vn, n, s_f); + vel_data[a].SelfMulAdd(inv_mass, f); + b.ApplyLinearImpulse(f.SelfNeg(), p, true); + } + } + } + }; + b2ParticleSystem.prototype.SolveWall = function () { + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + for (var i = 0; i < this.m_count; i++) this.m_flagsBuffer.data[i] & exports.b2ParticleFlag.b2_wallParticle && vel_data[i].SetZero(); + }; + b2ParticleSystem.prototype.SolveRigid = function (step) { + var s_position = b2ParticleSystem.SolveRigid_s_position; + var s_rotation = b2ParticleSystem.SolveRigid_s_rotation; + var s_transform = b2ParticleSystem.SolveRigid_s_transform; + var s_velocityTransform = b2ParticleSystem.SolveRigid_s_velocityTransform; + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + for (var group = this.m_groupList; group; group = group.GetNext()) if (group.m_groupFlags & exports.b2ParticleGroupFlag.b2_rigidParticleGroup) { + group.UpdateStatistics(); + var rotation = s_rotation; + rotation.SetAngle(step.dt * group.m_angularVelocity); + var position = b2Vec2.AddVV(group.m_center, b2Vec2.SubVV(b2Vec2.MulSV(step.dt, group.m_linearVelocity, b2Vec2.s_t0), b2Rot.MulRV(rotation, group.m_center, b2Vec2.s_t1), b2Vec2.s_t0), s_position); + var transform = s_transform; + transform.SetPositionRotation(position, rotation); + b2Transform.MulXX(transform, group.m_transform, group.m_transform); + var velocityTransform = s_velocityTransform; + velocityTransform.p.x = step.inv_dt * transform.p.x; + velocityTransform.p.y = step.inv_dt * transform.p.y; + velocityTransform.q.s = step.inv_dt * transform.q.s; + velocityTransform.q.c = step.inv_dt * (transform.q.c - 1); + for (var i = group.m_firstIndex; i < group.m_lastIndex; i++) b2Transform.MulXV(velocityTransform, pos_data[i], vel_data[i]); + } + }; + b2ParticleSystem.prototype.SolveElastic = function (step) { + var s_pa = b2ParticleSystem.SolveElastic_s_pa; + var s_pb = b2ParticleSystem.SolveElastic_s_pb; + var s_pc = b2ParticleSystem.SolveElastic_s_pc; + var s_r = b2ParticleSystem.SolveElastic_s_r; + var s_t0 = b2ParticleSystem.SolveElastic_s_t0; + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var elasticStrength = step.inv_dt * this.m_def.elasticStrength; + for (var k = 0; k < this.m_triadBuffer.count; k++) { + var triad = this.m_triadBuffer.data[k]; + if (triad.flags & exports.b2ParticleFlag.b2_elasticParticle) { + var a = triad.indexA; + var b = triad.indexB; + var c = triad.indexC; + var oa = triad.pa; + var ob = triad.pb; + var oc = triad.pc; + var pa = s_pa.Copy(pos_data[a]); + var pb = s_pb.Copy(pos_data[b]); + var pc = s_pc.Copy(pos_data[c]); + var va = vel_data[a]; + var vb = vel_data[b]; + var vc = vel_data[c]; + pa.SelfMulAdd(step.dt, va); + pb.SelfMulAdd(step.dt, vb); + pc.SelfMulAdd(step.dt, vc); + var midPoint_x = (pa.x + pb.x + pc.x) / 3; + var midPoint_y = (pa.y + pb.y + pc.y) / 3; + pa.x -= midPoint_x; + pa.y -= midPoint_y; + pb.x -= midPoint_x; + pb.y -= midPoint_y; + pc.x -= midPoint_x; + pc.y -= midPoint_y; + var r = s_r; + r.s = b2Vec2.CrossVV(oa, pa) + b2Vec2.CrossVV(ob, pb) + b2Vec2.CrossVV(oc, pc); + r.c = b2Vec2.DotVV(oa, pa) + b2Vec2.DotVV(ob, pb) + b2Vec2.DotVV(oc, pc); + var r2 = r.s * r.s + r.c * r.c; + var invR = b2InvSqrt(r2); + isFinite(invR) || (invR = 198177537e11); + r.s *= invR; + r.c *= invR; + var strength = elasticStrength * triad.strength; + b2Rot.MulRV(r, oa, s_t0); + b2Vec2.SubVV(s_t0, pa, s_t0); + b2Vec2.MulSV(strength, s_t0, s_t0); + va.SelfAdd(s_t0); + b2Rot.MulRV(r, ob, s_t0); + b2Vec2.SubVV(s_t0, pb, s_t0); + b2Vec2.MulSV(strength, s_t0, s_t0); + vb.SelfAdd(s_t0); + b2Rot.MulRV(r, oc, s_t0); + b2Vec2.SubVV(s_t0, pc, s_t0); + b2Vec2.MulSV(strength, s_t0, s_t0); + vc.SelfAdd(s_t0); + } + } + }; + b2ParticleSystem.prototype.SolveSpring = function (step) { + var s_pa = b2ParticleSystem.SolveSpring_s_pa; + var s_pb = b2ParticleSystem.SolveSpring_s_pb; + var s_d = b2ParticleSystem.SolveSpring_s_d; + var s_f = b2ParticleSystem.SolveSpring_s_f; + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var springStrength = step.inv_dt * this.m_def.springStrength; + for (var k = 0; k < this.m_pairBuffer.count; k++) { + var pair = this.m_pairBuffer.data[k]; + if (pair.flags & exports.b2ParticleFlag.b2_springParticle) { + var a = pair.indexA; + var b = pair.indexB; + var pa = s_pa.Copy(pos_data[a]); + var pb = s_pb.Copy(pos_data[b]); + var va = vel_data[a]; + var vb = vel_data[b]; + pa.SelfMulAdd(step.dt, va); + pb.SelfMulAdd(step.dt, vb); + var d = b2Vec2.SubVV(pb, pa, s_d); + var r0 = pair.distance; + var r1 = d.Length(); + var strength = springStrength * pair.strength; + var f = b2Vec2.MulSV(strength * (r0 - r1) / r1, d, s_f); + va.SelfSub(f); + vb.SelfAdd(f); + } + } + }; + b2ParticleSystem.prototype.SolveTensile = function (step) { + var s_weightedNormal = b2ParticleSystem.SolveTensile_s_weightedNormal; + var s_s = b2ParticleSystem.SolveTensile_s_s; + var s_f = b2ParticleSystem.SolveTensile_s_f; + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + for (var i = 0; i < this.m_count; i++) { + this.m_accumulation2Buffer[i] = new b2Vec2(); + this.m_accumulation2Buffer[i].SetZero(); + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + if (contact.flags & exports.b2ParticleFlag.b2_tensileParticle) { + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + var n = contact.normal; + var weightedNormal = b2Vec2.MulSV((1 - w) * w, n, s_weightedNormal); + this.m_accumulation2Buffer[a].SelfSub(weightedNormal); + this.m_accumulation2Buffer[b].SelfAdd(weightedNormal); + } + } + var criticalVelocity = this.GetCriticalVelocity(step); + var pressureStrength = this.m_def.surfaceTensionPressureStrength * criticalVelocity; + var normalStrength = this.m_def.surfaceTensionNormalStrength * criticalVelocity; + var maxVelocityVariation = b2_maxParticleForce * criticalVelocity; + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + if (contact.flags & exports.b2ParticleFlag.b2_tensileParticle) { + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + var n = contact.normal; + var h = this.m_weightBuffer[a] + this.m_weightBuffer[b]; + var s = b2Vec2.SubVV(this.m_accumulation2Buffer[b], this.m_accumulation2Buffer[a], s_s); + var fn = b2Min(pressureStrength * (h - 2) + normalStrength * b2Vec2.DotVV(s, n), maxVelocityVariation) * w; + var f = b2Vec2.MulSV(fn, n, s_f); + vel_data[a].SelfSub(f); + vel_data[b].SelfAdd(f); + } + } + }; + b2ParticleSystem.prototype.SolveViscous = function () { + var s_v = b2ParticleSystem.SolveViscous_s_v; + var s_f = b2ParticleSystem.SolveViscous_s_f; + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var viscousStrength = this.m_def.viscousStrength; + var inv_mass = this.GetParticleInvMass(); + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + if (this.m_flagsBuffer.data[a] & exports.b2ParticleFlag.b2_viscousParticle) { + var b = contact.body; + var w = contact.weight; + var m = contact.mass; + var p = pos_data[a]; + var v = b2Vec2.SubVV(b.GetLinearVelocityFromWorldPoint(p, b2Vec2.s_t0), vel_data[a], s_v); + var f = b2Vec2.MulSV(viscousStrength * m * w, v, s_f); + vel_data[a].SelfMulAdd(inv_mass, f); + b.ApplyLinearImpulse(f.SelfNeg(), p, true); + } + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + if (contact.flags & exports.b2ParticleFlag.b2_viscousParticle) { + var a = contact.indexA; + var b = contact.indexB; + var w = contact.weight; + var v = b2Vec2.SubVV(vel_data[b], vel_data[a], s_v); + var f = b2Vec2.MulSV(viscousStrength * w, v, s_f); + vel_data[a].SelfAdd(f); + vel_data[b].SelfSub(f); + } + } + }; + b2ParticleSystem.prototype.SolveRepulsive = function (step) { + var s_f = b2ParticleSystem.SolveRepulsive_s_f; + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + var repulsiveStrength = this.m_def.repulsiveStrength * this.GetCriticalVelocity(step); + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + if (contact.flags & exports.b2ParticleFlag.b2_repulsiveParticle) { + var a = contact.indexA; + var b = contact.indexB; + if (this.m_groupBuffer[a] !== this.m_groupBuffer[b]) { + var w = contact.weight; + var n = contact.normal; + var f = b2Vec2.MulSV(repulsiveStrength * w, n, s_f); + vel_data[a].SelfSub(f); + vel_data[b].SelfAdd(f); + } + } + } + }; + b2ParticleSystem.prototype.SolvePowder = function (step) { + var s_f = b2ParticleSystem.SolvePowder_s_f; + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var pos_data = this.m_positionBuffer.data; + var vel_data = this.m_velocityBuffer.data; + var powderStrength = this.m_def.powderStrength * this.GetCriticalVelocity(step); + var minWeight = 1 - b2_particleStride; + var inv_mass = this.GetParticleInvMass(); + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + var a = contact.index; + if (this.m_flagsBuffer.data[a] & exports.b2ParticleFlag.b2_powderParticle) { + var w = contact.weight; + if (w > minWeight) { + var b = contact.body; + var m = contact.mass; + var p = pos_data[a]; + var n = contact.normal; + var f = b2Vec2.MulSV(powderStrength * m * (w - minWeight), n, s_f); + vel_data[a].SelfMulSub(inv_mass, f); + b.ApplyLinearImpulse(f, p, true); + } + } + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + if (contact.flags & exports.b2ParticleFlag.b2_powderParticle) { + var w = contact.weight; + if (w > minWeight) { + var a = contact.indexA; + var b = contact.indexB; + var n = contact.normal; + var f = b2Vec2.MulSV(powderStrength * (w - minWeight), n, s_f); + vel_data[a].SelfSub(f); + vel_data[b].SelfAdd(f); + } + } + } + }; + b2ParticleSystem.prototype.SolveSolid = function (step) { + var s_f = b2ParticleSystem.SolveSolid_s_f; + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + this.m_depthBuffer = this.RequestBuffer(this.m_depthBuffer); + var ejectionStrength = step.inv_dt * this.m_def.ejectionStrength; + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + if (this.m_groupBuffer[a] !== this.m_groupBuffer[b]) { + var w = contact.weight; + var n = contact.normal; + var h = this.m_depthBuffer[a] + this.m_depthBuffer[b]; + var f = b2Vec2.MulSV(ejectionStrength * h * w, n, s_f); + vel_data[a].SelfSub(f); + vel_data[b].SelfAdd(f); + } + } + }; + b2ParticleSystem.prototype.SolveForce = function (step) { + if (!this.m_velocityBuffer.data) throw new Error(); + var vel_data = this.m_velocityBuffer.data; + var velocityPerForce = step.dt * this.GetParticleInvMass(); + for (var i = 0; i < this.m_count; i++) vel_data[i].SelfMulAdd(velocityPerForce, this.m_forceBuffer[i]); + this.m_hasForce = false; + }; + b2ParticleSystem.prototype.SolveColorMixing = function () { + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_colorBuffer.data) throw new Error(); + var colorMixing = .5 * this.m_def.colorMixingStrength; + if (colorMixing) for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + var a = contact.indexA; + var b = contact.indexB; + if (this.m_flagsBuffer.data[a] & this.m_flagsBuffer.data[b] & exports.b2ParticleFlag.b2_colorMixingParticle) { + var colorA = this.m_colorBuffer.data[a]; + var colorB = this.m_colorBuffer.data[b]; + b2Color.MixColors(colorA, colorB, colorMixing); + } + } + }; + b2ParticleSystem.prototype.SolveZombie = function () { + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + var newCount = 0; + var newIndices = []; + for (var i = 0; i < this.m_count; i++) newIndices[i] = b2_invalidParticleIndex; + var allParticleFlags = 0; + for (var i = 0; i < this.m_count; i++) { + var flags = this.m_flagsBuffer.data[i]; + if (flags & exports.b2ParticleFlag.b2_zombieParticle) { + var destructionListener = this.m_world.m_destructionListener; + flags & exports.b2ParticleFlag.b2_destructionListenerParticle && destructionListener && destructionListener.SayGoodbyeParticle(this, i); + if (this.m_handleIndexBuffer.data) { + var handle = this.m_handleIndexBuffer.data[i]; + if (handle) { + handle.SetIndex(b2_invalidParticleIndex); + this.m_handleIndexBuffer.data[i] = null; + } + } + newIndices[i] = b2_invalidParticleIndex; + } else { + newIndices[i] = newCount; + if (i !== newCount) { + if (this.m_handleIndexBuffer.data) { + var handle = this.m_handleIndexBuffer.data[i]; + handle && handle.SetIndex(newCount); + this.m_handleIndexBuffer.data[newCount] = handle; + } + this.m_flagsBuffer.data[newCount] = this.m_flagsBuffer.data[i]; + this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[newCount] = this.m_lastBodyContactStepBuffer.data[i]); + this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[newCount] = this.m_bodyContactCountBuffer.data[i]); + this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[newCount] = this.m_consecutiveContactStepsBuffer.data[i]); + this.m_positionBuffer.data[newCount].Copy(this.m_positionBuffer.data[i]); + this.m_velocityBuffer.data[newCount].Copy(this.m_velocityBuffer.data[i]); + this.m_groupBuffer[newCount] = this.m_groupBuffer[i]; + this.m_hasForce && this.m_forceBuffer[newCount].Copy(this.m_forceBuffer[i]); + this.m_staticPressureBuffer && (this.m_staticPressureBuffer[newCount] = this.m_staticPressureBuffer[i]); + this.m_depthBuffer && (this.m_depthBuffer[newCount] = this.m_depthBuffer[i]); + this.m_colorBuffer.data && this.m_colorBuffer.data[newCount].Copy(this.m_colorBuffer.data[i]); + this.m_userDataBuffer.data && (this.m_userDataBuffer.data[newCount] = this.m_userDataBuffer.data[i]); + this.m_expirationTimeBuffer.data && (this.m_expirationTimeBuffer.data[newCount] = this.m_expirationTimeBuffer.data[i]); + } + newCount++; + allParticleFlags |= flags; + } + } + var Test = { + IsProxyInvalid: function IsProxyInvalid(proxy) { + return proxy.index < 0; + }, + IsContactInvalid: function IsContactInvalid(contact) { + return contact.indexA < 0 || contact.indexB < 0; + }, + IsBodyContactInvalid: function IsBodyContactInvalid(contact) { + return contact.index < 0; + }, + IsPairInvalid: function IsPairInvalid(pair) { + return pair.indexA < 0 || pair.indexB < 0; + }, + IsTriadInvalid: function IsTriadInvalid(triad) { + return triad.indexA < 0 || triad.indexB < 0 || triad.indexC < 0; + } + }; + for (var k = 0; k < this.m_proxyBuffer.count; k++) { + var proxy = this.m_proxyBuffer.data[k]; + proxy.index = newIndices[proxy.index]; + } + this.m_proxyBuffer.RemoveIf(Test.IsProxyInvalid); + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + contact.indexA = newIndices[contact.indexA]; + contact.indexB = newIndices[contact.indexB]; + } + this.m_contactBuffer.RemoveIf(Test.IsContactInvalid); + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + contact.index = newIndices[contact.index]; + } + this.m_bodyContactBuffer.RemoveIf(Test.IsBodyContactInvalid); + for (var k = 0; k < this.m_pairBuffer.count; k++) { + var pair = this.m_pairBuffer.data[k]; + pair.indexA = newIndices[pair.indexA]; + pair.indexB = newIndices[pair.indexB]; + } + this.m_pairBuffer.RemoveIf(Test.IsPairInvalid); + for (var k = 0; k < this.m_triadBuffer.count; k++) { + var triad = this.m_triadBuffer.data[k]; + triad.indexA = newIndices[triad.indexA]; + triad.indexB = newIndices[triad.indexB]; + triad.indexC = newIndices[triad.indexC]; + } + this.m_triadBuffer.RemoveIf(Test.IsTriadInvalid); + if (this.m_indexByExpirationTimeBuffer.data) { + var writeOffset = 0; + for (var readOffset = 0; readOffset < this.m_count; readOffset++) { + var newIndex = newIndices[this.m_indexByExpirationTimeBuffer.data[readOffset]]; + newIndex !== b2_invalidParticleIndex && (this.m_indexByExpirationTimeBuffer.data[writeOffset++] = newIndex); + } + } + for (var group = this.m_groupList; group; group = group.GetNext()) { + var firstIndex = newCount; + var lastIndex = 0; + var modified = false; + for (var i = group.m_firstIndex; i < group.m_lastIndex; i++) { + var j = newIndices[i]; + if (j >= 0) { + firstIndex = b2Min(firstIndex, j); + lastIndex = b2Max(lastIndex, j + 1); + } else modified = true; + } + if (firstIndex < lastIndex) { + group.m_firstIndex = firstIndex; + group.m_lastIndex = lastIndex; + modified && group.m_groupFlags & exports.b2ParticleGroupFlag.b2_solidParticleGroup && this.SetGroupFlags(group, group.m_groupFlags | exports.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth); + } else { + group.m_firstIndex = 0; + group.m_lastIndex = 0; + group.m_groupFlags & exports.b2ParticleGroupFlag.b2_particleGroupCanBeEmpty || this.SetGroupFlags(group, group.m_groupFlags | exports.b2ParticleGroupFlag.b2_particleGroupWillBeDestroyed); + } + } + this.m_count = newCount; + this.m_allParticleFlags = allParticleFlags; + this.m_needsUpdateAllParticleFlags = false; + for (var group = this.m_groupList; group;) { + var next = group.GetNext(); + group.m_groupFlags & exports.b2ParticleGroupFlag.b2_particleGroupWillBeDestroyed && this.DestroyParticleGroup(group); + group = next; + } + }; + b2ParticleSystem.prototype.SolveLifetimes = function (step) { + if (!this.m_expirationTimeBuffer.data) throw new Error(); + if (!this.m_indexByExpirationTimeBuffer.data) throw new Error(); + this.m_timeElapsed = this.LifetimeToExpirationTime(step.dt); + var quantizedTimeElapsed = this.GetQuantizedTimeElapsed(); + var expirationTimes = this.m_expirationTimeBuffer.data; + var expirationTimeIndices = this.m_indexByExpirationTimeBuffer.data; + var particleCount = this.GetParticleCount(); + if (this.m_expirationTimeBufferRequiresSorting) { + var ExpirationTimeComparator = function ExpirationTimeComparator(particleIndexA, particleIndexB) { + var expirationTimeA = expirationTimes[particleIndexA]; + var expirationTimeB = expirationTimes[particleIndexB]; + var infiniteExpirationTimeA = expirationTimeA <= 0; + var infiniteExpirationTimeB = expirationTimeB <= 0; + return infiniteExpirationTimeA === infiniteExpirationTimeB ? expirationTimeA > expirationTimeB : infiniteExpirationTimeA; + }; + std_sort(expirationTimeIndices, 0, particleCount, ExpirationTimeComparator); + this.m_expirationTimeBufferRequiresSorting = false; + } + for (var i = particleCount - 1; i >= 0; --i) { + var particleIndex = expirationTimeIndices[i]; + var expirationTime = expirationTimes[particleIndex]; + if (quantizedTimeElapsed < expirationTime || expirationTime <= 0) break; + this.DestroyParticle(particleIndex); + } + }; + b2ParticleSystem.prototype.RotateBuffer = function (start, mid, end) { + if (start === mid || mid === end) return; + function newIndices(i) { + return i < start ? i : i < mid ? i + end - mid : i < end ? i + start - mid : i; + } + if (!this.m_flagsBuffer.data) throw new Error(); + if (!this.m_positionBuffer.data) throw new Error(); + if (!this.m_velocityBuffer.data) throw new Error(); + std_rotate(this.m_flagsBuffer.data, start, mid, end); + this.m_lastBodyContactStepBuffer.data && std_rotate(this.m_lastBodyContactStepBuffer.data, start, mid, end); + this.m_bodyContactCountBuffer.data && std_rotate(this.m_bodyContactCountBuffer.data, start, mid, end); + this.m_consecutiveContactStepsBuffer.data && std_rotate(this.m_consecutiveContactStepsBuffer.data, start, mid, end); + std_rotate(this.m_positionBuffer.data, start, mid, end); + std_rotate(this.m_velocityBuffer.data, start, mid, end); + std_rotate(this.m_groupBuffer, start, mid, end); + this.m_hasForce && std_rotate(this.m_forceBuffer, start, mid, end); + this.m_staticPressureBuffer && std_rotate(this.m_staticPressureBuffer, start, mid, end); + this.m_depthBuffer && std_rotate(this.m_depthBuffer, start, mid, end); + this.m_colorBuffer.data && std_rotate(this.m_colorBuffer.data, start, mid, end); + this.m_userDataBuffer.data && std_rotate(this.m_userDataBuffer.data, start, mid, end); + if (this.m_handleIndexBuffer.data) { + std_rotate(this.m_handleIndexBuffer.data, start, mid, end); + for (var i = start; i < end; ++i) { + var handle = this.m_handleIndexBuffer.data[i]; + handle && handle.SetIndex(newIndices(handle.GetIndex())); + } + } + if (this.m_expirationTimeBuffer.data) { + std_rotate(this.m_expirationTimeBuffer.data, start, mid, end); + var particleCount = this.GetParticleCount(); + if (!this.m_indexByExpirationTimeBuffer.data) throw new Error(); + var indexByExpirationTime = this.m_indexByExpirationTimeBuffer.data; + for (var i = 0; i < particleCount; ++i) indexByExpirationTime[i] = newIndices(indexByExpirationTime[i]); + } + for (var k = 0; k < this.m_proxyBuffer.count; k++) { + var proxy = this.m_proxyBuffer.data[k]; + proxy.index = newIndices(proxy.index); + } + for (var k = 0; k < this.m_contactBuffer.count; k++) { + var contact = this.m_contactBuffer.data[k]; + contact.indexA = newIndices(contact.indexA); + contact.indexB = newIndices(contact.indexB); + } + for (var k = 0; k < this.m_bodyContactBuffer.count; k++) { + var contact = this.m_bodyContactBuffer.data[k]; + contact.index = newIndices(contact.index); + } + for (var k = 0; k < this.m_pairBuffer.count; k++) { + var pair = this.m_pairBuffer.data[k]; + pair.indexA = newIndices(pair.indexA); + pair.indexB = newIndices(pair.indexB); + } + for (var k = 0; k < this.m_triadBuffer.count; k++) { + var triad = this.m_triadBuffer.data[k]; + triad.indexA = newIndices(triad.indexA); + triad.indexB = newIndices(triad.indexB); + triad.indexC = newIndices(triad.indexC); + } + for (var group = this.m_groupList; group; group = group.GetNext()) { + group.m_firstIndex = newIndices(group.m_firstIndex); + group.m_lastIndex = newIndices(group.m_lastIndex - 1) + 1; + } + }; + b2ParticleSystem.prototype.GetCriticalVelocity = function (step) { + return this.m_particleDiameter * step.inv_dt; + }; + b2ParticleSystem.prototype.GetCriticalVelocitySquared = function (step) { + var velocity = this.GetCriticalVelocity(step); + return velocity * velocity; + }; + b2ParticleSystem.prototype.GetCriticalPressure = function (step) { + return this.m_def.density * this.GetCriticalVelocitySquared(step); + }; + b2ParticleSystem.prototype.GetParticleStride = function () { + return b2_particleStride * this.m_particleDiameter; + }; + b2ParticleSystem.prototype.GetParticleMass = function () { + var stride = this.GetParticleStride(); + return this.m_def.density * stride * stride; + }; + b2ParticleSystem.prototype.GetParticleInvMass = function () { + var inverseStride = this.m_inverseDiameter * (1 / b2_particleStride); + return this.m_inverseDensity * inverseStride * inverseStride; + }; + b2ParticleSystem.prototype.GetFixtureContactFilter = function () { + return this.m_allParticleFlags & exports.b2ParticleFlag.b2_fixtureContactFilterParticle ? this.m_world.m_contactManager.m_contactFilter : null; + }; + b2ParticleSystem.prototype.GetParticleContactFilter = function () { + return this.m_allParticleFlags & exports.b2ParticleFlag.b2_particleContactFilterParticle ? this.m_world.m_contactManager.m_contactFilter : null; + }; + b2ParticleSystem.prototype.GetFixtureContactListener = function () { + return this.m_allParticleFlags & exports.b2ParticleFlag.b2_fixtureContactListenerParticle ? this.m_world.m_contactManager.m_contactListener : null; + }; + b2ParticleSystem.prototype.GetParticleContactListener = function () { + return this.m_allParticleFlags & exports.b2ParticleFlag.b2_particleContactListenerParticle ? this.m_world.m_contactManager.m_contactListener : null; + }; + b2ParticleSystem.prototype.SetUserOverridableBuffer = function (buffer, newData, newCapacity) { + buffer.data = newData; + buffer.userSuppliedCapacity = newCapacity; + }; + b2ParticleSystem.prototype.SetGroupFlags = function (group, newFlags) { + var oldFlags = group.m_groupFlags; + (oldFlags ^ newFlags) & exports.b2ParticleGroupFlag.b2_solidParticleGroup && (newFlags |= exports.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth); + oldFlags & ~newFlags && (this.m_needsUpdateAllGroupFlags = true); + if (~this.m_allGroupFlags & newFlags) { + newFlags & exports.b2ParticleGroupFlag.b2_solidParticleGroup && (this.m_depthBuffer = this.RequestBuffer(this.m_depthBuffer)); + this.m_allGroupFlags |= newFlags; + } + group.m_groupFlags = newFlags; + }; + b2ParticleSystem.BodyContactCompare = function (lhs, rhs) { + if (lhs.index === rhs.index) return lhs.weight > rhs.weight; + return lhs.index < rhs.index; + }; + b2ParticleSystem.prototype.RemoveSpuriousBodyContacts = function () { + std_sort(this.m_bodyContactBuffer.data, 0, this.m_bodyContactBuffer.count, b2ParticleSystem.BodyContactCompare); + var s_n = b2ParticleSystem.RemoveSpuriousBodyContacts_s_n; + var s_pos = b2ParticleSystem.RemoveSpuriousBodyContacts_s_pos; + var s_normal = b2ParticleSystem.RemoveSpuriousBodyContacts_s_normal; + var k_maxContactsPerPoint = 3; + var system = this; + var lastIndex = -1; + var currentContacts = 0; + var b2ParticleBodyContactRemovePredicate = function b2ParticleBodyContactRemovePredicate(contact) { + if (contact.index !== lastIndex) { + currentContacts = 0; + lastIndex = contact.index; + } + if (currentContacts++ > k_maxContactsPerPoint) return true; + var n = s_n.Copy(contact.normal); + n.SelfMul(system.m_particleDiameter * (1 - contact.weight)); + if (!system.m_positionBuffer.data) throw new Error(); + var pos = b2Vec2.AddVV(system.m_positionBuffer.data[contact.index], n, s_pos); + if (!contact.fixture.TestPoint(pos)) { + var childCount = contact.fixture.GetShape().GetChildCount(); + for (var childIndex = 0; childIndex < childCount; childIndex++) { + var normal = s_normal; + var distance = contact.fixture.ComputeDistance(pos, normal, childIndex); + if (distance < b2_linearSlop) return false; + } + return true; + } + return false; + }; + this.m_bodyContactBuffer.count = std_remove_if(this.m_bodyContactBuffer.data, b2ParticleBodyContactRemovePredicate, this.m_bodyContactBuffer.count); + }; + b2ParticleSystem.prototype.DetectStuckParticle = function (particle) { + if (this.m_stuckThreshold <= 0) return; + if (!this.m_bodyContactCountBuffer.data) throw new Error(); + if (!this.m_consecutiveContactStepsBuffer.data) throw new Error(); + if (!this.m_lastBodyContactStepBuffer.data) throw new Error(); + ++this.m_bodyContactCountBuffer.data[particle]; + if (2 === this.m_bodyContactCountBuffer.data[particle]) { + ++this.m_consecutiveContactStepsBuffer.data[particle]; + this.m_consecutiveContactStepsBuffer.data[particle] > this.m_stuckThreshold && (this.m_stuckParticleBuffer.data[this.m_stuckParticleBuffer.Append()] = particle); + } + this.m_lastBodyContactStepBuffer.data[particle] = this.m_timestamp; + }; + b2ParticleSystem.prototype.ValidateParticleIndex = function (index) { + return index >= 0 && index < this.GetParticleCount() && index !== b2_invalidParticleIndex; + }; + b2ParticleSystem.prototype.GetQuantizedTimeElapsed = function () { + return Math.floor(this.m_timeElapsed / 4294967296); + }; + b2ParticleSystem.prototype.LifetimeToExpirationTime = function (lifetime) { + return this.m_timeElapsed + Math.floor(lifetime / this.m_def.lifetimeGranularity * 4294967296); + }; + b2ParticleSystem.prototype.ForceCanBeApplied = function (flags) { + return !(flags & exports.b2ParticleFlag.b2_wallParticle); + }; + b2ParticleSystem.prototype.PrepareForceBuffer = function () { + if (!this.m_hasForce) { + for (var i = 0; i < this.m_count; i++) this.m_forceBuffer[i].SetZero(); + this.m_hasForce = true; + } + }; + b2ParticleSystem.prototype.IsRigidGroup = function (group) { + return null !== group && 0 !== (group.m_groupFlags & exports.b2ParticleGroupFlag.b2_rigidParticleGroup); + }; + b2ParticleSystem.prototype.GetLinearVelocity = function (group, particleIndex, point, out) { + if (group && this.IsRigidGroup(group)) return group.GetLinearVelocityFromWorldPoint(point, out); + if (!this.m_velocityBuffer.data) throw new Error(); + return out.Copy(this.m_velocityBuffer.data[particleIndex]); + }; + b2ParticleSystem.prototype.InitDampingParameter = function (invMass, invInertia, tangentDistance, mass, inertia, center, point, normal) { + invMass[0] = mass > 0 ? 1 / mass : 0; + invInertia[0] = inertia > 0 ? 1 / inertia : 0; + tangentDistance[0] = b2Vec2.CrossVV(b2Vec2.SubVV(point, center, b2Vec2.s_t0), normal); + }; + b2ParticleSystem.prototype.InitDampingParameterWithRigidGroupOrParticle = function (invMass, invInertia, tangentDistance, isRigidGroup, group, particleIndex, point, normal) { + if (group && isRigidGroup) this.InitDampingParameter(invMass, invInertia, tangentDistance, group.GetMass(), group.GetInertia(), group.GetCenter(), point, normal); else { + if (!this.m_flagsBuffer.data) throw new Error(); + var flags = this.m_flagsBuffer.data[particleIndex]; + this.InitDampingParameter(invMass, invInertia, tangentDistance, flags & exports.b2ParticleFlag.b2_wallParticle ? 0 : this.GetParticleMass(), 0, point, point, normal); + } + }; + b2ParticleSystem.prototype.ComputeDampingImpulse = function (invMassA, invInertiaA, tangentDistanceA, invMassB, invInertiaB, tangentDistanceB, normalVelocity) { + var invMass = invMassA + invInertiaA * tangentDistanceA * tangentDistanceA + invMassB + invInertiaB * tangentDistanceB * tangentDistanceB; + return invMass > 0 ? normalVelocity / invMass : 0; + }; + b2ParticleSystem.prototype.ApplyDamping = function (invMass, invInertia, tangentDistance, isRigidGroup, group, particleIndex, impulse, normal) { + if (group && isRigidGroup) { + group.m_linearVelocity.SelfMulAdd(impulse * invMass, normal); + group.m_angularVelocity += impulse * tangentDistance * invInertia; + } else { + if (!this.m_velocityBuffer.data) throw new Error(); + this.m_velocityBuffer.data[particleIndex].SelfMulAdd(impulse * invMass, normal); + } + }; + b2ParticleSystem.xTruncBits = 12; + b2ParticleSystem.yTruncBits = 12; + b2ParticleSystem.tagBits = 32; + b2ParticleSystem.yOffset = 1 << b2ParticleSystem.yTruncBits - 1; + b2ParticleSystem.yShift = b2ParticleSystem.tagBits - b2ParticleSystem.yTruncBits; + b2ParticleSystem.xShift = b2ParticleSystem.tagBits - b2ParticleSystem.yTruncBits - b2ParticleSystem.xTruncBits; + b2ParticleSystem.xScale = 1 << b2ParticleSystem.xShift; + b2ParticleSystem.xOffset = b2ParticleSystem.xScale * (1 << b2ParticleSystem.xTruncBits - 1); + b2ParticleSystem.yMask = (1 << b2ParticleSystem.yTruncBits) - 1 << b2ParticleSystem.yShift; + b2ParticleSystem.xMask = ~b2ParticleSystem.yMask; + b2ParticleSystem.DestroyParticlesInShape_s_aabb = new b2AABB(); + b2ParticleSystem.CreateParticleGroup_s_transform = new b2Transform(); + b2ParticleSystem.ComputeCollisionEnergy_s_v = new b2Vec2(); + b2ParticleSystem.QueryShapeAABB_s_aabb = new b2AABB(); + b2ParticleSystem.QueryPointAABB_s_aabb = new b2AABB(); + b2ParticleSystem.RayCast_s_aabb = new b2AABB(); + b2ParticleSystem.RayCast_s_p = new b2Vec2(); + b2ParticleSystem.RayCast_s_v = new b2Vec2(); + b2ParticleSystem.RayCast_s_n = new b2Vec2(); + b2ParticleSystem.RayCast_s_point = new b2Vec2(); + b2ParticleSystem.k_pairFlags = exports.b2ParticleFlag.b2_springParticle; + b2ParticleSystem.k_triadFlags = exports.b2ParticleFlag.b2_elasticParticle; + b2ParticleSystem.k_noPressureFlags = exports.b2ParticleFlag.b2_powderParticle | exports.b2ParticleFlag.b2_tensileParticle; + b2ParticleSystem.k_extraDampingFlags = exports.b2ParticleFlag.b2_staticPressureParticle; + b2ParticleSystem.k_barrierWallFlags = exports.b2ParticleFlag.b2_barrierParticle | exports.b2ParticleFlag.b2_wallParticle; + b2ParticleSystem.CreateParticlesStrokeShapeForGroup_s_edge = new b2EdgeShape(); + b2ParticleSystem.CreateParticlesStrokeShapeForGroup_s_d = new b2Vec2(); + b2ParticleSystem.CreateParticlesStrokeShapeForGroup_s_p = new b2Vec2(); + b2ParticleSystem.CreateParticlesFillShapeForGroup_s_aabb = new b2AABB(); + b2ParticleSystem.CreateParticlesFillShapeForGroup_s_p = new b2Vec2(); + b2ParticleSystem.UpdatePairsAndTriads_s_dab = new b2Vec2(); + b2ParticleSystem.UpdatePairsAndTriads_s_dbc = new b2Vec2(); + b2ParticleSystem.UpdatePairsAndTriads_s_dca = new b2Vec2(); + b2ParticleSystem.AddContact_s_d = new b2Vec2(); + b2ParticleSystem.UpdateBodyContacts_s_aabb = new b2AABB(); + b2ParticleSystem.Solve_s_subStep = new b2TimeStep(); + b2ParticleSystem.SolveCollision_s_aabb = new b2AABB(); + b2ParticleSystem.SolveGravity_s_gravity = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_aabb = new b2AABB(); + b2ParticleSystem.SolveBarrier_s_va = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_vb = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_pba = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_vba = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_vc = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_pca = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_vca = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_qba = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_qca = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_dv = new b2Vec2(); + b2ParticleSystem.SolveBarrier_s_f = new b2Vec2(); + b2ParticleSystem.SolvePressure_s_f = new b2Vec2(); + b2ParticleSystem.SolveDamping_s_v = new b2Vec2(); + b2ParticleSystem.SolveDamping_s_f = new b2Vec2(); + b2ParticleSystem.SolveRigidDamping_s_t0 = new b2Vec2(); + b2ParticleSystem.SolveRigidDamping_s_t1 = new b2Vec2(); + b2ParticleSystem.SolveRigidDamping_s_p = new b2Vec2(); + b2ParticleSystem.SolveRigidDamping_s_v = new b2Vec2(); + b2ParticleSystem.SolveExtraDamping_s_v = new b2Vec2(); + b2ParticleSystem.SolveExtraDamping_s_f = new b2Vec2(); + b2ParticleSystem.SolveRigid_s_position = new b2Vec2(); + b2ParticleSystem.SolveRigid_s_rotation = new b2Rot(); + b2ParticleSystem.SolveRigid_s_transform = new b2Transform(); + b2ParticleSystem.SolveRigid_s_velocityTransform = new b2Transform(); + b2ParticleSystem.SolveElastic_s_pa = new b2Vec2(); + b2ParticleSystem.SolveElastic_s_pb = new b2Vec2(); + b2ParticleSystem.SolveElastic_s_pc = new b2Vec2(); + b2ParticleSystem.SolveElastic_s_r = new b2Rot(); + b2ParticleSystem.SolveElastic_s_t0 = new b2Vec2(); + b2ParticleSystem.SolveSpring_s_pa = new b2Vec2(); + b2ParticleSystem.SolveSpring_s_pb = new b2Vec2(); + b2ParticleSystem.SolveSpring_s_d = new b2Vec2(); + b2ParticleSystem.SolveSpring_s_f = new b2Vec2(); + b2ParticleSystem.SolveTensile_s_weightedNormal = new b2Vec2(); + b2ParticleSystem.SolveTensile_s_s = new b2Vec2(); + b2ParticleSystem.SolveTensile_s_f = new b2Vec2(); + b2ParticleSystem.SolveViscous_s_v = new b2Vec2(); + b2ParticleSystem.SolveViscous_s_f = new b2Vec2(); + b2ParticleSystem.SolveRepulsive_s_f = new b2Vec2(); + b2ParticleSystem.SolvePowder_s_f = new b2Vec2(); + b2ParticleSystem.SolveSolid_s_f = new b2Vec2(); + b2ParticleSystem.RemoveSpuriousBodyContacts_s_n = new b2Vec2(); + b2ParticleSystem.RemoveSpuriousBodyContacts_s_pos = new b2Vec2(); + b2ParticleSystem.RemoveSpuriousBodyContacts_s_normal = new b2Vec2(); + return b2ParticleSystem; + })(); + (function (b2ParticleSystem) { + var UserOverridableBuffer = (function () { + function UserOverridableBuffer() { + this.data = null; + this.userSuppliedCapacity = 0; + } + return UserOverridableBuffer; + })(); + b2ParticleSystem.UserOverridableBuffer = UserOverridableBuffer; + var Proxy = (function () { + function Proxy() { + this.index = b2_invalidParticleIndex; + this.tag = 0; + } + Proxy.CompareProxyProxy = function (a, b) { + return a.tag < b.tag; + }; + Proxy.CompareTagProxy = function (a, b) { + return a < b.tag; + }; + Proxy.CompareProxyTag = function (a, b) { + return a.tag < b; + }; + return Proxy; + })(); + b2ParticleSystem.Proxy = Proxy; + var InsideBoundsEnumerator = (function () { + function InsideBoundsEnumerator(system, lower, upper, first, last) { + this.m_system = system; + this.m_xLower = (lower & b2ParticleSystem.xMask) >>> 0; + this.m_xUpper = (upper & b2ParticleSystem.xMask) >>> 0; + this.m_yLower = (lower & b2ParticleSystem.yMask) >>> 0; + this.m_yUpper = (upper & b2ParticleSystem.yMask) >>> 0; + this.m_first = first; + this.m_last = last; + } + InsideBoundsEnumerator.prototype.GetNext = function () { + while (this.m_first < this.m_last) { + var xTag = (this.m_system.m_proxyBuffer.data[this.m_first].tag & b2ParticleSystem.xMask) >>> 0; + if (xTag >= this.m_xLower && xTag <= this.m_xUpper) return this.m_system.m_proxyBuffer.data[this.m_first++].index; + this.m_first++; + } + return b2_invalidParticleIndex; + }; + return InsideBoundsEnumerator; + })(); + b2ParticleSystem.InsideBoundsEnumerator = InsideBoundsEnumerator; + var ParticleListNode = (function () { + function ParticleListNode() { + this.next = null; + this.count = 0; + this.index = 0; + } + return ParticleListNode; + })(); + b2ParticleSystem.ParticleListNode = ParticleListNode; + var FixedSetAllocator = (function () { + function FixedSetAllocator() { } + FixedSetAllocator.prototype.Allocate = function (itemSize, count) { + return count; + }; + FixedSetAllocator.prototype.Clear = function () { }; + FixedSetAllocator.prototype.GetCount = function () { + return 0; + }; + FixedSetAllocator.prototype.Invalidate = function (itemIndex) { }; + FixedSetAllocator.prototype.GetValidBuffer = function () { + return []; + }; + FixedSetAllocator.prototype.GetBuffer = function () { + return []; + }; + FixedSetAllocator.prototype.SetCount = function (count) { }; + return FixedSetAllocator; + })(); + b2ParticleSystem.FixedSetAllocator = FixedSetAllocator; + var FixtureParticle = (function () { + function FixtureParticle(fixture, particle) { + this.second = b2_invalidParticleIndex; + this.first = fixture; + this.second = particle; + } + return FixtureParticle; + })(); + b2ParticleSystem.FixtureParticle = FixtureParticle; + var FixtureParticleSet = (function (_super) { + __extends(FixtureParticleSet, _super); + function FixtureParticleSet() { + return null !== _super && _super.apply(this, arguments) || this; + } + FixtureParticleSet.prototype.Initialize = function (bodyContactBuffer, flagsBuffer) { }; + FixtureParticleSet.prototype.Find = function (pair) { + return b2_invalidParticleIndex; + }; + return FixtureParticleSet; + })(b2ParticleSystem.FixedSetAllocator); + b2ParticleSystem.FixtureParticleSet = FixtureParticleSet; + var ParticlePair = (function () { + function ParticlePair(particleA, particleB) { + this.first = b2_invalidParticleIndex; + this.second = b2_invalidParticleIndex; + this.first = particleA; + this.second = particleB; + } + return ParticlePair; + })(); + b2ParticleSystem.ParticlePair = ParticlePair; + var b2ParticlePairSet = (function (_super) { + __extends(b2ParticlePairSet, _super); + function b2ParticlePairSet() { + return null !== _super && _super.apply(this, arguments) || this; + } + b2ParticlePairSet.prototype.Initialize = function (contactBuffer, flagsBuffer) { }; + b2ParticlePairSet.prototype.Find = function (pair) { + return b2_invalidParticleIndex; + }; + return b2ParticlePairSet; + })(b2ParticleSystem.FixedSetAllocator); + b2ParticleSystem.b2ParticlePairSet = b2ParticlePairSet; + var ConnectionFilter = (function () { + function ConnectionFilter() { } + ConnectionFilter.prototype.IsNecessary = function (index) { + return true; + }; + ConnectionFilter.prototype.ShouldCreatePair = function (a, b) { + return true; + }; + ConnectionFilter.prototype.ShouldCreateTriad = function (a, b, c) { + return true; + }; + return ConnectionFilter; + })(); + b2ParticleSystem.ConnectionFilter = ConnectionFilter; + var DestroyParticlesInShapeCallback = (function (_super) { + __extends(DestroyParticlesInShapeCallback, _super); + function DestroyParticlesInShapeCallback(system, shape, xf, callDestructionListener) { + var _this = _super.call(this) || this; + _this.m_callDestructionListener = false; + _this.m_destroyed = 0; + _this.m_system = system; + _this.m_shape = shape; + _this.m_xf = xf; + _this.m_callDestructionListener = callDestructionListener; + _this.m_destroyed = 0; + return _this; + } + DestroyParticlesInShapeCallback.prototype.ReportFixture = function (fixture) { + return false; + }; + DestroyParticlesInShapeCallback.prototype.ReportParticle = function (particleSystem, index) { + if (particleSystem !== this.m_system) return false; + if (!this.m_system.m_positionBuffer.data) throw new Error(); + if (this.m_shape.TestPoint(this.m_xf, this.m_system.m_positionBuffer.data[index])) { + this.m_system.DestroyParticle(index, this.m_callDestructionListener); + this.m_destroyed++; + } + return true; + }; + DestroyParticlesInShapeCallback.prototype.Destroyed = function () { + return this.m_destroyed; + }; + return DestroyParticlesInShapeCallback; + })(b2QueryCallback); + b2ParticleSystem.DestroyParticlesInShapeCallback = DestroyParticlesInShapeCallback; + var JoinParticleGroupsFilter = (function (_super) { + __extends(JoinParticleGroupsFilter, _super); + function JoinParticleGroupsFilter(threshold) { + var _this = _super.call(this) || this; + _this.m_threshold = 0; + _this.m_threshold = threshold; + return _this; + } + JoinParticleGroupsFilter.prototype.ShouldCreatePair = function (a, b) { + return a < this.m_threshold && this.m_threshold <= b || b < this.m_threshold && this.m_threshold <= a; + }; + JoinParticleGroupsFilter.prototype.ShouldCreateTriad = function (a, b, c) { + return (a < this.m_threshold || b < this.m_threshold || c < this.m_threshold) && (this.m_threshold <= a || this.m_threshold <= b || this.m_threshold <= c); + }; + return JoinParticleGroupsFilter; + })(b2ParticleSystem.ConnectionFilter); + b2ParticleSystem.JoinParticleGroupsFilter = JoinParticleGroupsFilter; + var CompositeShape = (function (_super) { + __extends(CompositeShape, _super); + function CompositeShape(shapes, shapeCount) { + void 0 === shapeCount && (shapeCount = shapes.length); + var _this = _super.call(this, exports.b2ShapeType.e_unknown, 0) || this; + _this.m_shapeCount = 0; + _this.m_shapes = shapes; + _this.m_shapeCount = shapeCount; + return _this; + } + CompositeShape.prototype.Clone = function () { + throw new Error(); + }; + CompositeShape.prototype.GetChildCount = function () { + return 1; + }; + CompositeShape.prototype.TestPoint = function (xf, p) { + for (var i = 0; i < this.m_shapeCount; i++) if (this.m_shapes[i].TestPoint(xf, p)) return true; + return false; + }; + CompositeShape.prototype.ComputeDistance = function (xf, p, normal, childIndex) { + return 0; + }; + CompositeShape.prototype.RayCast = function (output, input, xf, childIndex) { + return false; + }; + CompositeShape.prototype.ComputeAABB = function (aabb, xf, childIndex) { + var s_subaabb = new b2AABB(); + aabb.lowerBound.x = +b2_maxFloat; + aabb.lowerBound.y = +b2_maxFloat; + aabb.upperBound.x = -b2_maxFloat; + aabb.upperBound.y = -b2_maxFloat; + for (var i = 0; i < this.m_shapeCount; i++) { + var childCount = this.m_shapes[i].GetChildCount(); + for (var j = 0; j < childCount; j++) { + var subaabb = s_subaabb; + this.m_shapes[i].ComputeAABB(subaabb, xf, j); + aabb.Combine1(subaabb); + } + } + }; + CompositeShape.prototype.ComputeMass = function (massData, density) { }; + CompositeShape.prototype.SetupDistanceProxy = function (proxy, index) { }; + CompositeShape.prototype.ComputeSubmergedArea = function (normal, offset, xf, c) { + return 0; + }; + CompositeShape.prototype.Dump = function (log) { }; + return CompositeShape; + })(b2Shape); + b2ParticleSystem.CompositeShape = CompositeShape; + var ReactiveFilter = (function (_super) { + __extends(ReactiveFilter, _super); + function ReactiveFilter(flagsBuffer) { + var _this = _super.call(this) || this; + _this.m_flagsBuffer = flagsBuffer; + return _this; + } + ReactiveFilter.prototype.IsNecessary = function (index) { + if (!this.m_flagsBuffer.data) throw new Error(); + return 0 !== (this.m_flagsBuffer.data[index] & exports.b2ParticleFlag.b2_reactiveParticle); + }; + return ReactiveFilter; + })(b2ParticleSystem.ConnectionFilter); + b2ParticleSystem.ReactiveFilter = ReactiveFilter; + var UpdateBodyContactsCallback = (function (_super) { + __extends(UpdateBodyContactsCallback, _super); + function UpdateBodyContactsCallback(system, contactFilter) { + var _this = _super.call(this, system) || this; + _this.m_contactFilter = contactFilter; + return _this; + } + UpdateBodyContactsCallback.prototype.ShouldCollideFixtureParticle = function (fixture, particleSystem, particleIndex) { + if (this.m_contactFilter) { + var flags = this.m_system.GetFlagsBuffer(); + if (flags[particleIndex] & exports.b2ParticleFlag.b2_fixtureContactFilterParticle) return this.m_contactFilter.ShouldCollideFixtureParticle(fixture, this.m_system, particleIndex); + } + return true; + }; + UpdateBodyContactsCallback.prototype.ReportFixtureAndParticle = function (fixture, childIndex, a) { + var s_n = b2ParticleSystem.UpdateBodyContactsCallback.ReportFixtureAndParticle_s_n; + var s_rp = b2ParticleSystem.UpdateBodyContactsCallback.ReportFixtureAndParticle_s_rp; + if (!this.m_system.m_flagsBuffer.data) throw new Error(); + if (!this.m_system.m_positionBuffer.data) throw new Error(); + var ap = this.m_system.m_positionBuffer.data[a]; + var n = s_n; + var d = fixture.ComputeDistance(ap, n, childIndex); + if (d < this.m_system.m_particleDiameter && this.ShouldCollideFixtureParticle(fixture, this.m_system, a)) { + var b = fixture.GetBody(); + var bp = b.GetWorldCenter(); + var bm = b.GetMass(); + var bI = b.GetInertia() - bm * b.GetLocalCenter().LengthSquared(); + var invBm = bm > 0 ? 1 / bm : 0; + var invBI = bI > 0 ? 1 / bI : 0; + var invAm = this.m_system.m_flagsBuffer.data[a] & exports.b2ParticleFlag.b2_wallParticle ? 0 : this.m_system.GetParticleInvMass(); + var rp = b2Vec2.SubVV(ap, bp, s_rp); + var rpn = b2Vec2.CrossVV(rp, n); + var invM = invAm + invBm + invBI * rpn * rpn; + var contact = this.m_system.m_bodyContactBuffer.data[this.m_system.m_bodyContactBuffer.Append()]; + contact.index = a; + contact.body = b; + contact.fixture = fixture; + contact.weight = 1 - d * this.m_system.m_inverseDiameter; + contact.normal.Copy(n.SelfNeg()); + contact.mass = invM > 0 ? 1 / invM : 0; + this.m_system.DetectStuckParticle(a); + } + }; + UpdateBodyContactsCallback.ReportFixtureAndParticle_s_n = new b2Vec2(); + UpdateBodyContactsCallback.ReportFixtureAndParticle_s_rp = new b2Vec2(); + return UpdateBodyContactsCallback; + })(b2FixtureParticleQueryCallback); + b2ParticleSystem.UpdateBodyContactsCallback = UpdateBodyContactsCallback; + var SolveCollisionCallback = (function (_super) { + __extends(SolveCollisionCallback, _super); + function SolveCollisionCallback(system, step) { + var _this = _super.call(this, system) || this; + _this.m_step = step; + return _this; + } + SolveCollisionCallback.prototype.ReportFixtureAndParticle = function (fixture, childIndex, a) { + var s_p1 = b2ParticleSystem.SolveCollisionCallback.ReportFixtureAndParticle_s_p1; + var s_output = b2ParticleSystem.SolveCollisionCallback.ReportFixtureAndParticle_s_output; + var s_input = b2ParticleSystem.SolveCollisionCallback.ReportFixtureAndParticle_s_input; + var s_p = b2ParticleSystem.SolveCollisionCallback.ReportFixtureAndParticle_s_p; + var s_v = b2ParticleSystem.SolveCollisionCallback.ReportFixtureAndParticle_s_v; + var s_f = b2ParticleSystem.SolveCollisionCallback.ReportFixtureAndParticle_s_f; + var body = fixture.GetBody(); + if (!this.m_system.m_positionBuffer.data) throw new Error(); + if (!this.m_system.m_velocityBuffer.data) throw new Error(); + var ap = this.m_system.m_positionBuffer.data[a]; + var av = this.m_system.m_velocityBuffer.data[a]; + var output = s_output; + var input = s_input; + if (0 === this.m_system.m_iterationIndex) { + var p1 = b2Transform.MulTXV(body.m_xf0, ap, s_p1); + if (fixture.GetShape().GetType() === exports.b2ShapeType.e_circleShape) { + p1.SelfSub(body.GetLocalCenter()); + b2Rot.MulRV(body.m_xf0.q, p1, p1); + b2Rot.MulTRV(body.m_xf.q, p1, p1); + p1.SelfAdd(body.GetLocalCenter()); + } + b2Transform.MulXV(body.m_xf, p1, input.p1); + } else input.p1.Copy(ap); + b2Vec2.AddVMulSV(ap, this.m_step.dt, av, input.p2); + input.maxFraction = 1; + if (fixture.RayCast(output, input, childIndex)) { + var n = output.normal; + var p = s_p; + p.x = (1 - output.fraction) * input.p1.x + output.fraction * input.p2.x + b2_linearSlop * n.x; + p.y = (1 - output.fraction) * input.p1.y + output.fraction * input.p2.y + b2_linearSlop * n.y; + var v = s_v; + v.x = this.m_step.inv_dt * (p.x - ap.x); + v.y = this.m_step.inv_dt * (p.y - ap.y); + this.m_system.m_velocityBuffer.data[a].Copy(v); + var f = s_f; + f.x = this.m_step.inv_dt * this.m_system.GetParticleMass() * (av.x - v.x); + f.y = this.m_step.inv_dt * this.m_system.GetParticleMass() * (av.y - v.y); + this.m_system.ParticleApplyForce(a, f); + } + }; + SolveCollisionCallback.prototype.ReportParticle = function (system, index) { + return false; + }; + SolveCollisionCallback.ReportFixtureAndParticle_s_p1 = new b2Vec2(); + SolveCollisionCallback.ReportFixtureAndParticle_s_output = new b2RayCastOutput(); + SolveCollisionCallback.ReportFixtureAndParticle_s_input = new b2RayCastInput(); + SolveCollisionCallback.ReportFixtureAndParticle_s_p = new b2Vec2(); + SolveCollisionCallback.ReportFixtureAndParticle_s_v = new b2Vec2(); + SolveCollisionCallback.ReportFixtureAndParticle_s_f = new b2Vec2(); + return SolveCollisionCallback; + })(b2FixtureParticleQueryCallback); + b2ParticleSystem.SolveCollisionCallback = SolveCollisionCallback; + })(exports.b2ParticleSystem || (exports.b2ParticleSystem = {})); + var b2World = (function () { + function b2World(gravity) { + this.m_newFixture = false; + this.m_locked = false; + this.m_clearForces = true; + this.m_contactManager = new b2ContactManager(); + this.m_bodyList = null; + this.m_jointList = null; + this.m_particleSystemList = null; + this.m_bodyCount = 0; + this.m_jointCount = 0; + this.m_gravity = new b2Vec2(); + this.m_allowSleep = true; + this.m_destructionListener = null; + this.m_debugDraw = null; + this.m_inv_dt0 = 0; + this.m_warmStarting = true; + this.m_continuousPhysics = true; + this.m_subStepping = false; + this.m_stepComplete = true; + this.m_profile = new b2Profile(); + this.m_island = new b2Island(); + this.s_stack = []; + this.m_controllerList = null; + this.m_controllerCount = 0; + this.m_gravity.Copy(gravity); + } + b2World.prototype.SetDestructionListener = function (listener) { + this.m_destructionListener = listener; + }; + b2World.prototype.SetContactFilter = function (filter) { + this.m_contactManager.m_contactFilter = filter; + }; + b2World.prototype.SetContactListener = function (listener) { + this.m_contactManager.m_contactListener = listener; + }; + b2World.prototype.SetDebugDraw = function (debugDraw) { + this.m_debugDraw = debugDraw; + }; + b2World.prototype.CreateBody = function (def) { + void 0 === def && (def = {}); + if (this.IsLocked()) throw new Error(); + var b = new b2Body(def, this); + b.m_prev = null; + b.m_next = this.m_bodyList; + this.m_bodyList && (this.m_bodyList.m_prev = b); + this.m_bodyList = b; + ++this.m_bodyCount; + return b; + }; + b2World.prototype.DestroyBody = function (b) { + if (this.IsLocked()) throw new Error(); + var je = b.m_jointList; + while (je) { + var je0 = je; + je = je.next; + this.m_destructionListener && this.m_destructionListener.SayGoodbyeJoint(je0.joint); + this.DestroyJoint(je0.joint); + b.m_jointList = je; + } + b.m_jointList = null; + var coe = b.m_controllerList; + while (coe) { + var coe0 = coe; + coe = coe.nextController; + coe0.controller.RemoveBody(b); + } + var ce = b.m_contactList; + while (ce) { + var ce0 = ce; + ce = ce.next; + this.m_contactManager.Destroy(ce0.contact); + } + b.m_contactList = null; + var f = b.m_fixtureList; + while (f) { + var f0 = f; + f = f.m_next; + this.m_destructionListener && this.m_destructionListener.SayGoodbyeFixture(f0); + f0.DestroyProxies(); + f0.Destroy(); + b.m_fixtureList = f; + b.m_fixtureCount -= 1; + } + b.m_fixtureList = null; + b.m_fixtureCount = 0; + b.m_prev && (b.m_prev.m_next = b.m_next); + b.m_next && (b.m_next.m_prev = b.m_prev); + b === this.m_bodyList && (this.m_bodyList = b.m_next); + --this.m_bodyCount; + }; + b2World._Joint_Create = function (def, allocator) { + switch (def.type) { + case exports.b2JointType.e_distanceJoint: + return new b2DistanceJoint(def); + + case exports.b2JointType.e_mouseJoint: + return new b2MouseJoint(def); + + case exports.b2JointType.e_prismaticJoint: + return new b2PrismaticJoint(def); + + case exports.b2JointType.e_revoluteJoint: + return new b2RevoluteJoint(def); + + case exports.b2JointType.e_pulleyJoint: + return new b2PulleyJoint(def); + + case exports.b2JointType.e_gearJoint: + return new b2GearJoint(def); + + case exports.b2JointType.e_wheelJoint: + return new b2WheelJoint(def); + + case exports.b2JointType.e_weldJoint: + return new b2WeldJoint(def); + + case exports.b2JointType.e_frictionJoint: + return new b2FrictionJoint(def); + + case exports.b2JointType.e_ropeJoint: + return new b2RopeJoint(def); + + case exports.b2JointType.e_motorJoint: + return new b2MotorJoint(def); + + case exports.b2JointType.e_areaJoint: + return new b2AreaJoint(def); + } + throw new Error(); + }; + b2World._Joint_Destroy = function (joint, allocator) { }; + b2World.prototype.CreateJoint = function (def) { + if (this.IsLocked()) throw new Error(); + var j = b2World._Joint_Create(def, null); + j.m_prev = null; + j.m_next = this.m_jointList; + this.m_jointList && (this.m_jointList.m_prev = j); + this.m_jointList = j; + ++this.m_jointCount; + j.m_edgeA.prev = null; + j.m_edgeA.next = j.m_bodyA.m_jointList; + j.m_bodyA.m_jointList && (j.m_bodyA.m_jointList.prev = j.m_edgeA); + j.m_bodyA.m_jointList = j.m_edgeA; + j.m_edgeB.prev = null; + j.m_edgeB.next = j.m_bodyB.m_jointList; + j.m_bodyB.m_jointList && (j.m_bodyB.m_jointList.prev = j.m_edgeB); + j.m_bodyB.m_jointList = j.m_edgeB; + var bodyA = def.bodyA; + var bodyB = def.bodyB; + if (!def.collideConnected) { + var edge = bodyB.GetContactList(); + while (edge) { + edge.other === bodyA && edge.contact.FlagForFiltering(); + edge = edge.next; + } + } + return j; + }; + b2World.prototype.DestroyJoint = function (j) { + if (this.IsLocked()) throw new Error(); + var collideConnected = j.m_collideConnected; + j.m_prev && (j.m_prev.m_next = j.m_next); + j.m_next && (j.m_next.m_prev = j.m_prev); + j === this.m_jointList && (this.m_jointList = j.m_next); + var bodyA = j.m_bodyA; + var bodyB = j.m_bodyB; + bodyA.SetAwake(true); + bodyB.SetAwake(true); + j.m_edgeA.prev && (j.m_edgeA.prev.next = j.m_edgeA.next); + j.m_edgeA.next && (j.m_edgeA.next.prev = j.m_edgeA.prev); + j.m_edgeA === bodyA.m_jointList && (bodyA.m_jointList = j.m_edgeA.next); + j.m_edgeA.prev = null; + j.m_edgeA.next = null; + j.m_edgeB.prev && (j.m_edgeB.prev.next = j.m_edgeB.next); + j.m_edgeB.next && (j.m_edgeB.next.prev = j.m_edgeB.prev); + j.m_edgeB === bodyB.m_jointList && (bodyB.m_jointList = j.m_edgeB.next); + j.m_edgeB.prev = null; + j.m_edgeB.next = null; + b2World._Joint_Destroy(j, null); + --this.m_jointCount; + if (!collideConnected) { + var edge = bodyB.GetContactList(); + while (edge) { + edge.other === bodyA && edge.contact.FlagForFiltering(); + edge = edge.next; + } + } + }; + b2World.prototype.CreateParticleSystem = function (def) { + if (this.IsLocked()) throw new Error(); + var p = new exports.b2ParticleSystem(def, this); + p.m_prev = null; + p.m_next = this.m_particleSystemList; + this.m_particleSystemList && (this.m_particleSystemList.m_prev = p); + this.m_particleSystemList = p; + return p; + }; + b2World.prototype.DestroyParticleSystem = function (p) { + if (this.IsLocked()) throw new Error(); + p.m_prev && (p.m_prev.m_next = p.m_next); + p.m_next && (p.m_next.m_prev = p.m_prev); + p === this.m_particleSystemList && (this.m_particleSystemList = p.m_next); + }; + b2World.prototype.CalculateReasonableParticleIterations = function (timeStep) { + if (null === this.m_particleSystemList) return 1; + function GetSmallestRadius(world) { + var smallestRadius = b2_maxFloat; + for (var system = world.GetParticleSystemList(); null !== system; system = system.m_next) smallestRadius = b2Min(smallestRadius, system.GetRadius()); + return smallestRadius; + } + return b2CalculateParticleIterations(this.m_gravity.Length(), GetSmallestRadius(this), timeStep); + }; + b2World.prototype.Step = function (dt, velocityIterations, positionIterations, particleIterations) { + void 0 === particleIterations && (particleIterations = this.CalculateReasonableParticleIterations(dt)); + var stepTimer = b2World.Step_s_stepTimer.Reset(); + if (this.m_newFixture) { + this.m_contactManager.FindNewContacts(); + this.m_newFixture = false; + } + this.m_locked = true; + var step = b2World.Step_s_step; + step.dt = dt; + step.velocityIterations = velocityIterations; + step.positionIterations = positionIterations; + step.particleIterations = particleIterations; + step.inv_dt = dt > 0 ? 1 / dt : 0; + step.dtRatio = this.m_inv_dt0 * dt; + step.warmStarting = this.m_warmStarting; + var timer = b2World.Step_s_timer.Reset(); + this.m_contactManager.Collide(); + this.m_profile.collide = timer.GetMilliseconds(); + if (this.m_stepComplete && step.dt > 0) { + var timer_1 = b2World.Step_s_timer.Reset(); + for (var p = this.m_particleSystemList; p; p = p.m_next) p.Solve(step); + this.Solve(step); + this.m_profile.solve = timer_1.GetMilliseconds(); + } + if (this.m_continuousPhysics && step.dt > 0) { + var timer_2 = b2World.Step_s_timer.Reset(); + this.SolveTOI(step); + this.m_profile.solveTOI = timer_2.GetMilliseconds(); + } + step.dt > 0 && (this.m_inv_dt0 = step.inv_dt); + this.m_clearForces && this.ClearForces(); + this.m_locked = false; + this.m_profile.step = stepTimer.GetMilliseconds(); + }; + b2World.prototype.ClearForces = function () { + for (var body = this.m_bodyList; body; body = body.m_next) { + body.m_force.SetZero(); + body.m_torque = 0; + } + }; + b2World.prototype.DrawParticleSystem = function (system) { + if (null === this.m_debugDraw) return; + var particleCount = system.GetParticleCount(); + if (particleCount) { + var radius = system.GetRadius(); + var positionBuffer = system.GetPositionBuffer(); + if (system.m_colorBuffer.data) { + var colorBuffer = system.GetColorBuffer(); + this.m_debugDraw.DrawParticles(positionBuffer, radius, colorBuffer, particleCount); + } else this.m_debugDraw.DrawParticles(positionBuffer, radius, null, particleCount); + } + }; + b2World.prototype.DrawDebugData = function () { + if (null === this.m_debugDraw) return; + var flags = this.m_debugDraw.GetFlags(); + var color = b2World.DrawDebugData_s_color.SetRGB(0, 0, 0); + if (flags & exports.b2DrawFlags.e_shapeBit) for (var b = this.m_bodyList; b; b = b.m_next) { + var xf = b.m_xf; + this.m_debugDraw.PushTransform(xf); + for (var f = b.GetFixtureList(); f; f = f.m_next) if (b.IsActive()) if (b.GetType() === exports.b2BodyType.b2_staticBody) { + color.SetRGB(.5, .9, .5); + this.DrawShape(f, color); + } else if (b.GetType() === exports.b2BodyType.b2_kinematicBody) { + color.SetRGB(.5, .5, .9); + this.DrawShape(f, color); + } else if (b.IsAwake()) { + color.SetRGB(.9, .7, .7); + this.DrawShape(f, color); + } else { + color.SetRGB(.6, .6, .6); + this.DrawShape(f, color); + } else { + color.SetRGB(.5, .5, .3); + this.DrawShape(f, color); + } + this.m_debugDraw.PopTransform(xf); + } + if (flags & exports.b2DrawFlags.e_particleBit) for (var p = this.m_particleSystemList; p; p = p.m_next) this.DrawParticleSystem(p); + if (flags & exports.b2DrawFlags.e_jointBit) for (var j = this.m_jointList; j; j = j.m_next) this.DrawJoint(j); + if (flags & exports.b2DrawFlags.e_aabbBit) { + color.SetRGB(.9, .3, .9); + var vs = b2World.DrawDebugData_s_vs; + for (var b = this.m_bodyList; b; b = b.m_next) { + if (!b.IsActive()) continue; + for (var f = b.GetFixtureList(); f; f = f.m_next) for (var i = 0; i < f.m_proxyCount; ++i) { + var proxy = f.m_proxies[i]; + var aabb = proxy.treeNode.aabb; + vs[0].Set(aabb.lowerBound.x, aabb.lowerBound.y); + vs[1].Set(aabb.upperBound.x, aabb.lowerBound.y); + vs[2].Set(aabb.upperBound.x, aabb.upperBound.y); + vs[3].Set(aabb.lowerBound.x, aabb.upperBound.y); + this.m_debugDraw.DrawPolygon(vs, 4, color); + } + } + } + if (flags & exports.b2DrawFlags.e_centerOfMassBit) for (var b = this.m_bodyList; b; b = b.m_next) { + var xf = b2World.DrawDebugData_s_xf; + xf.q.Copy(b.m_xf.q); + xf.p.Copy(b.GetWorldCenter()); + this.m_debugDraw.DrawTransform(xf); + } + if (flags & exports.b2DrawFlags.e_controllerBit) for (var c = this.m_controllerList; c; c = c.m_next) c.Draw(this.m_debugDraw); + }; + b2World.prototype.QueryAABB = function (callback, aabb, fn) { + this.m_contactManager.m_broadPhase.Query(aabb, (function (proxy) { + var fixture_proxy = proxy.userData; + var fixture = fixture_proxy.fixture; + if (callback) return callback.ReportFixture(fixture); + if (fn) return fn(fixture); + return true; + })); + if (callback instanceof b2QueryCallback) for (var p = this.m_particleSystemList; p; p = p.m_next) callback.ShouldQueryParticleSystem(p) && p.QueryAABB(callback, aabb); + }; + b2World.prototype.QueryAllAABB = function (aabb, out) { + void 0 === out && (out = []); + this.QueryAABB(null, aabb, (function (fixture) { + out.push(fixture); + return true; + })); + return out; + }; + b2World.prototype.QueryPointAABB = function (callback, point, fn) { + this.m_contactManager.m_broadPhase.QueryPoint(point, (function (proxy) { + var fixture_proxy = proxy.userData; + var fixture = fixture_proxy.fixture; + if (callback) return callback.ReportFixture(fixture); + if (fn) return fn(fixture); + return true; + })); + if (callback instanceof b2QueryCallback) for (var p = this.m_particleSystemList; p; p = p.m_next) callback.ShouldQueryParticleSystem(p) && p.QueryPointAABB(callback, point); + }; + b2World.prototype.QueryAllPointAABB = function (point, out) { + void 0 === out && (out = []); + this.QueryPointAABB(null, point, (function (fixture) { + out.push(fixture); + return true; + })); + return out; + }; + b2World.prototype.QueryFixtureShape = function (callback, shape, index, transform, fn) { + var aabb = b2World.QueryFixtureShape_s_aabb; + shape.ComputeAABB(aabb, transform, index); + this.m_contactManager.m_broadPhase.Query(aabb, (function (proxy) { + var fixture_proxy = proxy.userData; + var fixture = fixture_proxy.fixture; + if (b2TestOverlapShape(shape, index, fixture.GetShape(), fixture_proxy.childIndex, transform, fixture.GetBody().GetTransform())) { + if (callback) return callback.ReportFixture(fixture); + if (fn) return fn(fixture); + } + return true; + })); + if (callback instanceof b2QueryCallback) for (var p = this.m_particleSystemList; p; p = p.m_next) callback.ShouldQueryParticleSystem(p) && p.QueryAABB(callback, aabb); + }; + b2World.prototype.QueryAllFixtureShape = function (shape, index, transform, out) { + void 0 === out && (out = []); + this.QueryFixtureShape(null, shape, index, transform, (function (fixture) { + out.push(fixture); + return true; + })); + return out; + }; + b2World.prototype.QueryFixturePoint = function (callback, point, fn) { + this.m_contactManager.m_broadPhase.QueryPoint(point, (function (proxy) { + var fixture_proxy = proxy.userData; + var fixture = fixture_proxy.fixture; + if (fixture.TestPoint(point)) { + if (callback) return callback.ReportFixture(fixture); + if (fn) return fn(fixture); + } + return true; + })); + if (callback) for (var p = this.m_particleSystemList; p; p = p.m_next) callback.ShouldQueryParticleSystem(p) && p.QueryPointAABB(callback, point); + }; + b2World.prototype.QueryAllFixturePoint = function (point, out) { + void 0 === out && (out = []); + this.QueryFixturePoint(null, point, (function (fixture) { + out.push(fixture); + return true; + })); + return out; + }; + b2World.prototype.RayCast = function (callback, point1, point2, fn) { + var input = b2World.RayCast_s_input; + input.maxFraction = 1; + input.p1.Copy(point1); + input.p2.Copy(point2); + this.m_contactManager.m_broadPhase.RayCast(input, (function (input, proxy) { + var fixture_proxy = proxy.userData; + var fixture = fixture_proxy.fixture; + var index = fixture_proxy.childIndex; + var output = b2World.RayCast_s_output; + var hit = fixture.RayCast(output, input, index); + if (hit) { + var fraction = output.fraction; + var point = b2World.RayCast_s_point; + point.Set((1 - fraction) * point1.x + fraction * point2.x, (1 - fraction) * point1.y + fraction * point2.y); + if (callback) return callback.ReportFixture(fixture, point, output.normal, fraction); + if (fn) return fn(fixture, point, output.normal, fraction); + } + return input.maxFraction; + })); + if (callback) for (var p = this.m_particleSystemList; p; p = p.m_next) callback.ShouldQueryParticleSystem(p) && p.RayCast(callback, point1, point2); + }; + b2World.prototype.RayCastOne = function (point1, point2) { + var result = null; + var min_fraction = 1; + this.RayCast(null, point1, point2, (function (fixture, point, normal, fraction) { + if (fraction < min_fraction) { + min_fraction = fraction; + result = fixture; + } + return min_fraction; + })); + return result; + }; + b2World.prototype.RayCastAll = function (point1, point2, out) { + void 0 === out && (out = []); + this.RayCast(null, point1, point2, (function (fixture, point, normal, fraction) { + out.push(fixture); + return 1; + })); + return out; + }; + b2World.prototype.GetBodyList = function () { + return this.m_bodyList; + }; + b2World.prototype.GetJointList = function () { + return this.m_jointList; + }; + b2World.prototype.GetParticleSystemList = function () { + return this.m_particleSystemList; + }; + b2World.prototype.GetContactList = function () { + return this.m_contactManager.m_contactList; + }; + b2World.prototype.SetAllowSleeping = function (flag) { + if (flag === this.m_allowSleep) return; + this.m_allowSleep = flag; + if (!this.m_allowSleep) for (var b = this.m_bodyList; b; b = b.m_next) b.SetAwake(true); + }; + b2World.prototype.GetAllowSleeping = function () { + return this.m_allowSleep; + }; + b2World.prototype.SetWarmStarting = function (flag) { + this.m_warmStarting = flag; + }; + b2World.prototype.GetWarmStarting = function () { + return this.m_warmStarting; + }; + b2World.prototype.SetContinuousPhysics = function (flag) { + this.m_continuousPhysics = flag; + }; + b2World.prototype.GetContinuousPhysics = function () { + return this.m_continuousPhysics; + }; + b2World.prototype.SetSubStepping = function (flag) { + this.m_subStepping = flag; + }; + b2World.prototype.GetSubStepping = function () { + return this.m_subStepping; + }; + b2World.prototype.GetProxyCount = function () { + return this.m_contactManager.m_broadPhase.GetProxyCount(); + }; + b2World.prototype.GetBodyCount = function () { + return this.m_bodyCount; + }; + b2World.prototype.GetJointCount = function () { + return this.m_jointCount; + }; + b2World.prototype.GetContactCount = function () { + return this.m_contactManager.m_contactCount; + }; + b2World.prototype.GetTreeHeight = function () { + return this.m_contactManager.m_broadPhase.GetTreeHeight(); + }; + b2World.prototype.GetTreeBalance = function () { + return this.m_contactManager.m_broadPhase.GetTreeBalance(); + }; + b2World.prototype.GetTreeQuality = function () { + return this.m_contactManager.m_broadPhase.GetTreeQuality(); + }; + b2World.prototype.SetGravity = function (gravity, wake) { + void 0 === wake && (wake = true); + if (!b2Vec2.IsEqualToV(this.m_gravity, gravity)) { + this.m_gravity.Copy(gravity); + if (wake) for (var b = this.m_bodyList; b; b = b.m_next) b.SetAwake(true); + } + }; + b2World.prototype.GetGravity = function () { + return this.m_gravity; + }; + b2World.prototype.IsLocked = function () { + return this.m_locked; + }; + b2World.prototype.SetAutoClearForces = function (flag) { + this.m_clearForces = flag; + }; + b2World.prototype.GetAutoClearForces = function () { + return this.m_clearForces; + }; + b2World.prototype.ShiftOrigin = function (newOrigin) { + if (this.IsLocked()) throw new Error(); + for (var b = this.m_bodyList; b; b = b.m_next) { + b.m_xf.p.SelfSub(newOrigin); + b.m_sweep.c0.SelfSub(newOrigin); + b.m_sweep.c.SelfSub(newOrigin); + } + for (var j = this.m_jointList; j; j = j.m_next) j.ShiftOrigin(newOrigin); + this.m_contactManager.m_broadPhase.ShiftOrigin(newOrigin); + }; + b2World.prototype.GetContactManager = function () { + return this.m_contactManager; + }; + b2World.prototype.GetProfile = function () { + return this.m_profile; + }; + b2World.prototype.Dump = function (log) { + if (this.m_locked) return; + log("const g: b2Vec2 = new b2Vec2(%.15f, %.15f);\n", this.m_gravity.x, this.m_gravity.y); + log("this.m_world.SetGravity(g);\n"); + log("const bodies: b2Body[] = [];\n"); + log("const joints: b2Joint[] = [];\n"); + var i = 0; + for (var b = this.m_bodyList; b; b = b.m_next) { + b.m_islandIndex = i; + b.Dump(log); + ++i; + } + i = 0; + for (var j = this.m_jointList; j; j = j.m_next) { + j.m_index = i; + ++i; + } + for (var j = this.m_jointList; j; j = j.m_next) { + if (j.m_type === exports.b2JointType.e_gearJoint) continue; + log("{\n"); + j.Dump(log); + log("}\n"); + } + for (var j = this.m_jointList; j; j = j.m_next) { + if (j.m_type !== exports.b2JointType.e_gearJoint) continue; + log("{\n"); + j.Dump(log); + log("}\n"); + } + }; + b2World.prototype.DrawJoint = function (joint) { + if (null === this.m_debugDraw) return; + var bodyA = joint.GetBodyA(); + var bodyB = joint.GetBodyB(); + var xf1 = bodyA.m_xf; + var xf2 = bodyB.m_xf; + var x1 = xf1.p; + var x2 = xf2.p; + var p1 = joint.GetAnchorA(b2World.DrawJoint_s_p1); + var p2 = joint.GetAnchorB(b2World.DrawJoint_s_p2); + var color = b2World.DrawJoint_s_color.SetRGB(.5, .8, .8); + switch (joint.m_type) { + case exports.b2JointType.e_distanceJoint: + this.m_debugDraw.DrawSegment(p1, p2, color); + break; + + case exports.b2JointType.e_pulleyJoint: + var pulley = joint; + var s1 = pulley.GetGroundAnchorA(); + var s2 = pulley.GetGroundAnchorB(); + this.m_debugDraw.DrawSegment(s1, p1, color); + this.m_debugDraw.DrawSegment(s2, p2, color); + this.m_debugDraw.DrawSegment(s1, s2, color); + break; + + case exports.b2JointType.e_mouseJoint: + var c = b2World.DrawJoint_s_c; + c.Set(0, 1, 0); + this.m_debugDraw.DrawPoint(p1, 4, c); + this.m_debugDraw.DrawPoint(p2, 4, c); + c.Set(.8, .8, .8); + this.m_debugDraw.DrawSegment(p1, p2, c); + break; + + default: + this.m_debugDraw.DrawSegment(x1, p1, color); + this.m_debugDraw.DrawSegment(p1, p2, color); + this.m_debugDraw.DrawSegment(x2, p2, color); + } + }; + b2World.prototype.DrawShape = function (fixture, color) { + if (null === this.m_debugDraw) return; + var shape = fixture.GetShape(); + switch (shape.m_type) { + case exports.b2ShapeType.e_circleShape: + var circle = shape; + var center = circle.m_p; + var radius = circle.m_radius; + var axis = b2Vec2.UNITX; + this.m_debugDraw.DrawSolidCircle(center, radius, axis, color); + break; + + case exports.b2ShapeType.e_edgeShape: + var edge = shape; + var v1 = edge.m_vertex1; + var v2 = edge.m_vertex2; + this.m_debugDraw.DrawSegment(v1, v2, color); + break; + + case exports.b2ShapeType.e_chainShape: + var chain = shape; + var count = chain.m_count; + var vertices = chain.m_vertices; + var ghostColor = b2World.DrawShape_s_ghostColor.SetRGBA(.75 * color.r, .75 * color.g, .75 * color.b, color.a); + var v1 = vertices[0]; + this.m_debugDraw.DrawPoint(v1, 4, color); + if (chain.m_hasPrevVertex) { + var vp = chain.m_prevVertex; + this.m_debugDraw.DrawSegment(vp, v1, ghostColor); + this.m_debugDraw.DrawCircle(vp, .1, ghostColor); + } + for (var i = 1; i < count; ++i) { + var v2 = vertices[i]; + this.m_debugDraw.DrawSegment(v1, v2, color); + this.m_debugDraw.DrawPoint(v2, 4, color); + v1 = v2; + } + if (chain.m_hasNextVertex) { + var vn = chain.m_nextVertex; + this.m_debugDraw.DrawSegment(vn, v1, ghostColor); + this.m_debugDraw.DrawCircle(vn, .1, ghostColor); + } + break; + + case exports.b2ShapeType.e_polygonShape: + var poly = shape; + var vertexCount = poly.m_count; + var vertices = poly.m_vertices; + this.m_debugDraw.DrawSolidPolygon(vertices, vertexCount, color); + } + }; + b2World.prototype.Solve = function (step) { + for (var b = this.m_bodyList; b; b = b.m_next) b.m_xf0.Copy(b.m_xf); + for (var controller = this.m_controllerList; controller; controller = controller.m_next) controller.Step(step); + this.m_profile.solveInit = 0; + this.m_profile.solveVelocity = 0; + this.m_profile.solvePosition = 0; + var island = this.m_island; + island.Initialize(this.m_bodyCount, this.m_contactManager.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener); + for (var b = this.m_bodyList; b; b = b.m_next) b.m_islandFlag = false; + for (var c = this.m_contactManager.m_contactList; c; c = c.m_next) c.m_islandFlag = false; + for (var j = this.m_jointList; j; j = j.m_next) j.m_islandFlag = false; + var stack = this.s_stack; + for (var seed = this.m_bodyList; seed; seed = seed.m_next) { + if (seed.m_islandFlag) continue; + if (!seed.IsAwake() || !seed.IsActive()) continue; + if (seed.GetType() === exports.b2BodyType.b2_staticBody) continue; + island.Clear(); + var stackCount = 0; + stack[stackCount++] = seed; + seed.m_islandFlag = true; + while (stackCount > 0) { + var b = stack[--stackCount]; + if (!b) throw new Error(); + island.AddBody(b); + b.m_awakeFlag = true; + if (b.GetType() === exports.b2BodyType.b2_staticBody) continue; + for (var ce = b.m_contactList; ce; ce = ce.next) { + var contact = ce.contact; + if (contact.m_islandFlag) continue; + if (!contact.IsEnabled() || !contact.IsTouching()) continue; + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) continue; + island.AddContact(contact); + contact.m_islandFlag = true; + var other = ce.other; + if (!other) throw new Error(); + if (other.m_islandFlag) continue; + stack[stackCount++] = other; + other.m_islandFlag = true; + } + for (var je = b.m_jointList; je; je = je.next) { + if (je.joint.m_islandFlag) continue; + var other = je.other; + if (!other.IsActive()) continue; + island.AddJoint(je.joint); + je.joint.m_islandFlag = true; + if (other.m_islandFlag) continue; + stack[stackCount++] = other; + other.m_islandFlag = true; + } + } + var profile = new b2Profile(); + island.Solve(profile, step, this.m_gravity, this.m_allowSleep); + this.m_profile.solveInit += profile.solveInit; + this.m_profile.solveVelocity += profile.solveVelocity; + this.m_profile.solvePosition += profile.solvePosition; + for (var i = 0; i < island.m_bodyCount; ++i) { + var b = island.m_bodies[i]; + b.GetType() === exports.b2BodyType.b2_staticBody && (b.m_islandFlag = false); + } + } + for (var i = 0; i < stack.length; ++i) { + if (!stack[i]) break; + stack[i] = null; + } + var timer = new b2Timer(); + for (var b = this.m_bodyList; b; b = b.m_next) { + if (!b.m_islandFlag) continue; + if (b.GetType() === exports.b2BodyType.b2_staticBody) continue; + b.SynchronizeFixtures(); + } + this.m_contactManager.FindNewContacts(); + this.m_profile.broadphase = timer.GetMilliseconds(); + }; + b2World.prototype.SolveTOI = function (step) { + var island = this.m_island; + island.Initialize(2 * b2_maxTOIContacts, b2_maxTOIContacts, 0, null, this.m_contactManager.m_contactListener); + if (this.m_stepComplete) { + for (var b = this.m_bodyList; b; b = b.m_next) { + b.m_islandFlag = false; + b.m_sweep.alpha0 = 0; + } + for (var c = this.m_contactManager.m_contactList; c; c = c.m_next) { + c.m_toiFlag = false; + c.m_islandFlag = false; + c.m_toiCount = 0; + c.m_toi = 1; + } + } + for (; ;) { + var minContact = null; + var minAlpha = 1; + for (var c = this.m_contactManager.m_contactList; c; c = c.m_next) { + if (!c.IsEnabled()) continue; + if (c.m_toiCount > b2_maxSubSteps) continue; + var alpha = 1; + if (c.m_toiFlag) alpha = c.m_toi; else { + var fA_1 = c.GetFixtureA(); + var fB_1 = c.GetFixtureB(); + if (fA_1.IsSensor() || fB_1.IsSensor()) continue; + var bA_1 = fA_1.GetBody(); + var bB_1 = fB_1.GetBody(); + var typeA = bA_1.m_type; + var typeB = bB_1.m_type; + var activeA = bA_1.IsAwake() && typeA !== exports.b2BodyType.b2_staticBody; + var activeB = bB_1.IsAwake() && typeB !== exports.b2BodyType.b2_staticBody; + if (!activeA && !activeB) continue; + var collideA = bA_1.IsBullet() || typeA !== exports.b2BodyType.b2_dynamicBody; + var collideB = bB_1.IsBullet() || typeB !== exports.b2BodyType.b2_dynamicBody; + if (!collideA && !collideB) continue; + var alpha0 = bA_1.m_sweep.alpha0; + if (bA_1.m_sweep.alpha0 < bB_1.m_sweep.alpha0) { + alpha0 = bB_1.m_sweep.alpha0; + bA_1.m_sweep.Advance(alpha0); + } else if (bB_1.m_sweep.alpha0 < bA_1.m_sweep.alpha0) { + alpha0 = bA_1.m_sweep.alpha0; + bB_1.m_sweep.Advance(alpha0); + } + var indexA = c.GetChildIndexA(); + var indexB = c.GetChildIndexB(); + var input = b2World.SolveTOI_s_toi_input; + input.proxyA.SetShape(fA_1.GetShape(), indexA); + input.proxyB.SetShape(fB_1.GetShape(), indexB); + input.sweepA.Copy(bA_1.m_sweep); + input.sweepB.Copy(bB_1.m_sweep); + input.tMax = 1; + var output = b2World.SolveTOI_s_toi_output; + b2TimeOfImpact(output, input); + var beta = output.t; + alpha = output.state === exports.b2TOIOutputState.e_touching ? b2Min(alpha0 + (1 - alpha0) * beta, 1) : 1; + c.m_toi = alpha; + c.m_toiFlag = true; + } + if (alpha < minAlpha) { + minContact = c; + minAlpha = alpha; + } + } + if (null === minContact || 1 - 10 * b2_epsilon < minAlpha) { + this.m_stepComplete = true; + break; + } + var fA = minContact.GetFixtureA(); + var fB = minContact.GetFixtureB(); + var bA = fA.GetBody(); + var bB = fB.GetBody(); + var backup1 = b2World.SolveTOI_s_backup1.Copy(bA.m_sweep); + var backup2 = b2World.SolveTOI_s_backup2.Copy(bB.m_sweep); + bA.Advance(minAlpha); + bB.Advance(minAlpha); + minContact.Update(this.m_contactManager.m_contactListener); + minContact.m_toiFlag = false; + ++minContact.m_toiCount; + if (!minContact.IsEnabled() || !minContact.IsTouching()) { + minContact.SetEnabled(false); + bA.m_sweep.Copy(backup1); + bB.m_sweep.Copy(backup2); + bA.SynchronizeTransform(); + bB.SynchronizeTransform(); + continue; + } + bA.SetAwake(true); + bB.SetAwake(true); + island.Clear(); + island.AddBody(bA); + island.AddBody(bB); + island.AddContact(minContact); + bA.m_islandFlag = true; + bB.m_islandFlag = true; + minContact.m_islandFlag = true; + for (var i = 0; i < 2; ++i) { + var body = 0 === i ? bA : bB; + if (body.m_type === exports.b2BodyType.b2_dynamicBody) for (var ce = body.m_contactList; ce; ce = ce.next) { + if (island.m_bodyCount === island.m_bodyCapacity) break; + if (island.m_contactCount === island.m_contactCapacity) break; + var contact = ce.contact; + if (contact.m_islandFlag) continue; + var other = ce.other; + if (other.m_type === exports.b2BodyType.b2_dynamicBody && !body.IsBullet() && !other.IsBullet()) continue; + var sensorA = contact.m_fixtureA.m_isSensor; + var sensorB = contact.m_fixtureB.m_isSensor; + if (sensorA || sensorB) continue; + var backup = b2World.SolveTOI_s_backup.Copy(other.m_sweep); + other.m_islandFlag || other.Advance(minAlpha); + contact.Update(this.m_contactManager.m_contactListener); + if (!contact.IsEnabled()) { + other.m_sweep.Copy(backup); + other.SynchronizeTransform(); + continue; + } + if (!contact.IsTouching()) { + other.m_sweep.Copy(backup); + other.SynchronizeTransform(); + continue; + } + contact.m_islandFlag = true; + island.AddContact(contact); + if (other.m_islandFlag) continue; + other.m_islandFlag = true; + other.m_type !== exports.b2BodyType.b2_staticBody && other.SetAwake(true); + island.AddBody(other); + } + } + var subStep = b2World.SolveTOI_s_subStep; + subStep.dt = (1 - minAlpha) * step.dt; + subStep.inv_dt = 1 / subStep.dt; + subStep.dtRatio = 1; + subStep.positionIterations = 20; + subStep.velocityIterations = step.velocityIterations; + subStep.particleIterations = step.particleIterations; + subStep.warmStarting = false; + island.SolveTOI(subStep, bA.m_islandIndex, bB.m_islandIndex); + for (var i = 0; i < island.m_bodyCount; ++i) { + var body = island.m_bodies[i]; + body.m_islandFlag = false; + if (body.m_type !== exports.b2BodyType.b2_dynamicBody) continue; + body.SynchronizeFixtures(); + for (var ce = body.m_contactList; ce; ce = ce.next) { + ce.contact.m_toiFlag = false; + ce.contact.m_islandFlag = false; + } + } + this.m_contactManager.FindNewContacts(); + if (this.m_subStepping) { + this.m_stepComplete = false; + break; + } + } + }; + b2World.prototype.AddController = function (controller) { + controller.m_next = this.m_controllerList; + controller.m_prev = null; + this.m_controllerList && (this.m_controllerList.m_prev = controller); + this.m_controllerList = controller; + ++this.m_controllerCount; + return controller; + }; + b2World.prototype.RemoveController = function (controller) { + controller.m_prev && (controller.m_prev.m_next = controller.m_next); + controller.m_next && (controller.m_next.m_prev = controller.m_prev); + this.m_controllerList === controller && (this.m_controllerList = controller.m_next); + --this.m_controllerCount; + controller.m_prev = null; + controller.m_next = null; + return controller; + }; + b2World.Step_s_step = new b2TimeStep(); + b2World.Step_s_stepTimer = new b2Timer(); + b2World.Step_s_timer = new b2Timer(); + b2World.DrawDebugData_s_color = new b2Color(0, 0, 0); + b2World.DrawDebugData_s_vs = b2Vec2.MakeArray(4); + b2World.DrawDebugData_s_xf = new b2Transform(); + b2World.QueryFixtureShape_s_aabb = new b2AABB(); + b2World.RayCast_s_input = new b2RayCastInput(); + b2World.RayCast_s_output = new b2RayCastOutput(); + b2World.RayCast_s_point = new b2Vec2(); + b2World.DrawJoint_s_p1 = new b2Vec2(); + b2World.DrawJoint_s_p2 = new b2Vec2(); + b2World.DrawJoint_s_color = new b2Color(.5, .8, .8); + b2World.DrawJoint_s_c = new b2Color(); + b2World.DrawShape_s_ghostColor = new b2Color(); + b2World.SolveTOI_s_subStep = new b2TimeStep(); + b2World.SolveTOI_s_backup = new b2Sweep(); + b2World.SolveTOI_s_backup1 = new b2Sweep(); + b2World.SolveTOI_s_backup2 = new b2Sweep(); + b2World.SolveTOI_s_toi_input = new b2TOIInput(); + b2World.SolveTOI_s_toi_output = new b2TOIOutput(); + return b2World; + })(); + var b2ControllerEdge = (function () { + function b2ControllerEdge(controller, body) { + this.prevBody = null; + this.nextBody = null; + this.prevController = null; + this.nextController = null; + this.controller = controller; + this.body = body; + } + return b2ControllerEdge; + })(); + var b2Controller = (function () { + function b2Controller() { + this.m_bodyList = null; + this.m_bodyCount = 0; + this.m_prev = null; + this.m_next = null; + } + b2Controller.prototype.GetNext = function () { + return this.m_next; + }; + b2Controller.prototype.GetPrev = function () { + return this.m_prev; + }; + b2Controller.prototype.GetBodyList = function () { + return this.m_bodyList; + }; + b2Controller.prototype.AddBody = function (body) { + var edge = new b2ControllerEdge(this, body); + edge.nextBody = this.m_bodyList; + edge.prevBody = null; + this.m_bodyList && (this.m_bodyList.prevBody = edge); + this.m_bodyList = edge; + ++this.m_bodyCount; + edge.nextController = body.m_controllerList; + edge.prevController = null; + body.m_controllerList && (body.m_controllerList.prevController = edge); + body.m_controllerList = edge; + ++body.m_controllerCount; + }; + b2Controller.prototype.RemoveBody = function (body) { + if (this.m_bodyCount <= 0) throw new Error(); + var edge = this.m_bodyList; + while (edge && edge.body !== body) edge = edge.nextBody; + if (null === edge) throw new Error(); + edge.prevBody && (edge.prevBody.nextBody = edge.nextBody); + edge.nextBody && (edge.nextBody.prevBody = edge.prevBody); + this.m_bodyList === edge && (this.m_bodyList = edge.nextBody); + --this.m_bodyCount; + edge.nextController && (edge.nextController.prevController = edge.prevController); + edge.prevController && (edge.prevController.nextController = edge.nextController); + body.m_controllerList === edge && (body.m_controllerList = edge.nextController); + --body.m_controllerCount; + }; + b2Controller.prototype.Clear = function () { + while (this.m_bodyList) this.RemoveBody(this.m_bodyList.body); + this.m_bodyCount = 0; + }; + return b2Controller; + })(); + var b2BuoyancyController = (function (_super) { + __extends(b2BuoyancyController, _super); + function b2BuoyancyController() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.normal = new b2Vec2(0, 1); + _this.offset = 0; + _this.density = 0; + _this.velocity = new b2Vec2(0, 0); + _this.linearDrag = 0; + _this.angularDrag = 0; + _this.useDensity = false; + _this.useWorldGravity = true; + _this.gravity = new b2Vec2(0, 0); + return _this; + } + b2BuoyancyController.prototype.Step = function (step) { + if (!this.m_bodyList) return; + this.useWorldGravity && this.gravity.Copy(this.m_bodyList.body.GetWorld().GetGravity()); + for (var i = this.m_bodyList; i; i = i.nextBody) { + var body = i.body; + if (!body.IsAwake()) continue; + var areac = new b2Vec2(); + var massc = new b2Vec2(); + var area = 0; + var mass = 0; + for (var fixture = body.GetFixtureList(); fixture; fixture = fixture.m_next) { + var sc = new b2Vec2(); + var sarea = fixture.GetShape().ComputeSubmergedArea(this.normal, this.offset, body.GetTransform(), sc); + area += sarea; + areac.x += sarea * sc.x; + areac.y += sarea * sc.y; + var shapeDensity = 0; + shapeDensity = this.useDensity ? fixture.GetDensity() : 1; + mass += sarea * shapeDensity; + massc.x += sarea * sc.x * shapeDensity; + massc.y += sarea * sc.y * shapeDensity; + } + areac.x /= area; + areac.y /= area; + massc.x /= mass; + massc.y /= mass; + if (area < b2_epsilon) continue; + var buoyancyForce = this.gravity.Clone().SelfNeg(); + buoyancyForce.SelfMul(this.density * area); + body.ApplyForce(buoyancyForce, massc); + var dragForce = body.GetLinearVelocityFromWorldPoint(areac, new b2Vec2()); + dragForce.SelfSub(this.velocity); + dragForce.SelfMul(-this.linearDrag * area); + body.ApplyForce(dragForce, areac); + body.ApplyTorque(-body.GetInertia() / body.GetMass() * area * body.GetAngularVelocity() * this.angularDrag); + } + }; + b2BuoyancyController.prototype.Draw = function (debugDraw) { + var r = 100; + var p1 = new b2Vec2(); + var p2 = new b2Vec2(); + p1.x = this.normal.x * this.offset + this.normal.y * r; + p1.y = this.normal.y * this.offset - this.normal.x * r; + p2.x = this.normal.x * this.offset - this.normal.y * r; + p2.y = this.normal.y * this.offset + this.normal.x * r; + var color = new b2Color(0, 0, .8); + debugDraw.DrawSegment(p1, p2, color); + }; + return b2BuoyancyController; + })(b2Controller); + var b2ConstantAccelController = (function (_super) { + __extends(b2ConstantAccelController, _super); + function b2ConstantAccelController() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.A = new b2Vec2(0, 0); + return _this; + } + b2ConstantAccelController.prototype.Step = function (step) { + var dtA = b2Vec2.MulSV(step.dt, this.A, b2ConstantAccelController.Step_s_dtA); + for (var i = this.m_bodyList; i; i = i.nextBody) { + var body = i.body; + if (!body.IsAwake()) continue; + body.SetLinearVelocity(b2Vec2.AddVV(body.GetLinearVelocity(), dtA, b2Vec2.s_t0)); + } + }; + b2ConstantAccelController.prototype.Draw = function (draw) { }; + b2ConstantAccelController.Step_s_dtA = new b2Vec2(); + return b2ConstantAccelController; + })(b2Controller); + var b2ConstantForceController = (function (_super) { + __extends(b2ConstantForceController, _super); + function b2ConstantForceController() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.F = new b2Vec2(0, 0); + return _this; + } + b2ConstantForceController.prototype.Step = function (step) { + for (var i = this.m_bodyList; i; i = i.nextBody) { + var body = i.body; + if (!body.IsAwake()) continue; + body.ApplyForce(this.F, body.GetWorldCenter()); + } + }; + b2ConstantForceController.prototype.Draw = function (draw) { }; + return b2ConstantForceController; + })(b2Controller); + var b2GravityController = (function (_super) { + __extends(b2GravityController, _super); + function b2GravityController() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.G = 1; + _this.invSqr = true; + return _this; + } + b2GravityController.prototype.Step = function (step) { + if (this.invSqr) for (var i = this.m_bodyList; i; i = i.nextBody) { + var body1 = i.body; + var p1 = body1.GetWorldCenter(); + var mass1 = body1.GetMass(); + for (var j = this.m_bodyList; j && j !== i; j = j.nextBody) { + var body2 = j.body; + var p2 = body2.GetWorldCenter(); + var mass2 = body2.GetMass(); + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + var r2 = dx * dx + dy * dy; + if (r2 < b2_epsilon) continue; + var f = b2GravityController.Step_s_f.Set(dx, dy); + f.SelfMul(this.G / r2 / b2Sqrt(r2) * mass1 * mass2); + body1.IsAwake() && body1.ApplyForce(f, p1); + body2.IsAwake() && body2.ApplyForce(f.SelfMul(-1), p2); + } + } else for (var i = this.m_bodyList; i; i = i.nextBody) { + var body1 = i.body; + var p1 = body1.GetWorldCenter(); + var mass1 = body1.GetMass(); + for (var j = this.m_bodyList; j && j !== i; j = j.nextBody) { + var body2 = j.body; + var p2 = body2.GetWorldCenter(); + var mass2 = body2.GetMass(); + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + var r2 = dx * dx + dy * dy; + if (r2 < b2_epsilon) continue; + var f = b2GravityController.Step_s_f.Set(dx, dy); + f.SelfMul(this.G / r2 * mass1 * mass2); + body1.IsAwake() && body1.ApplyForce(f, p1); + body2.IsAwake() && body2.ApplyForce(f.SelfMul(-1), p2); + } + } + }; + b2GravityController.prototype.Draw = function (draw) { }; + b2GravityController.Step_s_f = new b2Vec2(); + return b2GravityController; + })(b2Controller); + var b2TensorDampingController = (function (_super) { + __extends(b2TensorDampingController, _super); + function b2TensorDampingController() { + var _this = null !== _super && _super.apply(this, arguments) || this; + _this.T = new b2Mat22(); + _this.maxTimestep = 0; + return _this; + } + b2TensorDampingController.prototype.Step = function (step) { + var timestep = step.dt; + if (timestep <= b2_epsilon) return; + timestep > this.maxTimestep && this.maxTimestep > 0 && (timestep = this.maxTimestep); + for (var i = this.m_bodyList; i; i = i.nextBody) { + var body = i.body; + if (!body.IsAwake()) continue; + var damping = body.GetWorldVector(b2Mat22.MulMV(this.T, body.GetLocalVector(body.GetLinearVelocity(), b2Vec2.s_t0), b2Vec2.s_t1), b2TensorDampingController.Step_s_damping); + body.SetLinearVelocity(b2Vec2.AddVV(body.GetLinearVelocity(), b2Vec2.MulSV(timestep, damping, b2Vec2.s_t0), b2Vec2.s_t1)); + } + }; + b2TensorDampingController.prototype.Draw = function (draw) { }; + b2TensorDampingController.prototype.SetAxisAligned = function (xDamping, yDamping) { + this.T.ex.x = -xDamping; + this.T.ex.y = 0; + this.T.ey.x = 0; + this.T.ey.y = -yDamping; + this.maxTimestep = xDamping > 0 || yDamping > 0 ? 1 / b2Max(xDamping, yDamping) : 0; + }; + b2TensorDampingController.Step_s_damping = new b2Vec2(); + return b2TensorDampingController; + })(b2Controller); + var b2RopeDef = (function () { + function b2RopeDef() { + this.vertices = []; + this.count = 0; + this.masses = []; + this.gravity = new b2Vec2(0, 0); + this.damping = .1; + this.k2 = .9; + this.k3 = .1; + } + return b2RopeDef; + })(); + var b2Rope = (function () { + function b2Rope() { + this.m_count = 0; + this.m_ps = []; + this.m_p0s = []; + this.m_vs = []; + this.m_ims = []; + this.m_Ls = []; + this.m_as = []; + this.m_gravity = new b2Vec2(); + this.m_damping = 0; + this.m_k2 = 1; + this.m_k3 = .1; + } + b2Rope.prototype.GetVertexCount = function () { + return this.m_count; + }; + b2Rope.prototype.GetVertices = function () { + return this.m_ps; + }; + b2Rope.prototype.Initialize = function (def) { + this.m_count = def.count; + this.m_ps = b2Vec2.MakeArray(this.m_count); + this.m_p0s = b2Vec2.MakeArray(this.m_count); + this.m_vs = b2Vec2.MakeArray(this.m_count); + this.m_ims = b2MakeNumberArray(this.m_count); + for (var i = 0; i < this.m_count; ++i) { + this.m_ps[i].Copy(def.vertices[i]); + this.m_p0s[i].Copy(def.vertices[i]); + this.m_vs[i].SetZero(); + var m = def.masses[i]; + this.m_ims[i] = m > 0 ? 1 / m : 0; + } + var count2 = this.m_count - 1; + var count3 = this.m_count - 2; + this.m_Ls = b2MakeNumberArray(count2); + this.m_as = b2MakeNumberArray(count3); + for (var i = 0; i < count2; ++i) { + var p1 = this.m_ps[i]; + var p2 = this.m_ps[i + 1]; + this.m_Ls[i] = b2Vec2.DistanceVV(p1, p2); + } + for (var i = 0; i < count3; ++i) { + var p1 = this.m_ps[i]; + var p2 = this.m_ps[i + 1]; + var p3 = this.m_ps[i + 2]; + var d1 = b2Vec2.SubVV(p2, p1, b2Vec2.s_t0); + var d2 = b2Vec2.SubVV(p3, p2, b2Vec2.s_t1); + var a = b2Vec2.CrossVV(d1, d2); + var b = b2Vec2.DotVV(d1, d2); + this.m_as[i] = b2Atan2(a, b); + } + this.m_gravity.Copy(def.gravity); + this.m_damping = def.damping; + this.m_k2 = def.k2; + this.m_k3 = def.k3; + }; + b2Rope.prototype.Step = function (h, iterations) { + if (0 === h) return; + var d = Math.exp(-h * this.m_damping); + for (var i = 0; i < this.m_count; ++i) { + this.m_p0s[i].Copy(this.m_ps[i]); + this.m_ims[i] > 0 && this.m_vs[i].SelfMulAdd(h, this.m_gravity); + this.m_vs[i].SelfMul(d); + this.m_ps[i].SelfMulAdd(h, this.m_vs[i]); + } + for (var i = 0; i < iterations; ++i) { + this.SolveC2(); + this.SolveC3(); + this.SolveC2(); + } + var inv_h = 1 / h; + for (var i = 0; i < this.m_count; ++i) b2Vec2.MulSV(inv_h, b2Vec2.SubVV(this.m_ps[i], this.m_p0s[i], b2Vec2.s_t0), this.m_vs[i]); + }; + b2Rope.prototype.SolveC2 = function () { + var count2 = this.m_count - 1; + for (var i = 0; i < count2; ++i) { + var p1 = this.m_ps[i]; + var p2 = this.m_ps[i + 1]; + var d = b2Vec2.SubVV(p2, p1, b2Rope.s_d); + var L = d.Normalize(); + var im1 = this.m_ims[i]; + var im2 = this.m_ims[i + 1]; + if (im1 + im2 === 0) continue; + var s1 = im1 / (im1 + im2); + var s2 = im2 / (im1 + im2); + p1.SelfMulSub(this.m_k2 * s1 * (this.m_Ls[i] - L), d); + p2.SelfMulAdd(this.m_k2 * s2 * (this.m_Ls[i] - L), d); + } + }; + b2Rope.prototype.SetAngle = function (angle) { + var count3 = this.m_count - 2; + for (var i = 0; i < count3; ++i) this.m_as[i] = angle; + }; + b2Rope.prototype.SolveC3 = function () { + var count3 = this.m_count - 2; + for (var i = 0; i < count3; ++i) { + var p1 = this.m_ps[i]; + var p2 = this.m_ps[i + 1]; + var p3 = this.m_ps[i + 2]; + var m1 = this.m_ims[i]; + var m2 = this.m_ims[i + 1]; + var m3 = this.m_ims[i + 2]; + var d1 = b2Vec2.SubVV(p2, p1, b2Rope.s_d1); + var d2 = b2Vec2.SubVV(p3, p2, b2Rope.s_d2); + var L1sqr = d1.LengthSquared(); + var L2sqr = d2.LengthSquared(); + if (L1sqr * L2sqr === 0) continue; + var a = b2Vec2.CrossVV(d1, d2); + var b = b2Vec2.DotVV(d1, d2); + var angle = b2Atan2(a, b); + var Jd1 = b2Vec2.MulSV(-1 / L1sqr, d1.SelfSkew(), b2Rope.s_Jd1); + var Jd2 = b2Vec2.MulSV(1 / L2sqr, d2.SelfSkew(), b2Rope.s_Jd2); + var J1 = b2Vec2.NegV(Jd1, b2Rope.s_J1); + var J2 = b2Vec2.SubVV(Jd1, Jd2, b2Rope.s_J2); + var J3 = Jd2; + var mass = m1 * b2Vec2.DotVV(J1, J1) + m2 * b2Vec2.DotVV(J2, J2) + m3 * b2Vec2.DotVV(J3, J3); + if (0 === mass) continue; + mass = 1 / mass; + var C = angle - this.m_as[i]; + while (C > b2_pi) { + angle -= 2 * b2_pi; + C = angle - this.m_as[i]; + } + while (C < -b2_pi) { + angle += 2 * b2_pi; + C = angle - this.m_as[i]; + } + var impulse = -this.m_k3 * mass * C; + p1.SelfMulAdd(m1 * impulse, J1); + p2.SelfMulAdd(m2 * impulse, J2); + p3.SelfMulAdd(m3 * impulse, J3); + } + }; + b2Rope.prototype.Draw = function (draw) { + var c = new b2Color(.4, .5, .7); + for (var i = 0; i < this.m_count - 1; ++i) draw.DrawSegment(this.m_ps[i], this.m_ps[i + 1], c); + }; + b2Rope.s_d = new b2Vec2(); + b2Rope.s_d1 = new b2Vec2(); + b2Rope.s_d2 = new b2Vec2(); + b2Rope.s_Jd1 = new b2Vec2(); + b2Rope.s_Jd2 = new b2Vec2(); + b2Rope.s_J1 = new b2Vec2(); + b2Rope.s_J2 = new b2Vec2(); + return b2Rope; + })(); + exports.b2Assert = b2Assert; + exports.b2Maybe = b2Maybe; + exports.b2_maxFloat = b2_maxFloat; + exports.b2_epsilon = b2_epsilon; + exports.b2_epsilon_sq = b2_epsilon_sq; + exports.b2_pi = b2_pi; + exports.b2_maxManifoldPoints = b2_maxManifoldPoints; + exports.b2_maxPolygonVertices = b2_maxPolygonVertices; + exports.b2_aabbExtension = b2_aabbExtension; + exports.b2_aabbMultiplier = b2_aabbMultiplier; + exports.b2_linearSlop = b2_linearSlop; + exports.b2_angularSlop = b2_angularSlop; + exports.b2_polygonRadius = b2_polygonRadius; + exports.b2_maxSubSteps = b2_maxSubSteps; + exports.b2_maxTOIContacts = b2_maxTOIContacts; + exports.b2_velocityThreshold = b2_velocityThreshold; + exports.b2_maxLinearCorrection = b2_maxLinearCorrection; + exports.b2_maxAngularCorrection = b2_maxAngularCorrection; + exports.b2_maxTranslation = b2_maxTranslation; + exports.b2_maxTranslationSquared = b2_maxTranslationSquared; + exports.b2_maxRotation = b2_maxRotation; + exports.b2_maxRotationSquared = b2_maxRotationSquared; + exports.b2_baumgarte = b2_baumgarte; + exports.b2_toiBaumgarte = b2_toiBaumgarte; + exports.b2_invalidParticleIndex = b2_invalidParticleIndex; + exports.b2_maxParticleIndex = b2_maxParticleIndex; + exports.b2_particleStride = b2_particleStride; + exports.b2_minParticleWeight = b2_minParticleWeight; + exports.b2_maxParticlePressure = b2_maxParticlePressure; + exports.b2_maxParticleForce = b2_maxParticleForce; + exports.b2_maxTriadDistance = b2_maxTriadDistance; + exports.b2_maxTriadDistanceSquared = b2_maxTriadDistanceSquared; + exports.b2_minParticleSystemBufferCapacity = b2_minParticleSystemBufferCapacity; + exports.b2_barrierCollisionTime = b2_barrierCollisionTime; + exports.b2_timeToSleep = b2_timeToSleep; + exports.b2_linearSleepTolerance = b2_linearSleepTolerance; + exports.b2_angularSleepTolerance = b2_angularSleepTolerance; + exports.b2Alloc = b2Alloc; + exports.b2Free = b2Free; + exports.b2Log = b2Log; + exports.b2Version = b2Version; + exports.b2_version = b2_version; + exports.b2_branch = b2_branch; + exports.b2_commit = b2_commit; + exports.b2ParseInt = b2ParseInt; + exports.b2ParseUInt = b2ParseUInt; + exports.b2MakeArray = b2MakeArray; + exports.b2MakeNullArray = b2MakeNullArray; + exports.b2MakeNumberArray = b2MakeNumberArray; + exports.b2_pi_over_180 = b2_pi_over_180; + exports.b2_180_over_pi = b2_180_over_pi; + exports.b2_two_pi = b2_two_pi; + exports.b2Abs = b2Abs; + exports.b2Min = b2Min; + exports.b2Max = b2Max; + exports.b2Clamp = b2Clamp; + exports.b2Swap = b2Swap; + exports.b2IsValid = b2IsValid; + exports.b2Sq = b2Sq; + exports.b2InvSqrt = b2InvSqrt; + exports.b2Sqrt = b2Sqrt; + exports.b2Pow = b2Pow; + exports.b2DegToRad = b2DegToRad; + exports.b2RadToDeg = b2RadToDeg; + exports.b2Cos = b2Cos; + exports.b2Sin = b2Sin; + exports.b2Acos = b2Acos; + exports.b2Asin = b2Asin; + exports.b2Atan2 = b2Atan2; + exports.b2NextPowerOfTwo = b2NextPowerOfTwo; + exports.b2IsPowerOfTwo = b2IsPowerOfTwo; + exports.b2Random = b2Random; + exports.b2RandomRange = b2RandomRange; + exports.b2Vec2 = b2Vec2; + exports.b2Vec2_zero = b2Vec2_zero; + exports.b2Vec3 = b2Vec3; + exports.b2Mat22 = b2Mat22; + exports.b2Mat33 = b2Mat33; + exports.b2Rot = b2Rot; + exports.b2Transform = b2Transform; + exports.b2Sweep = b2Sweep; + exports.b2Color = b2Color; + exports.b2Draw = b2Draw; + exports.b2Timer = b2Timer; + exports.b2Counter = b2Counter; + exports.b2GrowableStack = b2GrowableStack; + exports.b2BlockAllocator = b2BlockAllocator; + exports.b2StackAllocator = b2StackAllocator; + exports.b2ContactFeature = b2ContactFeature; + exports.b2ContactID = b2ContactID; + exports.b2ManifoldPoint = b2ManifoldPoint; + exports.b2Manifold = b2Manifold; + exports.b2WorldManifold = b2WorldManifold; + exports.b2GetPointStates = b2GetPointStates; + exports.b2ClipVertex = b2ClipVertex; + exports.b2RayCastInput = b2RayCastInput; + exports.b2RayCastOutput = b2RayCastOutput; + exports.b2AABB = b2AABB; + exports.b2TestOverlapAABB = b2TestOverlapAABB; + exports.b2ClipSegmentToLine = b2ClipSegmentToLine; + exports.b2TestOverlapShape = b2TestOverlapShape; + exports.b2DistanceProxy = b2DistanceProxy; + exports.b2SimplexCache = b2SimplexCache; + exports.b2DistanceInput = b2DistanceInput; + exports.b2DistanceOutput = b2DistanceOutput; + exports.b2ShapeCastInput = b2ShapeCastInput; + exports.b2ShapeCastOutput = b2ShapeCastOutput; + exports.b2_gjk_reset = b2_gjk_reset; + exports.b2SimplexVertex = b2SimplexVertex; + exports.b2Simplex = b2Simplex; + exports.b2Distance = b2Distance; + exports.b2ShapeCast = b2ShapeCast; + exports.b2Pair = b2Pair; + exports.b2BroadPhase = b2BroadPhase; + exports.b2PairLessThan = b2PairLessThan; + exports.b2TreeNode = b2TreeNode; + exports.b2DynamicTree = b2DynamicTree; + exports.b2_toi_reset = b2_toi_reset; + exports.b2TOIInput = b2TOIInput; + exports.b2TOIOutput = b2TOIOutput; + exports.b2SeparationFunction = b2SeparationFunction; + exports.b2TimeOfImpact = b2TimeOfImpact; + exports.b2CollideCircles = b2CollideCircles; + exports.b2CollidePolygonAndCircle = b2CollidePolygonAndCircle; + exports.b2CollidePolygons = b2CollidePolygons; + exports.b2CollideEdgeAndCircle = b2CollideEdgeAndCircle; + exports.b2CollideEdgeAndPolygon = b2CollideEdgeAndPolygon; + exports.b2MassData = b2MassData; + exports.b2Shape = b2Shape; + exports.b2CircleShape = b2CircleShape; + exports.b2PolygonShape = b2PolygonShape; + exports.b2EdgeShape = b2EdgeShape; + exports.b2ChainShape = b2ChainShape; + exports.b2Filter = b2Filter; + exports.b2FixtureDef = b2FixtureDef; + exports.b2FixtureProxy = b2FixtureProxy; + exports.b2Fixture = b2Fixture; + exports.b2BodyDef = b2BodyDef; + exports.b2Body = b2Body; + exports.b2World = b2World; + exports.b2DestructionListener = b2DestructionListener; + exports.b2ContactFilter = b2ContactFilter; + exports.b2ContactImpulse = b2ContactImpulse; + exports.b2ContactListener = b2ContactListener; + exports.b2QueryCallback = b2QueryCallback; + exports.b2RayCastCallback = b2RayCastCallback; + exports.b2Island = b2Island; + exports.b2Profile = b2Profile; + exports.b2TimeStep = b2TimeStep; + exports.b2Position = b2Position; + exports.b2Velocity = b2Velocity; + exports.b2SolverData = b2SolverData; + exports.b2ContactManager = b2ContactManager; + exports.b2MixFriction = b2MixFriction; + exports.b2MixRestitution = b2MixRestitution; + exports.b2ContactEdge = b2ContactEdge; + exports.b2Contact = b2Contact; + exports.b2ContactRegister = b2ContactRegister; + exports.b2ContactFactory = b2ContactFactory; + exports.g_blockSolve = g_blockSolve; + exports.b2VelocityConstraintPoint = b2VelocityConstraintPoint; + exports.b2ContactVelocityConstraint = b2ContactVelocityConstraint; + exports.b2ContactPositionConstraint = b2ContactPositionConstraint; + exports.b2ContactSolverDef = b2ContactSolverDef; + exports.b2PositionSolverManifold = b2PositionSolverManifold; + exports.b2ContactSolver = b2ContactSolver; + exports.b2CircleContact = b2CircleContact; + exports.b2PolygonContact = b2PolygonContact; + exports.b2PolygonAndCircleContact = b2PolygonAndCircleContact; + exports.b2EdgeAndCircleContact = b2EdgeAndCircleContact; + exports.b2EdgeAndPolygonContact = b2EdgeAndPolygonContact; + exports.b2ChainAndCircleContact = b2ChainAndCircleContact; + exports.b2ChainAndPolygonContact = b2ChainAndPolygonContact; + exports.b2Jacobian = b2Jacobian; + exports.b2JointEdge = b2JointEdge; + exports.b2JointDef = b2JointDef; + exports.b2Joint = b2Joint; + exports.b2AreaJointDef = b2AreaJointDef; + exports.b2AreaJoint = b2AreaJoint; + exports.b2DistanceJointDef = b2DistanceJointDef; + exports.b2DistanceJoint = b2DistanceJoint; + exports.b2FrictionJointDef = b2FrictionJointDef; + exports.b2FrictionJoint = b2FrictionJoint; + exports.b2GearJointDef = b2GearJointDef; + exports.b2GearJoint = b2GearJoint; + exports.b2MotorJointDef = b2MotorJointDef; + exports.b2MotorJoint = b2MotorJoint; + exports.b2MouseJointDef = b2MouseJointDef; + exports.b2MouseJoint = b2MouseJoint; + exports.b2PrismaticJointDef = b2PrismaticJointDef; + exports.b2PrismaticJoint = b2PrismaticJoint; + exports.b2_minPulleyLength = b2_minPulleyLength; + exports.b2PulleyJointDef = b2PulleyJointDef; + exports.b2PulleyJoint = b2PulleyJoint; + exports.b2RevoluteJointDef = b2RevoluteJointDef; + exports.b2RevoluteJoint = b2RevoluteJoint; + exports.b2RopeJointDef = b2RopeJointDef; + exports.b2RopeJoint = b2RopeJoint; + exports.b2WeldJointDef = b2WeldJointDef; + exports.b2WeldJoint = b2WeldJoint; + exports.b2WheelJointDef = b2WheelJointDef; + exports.b2WheelJoint = b2WheelJoint; + exports.b2ControllerEdge = b2ControllerEdge; + exports.b2Controller = b2Controller; + exports.b2BuoyancyController = b2BuoyancyController; + exports.b2ConstantAccelController = b2ConstantAccelController; + exports.b2ConstantForceController = b2ConstantForceController; + exports.b2GravityController = b2GravityController; + exports.b2TensorDampingController = b2TensorDampingController; + exports.b2ParticleDef = b2ParticleDef; + exports.b2CalculateParticleIterations = b2CalculateParticleIterations; + exports.b2ParticleHandle = b2ParticleHandle; + exports.b2ParticleGroupDef = b2ParticleGroupDef; + exports.b2ParticleGroup = b2ParticleGroup; + exports.b2GrowableBuffer = b2GrowableBuffer; + exports.b2FixtureParticleQueryCallback = b2FixtureParticleQueryCallback; + exports.b2ParticleContact = b2ParticleContact; + exports.b2ParticleBodyContact = b2ParticleBodyContact; + exports.b2ParticlePair = b2ParticlePair; + exports.b2ParticleTriad = b2ParticleTriad; + exports.b2ParticleSystemDef = b2ParticleSystemDef; + exports.b2RopeDef = b2RopeDef; + exports.b2Rope = b2Rope; + Object.defineProperty(exports, "__esModule", { + value: true + }); + })); + }), {}], + 436: [(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": 352, + "./cocos2d/core/predefine": 264, + "./extends": 411, + "./package": void 0, + "./polyfill/array": 438, + "./polyfill/array-buffer": 437, + "./polyfill/misc": 439, + "./polyfill/number": 440, + "./polyfill/object": 441, + "./polyfill/string": 442, + "./polyfill/typescript": 443, + "./predefine": 444 + }], + 437: [(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; + }; + } + }), {}], + 438: [(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); + }); + }), {}], + 439: [(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"); + }; + } + }), {}], + 440: [(function (require, module, exports) { + "use strict"; + Number.parseFloat = Number.parseFloat || parseFloat; + Number.parseInt = Number.parseInt || parseInt; + }), {}], + 441: [(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; + }); + }), {}], + 442: [(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+/, ""); + }); + }), {}], + 443: [(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; + }; + }), {}], + 444: [(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 = true; + _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.4"; + _global["CocosEngine"] = cc.ENGINE_VERSION = engineVersion; + }), {}] +}, {}, [436]); \ No newline at end of file diff --git a/static/cocos-build/web-mobile/favicon.ico b/static/cocos-build/web-mobile/favicon.ico new file mode 100644 index 0000000..0bd33cd Binary files /dev/null and b/static/cocos-build/web-mobile/favicon.ico differ diff --git a/static/cocos-build/web-mobile/index.html b/static/cocos-build/web-mobile/index.html new file mode 100644 index 0000000..22eb2de --- /dev/null +++ b/static/cocos-build/web-mobile/index.html @@ -0,0 +1,90 @@ + + + + + + Cocos Creator | hello_world + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + + + diff --git a/static/cocos-build/web-mobile/main.js b/static/cocos-build/web-mobile/main.js new file mode 100644 index 0000000..d64604f --- /dev/null +++ b/static/cocos-build/web-mobile/main.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.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.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/static/cocos-build/web-mobile/physics.js b/static/cocos-build/web-mobile/physics.js new file mode 100644 index 0000000..e459ca6 --- /dev/null +++ b/static/cocos-build/web-mobile/physics.js @@ -0,0 +1,9886 @@ +(function() { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = "function" == typeof require && require; + if (!f && c) return c(i, !0); + if (u) return u(i, !0); + var a = new Error("Cannot find module '" + i + "'"); + throw a.code = "MODULE_NOT_FOUND", a; + } + var p = n[i] = { + exports: {} + }; + e[i][0].call(p.exports, function(r) { + var n = e[i][1][r]; + return o(n || r); + }, p, p.exports, r, e, n, t); + } + return n[i].exports; + } + for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) o(t[i]); + return o; + } + return r; +})()({ + 1: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.CannonRigidBody = void 0; + var _cannon = _interopRequireDefault(require("../../../../../external/cannon/cannon")); + 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); + return Constructor; + } + var v3_cannon0 = new _cannon["default"].Vec3(); + var v3_cannon1 = new _cannon["default"].Vec3(); + var Vec3 = cc.Vec3; + var CannonRigidBody = function() { + function CannonRigidBody() { + this._rigidBody = void 0; + this._sharedBody = void 0; + this._isEnabled = false; + } + var _proto = CannonRigidBody.prototype; + _proto.__preload = function __preload(com) { + this._rigidBody = com; + this._sharedBody = cc.director.getPhysics3DManager().physicsWorld.getSharedBody(this._rigidBody.node); + this._sharedBody.reference = true; + this._sharedBody.wrappedBody = this; + }; + _proto.onLoad = function onLoad() {}; + _proto.onEnable = function onEnable() { + this._isEnabled = true; + this.mass = this._rigidBody.mass; + this.allowSleep = this._rigidBody.allowSleep; + this.linearDamping = this._rigidBody.linearDamping; + this.angularDamping = this._rigidBody.angularDamping; + this.useGravity = this._rigidBody.useGravity; + this.isKinematic = this._rigidBody.isKinematic; + this.fixedRotation = this._rigidBody.fixedRotation; + this.linearFactor = this._rigidBody.linearFactor; + this.angularFactor = this._rigidBody.angularFactor; + this._sharedBody.enabled = true; + }; + _proto.onDisable = function onDisable() { + this._isEnabled = false; + this._sharedBody.enabled = false; + }; + _proto.onDestroy = function onDestroy() { + this._sharedBody.reference = false; + this._rigidBody = null; + this._sharedBody = null; + }; + _proto.wakeUp = function wakeUp() { + return this._sharedBody.body.wakeUp(); + }; + _proto.sleep = function sleep() { + return this._sharedBody.body.sleep(); + }; + _proto.getLinearVelocity = function getLinearVelocity(out) { + Vec3.copy(out, this._sharedBody.body.velocity); + return out; + }; + _proto.setLinearVelocity = function setLinearVelocity(value) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + Vec3.copy(body.velocity, value); + }; + _proto.getAngularVelocity = function getAngularVelocity(out) { + Vec3.copy(out, this._sharedBody.body.angularVelocity); + return out; + }; + _proto.setAngularVelocity = function setAngularVelocity(value) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + Vec3.copy(body.angularVelocity, value); + }; + _proto.applyForce = function applyForce(force, worldPoint) { + null == worldPoint && (worldPoint = Vec3.ZERO); + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.applyForce(Vec3.copy(v3_cannon0, force), Vec3.copy(v3_cannon1, worldPoint)); + }; + _proto.applyImpulse = function applyImpulse(impulse, worldPoint) { + null == worldPoint && (worldPoint = Vec3.ZERO); + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.applyImpulse(Vec3.copy(v3_cannon0, impulse), Vec3.copy(v3_cannon1, worldPoint)); + }; + _proto.applyLocalForce = function applyLocalForce(force, localPoint) { + null == localPoint && (localPoint = Vec3.ZERO); + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.applyLocalForce(Vec3.copy(v3_cannon0, force), Vec3.copy(v3_cannon1, localPoint)); + }; + _proto.applyLocalImpulse = function applyLocalImpulse(impulse, localPoint) { + null == localPoint && (localPoint = Vec3.ZERO); + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.applyLocalImpulse(Vec3.copy(v3_cannon0, impulse), Vec3.copy(v3_cannon1, localPoint)); + }; + _proto.applyTorque = function applyTorque(torque) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.torque.x += torque.x; + body.torque.y += torque.y; + body.torque.z += torque.z; + }; + _proto.applyLocalTorque = function applyLocalTorque(torque) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + Vec3.copy(v3_cannon0, torque); + body.vectorToWorldFrame(v3_cannon0, v3_cannon0); + body.torque.x += v3_cannon0.x; + body.torque.y += v3_cannon0.y; + body.torque.z += v3_cannon0.z; + }; + _createClass(CannonRigidBody, [ { + key: "isAwake", + get: function get() { + return this._sharedBody.body.isAwake(); + } + }, { + key: "isSleepy", + get: function get() { + return this._sharedBody.body.isSleepy(); + } + }, { + key: "isSleeping", + get: function get() { + return this._sharedBody.body.isSleeping(); + } + }, { + key: "allowSleep", + set: function set(v) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.allowSleep = v; + } + }, { + key: "mass", + set: function set(value) { + var body = this._sharedBody.body; + body.mass = value; + 0 == body.mass ? body.type = _cannon["default"].Body.STATIC : body.type = this._rigidBody.isKinematic ? _cannon["default"].Body.KINEMATIC : _cannon["default"].Body.DYNAMIC; + body.updateMassProperties(); + body.isSleeping() && body.wakeUp(); + } + }, { + key: "isKinematic", + set: function set(value) { + var body = this._sharedBody.body; + 0 == body.mass ? body.type = _cannon["default"].Body.STATIC : body.type = value ? _cannon["default"].Body.KINEMATIC : _cannon["default"].Body.DYNAMIC; + } + }, { + key: "fixedRotation", + set: function set(value) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.fixedRotation = value; + body.updateMassProperties(); + } + }, { + key: "linearDamping", + set: function set(value) { + this._sharedBody.body.linearDamping = value; + } + }, { + key: "angularDamping", + set: function set(value) { + this._sharedBody.body.angularDamping = value; + } + }, { + key: "useGravity", + set: function set(value) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + body.useGravity = value; + } + }, { + key: "linearFactor", + set: function set(value) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + Vec3.copy(body.linearFactor, value); + } + }, { + key: "angularFactor", + set: function set(value) { + var body = this._sharedBody.body; + body.isSleeping() && body.wakeUp(); + Vec3.copy(body.angularFactor, value); + } + }, { + key: "rigidBody", + get: function get() { + return this._rigidBody; + } + }, { + key: "sharedBody", + get: function get() { + return this._sharedBody; + } + }, { + key: "isEnabled", + get: function get() { + return this._isEnabled; + } + } ]); + return CannonRigidBody; + }(); + exports.CannonRigidBody = CannonRigidBody; + }, { + "../../../../../external/cannon/cannon": 24 + } ], + 2: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.CannonSharedBody = void 0; + var _cannon = _interopRequireDefault(require("../../../../../external/cannon/cannon")); + var _physicsEnum = require("../framework/physics-enum"); + var _util = require("../framework/util"); + var _cannonUtil = require("./cannon-util"); + 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); + return Constructor; + } + var LocalDirtyFlag = cc.Node._LocalDirtyFlag; + var PHYSICS_SCALE = LocalDirtyFlag.PHYSICS_SCALE; + var Quat = cc.Quat; + var Vec3 = cc.Vec3; + var fastRemoveAt = cc.js.array.fastRemoveAt; + var v3_0 = new Vec3(); + var quat_0 = new Quat(); + var contactsPool = []; + var CollisionEventObject = { + type: "collision-enter", + selfCollider: null, + otherCollider: null, + contacts: [] + }; + var CannonSharedBody = function() { + CannonSharedBody.getSharedBody = function getSharedBody(node, wrappedWorld) { + var key = node._id; + if (CannonSharedBody.sharedBodiesMap.has(key)) return CannonSharedBody.sharedBodiesMap.get(key); + var newSB = new CannonSharedBody(node, wrappedWorld); + CannonSharedBody.sharedBodiesMap.set(node._id, newSB); + return newSB; + }; + _createClass(CannonSharedBody, [ { + key: "enabled", + set: function set(v) { + if (v) { + if (this.index < 0) { + this.index = this.wrappedWorld.bodies.length; + this.wrappedWorld.addSharedBody(this); + var node = this.node; + this.body.aabbNeedsUpdate = true; + node.getWorldPosition(v3_0); + node.getWorldRotation(quat_0); + var pos = this.body.position; + pos.x = parseFloat(v3_0.x.toFixed(3)); + pos.y = parseFloat(v3_0.y.toFixed(3)); + pos.z = parseFloat(v3_0.z.toFixed(3)); + var rot = this.body.quaternion; + rot.x = parseFloat(quat_0.x.toFixed(12)); + rot.y = parseFloat(quat_0.y.toFixed(12)); + rot.z = parseFloat(quat_0.z.toFixed(12)); + rot.w = parseFloat(quat_0.w.toFixed(12)); + if (node._localMatDirty & PHYSICS_SCALE) { + var wscale = node.__wscale; + for (var i = 0; i < this.shapes.length; i++) this.shapes[i].setScale(wscale); + (0, _cannonUtil.commitShapeUpdates)(this.body); + } + this.body.isSleeping() && this.body.wakeUp(); + } + } else if (this.index >= 0) { + var isRemove = 0 == this.shapes.length && null == this.wrappedBody || 0 == this.shapes.length && null != this.wrappedBody && !this.wrappedBody.rigidBody.enabledInHierarchy || 0 == this.shapes.length && null != this.wrappedBody && !this.wrappedBody.isEnabled; + if (isRemove) { + this.body.sleep(); + this.index = -1; + this.wrappedWorld.removeSharedBody(this); + } + } + } + }, { + key: "reference", + set: function set(v) { + v ? this.ref++ : this.ref--; + 0 == this.ref && this.destroy(); + } + } ]); + function CannonSharedBody(node, wrappedWorld) { + this.node = void 0; + this.wrappedWorld = void 0; + this.body = new _cannon["default"].Body(); + this.shapes = []; + this.wrappedBody = null; + this.index = -1; + this.ref = 0; + this.onCollidedListener = this.onCollided.bind(this); + this.wrappedWorld = wrappedWorld; + this.node = node; + this.body.material = this.wrappedWorld.world.defaultMaterial; + this.body.addEventListener("cc-collide", this.onCollidedListener); + this._updateGroup(); + this.node.on(cc.Node.EventType.GROUP_CHANGED, this._updateGroup, this); + } + var _proto = CannonSharedBody.prototype; + _proto._updateGroup = function _updateGroup() { + (0, _cannonUtil.groupIndexToBitMask)(this.node.groupIndex, this.body); + }; + _proto.addShape = function addShape(v) { + var index = this.shapes.indexOf(v); + if (index < 0) { + var _index = this.body.shapes.length; + this.body.addShape(v.shape); + this.shapes.push(v); + v.setIndex(_index); + var offset = this.body.shapeOffsets[_index]; + var orient = this.body.shapeOrientations[_index]; + v.setOffsetAndOrient(offset, orient); + } + }; + _proto.removeShape = function removeShape(v) { + var index = this.shapes.indexOf(v); + if (index >= 0) { + fastRemoveAt(this.shapes, index); + this.body.removeShape(v.shape); + v.setIndex(-1); + } + }; + _proto.syncSceneToPhysics = function syncSceneToPhysics(force) { + void 0 === force && (force = false); + var node = this.node; + var needUpdateTransform = (0, _util.worldDirty)(node); + if (!force && !needUpdateTransform) return; + this.body.aabbNeedsUpdate = true; + node.getWorldPosition(v3_0); + node.getWorldRotation(quat_0); + Vec3.copy(this.body.position, v3_0); + Quat.copy(this.body.quaternion, quat_0); + if (node._localMatDirty & PHYSICS_SCALE) { + var wscale = node.__wscale; + for (var i = 0; i < this.shapes.length; i++) this.shapes[i].setScale(wscale); + (0, _cannonUtil.commitShapeUpdates)(this.body); + } + this.body.isSleeping() && this.body.wakeUp(); + }; + _proto.syncPhysicsToScene = function syncPhysicsToScene() { + if (this.body.type != _physicsEnum.ERigidBodyType.STATIC && !this.body.isSleeping()) { + Vec3.copy(v3_0, this.body.position); + Quat.copy(quat_0, this.body.quaternion); + this.node.setWorldPosition(v3_0); + this.node.setWorldRotation(quat_0); + } + }; + _proto.destroy = function destroy() { + this.body.removeEventListener("cc-collide", this.onCollidedListener); + this.node.off(cc.Node.EventType.GROUP_CHANGED, this._updateGroup, this); + CannonSharedBody.sharedBodiesMap["delete"](this.node._id); + delete _cannon["default"].World["idToBodyMap"][this.body.id]; + this.node = null; + this.wrappedWorld = null; + this.body = null; + this.shapes = null; + this.onCollidedListener = null; + }; + _proto.onCollided = function onCollided(event) { + CollisionEventObject.type = event.event; + var self = (0, _util.getWrap)(event.selfShape); + var other = (0, _util.getWrap)(event.otherShape); + if (self) { + CollisionEventObject.selfCollider = self.collider; + CollisionEventObject.otherCollider = other ? other.collider : null; + var i = 0; + for (i = CollisionEventObject.contacts.length; i--; ) contactsPool.push(CollisionEventObject.contacts.pop()); + for (i = 0; i < event.contacts.length; i++) { + var cq = event.contacts[i]; + if (contactsPool.length > 0) { + var c = contactsPool.pop(); + Vec3.copy(c.contactA, cq.ri); + Vec3.copy(c.contactB, cq.rj); + Vec3.copy(c.normal, cq.ni); + CollisionEventObject.contacts.push(c); + } else { + var _c = { + contactA: Vec3.copy(new Vec3(), cq.ri), + contactB: Vec3.copy(new Vec3(), cq.rj), + normal: Vec3.copy(new Vec3(), cq.ni) + }; + CollisionEventObject.contacts.push(_c); + } + } + for (i = 0; i < this.shapes.length; i++) { + var shape = this.shapes[i]; + CollisionEventObject.type = _cannonUtil.deprecatedEventMap[CollisionEventObject.type]; + shape.collider.emit(CollisionEventObject.type, CollisionEventObject); + CollisionEventObject.type = event.event; + shape.collider.emit(CollisionEventObject.type, CollisionEventObject); + } + } + }; + return CannonSharedBody; + }(); + exports.CannonSharedBody = CannonSharedBody; + CannonSharedBody.sharedBodiesMap = new Map(); + }, { + "../../../../../external/cannon/cannon": 24, + "../framework/physics-enum": 19, + "../framework/util": 23, + "./cannon-util": 3 + } ], + 3: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.groupIndexToBitMask = groupIndexToBitMask; + exports.toCannonRaycastOptions = toCannonRaycastOptions; + exports.fillRaycastResult = fillRaycastResult; + exports.commitShapeUpdates = commitShapeUpdates; + exports.deprecatedEventMap = void 0; + var _util = require("../framework/util"); + var Vec3 = cc.Vec3; + function groupIndexToBitMask(groupIndex, out) { + var categoryBits = 1 << groupIndex; + var maskBits = 0; + var bits = cc.game.collisionMatrix[groupIndex]; + if (!bits) { + cc.error("cannon-utils: group is not exist", groupIndex); + return; + } + for (var i = 0; i < bits.length; i++) { + if (!bits[i]) continue; + maskBits |= 1 << i; + } + out.collisionFilterGroup = categoryBits; + out.collisionFilterMask = maskBits; + } + function toCannonRaycastOptions(out, options) { + out.checkCollisionResponse = !options.queryTrigger; + groupIndexToBitMask(options.groupIndex, out); + out.skipBackFaces = false; + } + function fillRaycastResult(result, cannonResult) { + result._assign(Vec3.copy(new Vec3(), cannonResult.hitPointWorld), cannonResult.distance, (0, + _util.getWrap)(cannonResult.shape).collider); + } + function commitShapeUpdates(body) { + body.aabbNeedsUpdate = true; + body.updateMassProperties(); + body.updateBoundingRadius(); + } + var deprecatedEventMap = { + onCollisionEnter: "collision-enter", + onCollisionStay: "collision-stay", + onCollisionExit: "collision-exit", + onTriggerEnter: "trigger-enter", + onTriggerStay: "trigger-stay", + onTriggerExit: "trigger-exit" + }; + exports.deprecatedEventMap = deprecatedEventMap; + }, { + "../framework/util": 23 + } ], + 4: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.CannonWorld = void 0; + var _cannon = _interopRequireDefault(require("../../../../../external/cannon/cannon")); + var _cannonUtil = require("./cannon-util"); + var _cannonShape = require("./shapes/cannon-shape"); + var _cannonSharedBody = require("./cannon-shared-body"); + var _util = require("../framework/util"); + 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); + return Constructor; + } + var Vec3 = cc.Vec3; + var fastRemoveAt = cc.js.array.fastRemoveAt; + var CannonWorld = function() { + _createClass(CannonWorld, [ { + key: "world", + get: function get() { + return this._world; + } + }, { + key: "defaultMaterial", + set: function set(mat) { + this._world.defaultMaterial.friction = mat.friction; + this._world.defaultMaterial.restitution = mat.restitution; + null != _cannonShape.CannonShape.idToMaterial[mat._uuid] && (_cannonShape.CannonShape.idToMaterial[mat._uuid] = this._world.defaultMaterial); + } + }, { + key: "allowSleep", + set: function set(v) { + this._world.allowSleep = v; + } + }, { + key: "gravity", + set: function set(gravity) { + Vec3.copy(this._world.gravity, gravity); + } + } ]); + function CannonWorld() { + this.bodies = []; + this._world = void 0; + this._raycastResult = new _cannon["default"].RaycastResult(); + this._world = new _cannon["default"].World(); + this._world.broadphase = new _cannon["default"].NaiveBroadphase(); + this._world.addEventListener("postStep", this.onPostStep.bind(this)); + } + var _proto = CannonWorld.prototype; + _proto.onPostStep = function onPostStep() { + var p3dm = cc.director.getPhysics3DManager(); + if (p3dm.useFixedDigit) { + var pd = p3dm.fixDigits.position; + var rd = p3dm.fixDigits.rotation; + var bodies = this._world.bodies; + for (var i = 0; i < bodies.length; i++) { + var bi = bodies[i]; + if (bi.type != _cannon["default"].Body.STATIC && !bi.isSleeping()) { + var pos = bi.position; + pos.x = parseFloat(pos.x.toFixed(pd)); + pos.y = parseFloat(pos.y.toFixed(pd)); + pos.z = parseFloat(pos.z.toFixed(pd)); + var rot = bi.quaternion; + rot.x = parseFloat(rot.x.toFixed(rd)); + rot.y = parseFloat(rot.y.toFixed(rd)); + rot.z = parseFloat(rot.z.toFixed(rd)); + rot.w = parseFloat(rot.w.toFixed(rd)); + var vel = bi.velocity; + vel.x = parseFloat(vel.x.toFixed(pd)); + vel.y = parseFloat(vel.y.toFixed(pd)); + vel.z = parseFloat(vel.z.toFixed(pd)); + var avel = bi.angularVelocity; + avel.x = parseFloat(avel.x.toFixed(pd)); + avel.y = parseFloat(avel.y.toFixed(pd)); + avel.z = parseFloat(avel.z.toFixed(pd)); + } + } + } + }; + _proto.step = function step(deltaTime, timeSinceLastCalled, maxSubStep) { + this.syncSceneToPhysics(); + this._world.step(deltaTime, timeSinceLastCalled, maxSubStep); + this.syncPhysicsToScene(); + this.emitEvents(); + }; + _proto.syncSceneToPhysics = function syncSceneToPhysics() { + (0, _util.clearNodeTransformRecord)(); + for (var i = 0; i < this.bodies.length; i++) this.bodies[i].syncSceneToPhysics(); + (0, _util.clearNodeTransformDirtyFlag)(); + }; + _proto.syncPhysicsToScene = function syncPhysicsToScene() { + for (var i = 0; i < this.bodies.length; i++) this.bodies[i].syncPhysicsToScene(); + }; + _proto.emitEvents = function emitEvents() { + this._world.emitTriggeredEvents(); + this._world.emitCollisionEvents(); + }; + _proto.raycastClosest = function raycastClosest(worldRay, options, result) { + setupFromAndTo(worldRay, options.maxDistance); + (0, _cannonUtil.toCannonRaycastOptions)(raycastOpt, options); + var hit = this._world.raycastClosest(from, to, raycastOpt, this._raycastResult); + hit && (0, _cannonUtil.fillRaycastResult)(result, this._raycastResult); + return hit; + }; + _proto.raycast = function raycast(worldRay, options, pool, results) { + setupFromAndTo(worldRay, options.maxDistance); + (0, _cannonUtil.toCannonRaycastOptions)(raycastOpt, options); + var hit = this._world.raycastAll(from, to, raycastOpt, function(result) { + var r = pool.add(); + (0, _cannonUtil.fillRaycastResult)(r, result); + results.push(r); + }); + return hit; + }; + _proto.getSharedBody = function getSharedBody(node) { + return _cannonSharedBody.CannonSharedBody.getSharedBody(node, this); + }; + _proto.addSharedBody = function addSharedBody(sharedBody) { + var i = this.bodies.indexOf(sharedBody); + if (i < 0) { + this.bodies.push(sharedBody); + this._world.addBody(sharedBody.body); + } + }; + _proto.removeSharedBody = function removeSharedBody(sharedBody) { + var i = this.bodies.indexOf(sharedBody); + if (i >= 0) { + fastRemoveAt(this.bodies, i); + this._world.remove(sharedBody.body); + } + }; + return CannonWorld; + }(); + exports.CannonWorld = CannonWorld; + var from = new _cannon["default"].Vec3(); + var to = new _cannon["default"].Vec3(); + function setupFromAndTo(worldRay, distance) { + Vec3.copy(from, worldRay.o); + worldRay.computeHit(to, distance); + } + var raycastOpt = { + checkCollisionResponse: false, + collisionFilterGroup: -1, + collisionFilterMask: -1, + skipBackFaces: false + }; + }, { + "../../../../../external/cannon/cannon": 24, + "../framework/util": 23, + "./cannon-shared-body": 2, + "./cannon-util": 3, + "./shapes/cannon-shape": 7 + } ], + 5: [ function(require, module, exports) { + "use strict"; + var _physicsSelector = require("../framework/physics-selector"); + var _cannonRigidBody = require("./cannon-rigid-body"); + var _cannonWorld = require("./cannon-world"); + var _cannonBoxShape = require("./shapes/cannon-box-shape"); + var _cannonSphereShape = require("./shapes/cannon-sphere-shape"); + true; + (0, _physicsSelector.instantiate)(_cannonBoxShape.CannonBoxShape, _cannonSphereShape.CannonSphereShape, _cannonRigidBody.CannonRigidBody, _cannonWorld.CannonWorld); + }, { + "../framework/physics-selector": 22, + "./cannon-rigid-body": 1, + "./cannon-world": 4, + "./shapes/cannon-box-shape": 6, + "./shapes/cannon-sphere-shape": 8 + } ], + 6: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.CannonBoxShape = void 0; + var _cannon = _interopRequireDefault(require("../../../../../../external/cannon/cannon")); + var _cannonUtil = require("../cannon-util"); + var _cannonShape = require("./cannon-shape"); + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var Vec3 = cc.Vec3; + var v3_0 = new Vec3(); + var CannonBoxShape = function(_CannonShape) { + _inheritsLoose(CannonBoxShape, _CannonShape); + _createClass(CannonBoxShape, [ { + key: "boxCollider", + get: function get() { + return this.collider; + } + }, { + key: "box", + get: function get() { + return this._shape; + } + } ]); + function CannonBoxShape(size) { + var _this; + _this = _CannonShape.call(this) || this; + _this.halfExtent = new _cannon["default"].Vec3(); + Vec3.multiplyScalar(_this.halfExtent, size, .5); + _this._shape = new _cannon["default"].Box(_this.halfExtent.clone()); + return _this; + } + var _proto = CannonBoxShape.prototype; + _proto.onLoad = function onLoad() { + _CannonShape.prototype.onLoad.call(this); + this.size = this.boxCollider.size; + }; + _proto.setScale = function setScale(scale) { + _CannonShape.prototype.setScale.call(this, scale); + this.size = this.boxCollider.size; + }; + _createClass(CannonBoxShape, [ { + key: "size", + set: function set(v) { + this.collider.node.getWorldScale(v3_0); + v3_0.x = Math.abs(v3_0.x); + v3_0.y = Math.abs(v3_0.y); + v3_0.z = Math.abs(v3_0.z); + Vec3.multiplyScalar(this.halfExtent, v, .5); + Vec3.multiply(this.box.halfExtents, this.halfExtent, v3_0); + this.box.updateConvexPolyhedronRepresentation(); + -1 != this._index && (0, _cannonUtil.commitShapeUpdates)(this._body); + } + } ]); + return CannonBoxShape; + }(_cannonShape.CannonShape); + exports.CannonBoxShape = CannonBoxShape; + }, { + "../../../../../../external/cannon/cannon": 24, + "../cannon-util": 3, + "./cannon-shape": 7 + } ], + 7: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.CannonShape = void 0; + var _cannon = _interopRequireDefault(require("../../../../../../external/cannon/cannon")); + var _util = require("../../framework/util"); + var _cannonUtil = require("../cannon-util"); + 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); + return Constructor; + } + var TriggerEventObject = { + type: "trigger-enter", + selfCollider: null, + otherCollider: null + }; + var Vec3 = cc.Vec3; + var v3_0 = new Vec3(); + var CannonShape = function() { + function CannonShape() { + this._collider = void 0; + this._shape = void 0; + this._offset = new _cannon["default"].Vec3(); + this._orient = new _cannon["default"].Quaternion(); + this._index = -1; + this._sharedBody = void 0; + this.onTriggerListener = this.onTrigger.bind(this); + } + var _proto = CannonShape.prototype; + _proto.__preload = function __preload(comp) { + this._collider = comp; + (0, _util.setWrap)(this._shape, this); + this._shape.addEventListener("cc-trigger", this.onTriggerListener); + this._sharedBody = cc.director.getPhysics3DManager().physicsWorld.getSharedBody(this._collider.node); + this._sharedBody.reference = true; + }; + _proto.onLoad = function onLoad() { + this.center = this._collider.center; + this.isTrigger = this._collider.isTrigger; + }; + _proto.onEnable = function onEnable() { + this._sharedBody.addShape(this); + this._sharedBody.enabled = true; + }; + _proto.onDisable = function onDisable() { + this._sharedBody.removeShape(this); + this._sharedBody.enabled = false; + }; + _proto.onDestroy = function onDestroy() { + this._sharedBody.reference = false; + this._shape.removeEventListener("cc-trigger", this.onTriggerListener); + delete _cannon["default"].World["idToShapeMap"][this._shape.id]; + this._sharedBody = null; + (0, _util.setWrap)(this._shape, null); + this._offset = null; + this._orient = null; + this._shape = null; + this._collider = null; + this.onTriggerListener = null; + }; + _proto.setScale = function setScale(scale) { + this._setCenter(this._collider.center); + }; + _proto.setIndex = function setIndex(index) { + this._index = index; + }; + _proto.setOffsetAndOrient = function setOffsetAndOrient(offset, orient) { + cc.Vec3.copy(offset, this._offset); + cc.Vec3.copy(orient, this._orient); + this._offset = offset; + this._orient = orient; + }; + _proto._setCenter = function _setCenter(v) { + var lpos = this._offset; + Vec3.copy(lpos, v); + this._collider.node.getWorldScale(v3_0); + Vec3.multiply(lpos, lpos, v3_0); + }; + _proto.onTrigger = function onTrigger(event) { + TriggerEventObject.type = event.event; + var self = (0, _util.getWrap)(event.selfShape); + var other = (0, _util.getWrap)(event.otherShape); + if (self) { + TriggerEventObject.selfCollider = self.collider; + TriggerEventObject.otherCollider = other ? other.collider : null; + TriggerEventObject.type = _cannonUtil.deprecatedEventMap[TriggerEventObject.type]; + this._collider.emit(TriggerEventObject.type, TriggerEventObject); + TriggerEventObject.type = event.event; + this._collider.emit(TriggerEventObject.type, TriggerEventObject); + } + }; + _createClass(CannonShape, [ { + key: "shape", + get: function get() { + return this._shape; + } + }, { + key: "collider", + get: function get() { + return this._collider; + } + }, { + key: "attachedRigidBody", + get: function get() { + if (this._sharedBody.wrappedBody) return this._sharedBody.wrappedBody.rigidBody; + return null; + } + }, { + key: "sharedBody", + get: function get() { + return this._sharedBody; + } + }, { + key: "material", + set: function set(mat) { + if (null == mat) this._shape.material = null; else { + null == CannonShape.idToMaterial[mat._uuid] && (CannonShape.idToMaterial[mat._uuid] = new _cannon["default"].Material(mat._uuid)); + this._shape.material = CannonShape.idToMaterial[mat._uuid]; + this._shape.material.friction = mat.friction; + this._shape.material.restitution = mat.restitution; + } + } + }, { + key: "isTrigger", + set: function set(v) { + this._shape.collisionResponse = !v; + this._index >= 0 && this._body.updateHasTrigger(); + } + }, { + key: "center", + set: function set(v) { + this._setCenter(v); + this._index >= 0 && (0, _cannonUtil.commitShapeUpdates)(this._body); + } + }, { + key: "_body", + get: function get() { + return this._sharedBody.body; + } + } ]); + return CannonShape; + }(); + exports.CannonShape = CannonShape; + CannonShape.idToMaterial = {}; + }, { + "../../../../../../external/cannon/cannon": 24, + "../../framework/util": 23, + "../cannon-util": 3 + } ], + 8: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.CannonSphereShape = void 0; + var _cannon = _interopRequireDefault(require("../../../../../../external/cannon/cannon")); + var _cannonUtil = require("../cannon-util"); + var _cannonShape = require("./cannon-shape"); + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + var v3_0 = new cc.Vec3(); + var CannonSphereShape = function(_CannonShape) { + _inheritsLoose(CannonSphereShape, _CannonShape); + _createClass(CannonSphereShape, [ { + key: "sphereCollider", + get: function get() { + return this.collider; + } + }, { + key: "sphere", + get: function get() { + return this._shape; + } + }, { + key: "radius", + get: function get() { + return this._radius; + }, + set: function set(v) { + this.collider.node.getWorldScale(v3_0); + var max = v3_0.maxAxis(); + this.sphere.radius = v * Math.abs(max); + this.sphere.updateBoundingSphereRadius(); + -1 != this._index && (0, _cannonUtil.commitShapeUpdates)(this._body); + } + } ]); + function CannonSphereShape(radius) { + var _this; + _this = _CannonShape.call(this) || this; + _this._radius = void 0; + _this._radius = radius; + _this._shape = new _cannon["default"].Sphere(_this._radius); + return _this; + } + var _proto = CannonSphereShape.prototype; + _proto.onLoad = function onLoad() { + _CannonShape.prototype.onLoad.call(this); + this.radius = this.sphereCollider.radius; + }; + _proto.setScale = function setScale(scale) { + _CannonShape.prototype.setScale.call(this, scale); + this.radius = this.sphereCollider.radius; + }; + return CannonSphereShape; + }(_cannonShape.CannonShape); + exports.CannonSphereShape = CannonSphereShape; + }, { + "../../../../../../external/cannon/cannon": 24, + "../cannon-util": 3, + "./cannon-shape": 7 + } ], + 9: [ function(require, module, exports) { + "use strict"; + require("../cannon/instantiate"); + var _cannon = _interopRequireDefault(require("../../../../../external/cannon/cannon")); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; + } + window && (window.CANNON = _cannon["default"]); + }, { + "../../../../../external/cannon/cannon": 24, + "../cannon/instantiate": 5 + } ], + 10: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + var _framework = require("../framework"); + Object.keys(_framework).forEach(function(key) { + if ("default" === key || "__esModule" === key) return; + if (key in exports && exports[key] === _framework[key]) return; + exports[key] = _framework[key]; + }); + }, { + "../framework": 17 + } ], + 11: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.PhysicsMaterial = void 0; + var _dec, _class, _class2, _descriptor, _descriptor2, _class3, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var _cc$_decorator = cc._decorator, ccclass = _cc$_decorator.ccclass, property = _cc$_decorator.property; + var fastRemove = cc.js.array.fastRemove; + var equals = cc.math.equals; + var PhysicsMaterial = (_dec = ccclass("cc.PhysicsMaterial"), _dec(_class = (_class2 = (_temp = _class3 = function(_cc$Asset) { + _inheritsLoose(PhysicsMaterial, _cc$Asset); + _createClass(PhysicsMaterial, [ { + key: "friction", + get: function get() { + return this._friction; + }, + set: function set(value) { + if (!equals(this._friction, value)) { + this._friction = value; + this.emit("physics_material_update"); + } + } + }, { + key: "restitution", + get: function get() { + return this._restitution; + }, + set: function set(value) { + if (!equals(this._restitution, value)) { + this._restitution = value; + this.emit("physics_material_update"); + } + } + } ]); + function PhysicsMaterial() { + var _this; + _this = _cc$Asset.call(this) || this; + _initializerDefineProperty(_this, "_friction", _descriptor, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_restitution", _descriptor2, _assertThisInitialized(_this)); + cc.EventTarget.call(_assertThisInitialized(_this)); + PhysicsMaterial.allMaterials.push(_assertThisInitialized(_this)); + "" == _this._uuid && (_this._uuid = "pm_" + PhysicsMaterial._idCounter++); + return _this; + } + var _proto = PhysicsMaterial.prototype; + _proto.clone = function clone() { + var c = new PhysicsMaterial(); + c._friction = this._friction; + c._restitution = this._restitution; + return c; + }; + _proto.destroy = function destroy() { + if (_cc$Asset.prototype.destroy.call(this)) { + fastRemove(PhysicsMaterial.allMaterials, this); + return true; + } + return false; + }; + return PhysicsMaterial; + }(cc.Asset), _class3.allMaterials = [], _class3._idCounter = 0, _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_friction", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .1; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_restitution", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .1; + } + }), _applyDecoratedDescriptor(_class2.prototype, "friction", [ property ], Object.getOwnPropertyDescriptor(_class2.prototype, "friction"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "restitution", [ property ], Object.getOwnPropertyDescriptor(_class2.prototype, "restitution"), _class2.prototype), + _class2)) || _class); + exports.PhysicsMaterial = PhysicsMaterial; + cc.js.mixin(PhysicsMaterial.prototype, cc.EventTarget.prototype); + cc.PhysicsMaterial = PhysicsMaterial; + }, {} ], + 12: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.BoxCollider3D = void 0; + var _instance = require("../../instance"); + var _colliderComponent = require("./collider-component"); + var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + var _cc$_decorator = cc._decorator, ccclass = _cc$_decorator.ccclass, executeInEditMode = _cc$_decorator.executeInEditMode, executionOrder = _cc$_decorator.executionOrder, menu = _cc$_decorator.menu, property = _cc$_decorator.property; + var Vec3 = cc.Vec3; + var BoxCollider3D = (_dec = ccclass("cc.BoxCollider3D"), _dec2 = executionOrder(98), + _dec3 = menu("i18n:MAIN_MENU.component.physics/Collider/Box 3D"), _dec4 = property({ + type: cc.Vec3 + }), _dec(_class = _dec2(_class = _dec3(_class = executeInEditMode(_class = (_class2 = (_temp = function(_Collider3D) { + _inheritsLoose(BoxCollider3D, _Collider3D); + _createClass(BoxCollider3D, [ { + key: "size", + get: function get() { + return this._size; + }, + set: function set(value) { + Vec3.copy(this._size, value); + true; + this.boxShape.size = this._size; + } + }, { + key: "boxShape", + get: function get() { + return this._shape; + } + } ]); + function BoxCollider3D() { + var _this; + _this = _Collider3D.call(this) || this; + _initializerDefineProperty(_this, "_size", _descriptor, _assertThisInitialized(_this)); + true; + _this._shape = (0, _instance.createBoxShape)(_this._size); + return _this; + } + return BoxCollider3D; + }(_colliderComponent.Collider3D), _temp), _applyDecoratedDescriptor(_class2.prototype, "size", [ _dec4 ], Object.getOwnPropertyDescriptor(_class2.prototype, "size"), _class2.prototype), + _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_size", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(1, 1, 1); + } + }), _class2)) || _class) || _class) || _class) || _class); + exports.BoxCollider3D = BoxCollider3D; + }, { + "../../instance": 18, + "./collider-component": 13 + } ], + 13: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.Collider3D = void 0; + var _physicsMaterial = require("../../assets/physics-material"); + var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + var _cc$_decorator = cc._decorator, ccclass = _cc$_decorator.ccclass, property = _cc$_decorator.property; + var Vec3 = cc.Vec3; + var Collider3D = (_dec = ccclass("cc.Collider3D"), _dec2 = property({ + type: _physicsMaterial.PhysicsMaterial, + displayName: "Material", + displayOrder: -1 + }), _dec3 = property({ + displayOrder: 0 + }), _dec4 = property({ + type: cc.Vec3, + displayOrder: 1 + }), _dec5 = property({ + type: _physicsMaterial.PhysicsMaterial + }), _dec(_class = (_class2 = (_temp = function(_cc$Component) { + _inheritsLoose(Collider3D, _cc$Component); + _createClass(Collider3D, [ { + key: "sharedMaterial", + get: function get() { + return this._material; + }, + set: function set(value) { + this.material = value; + } + }, { + key: "material", + get: function get() { + true; + if (this._isSharedMaterial && null != this._material) { + this._material.off("physics_material_update", this._updateMaterial, this); + this._material = this._material.clone(); + this._material.on("physics_material_update", this._updateMaterial, this); + this._isSharedMaterial = false; + } + return this._material; + }, + set: function set(value) { + false, false; + if (null != value && null != this._material) { + if (this._material._uuid != value._uuid) { + this._material.off("physics_material_update", this._updateMaterial, this); + value.on("physics_material_update", this._updateMaterial, this); + this._isSharedMaterial = false; + this._material = value; + } + } else if (null != value && null == this._material) { + value.on("physics_material_update", this._updateMaterial, this); + this._material = value; + } else if (null == value && null != this._material) { + this._material.off("physics_material_update", this._updateMaterial, this); + this._material = value; + } + this._updateMaterial(); + } + }, { + key: "isTrigger", + get: function get() { + return this._isTrigger; + }, + set: function set(value) { + this._isTrigger = value; + true; + this._shape.isTrigger = this._isTrigger; + } + }, { + key: "center", + get: function get() { + return this._center; + }, + set: function set(value) { + Vec3.copy(this._center, value); + true; + this._shape.center = this._center; + } + }, { + key: "attachedRigidbody", + get: function get() { + return this.shape.attachedRigidBody; + } + }, { + key: "shape", + get: function get() { + return this._shape; + } + }, { + key: "_assertOnload", + get: function get() { + var r = 0 == this._isOnLoadCalled; + r && cc.error("Physics Error: Please make sure that the node has been added to the scene"); + return !r; + } + } ]); + function Collider3D() { + var _this; + _this = _cc$Component.call(this) || this; + _this._shape = void 0; + _this._isSharedMaterial = true; + _initializerDefineProperty(_this, "_material", _descriptor, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_isTrigger", _descriptor2, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_center", _descriptor3, _assertThisInitialized(_this)); + cc.EventTarget.call(_assertThisInitialized(_this)); + return _this; + } + var _proto = Collider3D.prototype; + _proto.on = function on(type, callback, target, useCapture) {}; + _proto.off = function off(type, callback, target) {}; + _proto.once = function once(type, callback, target) {}; + _proto.emit = function emit(key) {}; + _proto.__preload = function __preload() { + true; + this._shape.__preload(this); + }; + _proto.onLoad = function onLoad() { + true; + true; + this.sharedMaterial = null == this._material ? cc.director.getPhysics3DManager().defaultMaterial : this._material; + this._shape.onLoad(); + }; + _proto.onEnable = function onEnable() { + true; + this._shape.onEnable(); + }; + _proto.onDisable = function onDisable() { + true; + this._shape.onDisable(); + }; + _proto.onDestroy = function onDestroy() { + true; + this._material && this._material.off("physics_material_update", this._updateMaterial, this); + this._shape.onDestroy(); + }; + _proto._updateMaterial = function _updateMaterial() { + true; + this._shape.material = this._material; + }; + return Collider3D; + }(cc.Component), _temp), _applyDecoratedDescriptor(_class2.prototype, "sharedMaterial", [ _dec2 ], Object.getOwnPropertyDescriptor(_class2.prototype, "sharedMaterial"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "isTrigger", [ _dec3 ], Object.getOwnPropertyDescriptor(_class2.prototype, "isTrigger"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "center", [ _dec4 ], Object.getOwnPropertyDescriptor(_class2.prototype, "center"), _class2.prototype), + _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_material", [ _dec5 ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return null; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_isTrigger", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "_center", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(); + } + }), _class2)) || _class); + exports.Collider3D = Collider3D; + cc.js.mixin(Collider3D.prototype, cc.EventTarget.prototype); + }, { + "../../assets/physics-material": 11 + } ], + 14: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.SphereCollider3D = void 0; + var _instance = require("../../instance"); + var _colliderComponent = require("./collider-component"); + var _dec, _dec2, _dec3, _class, _class2, _descriptor, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + var _cc$_decorator = cc._decorator, ccclass = _cc$_decorator.ccclass, executeInEditMode = _cc$_decorator.executeInEditMode, executionOrder = _cc$_decorator.executionOrder, menu = _cc$_decorator.menu, property = _cc$_decorator.property; + var SphereCollider3D = (_dec = ccclass("cc.SphereCollider3D"), _dec2 = executionOrder(98), + _dec3 = menu("i18n:MAIN_MENU.component.physics/Collider/Sphere 3D"), _dec(_class = _dec2(_class = _dec3(_class = executeInEditMode(_class = (_class2 = (_temp = function(_Collider3D) { + _inheritsLoose(SphereCollider3D, _Collider3D); + _createClass(SphereCollider3D, [ { + key: "radius", + get: function get() { + return this._radius; + }, + set: function set(value) { + this._radius = value; + true; + this.sphereShape.radius = this._radius; + } + }, { + key: "sphereShape", + get: function get() { + return this._shape; + } + } ]); + function SphereCollider3D() { + var _this; + _this = _Collider3D.call(this) || this; + _initializerDefineProperty(_this, "_radius", _descriptor, _assertThisInitialized(_this)); + true; + _this._shape = (0, _instance.createSphereShape)(_this._radius); + return _this; + } + return SphereCollider3D; + }(_colliderComponent.Collider3D), _temp), _applyDecoratedDescriptor(_class2.prototype, "radius", [ property ], Object.getOwnPropertyDescriptor(_class2.prototype, "radius"), _class2.prototype), + _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_radius", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .5; + } + }), _class2)) || _class) || _class) || _class) || _class); + exports.SphereCollider3D = SphereCollider3D; + }, { + "../../instance": 18, + "./collider-component": 13 + } ], + 15: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.ConstantForce = void 0; + var _rigidBodyComponent = require("./rigid-body-component"); + var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + 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; + subClass.__proto__ = superClass; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var _cc$_decorator = cc._decorator, ccclass = _cc$_decorator.ccclass, executeInEditMode = _cc$_decorator.executeInEditMode, executionOrder = _cc$_decorator.executionOrder, menu = _cc$_decorator.menu, property = _cc$_decorator.property, requireComponent = _cc$_decorator.requireComponent, disallowMultiple = _cc$_decorator.disallowMultiple; + var Vec3 = cc.Vec3; + var ConstantForce = (_dec = ccclass("cc.ConstantForce"), _dec2 = executionOrder(98), + _dec3 = requireComponent(_rigidBodyComponent.RigidBody3D), _dec4 = menu("i18n:MAIN_MENU.component.physics/Constant Force 3D"), + _dec5 = property({ + displayOrder: 0 + }), _dec6 = property({ + displayOrder: 1 + }), _dec7 = property({ + displayOrder: 2 + }), _dec8 = property({ + displayOrder: 3 + }), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = disallowMultiple(_class = executeInEditMode(_class = (_class2 = (_temp = function(_cc$Component) { + _inheritsLoose(ConstantForce, _cc$Component); + function ConstantForce() { + var _this; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; + _this = _cc$Component.call.apply(_cc$Component, [ this ].concat(args)) || this; + _this._rigidbody = null; + _initializerDefineProperty(_this, "_force", _descriptor, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_localForce", _descriptor2, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_torque", _descriptor3, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_localTorque", _descriptor4, _assertThisInitialized(_this)); + _this._mask = 0; + return _this; + } + var _proto = ConstantForce.prototype; + _proto.onLoad = function onLoad() { + true; + this._rigidbody = this.node.getComponent(_rigidBodyComponent.RigidBody3D); + this._maskUpdate(this._force, 1); + this._maskUpdate(this._localForce, 2); + this._maskUpdate(this._torque, 4); + this._maskUpdate(this._localTorque, 8); + }; + _proto.lateUpdate = function lateUpdate(dt) { + true; + if (null != this._rigidbody && 0 != this._mask) { + 1 & this._mask && this._rigidbody.applyForce(this._force); + 2 & this._mask && this._rigidbody.applyLocalForce(this.localForce); + 4 & this._mask && this._rigidbody.applyTorque(this._torque); + 8 & this._mask && this._rigidbody.applyLocalTorque(this._localTorque); + } + }; + _proto._maskUpdate = function _maskUpdate(t, m) { + Vec3.strictEquals(t, Vec3.ZERO) ? this._mask &= ~m : this._mask |= m; + }; + _createClass(ConstantForce, [ { + key: "force", + get: function get() { + return this._force; + }, + set: function set(value) { + Vec3.copy(this._force, value); + this._maskUpdate(this._force, 1); + } + }, { + key: "localForce", + get: function get() { + return this._localForce; + }, + set: function set(value) { + Vec3.copy(this._localForce, value); + this._maskUpdate(this.localForce, 2); + } + }, { + key: "torque", + get: function get() { + return this._torque; + }, + set: function set(value) { + Vec3.copy(this._torque, value); + this._maskUpdate(this._torque, 4); + } + }, { + key: "localTorque", + get: function get() { + return this._localTorque; + }, + set: function set(value) { + Vec3.copy(this._localTorque, value); + this._maskUpdate(this._localTorque, 8); + } + } ]); + return ConstantForce; + }(cc.Component), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_force", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(); + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_localForce", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(); + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "_torque", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "_localTorque", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(); + } + }), _applyDecoratedDescriptor(_class2.prototype, "force", [ _dec5 ], Object.getOwnPropertyDescriptor(_class2.prototype, "force"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "localForce", [ _dec6 ], Object.getOwnPropertyDescriptor(_class2.prototype, "localForce"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "torque", [ _dec7 ], Object.getOwnPropertyDescriptor(_class2.prototype, "torque"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "localTorque", [ _dec8 ], Object.getOwnPropertyDescriptor(_class2.prototype, "localTorque"), _class2.prototype), + _class2)) || _class) || _class) || _class) || _class) || _class) || _class); + exports.ConstantForce = ConstantForce; + }, { + "./rigid-body-component": 16 + } ], + 16: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.RigidBody3D = void 0; + var _instance = require("../instance"); + var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 + }); + } + function _assertThisInitialized(self) { + if (void 0 === self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return self; + } + 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); + return Constructor; + } + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + var _cc$_decorator = cc._decorator, ccclass = _cc$_decorator.ccclass, disallowMultiple = _cc$_decorator.disallowMultiple, executeInEditMode = _cc$_decorator.executeInEditMode, executionOrder = _cc$_decorator.executionOrder, menu = _cc$_decorator.menu, property = _cc$_decorator.property; + var Vec3 = cc.Vec3; + var RigidBody3D = (_dec = ccclass("cc.RigidBody3D"), _dec2 = executionOrder(99), + _dec3 = menu("i18n:MAIN_MENU.component.physics/Rigid Body 3D"), _dec4 = property({ + displayOrder: 0 + }), _dec5 = property({ + displayOrder: 1 + }), _dec6 = property({ + displayOrder: 2 + }), _dec7 = property({ + displayOrder: 3 + }), _dec8 = property({ + displayOrder: 4 + }), _dec9 = property({ + displayOrder: 5 + }), _dec10 = property({ + displayOrder: 6 + }), _dec11 = property({ + displayOrder: 7 + }), _dec(_class = _dec2(_class = _dec3(_class = executeInEditMode(_class = disallowMultiple(_class = (_class2 = (_temp = function(_cc$Component) { + _inheritsLoose(RigidBody3D, _cc$Component); + _createClass(RigidBody3D, [ { + key: "allowSleep", + get: function get() { + return this._allowSleep; + }, + set: function set(v) { + this._allowSleep = v; + true, true; + this._body.allowSleep = v; + } + }, { + key: "mass", + get: function get() { + return this._mass; + }, + set: function set(value) { + this._mass = value; + true, true; + this._body.mass = value; + } + }, { + key: "linearDamping", + get: function get() { + return this._linearDamping; + }, + set: function set(value) { + this._linearDamping = value; + true, true; + this._body.linearDamping = value; + } + }, { + key: "angularDamping", + get: function get() { + return this._angularDamping; + }, + set: function set(value) { + this._angularDamping = value; + true, true; + this._body.angularDamping = value; + } + }, { + key: "isKinematic", + get: function get() { + return this._isKinematic; + }, + set: function set(value) { + this._isKinematic = value; + true, true; + this._body.isKinematic = value; + } + }, { + key: "useGravity", + get: function get() { + return this._useGravity; + }, + set: function set(value) { + this._useGravity = value; + true, true; + this._body.useGravity = value; + } + }, { + key: "fixedRotation", + get: function get() { + return this._fixedRotation; + }, + set: function set(value) { + this._fixedRotation = value; + true, true; + this._body.fixedRotation = value; + } + }, { + key: "linearFactor", + get: function get() { + return this._linearFactor; + }, + set: function set(value) { + Vec3.copy(this._linearFactor, value); + true, true; + this._body.linearFactor = this._linearFactor; + } + }, { + key: "angularFactor", + get: function get() { + return this._angularFactor; + }, + set: function set(value) { + Vec3.copy(this._angularFactor, value); + true, true; + this._body.angularFactor = this._angularFactor; + } + }, { + key: "isAwake", + get: function get() { + if (this._assertOnload && true) return this._body.isAwake; + return false; + } + }, { + key: "isSleepy", + get: function get() { + if (this._assertOnload && true) return this._body.isSleepy; + return false; + } + }, { + key: "isSleeping", + get: function get() { + if (this._assertOnload && true) return this._body.isSleeping; + return false; + } + }, { + key: "rigidBody", + get: function get() { + return this._body; + } + }, { + key: "_assertOnload", + get: function get() { + var r = 0 == this._isOnLoadCalled; + r && cc.error("Physics Error: Please make sure that the node has been added to the scene"); + return !r; + } + } ]); + function RigidBody3D() { + var _this; + _this = _cc$Component.call(this) || this; + _this._body = void 0; + _this._allowSleep = true; + _initializerDefineProperty(_this, "_mass", _descriptor, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_linearDamping", _descriptor2, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_angularDamping", _descriptor3, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_fixedRotation", _descriptor4, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_isKinematic", _descriptor5, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_useGravity", _descriptor6, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_linearFactor", _descriptor7, _assertThisInitialized(_this)); + _initializerDefineProperty(_this, "_angularFactor", _descriptor8, _assertThisInitialized(_this)); + true, true; + _this._body = (0, _instance.createRigidBody)(); + return _this; + } + var _proto = RigidBody3D.prototype; + _proto.__preload = function __preload() { + true, true; + this._body.__preload(this); + }; + _proto.onEnable = function onEnable() { + true, true; + this._body.onEnable(); + }; + _proto.onDisable = function onDisable() { + true, true; + this._body.onDisable(); + }; + _proto.onDestroy = function onDestroy() { + true, true; + this._body.onDestroy(); + }; + _proto.applyForce = function applyForce(force, relativePoint) { + this._assertOnload && true && this._body.applyForce(force, relativePoint); + }; + _proto.applyLocalForce = function applyLocalForce(force, localPoint) { + this._assertOnload && true && this._body.applyLocalForce(force, localPoint); + }; + _proto.applyImpulse = function applyImpulse(impulse, relativePoint) { + this._assertOnload && true && this._body.applyImpulse(impulse, relativePoint); + }; + _proto.applyLocalImpulse = function applyLocalImpulse(impulse, localPoint) { + this._assertOnload && true && this._body.applyLocalImpulse(impulse, localPoint); + }; + _proto.applyTorque = function applyTorque(torque) { + this._assertOnload && true && this._body.applyTorque(torque); + }; + _proto.applyLocalTorque = function applyLocalTorque(torque) { + this._assertOnload && true && this._body.applyLocalTorque(torque); + }; + _proto.wakeUp = function wakeUp() { + this._assertOnload && true && this._body.wakeUp(); + }; + _proto.sleep = function sleep() { + this._assertOnload && true && this._body.sleep(); + }; + _proto.getLinearVelocity = function getLinearVelocity(out) { + this._assertOnload && true && this._body.getLinearVelocity(out); + }; + _proto.setLinearVelocity = function setLinearVelocity(value) { + this._assertOnload && true && this._body.setLinearVelocity(value); + }; + _proto.getAngularVelocity = function getAngularVelocity(out) { + this._assertOnload && true && this._body.getAngularVelocity(out); + }; + _proto.setAngularVelocity = function setAngularVelocity(value) { + this._assertOnload && true && this._body.setAngularVelocity(value); + }; + return RigidBody3D; + }(cc.Component), _temp), _applyDecoratedDescriptor(_class2.prototype, "mass", [ _dec4 ], Object.getOwnPropertyDescriptor(_class2.prototype, "mass"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "linearDamping", [ _dec5 ], Object.getOwnPropertyDescriptor(_class2.prototype, "linearDamping"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "angularDamping", [ _dec6 ], Object.getOwnPropertyDescriptor(_class2.prototype, "angularDamping"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "isKinematic", [ _dec7 ], Object.getOwnPropertyDescriptor(_class2.prototype, "isKinematic"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "useGravity", [ _dec8 ], Object.getOwnPropertyDescriptor(_class2.prototype, "useGravity"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "fixedRotation", [ _dec9 ], Object.getOwnPropertyDescriptor(_class2.prototype, "fixedRotation"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "linearFactor", [ _dec10 ], Object.getOwnPropertyDescriptor(_class2.prototype, "linearFactor"), _class2.prototype), + _applyDecoratedDescriptor(_class2.prototype, "angularFactor", [ _dec11 ], Object.getOwnPropertyDescriptor(_class2.prototype, "angularFactor"), _class2.prototype), + _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_mass", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 10; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_linearDamping", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .1; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "_angularDamping", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return .1; + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "_fixedRotation", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "_isKinematic", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "_useGravity", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "_linearFactor", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(1, 1, 1); + } + }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "_angularFactor", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new Vec3(1, 1, 1); + } + }), _class2)) || _class) || _class) || _class) || _class) || _class); + exports.RigidBody3D = RigidBody3D; + }, { + "../instance": 18 + } ], + 17: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + var _physicsManager = require("./physics-manager"); + exports.Physics3DManager = _physicsManager.Physics3DManager; + var _physicsRayResult = require("./physics-ray-result"); + exports.PhysicsRayResult = _physicsRayResult.PhysicsRayResult; + var _boxColliderComponent = require("./components/collider/box-collider-component"); + exports.BoxCollider3D = _boxColliderComponent.BoxCollider3D; + var _colliderComponent = require("./components/collider/collider-component"); + exports.Collider3D = _colliderComponent.Collider3D; + var _sphereColliderComponent = require("./components/collider/sphere-collider-component"); + exports.SphereCollider3D = _sphereColliderComponent.SphereCollider3D; + var _rigidBodyComponent = require("./components/rigid-body-component"); + exports.RigidBody3D = _rigidBodyComponent.RigidBody3D; + var _constantForce = require("./components/constant-force"); + var _physicsMaterial = require("./assets/physics-material"); + exports.PhysicsMaterial = _physicsMaterial.PhysicsMaterial; + cc.Physics3DManager = _physicsManager.Physics3DManager; + cc.Collider3D = _colliderComponent.Collider3D; + cc.BoxCollider3D = _boxColliderComponent.BoxCollider3D; + cc.SphereCollider3D = _sphereColliderComponent.SphereCollider3D; + cc.RigidBody3D = _rigidBodyComponent.RigidBody3D; + cc.PhysicsRayResult = _physicsRayResult.PhysicsRayResult; + cc.ConstantForce = _constantForce.ConstantForce; + }, { + "./assets/physics-material": 11, + "./components/collider/box-collider-component": 12, + "./components/collider/collider-component": 13, + "./components/collider/sphere-collider-component": 14, + "./components/constant-force": 15, + "./components/rigid-body-component": 16, + "./physics-manager": 20, + "./physics-ray-result": 21 + } ], + 18: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.createPhysicsWorld = createPhysicsWorld; + exports.createRigidBody = createRigidBody; + exports.createBoxShape = createBoxShape; + exports.createSphereShape = createSphereShape; + var _physicsSelector = require("./physics-selector"); + function createPhysicsWorld() { + return new _physicsSelector.PhysicsWorld(); + } + function createRigidBody() { + return new _physicsSelector.RigidBody(); + } + function createBoxShape(size) { + return new _physicsSelector.BoxShape(size); + } + function createSphereShape(radius) { + return new _physicsSelector.SphereShape(radius); + } + }, { + "./physics-selector": 22 + } ], + 19: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.ERigidBodyType = void 0; + var ERigidBodyType; + exports.ERigidBodyType = ERigidBodyType; + (function(ERigidBodyType) { + ERigidBodyType[ERigidBodyType["DYNAMIC"] = 1] = "DYNAMIC"; + ERigidBodyType[ERigidBodyType["STATIC"] = 2] = "STATIC"; + ERigidBodyType[ERigidBodyType["KINEMATIC"] = 4] = "KINEMATIC"; + })(ERigidBodyType || (exports.ERigidBodyType = ERigidBodyType = {})); + }, {} ], + 20: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.Physics3DManager = void 0; + var _instance = require("./instance"); + var _physicsMaterial = require("./assets/physics-material"); + var _physicsRayResult = require("./physics-ray-result"); + var _dec, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _temp; + function _initializerDefineProperty(target, property, descriptor, context) { + if (!descriptor) return; + Object.defineProperty(target, property, { + enumerable: descriptor.enumerable, + configurable: descriptor.configurable, + writable: descriptor.writable, + value: descriptor.initializer ? descriptor.initializer.call(context) : 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); + return Constructor; + } + function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { + var desc = {}; + Object.keys(descriptor).forEach(function(key) { + desc[key] = descriptor[key]; + }); + desc.enumerable = !!desc.enumerable; + desc.configurable = !!desc.configurable; + ("value" in desc || desc.initializer) && (desc.writable = true); + desc = decorators.slice().reverse().reduce(function(desc, decorator) { + return decorator(target, property, desc) || desc; + }, desc); + if (context && void 0 !== desc.initializer) { + desc.value = desc.initializer ? desc.initializer.call(context) : void 0; + desc.initializer = void 0; + } + if (void 0 === desc.initializer) { + Object.defineProperty(target, property, desc); + desc = null; + } + return desc; + } + function _initializerWarningHelper(descriptor, context) { + throw new Error("Decorating class property failed. Please ensure that proposal-class-properties is enabled and runs after the decorators transform."); + } + var _cc$_decorator = cc._decorator, property = _cc$_decorator.property, ccclass = _cc$_decorator.ccclass; + var Physics3DManager = (_dec = ccclass("cc.Physics3DManager"), _dec(_class = (_class2 = (_temp = function() { + _createClass(Physics3DManager, [ { + key: "enabled", + get: function get() { + return this._enabled; + }, + set: function set(value) { + this._enabled = value; + } + }, { + key: "allowSleep", + get: function get() { + return this._allowSleep; + }, + set: function set(v) { + this._allowSleep = v; + true, true; + this.physicsWorld.allowSleep = this._allowSleep; + } + }, { + key: "maxSubStep", + get: function get() { + return this._maxSubStep; + }, + set: function set(value) { + this._maxSubStep = value; + } + }, { + key: "deltaTime", + get: function get() { + return this._fixedTime; + }, + set: function set(value) { + this._fixedTime = value; + } + }, { + key: "useFixedTime", + get: function get() { + return this._useFixedTime; + }, + set: function set(value) { + this._useFixedTime = value; + } + }, { + key: "gravity", + get: function get() { + return this._gravity; + }, + set: function set(gravity) { + this._gravity.set(gravity); + true, true; + this.physicsWorld.gravity = gravity; + } + }, { + key: "defaultMaterial", + get: function get() { + return this._material; + } + } ]); + function Physics3DManager() { + this.physicsWorld = void 0; + this.raycastClosestResult = new _physicsRayResult.PhysicsRayResult(); + this.raycastResults = []; + _initializerDefineProperty(this, "_enabled", _descriptor, this); + _initializerDefineProperty(this, "_allowSleep", _descriptor2, this); + _initializerDefineProperty(this, "_gravity", _descriptor3, this); + _initializerDefineProperty(this, "_maxSubStep", _descriptor4, this); + _initializerDefineProperty(this, "_fixedTime", _descriptor5, this); + _initializerDefineProperty(this, "_useFixedTime", _descriptor6, this); + this.useAccumulator = false; + this._accumulator = 0; + this.useFixedDigit = false; + this.useInternalTime = false; + this.fixDigits = { + position: 5, + rotation: 12, + timeNow: 3 + }; + this._deltaTime = 0; + this._lastTime = 0; + this._material = null; + this.raycastOptions = { + groupIndex: -1, + queryTrigger: true, + maxDistance: Infinity + }; + this.raycastResultPool = new cc.RecyclePool(function() { + return new _physicsRayResult.PhysicsRayResult(); + }, 1); + cc.director._scheduler && cc.director._scheduler.enableForTarget(this); + this.physicsWorld = (0, _instance.createPhysicsWorld)(); + this._lastTime = performance.now(); + true; + this.gravity = this._gravity; + this.allowSleep = this._allowSleep; + this._material = new _physicsMaterial.PhysicsMaterial(); + this._material.friction = .1; + this._material.restitution = .1; + this._material.on("physics_material_update", this._updateMaterial, this); + this.physicsWorld.defaultMaterial = this._material; + } + var _proto = Physics3DManager.prototype; + _proto.update = function update(deltaTime) { + false; + if (!this._enabled) return; + if (this.useInternalTime) { + var now = parseFloat(performance.now().toFixed(this.fixDigits.timeNow)); + this._deltaTime = now > this._lastTime ? (now - this._lastTime) / 1e3 : 0; + this._lastTime = now; + } else this._deltaTime = deltaTime; + cc.director.emit(cc.Director.EVENT_BEFORE_PHYSICS); + false; + if (this._useFixedTime) this.physicsWorld.step(this._fixedTime); else if (this.useAccumulator) { + var i = 0; + this._accumulator += this._deltaTime; + while (i < this._maxSubStep && this._accumulator > this._fixedTime) { + this.physicsWorld.step(this._fixedTime); + this._accumulator -= this._fixedTime; + i++; + } + } else this.physicsWorld.step(this._fixedTime, this._deltaTime, this._maxSubStep); + cc.director.emit(cc.Director.EVENT_AFTER_PHYSICS); + }; + _proto.raycast = function raycast(worldRay, groupIndexOrName, maxDistance, queryTrigger) { + void 0 === groupIndexOrName && (groupIndexOrName = 0); + void 0 === maxDistance && (maxDistance = Infinity); + void 0 === queryTrigger && (queryTrigger = true); + this.raycastResultPool.reset(); + this.raycastResults.length = 0; + if ("string" == typeof groupIndexOrName) { + var groupIndex = cc.game.groupList.indexOf(groupIndexOrName); + -1 == groupIndex && (groupIndex = 0); + this.raycastOptions.groupIndex = groupIndex; + } else this.raycastOptions.groupIndex = groupIndexOrName; + this.raycastOptions.maxDistance = maxDistance; + this.raycastOptions.queryTrigger = queryTrigger; + var result = this.physicsWorld.raycast(worldRay, this.raycastOptions, this.raycastResultPool, this.raycastResults); + if (result) return this.raycastResults; + return null; + }; + _proto.raycastClosest = function raycastClosest(worldRay, groupIndexOrName, maxDistance, queryTrigger) { + void 0 === groupIndexOrName && (groupIndexOrName = 0); + void 0 === maxDistance && (maxDistance = Infinity); + void 0 === queryTrigger && (queryTrigger = true); + if ("string" == typeof groupIndexOrName) { + var groupIndex = cc.game.groupList.indexOf(groupIndexOrName); + -1 == groupIndex && (groupIndex = 0); + this.raycastOptions.groupIndex = groupIndex; + } else this.raycastOptions.groupIndex = groupIndexOrName; + this.raycastOptions.maxDistance = maxDistance; + this.raycastOptions.queryTrigger = queryTrigger; + var result = this.physicsWorld.raycastClosest(worldRay, this.raycastOptions, this.raycastClosestResult); + if (result) return this.raycastClosestResult; + return null; + }; + _proto._updateMaterial = function _updateMaterial() { + true; + this.physicsWorld.defaultMaterial = this._material; + }; + return Physics3DManager; + }(), _temp), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_enabled", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return false; + } + }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_allowSleep", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "_gravity", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return new cc.Vec3(0, -10, 0); + } + }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "_maxSubStep", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1; + } + }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "_fixedTime", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return 1 / 60; + } + }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "_useFixedTime", [ property ], { + configurable: true, + enumerable: true, + writable: true, + initializer: function initializer() { + return true; + } + }), _class2)) || _class); + exports.Physics3DManager = Physics3DManager; + }, { + "./assets/physics-material": 11, + "./instance": 18, + "./physics-ray-result": 21 + } ], + 21: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.PhysicsRayResult = 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); + return Constructor; + } + var Vec3 = cc.Vec3; + var PhysicsRayResult = function() { + function PhysicsRayResult() { + this._hitPoint = new Vec3(); + this._distance = 0; + this._collidier = null; + } + var _proto = PhysicsRayResult.prototype; + _proto._assign = function _assign(hitPoint, distance, collider) { + Vec3.copy(this._hitPoint, hitPoint); + this._distance = distance; + this._collidier = collider; + }; + _proto.clone = function clone() { + var c = new PhysicsRayResult(); + Vec3.copy(c._hitPoint, this._hitPoint); + c._distance = this._distance; + c._collidier = this._collidier; + return c; + }; + _createClass(PhysicsRayResult, [ { + key: "hitPoint", + get: function get() { + return this._hitPoint; + } + }, { + key: "distance", + get: function get() { + return this._distance; + } + }, { + key: "collider", + get: function get() { + return this._collidier; + } + } ]); + return PhysicsRayResult; + }(); + exports.PhysicsRayResult = PhysicsRayResult; + }, {} ], + 22: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.instantiate = instantiate; + exports.PhysicsWorld = exports.RigidBody = exports.SphereShape = exports.BoxShape = void 0; + var BoxShape; + exports.BoxShape = BoxShape; + var SphereShape; + exports.SphereShape = SphereShape; + var RigidBody; + exports.RigidBody = RigidBody; + var PhysicsWorld; + exports.PhysicsWorld = PhysicsWorld; + function instantiate(boxShape, sphereShape, body, world) { + exports.BoxShape = BoxShape = boxShape; + exports.SphereShape = SphereShape = sphereShape; + exports.RigidBody = RigidBody = body; + exports.PhysicsWorld = PhysicsWorld = world; + } + }, {} ], + 23: [ function(require, module, exports) { + "use strict"; + exports.__esModule = true; + exports.stringfyVec3 = stringfyVec3; + exports.stringfyQuat = stringfyQuat; + exports.setWrap = setWrap; + exports.getWrap = getWrap; + exports.clearNodeTransformDirtyFlag = clearNodeTransformDirtyFlag; + exports.clearNodeTransformRecord = clearNodeTransformRecord; + exports.updateWorldTransform = updateWorldTransform; + exports.updateWorldRT = updateWorldRT; + exports.worldDirty = worldDirty; + function stringfyVec3(value) { + return "(x: " + value.x + ", y: " + value.y + ", z: " + value.z + ")"; + } + function stringfyQuat(value) { + return "(x: " + value.x + ", y: " + value.y + ", z: " + value.z + ", w: " + value.w + ")"; + } + function setWrap(object, wrapper) { + object.__cc_wrapper__ = wrapper; + } + function getWrap(object) { + return object.__cc_wrapper__; + } + var LocalDirtyFlag = cc.Node._LocalDirtyFlag; + var PHYSICS_TRS = LocalDirtyFlag.PHYSICS_TRS; + var ALL_TRS = LocalDirtyFlag.ALL_TRS; + var SKEW = LocalDirtyFlag.SKEW; + var FLAG_TRANSFORM = cc.RenderFlow.FLAG_TRANSFORM; + var Mat3 = cc.Mat3; + var Mat4 = cc.Mat4; + var Vec3 = cc.Vec3; + var Quat = cc.Quat; + var Trs = cc.Trs; + var _nodeArray = []; + var _lpos = cc.v3(); + var _lrot = cc.quat(); + var _mat3 = new Mat3(); + var _mat3m = _mat3.m; + var _quat = cc.quat(); + var _mat4 = cc.mat4(); + var _nodeTransformRecord = {}; + function clearNodeTransformDirtyFlag() { + for (var key in _nodeTransformRecord) { + var physicsNode = _nodeTransformRecord[key]; + physicsNode._localMatDirty &= ~ALL_TRS; + if (!(physicsNode._localMatDirty & SKEW)) { + physicsNode._worldMatDirty = false; + true, physicsNode._renderFlag &= ~FLAG_TRANSFORM; + } + } + _nodeTransformRecord = {}; + _nodeArray.length = 0; + } + function clearNodeTransformRecord() { + _nodeTransformRecord = {}; + _nodeArray.length = 0; + } + function updateWorldTransform(node, traverseAllNode) { + void 0 === traverseAllNode && (traverseAllNode = false); + var cur = node; + var i = 0; + var needUpdateTransform = false; + var physicsDirtyFlag = 0; + while (cur) { + if (!traverseAllNode && _nodeTransformRecord[cur._id]) { + physicsDirtyFlag |= cur._localMatDirty & PHYSICS_TRS; + needUpdateTransform = needUpdateTransform || !!physicsDirtyFlag; + break; + } + _nodeArray[i++] = cur; + cur._localMatDirty & PHYSICS_TRS && (needUpdateTransform = true); + cur = cur._parent; + } + if (!needUpdateTransform) return false; + var child; + var childWorldMat, curWorldMat, childTrs, childLocalMat; + var wpos, wrot, wscale; + _nodeArray.length = i; + while (i) { + child = _nodeArray[--i]; + !traverseAllNode && (_nodeTransformRecord[child._id] = child); + childWorldMat = child._worldMatrix; + childLocalMat = child._matrix; + childTrs = child._trs; + wpos = child.__wpos = child.__wpos || cc.v3(); + wrot = child.__wrot = child.__wrot || cc.quat(); + wscale = child.__wscale = child.__wscale || cc.v3(); + child._localMatDirty & PHYSICS_TRS && Trs.toMat4(childLocalMat, childTrs); + child._localMatDirty |= physicsDirtyFlag; + physicsDirtyFlag |= child._localMatDirty & PHYSICS_TRS; + if (!(physicsDirtyFlag & PHYSICS_TRS)) { + cur = child; + continue; + } + if (cur) { + curWorldMat = cur._worldMatrix; + Trs.toPosition(_lpos, childTrs); + Vec3.transformMat4(wpos, _lpos, curWorldMat); + Mat4.multiply(childWorldMat, curWorldMat, childLocalMat); + Trs.toRotation(_lrot, childTrs); + Quat.multiply(wrot, cur.__wrot, _lrot); + Mat3.fromQuat(_mat3, Quat.conjugate(_quat, wrot)); + Mat3.multiplyMat4(_mat3, _mat3, childWorldMat); + wscale.x = _mat3m[0]; + wscale.y = _mat3m[4]; + wscale.z = _mat3m[8]; + } else { + Trs.toPosition(wpos, childTrs); + Trs.toRotation(wrot, childTrs); + Trs.toScale(wscale, childTrs); + Mat4.copy(childWorldMat, childLocalMat); + } + cur = child; + } + return true; + } + function updateWorldRT(node, position, rotation) { + var parent = node.parent; + if (parent) { + updateWorldTransform(parent, true); + Vec3.transformMat4(_lpos, position, Mat4.invert(_mat4, parent._worldMatrix)); + Quat.multiply(_quat, Quat.conjugate(_quat, parent.__wrot), rotation); + node.setPosition(_lpos); + node.setRotation(_quat); + } else { + node.setPosition(position); + node.setRotation(rotation); + } + } + function worldDirty(node) { + var cur = node; + while (cur) { + if (cur._worldMatDirty) return true; + cur = cur._parent; + } + return false; + } + }, {} ], + 24: [ function(require, module, exports) { + (function(global) { + "use strict"; + !function(e) { + if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); else if ("function" == typeof define && define.amd) define([], e); else { + var f; + "undefined" != typeof window ? f = window : "undefined" != typeof global ? f = global : "undefined" != typeof self && (f = self), + f.CANNON = e(); + } + }(function() { + var define, module, exports; + return function e(t, n, r) { + function s(o, u) { + if (!n[o]) { + if (!t[o]) { + var a = "function" == typeof require && require; + if (!u && a) return a(o, !0); + if (i) return i(o, !0); + throw new Error("Cannot find module '" + o + "'"); + } + 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; + }({ + 1: [ function(_dereq_, module, exports) { + module.exports = { + name: "@cocos/cannon", + version: "1.1.1-exp.3", + description: "A lightweight 3D physics engine written in JavaScript.", + homepage: "https://github.com/cocos-creator/cannon.js", + author: "Stefan Hedman (http://steffe.se), JayceLai", + keywords: [ "cannon.js", "cocos", "creator", "physics", "engine", "3d" ], + scripts: { + build: "grunt && npm run preprocess && grunt addLicense && grunt addDate", + preprocess: "node node_modules/uglify-js/bin/uglifyjs build/cannon.js -o build/cannon.min.js -c -m" + }, + main: "./build/cannon.min.js", + engines: { + node: "*" + }, + repository: { + type: "git", + url: "https://github.com/cocos-creator/cannon.js.git" + }, + bugs: { + url: "https://github.com/cocos-creator/cannon.js/issues" + }, + licenses: [ { + type: "MIT" + } ], + devDependencies: { + jshint: "latest", + "uglify-js": "latest", + nodeunit: "^0.9.0", + grunt: "~0.4.0", + "grunt-contrib-jshint": "~0.1.1", + "grunt-contrib-nodeunit": "^0.4.1", + "grunt-contrib-concat": "~0.1.3", + "grunt-contrib-uglify": "^0.5.1", + "grunt-browserify": "^2.1.4", + "grunt-contrib-yuidoc": "^0.5.2", + browserify: "*" + }, + dependencies: {} + }; + }, {} ], + 2: [ function(_dereq_, module, exports) { + module.exports = { + version: _dereq_("../package.json").version, + AABB: _dereq_("./collision/AABB"), + ArrayCollisionMatrix: _dereq_("./collision/ArrayCollisionMatrix"), + Body: _dereq_("./objects/Body"), + Box: _dereq_("./shapes/Box"), + Broadphase: _dereq_("./collision/Broadphase"), + Constraint: _dereq_("./constraints/Constraint"), + ContactEquation: _dereq_("./equations/ContactEquation"), + Narrowphase: _dereq_("./world/Narrowphase"), + ConeTwistConstraint: _dereq_("./constraints/ConeTwistConstraint"), + ContactMaterial: _dereq_("./material/ContactMaterial"), + ConvexPolyhedron: _dereq_("./shapes/ConvexPolyhedron"), + Cylinder: _dereq_("./shapes/Cylinder"), + DistanceConstraint: _dereq_("./constraints/DistanceConstraint"), + Equation: _dereq_("./equations/Equation"), + EventTarget: _dereq_("./utils/EventTarget"), + FrictionEquation: _dereq_("./equations/FrictionEquation"), + GSSolver: _dereq_("./solver/GSSolver"), + GridBroadphase: _dereq_("./collision/GridBroadphase"), + Heightfield: _dereq_("./shapes/Heightfield"), + HingeConstraint: _dereq_("./constraints/HingeConstraint"), + LockConstraint: _dereq_("./constraints/LockConstraint"), + Mat3: _dereq_("./math/Mat3"), + Material: _dereq_("./material/Material"), + NaiveBroadphase: _dereq_("./collision/NaiveBroadphase"), + ObjectCollisionMatrix: _dereq_("./collision/ObjectCollisionMatrix"), + Pool: _dereq_("./utils/Pool"), + Particle: _dereq_("./shapes/Particle"), + Plane: _dereq_("./shapes/Plane"), + PointToPointConstraint: _dereq_("./constraints/PointToPointConstraint"), + Quaternion: _dereq_("./math/Quaternion"), + Ray: _dereq_("./collision/Ray"), + RaycastVehicle: _dereq_("./objects/RaycastVehicle"), + RaycastResult: _dereq_("./collision/RaycastResult"), + RigidVehicle: _dereq_("./objects/RigidVehicle"), + RotationalEquation: _dereq_("./equations/RotationalEquation"), + RotationalMotorEquation: _dereq_("./equations/RotationalMotorEquation"), + SAPBroadphase: _dereq_("./collision/SAPBroadphase"), + SPHSystem: _dereq_("./objects/SPHSystem"), + Shape: _dereq_("./shapes/Shape"), + Solver: _dereq_("./solver/Solver"), + Sphere: _dereq_("./shapes/Sphere"), + SplitSolver: _dereq_("./solver/SplitSolver"), + Spring: _dereq_("./objects/Spring"), + Transform: _dereq_("./math/Transform"), + Trimesh: _dereq_("./shapes/Trimesh"), + Vec3: _dereq_("./math/Vec3"), + Vec3Pool: _dereq_("./utils/Vec3Pool"), + World: _dereq_("./world/World"), + Octree: _dereq_("./utils/Octree"), + CMath: _dereq_("./math/CMath") + }; + }, { + "../package.json": 1, + "./collision/AABB": 3, + "./collision/ArrayCollisionMatrix": 4, + "./collision/Broadphase": 5, + "./collision/GridBroadphase": 6, + "./collision/NaiveBroadphase": 7, + "./collision/ObjectCollisionMatrix": 8, + "./collision/Ray": 10, + "./collision/RaycastResult": 11, + "./collision/SAPBroadphase": 12, + "./constraints/ConeTwistConstraint": 13, + "./constraints/Constraint": 14, + "./constraints/DistanceConstraint": 15, + "./constraints/HingeConstraint": 16, + "./constraints/LockConstraint": 17, + "./constraints/PointToPointConstraint": 18, + "./equations/ContactEquation": 20, + "./equations/Equation": 21, + "./equations/FrictionEquation": 22, + "./equations/RotationalEquation": 23, + "./equations/RotationalMotorEquation": 24, + "./material/ContactMaterial": 25, + "./material/Material": 26, + "./math/CMath": 27, + "./math/Mat3": 29, + "./math/Quaternion": 30, + "./math/Transform": 31, + "./math/Vec3": 32, + "./objects/Body": 33, + "./objects/RaycastVehicle": 34, + "./objects/RigidVehicle": 35, + "./objects/SPHSystem": 36, + "./objects/Spring": 37, + "./shapes/Box": 39, + "./shapes/ConvexPolyhedron": 40, + "./shapes/Cylinder": 41, + "./shapes/Heightfield": 42, + "./shapes/Particle": 43, + "./shapes/Plane": 44, + "./shapes/Shape": 45, + "./shapes/Sphere": 46, + "./shapes/Trimesh": 47, + "./solver/GSSolver": 48, + "./solver/Solver": 49, + "./solver/SplitSolver": 50, + "./utils/EventTarget": 51, + "./utils/Octree": 52, + "./utils/Pool": 53, + "./utils/Vec3Pool": 56, + "./world/Narrowphase": 57, + "./world/World": 58 + } ], + 3: [ function(_dereq_, module, exports) { + var Vec3 = _dereq_("../math/Vec3"); + var Utils = _dereq_("../utils/Utils"); + module.exports = AABB; + function AABB(options) { + options = options || {}; + this.lowerBound = new Vec3(); + options.lowerBound && this.lowerBound.copy(options.lowerBound); + this.upperBound = new Vec3(); + options.upperBound && this.upperBound.copy(options.upperBound); + } + var tmp = new Vec3(); + AABB.prototype.setFromPoints = function(points, position, quaternion, skinSize) { + var l = this.lowerBound, u = this.upperBound, q = quaternion; + l.copy(points[0]); + q && q.vmult(l, l); + u.copy(l); + for (var i = 1; i < points.length; i++) { + var p = points[i]; + if (q) { + q.vmult(p, tmp); + p = tmp; + } + p.x > u.x && (u.x = p.x); + p.x < l.x && (l.x = p.x); + p.y > u.y && (u.y = p.y); + p.y < l.y && (l.y = p.y); + p.z > u.z && (u.z = p.z); + p.z < l.z && (l.z = p.z); + } + if (position) { + position.vadd(l, l); + position.vadd(u, u); + } + if (skinSize) { + l.x -= skinSize; + l.y -= skinSize; + l.z -= skinSize; + u.x += skinSize; + u.y += skinSize; + u.z += skinSize; + } + return this; + }; + AABB.prototype.copy = function(aabb) { + this.lowerBound.copy(aabb.lowerBound); + this.upperBound.copy(aabb.upperBound); + return this; + }; + AABB.prototype.clone = function() { + return new AABB().copy(this); + }; + AABB.prototype.extend = function(aabb) { + this.lowerBound.x = Math.min(this.lowerBound.x, aabb.lowerBound.x); + this.upperBound.x = Math.max(this.upperBound.x, aabb.upperBound.x); + this.lowerBound.y = Math.min(this.lowerBound.y, aabb.lowerBound.y); + this.upperBound.y = Math.max(this.upperBound.y, aabb.upperBound.y); + this.lowerBound.z = Math.min(this.lowerBound.z, aabb.lowerBound.z); + this.upperBound.z = Math.max(this.upperBound.z, aabb.upperBound.z); + }; + AABB.prototype.overlaps = function(aabb) { + var l1 = this.lowerBound, u1 = this.upperBound, l2 = aabb.lowerBound, u2 = aabb.upperBound; + var overlapsX = l2.x <= u1.x && u1.x <= u2.x || l1.x <= u2.x && u2.x <= u1.x; + var overlapsY = l2.y <= u1.y && u1.y <= u2.y || l1.y <= u2.y && u2.y <= u1.y; + var overlapsZ = l2.z <= u1.z && u1.z <= u2.z || l1.z <= u2.z && u2.z <= u1.z; + return overlapsX && overlapsY && overlapsZ; + }; + AABB.prototype.volume = function() { + var l = this.lowerBound, u = this.upperBound; + return (u.x - l.x) * (u.y - l.y) * (u.z - l.z); + }; + AABB.prototype.contains = function(aabb) { + var l1 = this.lowerBound, u1 = this.upperBound, l2 = aabb.lowerBound, u2 = aabb.upperBound; + return l1.x <= l2.x && u1.x >= u2.x && l1.y <= l2.y && u1.y >= u2.y && l1.z <= l2.z && u1.z >= u2.z; + }; + AABB.prototype.getCorners = function(a, b, c, d, e, f, g, h) { + var l = this.lowerBound, u = this.upperBound; + a.copy(l); + b.set(u.x, l.y, l.z); + c.set(u.x, u.y, l.z); + d.set(l.x, u.y, u.z); + e.set(u.x, l.y, u.z); + f.set(l.x, u.y, l.z); + g.set(l.x, l.y, u.z); + h.copy(u); + }; + var transformIntoFrame_corners = [ new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3() ]; + AABB.prototype.toLocalFrame = function(frame, target) { + var corners = transformIntoFrame_corners; + var a = corners[0]; + var b = corners[1]; + var c = corners[2]; + var d = corners[3]; + var e = corners[4]; + var f = corners[5]; + var g = corners[6]; + var h = corners[7]; + this.getCorners(a, b, c, d, e, f, g, h); + for (var i = 0; 8 !== i; i++) { + var corner = corners[i]; + frame.pointToLocal(corner, corner); + } + return target.setFromPoints(corners); + }; + AABB.prototype.toWorldFrame = function(frame, target) { + var corners = transformIntoFrame_corners; + var a = corners[0]; + var b = corners[1]; + var c = corners[2]; + var d = corners[3]; + var e = corners[4]; + var f = corners[5]; + var g = corners[6]; + var h = corners[7]; + this.getCorners(a, b, c, d, e, f, g, h); + for (var i = 0; 8 !== i; i++) { + var corner = corners[i]; + frame.pointToWorld(corner, corner); + } + return target.setFromPoints(corners); + }; + AABB.prototype.overlapsRay = function(ray) { + var t = 0; + var dirFracX = 1 / ray._direction.x; + var dirFracY = 1 / ray._direction.y; + var dirFracZ = 1 / ray._direction.z; + var t1 = (this.lowerBound.x - ray.from.x) * dirFracX; + var t2 = (this.upperBound.x - ray.from.x) * dirFracX; + var t3 = (this.lowerBound.y - ray.from.y) * dirFracY; + var t4 = (this.upperBound.y - ray.from.y) * dirFracY; + var t5 = (this.lowerBound.z - ray.from.z) * dirFracZ; + var t6 = (this.upperBound.z - ray.from.z) * dirFracZ; + var tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)), Math.min(t5, t6)); + var tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)), Math.max(t5, t6)); + if (tmax < 0) return false; + if (tmin > tmax) return false; + return true; + }; + }, { + "../math/Vec3": 32, + "../utils/Utils": 55 + } ], + 4: [ function(_dereq_, module, exports) { + module.exports = ArrayCollisionMatrix; + function ArrayCollisionMatrix() { + this.matrix = []; + } + ArrayCollisionMatrix.prototype.get = function(i, j) { + i = i.index; + j = j.index; + if (j > i) { + var temp = j; + j = i; + i = temp; + } + return this.matrix[(i * (i + 1) >> 1) + j - 1]; + }; + ArrayCollisionMatrix.prototype.set = function(i, j, value) { + i = i.index; + j = j.index; + if (j > i) { + var temp = j; + j = i; + i = temp; + } + this.matrix[(i * (i + 1) >> 1) + j - 1] = value ? 1 : 0; + }; + ArrayCollisionMatrix.prototype.reset = function() { + for (var i = 0, l = this.matrix.length; i !== l; i++) this.matrix[i] = 0; + }; + ArrayCollisionMatrix.prototype.setNumObjects = function(n) { + this.matrix.length = n * (n - 1) >> 1; + }; + }, {} ], + 5: [ function(_dereq_, module, exports) { + var Body = _dereq_("../objects/Body"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Shape = _dereq_("../shapes/Shape"); + var Plane = _dereq_("../shapes/Plane"); + module.exports = Broadphase; + function Broadphase() { + this.world = null; + this.useBoundingBoxes = false; + this.dirty = true; + } + Broadphase.prototype.collisionPairs = function(world, p1, p2) { + throw new Error("collisionPairs not implemented for this BroadPhase class!"); + }; + Broadphase.prototype.needBroadphaseCollision = function(bodyA, bodyB) { + if (0 === (bodyA.collisionFilterGroup & bodyB.collisionFilterMask) || 0 === (bodyB.collisionFilterGroup & bodyA.collisionFilterMask)) return false; + if (bodyA.hasTrigger || bodyB.hasTrigger) return true; + if ((0 !== (bodyA.type & Body.STATIC) || bodyA.sleepState === Body.SLEEPING) && (0 !== (bodyB.type & Body.STATIC) || bodyB.sleepState === Body.SLEEPING)) return false; + return true; + }; + Broadphase.prototype.intersectionTest = function(bodyA, bodyB, pairs1, pairs2) { + this.useBoundingBoxes ? this.doBoundingBoxBroadphase(bodyA, bodyB, pairs1, pairs2) : this.doBoundingSphereBroadphase(bodyA, bodyB, pairs1, pairs2); + }; + var Broadphase_collisionPairs_r = new Vec3(), Broadphase_collisionPairs_normal = new Vec3(), Broadphase_collisionPairs_quat = new Quaternion(), Broadphase_collisionPairs_relpos = new Vec3(); + Broadphase.prototype.doBoundingSphereBroadphase = function(bodyA, bodyB, pairs1, pairs2) { + var r = Broadphase_collisionPairs_r; + bodyB.position.vsub(bodyA.position, r); + var boundingRadiusSum2 = Math.pow(bodyA.boundingRadius + bodyB.boundingRadius, 2); + var norm2 = r.norm2(); + if (norm2 < boundingRadiusSum2) { + pairs1.push(bodyA); + pairs2.push(bodyB); + } + }; + Broadphase.prototype.doBoundingBoxBroadphase = function(bodyA, bodyB, pairs1, pairs2) { + bodyA.aabbNeedsUpdate && bodyA.computeAABB(); + bodyB.aabbNeedsUpdate && bodyB.computeAABB(); + if (bodyA.aabb.overlaps(bodyB.aabb)) { + pairs1.push(bodyA); + pairs2.push(bodyB); + } + }; + var Broadphase_makePairsUnique_temp = { + keys: [] + }, Broadphase_makePairsUnique_p1 = [], Broadphase_makePairsUnique_p2 = []; + Broadphase.prototype.makePairsUnique = function(pairs1, pairs2) { + var t = Broadphase_makePairsUnique_temp, p1 = Broadphase_makePairsUnique_p1, p2 = Broadphase_makePairsUnique_p2, N = pairs1.length; + for (var i = 0; i !== N; i++) { + p1[i] = pairs1[i]; + p2[i] = pairs2[i]; + } + pairs1.length = 0; + pairs2.length = 0; + for (var i = 0; i !== N; i++) { + var id1 = p1[i].id, id2 = p2[i].id; + var key = id1 < id2 ? id1 + "," + id2 : id2 + "," + id1; + t[key] = i; + t.keys.push(key); + } + for (var i = 0; i !== t.keys.length; i++) { + var key = t.keys.pop(), pairIndex = t[key]; + pairs1.push(p1[pairIndex]); + pairs2.push(p2[pairIndex]); + delete t[key]; + } + }; + Broadphase.prototype.setWorld = function(world) {}; + var bsc_dist = new Vec3(); + Broadphase.boundingSphereCheck = function(bodyA, bodyB) { + var dist = bsc_dist; + bodyA.position.vsub(bodyB.position, dist); + return Math.pow(bodyA.shape.boundingSphereRadius + bodyB.shape.boundingSphereRadius, 2) > dist.norm2(); + }; + Broadphase.prototype.aabbQuery = function(world, aabb, result) { + console.warn(".aabbQuery is not implemented in this Broadphase subclass."); + return []; + }; + }, { + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../objects/Body": 33, + "../shapes/Plane": 44, + "../shapes/Shape": 45 + } ], + 6: [ function(_dereq_, module, exports) { + module.exports = GridBroadphase; + var Broadphase = _dereq_("./Broadphase"); + var Vec3 = _dereq_("../math/Vec3"); + var Shape = _dereq_("../shapes/Shape"); + function GridBroadphase(aabbMin, aabbMax, nx, ny, nz) { + Broadphase.apply(this); + this.nx = nx || 10; + this.ny = ny || 10; + this.nz = nz || 10; + this.aabbMin = aabbMin || new Vec3(100, 100, 100); + this.aabbMax = aabbMax || new Vec3(-100, -100, -100); + var nbins = this.nx * this.ny * this.nz; + if (nbins <= 0) throw "GridBroadphase: Each dimension's n must be >0"; + this.bins = []; + this.binLengths = []; + this.bins.length = nbins; + this.binLengths.length = nbins; + for (var i = 0; i < nbins; i++) { + this.bins[i] = []; + this.binLengths[i] = 0; + } + } + GridBroadphase.prototype = new Broadphase(); + GridBroadphase.prototype.constructor = GridBroadphase; + var GridBroadphase_collisionPairs_d = new Vec3(); + var GridBroadphase_collisionPairs_binPos = new Vec3(); + GridBroadphase.prototype.collisionPairs = function(world, pairs1, pairs2) { + var N = world.numObjects(), bodies = world.bodies; + var max = this.aabbMax, min = this.aabbMin, nx = this.nx, ny = this.ny, nz = this.nz; + var xstep = ny * nz; + var ystep = nz; + var zstep = 1; + var xmax = max.x, ymax = max.y, zmax = max.z, xmin = min.x, ymin = min.y, zmin = min.z; + var xmult = nx / (xmax - xmin), ymult = ny / (ymax - ymin), zmult = nz / (zmax - zmin); + var binsizeX = (xmax - xmin) / nx, binsizeY = (ymax - ymin) / ny, binsizeZ = (zmax - zmin) / nz; + var binRadius = .5 * Math.sqrt(binsizeX * binsizeX + binsizeY * binsizeY + binsizeZ * binsizeZ); + var types = Shape.types; + var SPHERE = types.SPHERE, PLANE = types.PLANE, BOX = types.BOX, COMPOUND = types.COMPOUND, CONVEXPOLYHEDRON = types.CONVEXPOLYHEDRON; + var bins = this.bins, binLengths = this.binLengths, Nbins = this.bins.length; + for (var i = 0; i !== Nbins; i++) binLengths[i] = 0; + var ceil = Math.ceil; + var min = Math.min; + var max = Math.max; + function addBoxToBins(x0, y0, z0, x1, y1, z1, bi) { + var xoff0 = (x0 - xmin) * xmult | 0, yoff0 = (y0 - ymin) * ymult | 0, zoff0 = (z0 - zmin) * zmult | 0, xoff1 = ceil((x1 - xmin) * xmult), yoff1 = ceil((y1 - ymin) * ymult), zoff1 = ceil((z1 - zmin) * zmult); + xoff0 < 0 ? xoff0 = 0 : xoff0 >= nx && (xoff0 = nx - 1); + yoff0 < 0 ? yoff0 = 0 : yoff0 >= ny && (yoff0 = ny - 1); + zoff0 < 0 ? zoff0 = 0 : zoff0 >= nz && (zoff0 = nz - 1); + xoff1 < 0 ? xoff1 = 0 : xoff1 >= nx && (xoff1 = nx - 1); + yoff1 < 0 ? yoff1 = 0 : yoff1 >= ny && (yoff1 = ny - 1); + zoff1 < 0 ? zoff1 = 0 : zoff1 >= nz && (zoff1 = nz - 1); + xoff0 *= xstep; + yoff0 *= ystep; + zoff0 *= zstep; + xoff1 *= xstep; + yoff1 *= ystep; + zoff1 *= zstep; + for (var xoff = xoff0; xoff <= xoff1; xoff += xstep) for (var yoff = yoff0; yoff <= yoff1; yoff += ystep) for (var zoff = zoff0; zoff <= zoff1; zoff += zstep) { + var idx = xoff + yoff + zoff; + bins[idx][binLengths[idx]++] = bi; + } + } + for (var i = 0; i !== N; i++) { + var bi = bodies[i]; + var si = bi.shape; + switch (si.type) { + case SPHERE: + var x = bi.position.x, y = bi.position.y, z = bi.position.z; + var r = si.radius; + addBoxToBins(x - r, y - r, z - r, x + r, y + r, z + r, bi); + break; + + case PLANE: + si.worldNormalNeedsUpdate && si.computeWorldNormal(bi.quaternion); + var planeNormal = si.worldNormal; + var xreset = xmin + .5 * binsizeX - bi.position.x, yreset = ymin + .5 * binsizeY - bi.position.y, zreset = zmin + .5 * binsizeZ - bi.position.z; + var d = GridBroadphase_collisionPairs_d; + d.set(xreset, yreset, zreset); + for (var xi = 0, xoff = 0; xi !== nx; xi++, xoff += xstep, d.y = yreset, d.x += binsizeX) for (var yi = 0, yoff = 0; yi !== ny; yi++, + yoff += ystep, d.z = zreset, d.y += binsizeY) for (var zi = 0, zoff = 0; zi !== nz; zi++, + zoff += zstep, d.z += binsizeZ) if (d.dot(planeNormal) < binRadius) { + var idx = xoff + yoff + zoff; + bins[idx][binLengths[idx]++] = bi; + } + break; + + default: + bi.aabbNeedsUpdate && bi.computeAABB(); + addBoxToBins(bi.aabb.lowerBound.x, bi.aabb.lowerBound.y, bi.aabb.lowerBound.z, bi.aabb.upperBound.x, bi.aabb.upperBound.y, bi.aabb.upperBound.z, bi); + } + } + for (var i = 0; i !== Nbins; i++) { + var binLength = binLengths[i]; + if (binLength > 1) { + var bin = bins[i]; + for (var xi = 0; xi !== binLength; xi++) { + var bi = bin[xi]; + for (var yi = 0; yi !== xi; yi++) { + var bj = bin[yi]; + this.needBroadphaseCollision(bi, bj) && this.intersectionTest(bi, bj, pairs1, pairs2); + } + } + } + } + this.makePairsUnique(pairs1, pairs2); + }; + }, { + "../math/Vec3": 32, + "../shapes/Shape": 45, + "./Broadphase": 5 + } ], + 7: [ function(_dereq_, module, exports) { + module.exports = NaiveBroadphase; + var Broadphase = _dereq_("./Broadphase"); + var AABB = _dereq_("./AABB"); + function NaiveBroadphase() { + Broadphase.apply(this); + } + NaiveBroadphase.prototype = new Broadphase(); + NaiveBroadphase.prototype.constructor = NaiveBroadphase; + NaiveBroadphase.prototype.collisionPairs = function(world, pairs1, pairs2) { + var bodies = world.bodies, n = bodies.length, i, j, bi, bj; + for (i = 0; i !== n; i++) for (j = 0; j !== i; j++) { + bi = bodies[i]; + bj = bodies[j]; + if (!this.needBroadphaseCollision(bi, bj)) continue; + this.intersectionTest(bi, bj, pairs1, pairs2); + } + }; + var tmpAABB = new AABB(); + NaiveBroadphase.prototype.aabbQuery = function(world, aabb, result) { + result = result || []; + for (var i = 0; i < world.bodies.length; i++) { + var b = world.bodies[i]; + b.aabbNeedsUpdate && b.computeAABB(); + b.aabb.overlaps(aabb) && result.push(b); + } + return result; + }; + }, { + "./AABB": 3, + "./Broadphase": 5 + } ], + 8: [ function(_dereq_, module, exports) { + module.exports = ObjectCollisionMatrix; + function ObjectCollisionMatrix() { + this.matrix = {}; + } + ObjectCollisionMatrix.prototype.get = function(i, j) { + i = i.id; + j = j.id; + if (j > i) { + var temp = j; + j = i; + i = temp; + } + return i + "-" + j in this.matrix; + }; + ObjectCollisionMatrix.prototype.set = function(i, j, value) { + i = i.id; + j = j.id; + if (j > i) { + var temp = j; + j = i; + i = temp; + } + value ? this.matrix[i + "-" + j] = true : delete this.matrix[i + "-" + j]; + }; + ObjectCollisionMatrix.prototype.reset = function() { + this.matrix = {}; + }; + ObjectCollisionMatrix.prototype.setNumObjects = function(n) {}; + }, {} ], + 9: [ function(_dereq_, module, exports) { + module.exports = OverlapKeeper; + function OverlapKeeper() { + this.current = []; + this.previous = []; + } + OverlapKeeper.prototype.getKey = function(i, j) { + if (j < i) { + var temp = j; + j = i; + i = temp; + } + return i << 16 | j; + }; + OverlapKeeper.prototype.set = function(i, j) { + var key = this.getKey(i, j); + var current = this.current; + var index = 0; + while (key > current[index]) index++; + if (key === current[index]) return; + for (var j = current.length - 1; j >= index; j--) current[j + 1] = current[j]; + current[index] = key; + }; + OverlapKeeper.prototype.tick = function() { + var tmp = this.current; + this.current = this.previous; + this.previous = tmp; + this.current.length = 0; + }; + function unpackAndPush(array, key) { + array.push((4294901760 & key) >> 16, 65535 & key); + } + OverlapKeeper.prototype.getDiff = function(additions, removals) { + var a = this.current; + var b = this.previous; + var al = a.length; + var bl = b.length; + var j = 0; + for (var i = 0; i < al; i++) { + var found = false; + var keyA = a[i]; + while (keyA > b[j]) j++; + found = keyA === b[j]; + found || unpackAndPush(additions, keyA); + } + j = 0; + for (var i = 0; i < bl; i++) { + var found = false; + var keyB = b[i]; + while (keyB > a[j]) j++; + found = a[j] === keyB; + found || unpackAndPush(removals, keyB); + } + }; + }, {} ], + 10: [ function(_dereq_, module, exports) { + module.exports = Ray; + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Transform = _dereq_("../math/Transform"); + var ConvexPolyhedron = _dereq_("../shapes/ConvexPolyhedron"); + var Box = _dereq_("../shapes/Box"); + var RaycastResult = _dereq_("../collision/RaycastResult"); + var Shape = _dereq_("../shapes/Shape"); + var AABB = _dereq_("../collision/AABB"); + function Ray(from, to) { + this.from = from ? from.clone() : new Vec3(); + this.to = to ? to.clone() : new Vec3(); + this._direction = new Vec3(); + this.precision = 1e-4; + this.checkCollisionResponse = true; + this.skipBackfaces = false; + this.collisionFilterMask = -1; + this.collisionFilterGroup = -1; + this.mode = Ray.ANY; + this.result = new RaycastResult(); + this.hasHit = false; + this.callback = function(result) {}; + } + Ray.prototype.constructor = Ray; + Ray.CLOSEST = 1; + Ray.ANY = 2; + Ray.ALL = 4; + var tmpAABB = new AABB(); + var tmpArray = []; + Ray.prototype.intersectWorld = function(world, options) { + this.mode = options.mode || Ray.ANY; + this.result = options.result || new RaycastResult(); + this.skipBackfaces = !!options.skipBackfaces; + this.checkCollisionResponse = !!options.checkCollisionResponse; + this.collisionFilterMask = "undefined" !== typeof options.collisionFilterMask ? options.collisionFilterMask : -1; + this.collisionFilterGroup = "undefined" !== typeof options.collisionFilterGroup ? options.collisionFilterGroup : -1; + options.from && this.from.copy(options.from); + options.to && this.to.copy(options.to); + this.callback = options.callback || function() {}; + this.hasHit = false; + this.result.reset(); + this._updateDirection(); + this.getAABB(tmpAABB); + tmpArray.length = 0; + world.broadphase.aabbQuery(world, tmpAABB, tmpArray); + this.intersectBodies(tmpArray); + return this.hasHit; + }; + var v1 = new Vec3(), v2 = new Vec3(); + Ray.pointInTriangle = pointInTriangle; + function pointInTriangle(p, a, b, c) { + c.vsub(a, v0); + b.vsub(a, v1); + p.vsub(a, v2); + var dot00 = v0.dot(v0); + var dot01 = v0.dot(v1); + var dot02 = v0.dot(v2); + var dot11 = v1.dot(v1); + var dot12 = v1.dot(v2); + var u, v; + return (u = dot11 * dot02 - dot01 * dot12) >= 0 && (v = dot00 * dot12 - dot01 * dot02) >= 0 && u + v < dot00 * dot11 - dot01 * dot01; + } + var intersectBody_xi = new Vec3(); + var intersectBody_qi = new Quaternion(); + Ray.prototype.intersectBody = function(body, result) { + if (result) { + this.result = result; + this._updateDirection(); + } + var checkCollisionResponse = this.checkCollisionResponse; + if (checkCollisionResponse && !body.collisionResponse) return; + if (0 === (this.collisionFilterGroup & body.collisionFilterMask) || 0 === (body.collisionFilterGroup & this.collisionFilterMask)) return; + var xi = intersectBody_xi; + var qi = intersectBody_qi; + for (var i = 0, N = body.shapes.length; i < N; i++) { + var shape = body.shapes[i]; + if (checkCollisionResponse && !shape.collisionResponse) continue; + body.quaternion.mult(body.shapeOrientations[i], qi); + body.quaternion.vmult(body.shapeOffsets[i], xi); + xi.vadd(body.position, xi); + this.intersectShape(shape, qi, xi, body); + if (this.result._shouldStop) break; + } + }; + Ray.prototype.intersectBodies = function(bodies, result) { + if (result) { + this.result = result; + this._updateDirection(); + } + for (var i = 0, l = bodies.length; !this.result._shouldStop && i < l; i++) this.intersectBody(bodies[i]); + }; + Ray.prototype._updateDirection = function() { + this.to.vsub(this.from, this._direction); + this._direction.normalize(); + }; + Ray.prototype.intersectShape = function(shape, quat, position, body) { + var from = this.from; + var distance = distanceFromIntersection(from, this._direction, position); + if (distance > shape.boundingSphereRadius) return; + var intersectMethod = this[shape.type]; + intersectMethod && intersectMethod.call(this, shape, quat, position, body, shape); + }; + var vector = new Vec3(); + var normal = new Vec3(); + var intersectPoint = new Vec3(); + var a = new Vec3(); + var b = new Vec3(); + var c = new Vec3(); + var d = new Vec3(); + var tmpRaycastResult = new RaycastResult(); + Ray.prototype.intersectBox = function(shape, quat, position, body, reportedShape) { + return this.intersectConvex(shape.convexPolyhedronRepresentation, quat, position, body, reportedShape); + }; + Ray.prototype[Shape.types.BOX] = Ray.prototype.intersectBox; + Ray.prototype.intersectPlane = function(shape, quat, position, body, reportedShape) { + var from = this.from; + var to = this.to; + var direction = this._direction; + var worldNormal = new Vec3(0, 0, 1); + quat.vmult(worldNormal, worldNormal); + var len = new Vec3(); + from.vsub(position, len); + var planeToFrom = len.dot(worldNormal); + to.vsub(position, len); + var planeToTo = len.dot(worldNormal); + if (planeToFrom * planeToTo > 0) return; + if (from.distanceTo(to) < planeToFrom) return; + var n_dot_dir = worldNormal.dot(direction); + if (Math.abs(n_dot_dir) < this.precision) return; + var planePointToFrom = new Vec3(); + var dir_scaled_with_t = new Vec3(); + var hitPointWorld = new Vec3(); + from.vsub(position, planePointToFrom); + var t = -worldNormal.dot(planePointToFrom) / n_dot_dir; + direction.scale(t, dir_scaled_with_t); + from.vadd(dir_scaled_with_t, hitPointWorld); + this.reportIntersection(worldNormal, hitPointWorld, reportedShape, body, -1); + }; + Ray.prototype[Shape.types.PLANE] = Ray.prototype.intersectPlane; + Ray.prototype.getAABB = function(result) { + var to = this.to; + var from = this.from; + result.lowerBound.x = Math.min(to.x, from.x); + result.lowerBound.y = Math.min(to.y, from.y); + result.lowerBound.z = Math.min(to.z, from.z); + result.upperBound.x = Math.max(to.x, from.x); + result.upperBound.y = Math.max(to.y, from.y); + result.upperBound.z = Math.max(to.z, from.z); + }; + var intersectConvexOptions = { + faceList: [ 0 ] + }; + var worldPillarOffset = new Vec3(); + var intersectHeightfield_localRay = new Ray(); + var intersectHeightfield_index = []; + var intersectHeightfield_minMax = []; + Ray.prototype.intersectHeightfield = function(shape, quat, position, body, reportedShape) { + var data = shape.data, w = shape.elementSize; + var localRay = intersectHeightfield_localRay; + localRay.from.copy(this.from); + localRay.to.copy(this.to); + Transform.pointToLocalFrame(position, quat, localRay.from, localRay.from); + Transform.pointToLocalFrame(position, quat, localRay.to, localRay.to); + localRay._updateDirection(); + var index = intersectHeightfield_index; + var iMinX, iMinY, iMaxX, iMaxY; + iMinX = iMinY = 0; + iMaxX = iMaxY = shape.data.length - 1; + var aabb = new AABB(); + localRay.getAABB(aabb); + shape.getIndexOfPosition(aabb.lowerBound.x, aabb.lowerBound.y, index, true); + iMinX = Math.max(iMinX, index[0]); + iMinY = Math.max(iMinY, index[1]); + shape.getIndexOfPosition(aabb.upperBound.x, aabb.upperBound.y, index, true); + iMaxX = Math.min(iMaxX, index[0] + 1); + iMaxY = Math.min(iMaxY, index[1] + 1); + for (var i = iMinX; i < iMaxX; i++) for (var j = iMinY; j < iMaxY; j++) { + if (this.result._shouldStop) return; + shape.getAabbAtIndex(i, j, aabb); + if (!aabb.overlapsRay(localRay)) continue; + shape.getConvexTrianglePillar(i, j, false); + Transform.pointToWorldFrame(position, quat, shape.pillarOffset, worldPillarOffset); + this.intersectConvex(shape.pillarConvex, quat, worldPillarOffset, body, reportedShape, intersectConvexOptions); + if (this.result._shouldStop) return; + shape.getConvexTrianglePillar(i, j, true); + Transform.pointToWorldFrame(position, quat, shape.pillarOffset, worldPillarOffset); + this.intersectConvex(shape.pillarConvex, quat, worldPillarOffset, body, reportedShape, intersectConvexOptions); + } + }; + Ray.prototype[Shape.types.HEIGHTFIELD] = Ray.prototype.intersectHeightfield; + var Ray_intersectSphere_intersectionPoint = new Vec3(); + var Ray_intersectSphere_normal = new Vec3(); + Ray.prototype.intersectSphere = function(shape, quat, position, body, reportedShape) { + var from = this.from, to = this.to, r = shape.radius; + var a = Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2) + Math.pow(to.z - from.z, 2); + var b = 2 * ((to.x - from.x) * (from.x - position.x) + (to.y - from.y) * (from.y - position.y) + (to.z - from.z) * (from.z - position.z)); + var c = Math.pow(from.x - position.x, 2) + Math.pow(from.y - position.y, 2) + Math.pow(from.z - position.z, 2) - Math.pow(r, 2); + var delta = Math.pow(b, 2) - 4 * a * c; + var intersectionPoint = Ray_intersectSphere_intersectionPoint; + var normal = Ray_intersectSphere_normal; + if (delta < 0) return; + if (0 === delta) { + from.lerp(to, delta, intersectionPoint); + intersectionPoint.vsub(position, normal); + normal.normalize(); + this.reportIntersection(normal, intersectionPoint, reportedShape, body, -1); + } else { + var d1 = (-b - Math.sqrt(delta)) / (2 * a); + var d2 = (-b + Math.sqrt(delta)) / (2 * a); + if (d1 >= 0 && d1 <= 1) { + from.lerp(to, d1, intersectionPoint); + intersectionPoint.vsub(position, normal); + normal.normalize(); + this.reportIntersection(normal, intersectionPoint, reportedShape, body, -1); + } + if (this.result._shouldStop) return; + if (d2 >= 0 && d2 <= 1) { + from.lerp(to, d2, intersectionPoint); + intersectionPoint.vsub(position, normal); + normal.normalize(); + this.reportIntersection(normal, intersectionPoint, reportedShape, body, -1); + } + } + }; + Ray.prototype[Shape.types.SPHERE] = Ray.prototype.intersectSphere; + var intersectConvex_normal = new Vec3(); + var intersectConvex_minDistNormal = new Vec3(); + var intersectConvex_minDistIntersect = new Vec3(); + var intersectConvex_vector = new Vec3(); + Ray.prototype.intersectConvex = function intersectConvex(shape, quat, position, body, reportedShape, options) { + var minDistNormal = intersectConvex_minDistNormal; + var normal = intersectConvex_normal; + var vector = intersectConvex_vector; + var minDistIntersect = intersectConvex_minDistIntersect; + var faceList = options && options.faceList || null; + var faces = shape.faces, vertices = shape.vertices, normals = shape.faceNormals; + var direction = this._direction; + var from = this.from; + var to = this.to; + var fromToDistance = from.distanceTo(to); + var minDist = -1; + var Nfaces = faceList ? faceList.length : faces.length; + var result = this.result; + for (var j = 0; !result._shouldStop && j < Nfaces; j++) { + var fi = faceList ? faceList[j] : j; + var face = faces[fi]; + var faceNormal = normals[fi]; + var q = quat; + var x = position; + vector.copy(vertices[face[0]]); + q.vmult(vector, vector); + vector.vadd(x, vector); + vector.vsub(from, vector); + q.vmult(faceNormal, normal); + var dot = direction.dot(normal); + if (Math.abs(dot) < this.precision) continue; + var scalar = normal.dot(vector) / dot; + if (scalar < 0) continue; + direction.mult(scalar, intersectPoint); + intersectPoint.vadd(from, intersectPoint); + a.copy(vertices[face[0]]); + q.vmult(a, a); + x.vadd(a, a); + for (var i = 1; !result._shouldStop && i < face.length - 1; i++) { + b.copy(vertices[face[i]]); + c.copy(vertices[face[i + 1]]); + q.vmult(b, b); + q.vmult(c, c); + x.vadd(b, b); + x.vadd(c, c); + var distance = intersectPoint.distanceTo(from); + if (!(pointInTriangle(intersectPoint, a, b, c) || pointInTriangle(intersectPoint, b, a, c)) || distance > fromToDistance) continue; + this.reportIntersection(normal, intersectPoint, reportedShape, body, fi); + } + } + }; + Ray.prototype[Shape.types.CONVEXPOLYHEDRON] = Ray.prototype.intersectConvex; + var intersectTrimesh_normal = new Vec3(); + var intersectTrimesh_localDirection = new Vec3(); + var intersectTrimesh_localFrom = new Vec3(); + var intersectTrimesh_localTo = new Vec3(); + var intersectTrimesh_worldNormal = new Vec3(); + var intersectTrimesh_worldIntersectPoint = new Vec3(); + var intersectTrimesh_localAABB = new AABB(); + var intersectTrimesh_triangles = []; + var intersectTrimesh_treeTransform = new Transform(); + Ray.prototype.intersectTrimesh = function intersectTrimesh(mesh, quat, position, body, reportedShape, options) { + var normal = intersectTrimesh_normal; + var triangles = intersectTrimesh_triangles; + var treeTransform = intersectTrimesh_treeTransform; + var minDistNormal = intersectConvex_minDistNormal; + var vector = intersectConvex_vector; + var minDistIntersect = intersectConvex_minDistIntersect; + var localAABB = intersectTrimesh_localAABB; + var localDirection = intersectTrimesh_localDirection; + var localFrom = intersectTrimesh_localFrom; + var localTo = intersectTrimesh_localTo; + var worldIntersectPoint = intersectTrimesh_worldIntersectPoint; + var worldNormal = intersectTrimesh_worldNormal; + var faceList = options && options.faceList || null; + var indices = mesh.indices, vertices = mesh.vertices, normals = mesh.faceNormals; + var from = this.from; + var to = this.to; + var direction = this._direction; + var minDist = -1; + treeTransform.position.copy(position); + treeTransform.quaternion.copy(quat); + Transform.vectorToLocalFrame(position, quat, direction, localDirection); + Transform.pointToLocalFrame(position, quat, from, localFrom); + Transform.pointToLocalFrame(position, quat, to, localTo); + localTo.x *= mesh.scale.x; + localTo.y *= mesh.scale.y; + localTo.z *= mesh.scale.z; + localFrom.x *= mesh.scale.x; + localFrom.y *= mesh.scale.y; + localFrom.z *= mesh.scale.z; + localTo.vsub(localFrom, localDirection); + localDirection.normalize(); + var fromToDistanceSquared = localFrom.distanceSquared(localTo); + mesh.tree.rayQuery(this, treeTransform, triangles); + for (var i = 0, N = triangles.length; !this.result._shouldStop && i !== N; i++) { + var trianglesIndex = triangles[i]; + mesh.getNormal(trianglesIndex, normal); + mesh.getVertex(indices[3 * trianglesIndex], a); + a.vsub(localFrom, vector); + var dot = localDirection.dot(normal); + var scalar = normal.dot(vector) / dot; + if (scalar < 0) continue; + localDirection.scale(scalar, intersectPoint); + intersectPoint.vadd(localFrom, intersectPoint); + mesh.getVertex(indices[3 * trianglesIndex + 1], b); + mesh.getVertex(indices[3 * trianglesIndex + 2], c); + var squaredDistance = intersectPoint.distanceSquared(localFrom); + if (!(pointInTriangle(intersectPoint, b, a, c) || pointInTriangle(intersectPoint, a, b, c)) || squaredDistance > fromToDistanceSquared) continue; + Transform.vectorToWorldFrame(quat, normal, worldNormal); + Transform.pointToWorldFrame(position, quat, intersectPoint, worldIntersectPoint); + this.reportIntersection(worldNormal, worldIntersectPoint, reportedShape, body, trianglesIndex); + } + triangles.length = 0; + }; + Ray.prototype[Shape.types.TRIMESH] = Ray.prototype.intersectTrimesh; + Ray.prototype.reportIntersection = function(normal, hitPointWorld, shape, body, hitFaceIndex) { + var from = this.from; + var to = this.to; + var distance = from.distanceTo(hitPointWorld); + var result = this.result; + if (this.skipBackfaces && normal.dot(this._direction) > 0) return; + result.hitFaceIndex = "undefined" !== typeof hitFaceIndex ? hitFaceIndex : -1; + switch (this.mode) { + case Ray.ALL: + this.hasHit = true; + result.set(from, to, normal, hitPointWorld, shape, body, distance); + result.hasHit = true; + this.callback(result); + break; + + case Ray.CLOSEST: + if (distance < result.distance || !result.hasHit) { + this.hasHit = true; + result.hasHit = true; + result.set(from, to, normal, hitPointWorld, shape, body, distance); + } + break; + + case Ray.ANY: + this.hasHit = true; + result.hasHit = true; + result.set(from, to, normal, hitPointWorld, shape, body, distance); + result._shouldStop = true; + } + }; + var v0 = new Vec3(), intersect = new Vec3(); + function distanceFromIntersection(from, direction, position) { + position.vsub(from, v0); + var dot = v0.dot(direction); + direction.mult(dot, intersect); + intersect.vadd(from, intersect); + var distance = position.distanceTo(intersect); + return distance; + } + }, { + "../collision/AABB": 3, + "../collision/RaycastResult": 11, + "../math/Quaternion": 30, + "../math/Transform": 31, + "../math/Vec3": 32, + "../shapes/Box": 39, + "../shapes/ConvexPolyhedron": 40, + "../shapes/Shape": 45 + } ], + 11: [ function(_dereq_, module, exports) { + var Vec3 = _dereq_("../math/Vec3"); + module.exports = RaycastResult; + function RaycastResult() { + this.rayFromWorld = new Vec3(); + this.rayToWorld = new Vec3(); + this.hitNormalWorld = new Vec3(); + this.hitPointWorld = new Vec3(); + this.hasHit = false; + this.shape = null; + this.body = null; + this.hitFaceIndex = -1; + this.distance = -1; + this._shouldStop = false; + } + RaycastResult.prototype.reset = function() { + this.rayFromWorld.setZero(); + this.rayToWorld.setZero(); + this.hitNormalWorld.setZero(); + this.hitPointWorld.setZero(); + this.hasHit = false; + this.shape = null; + this.body = null; + this.hitFaceIndex = -1; + this.distance = -1; + this._shouldStop = false; + }; + RaycastResult.prototype.abort = function() { + this._shouldStop = true; + }; + RaycastResult.prototype.set = function(rayFromWorld, rayToWorld, hitNormalWorld, hitPointWorld, shape, body, distance) { + this.rayFromWorld.copy(rayFromWorld); + this.rayToWorld.copy(rayToWorld); + this.hitNormalWorld.copy(hitNormalWorld); + this.hitPointWorld.copy(hitPointWorld); + this.shape = shape; + this.body = body; + this.distance = distance; + }; + }, { + "../math/Vec3": 32 + } ], + 12: [ function(_dereq_, module, exports) { + var Shape = _dereq_("../shapes/Shape"); + var Broadphase = _dereq_("../collision/Broadphase"); + module.exports = SAPBroadphase; + function SAPBroadphase(world) { + Broadphase.apply(this); + this.axisList = []; + this.world = null; + this.axisIndex = 0; + var axisList = this.axisList; + this._addBodyHandler = function(e) { + axisList.push(e.body); + }; + this._removeBodyHandler = function(e) { + var idx = axisList.indexOf(e.body); + -1 !== idx && axisList.splice(idx, 1); + }; + world && this.setWorld(world); + } + SAPBroadphase.prototype = new Broadphase(); + SAPBroadphase.prototype.setWorld = function(world) { + this.axisList.length = 0; + for (var i = 0; i < world.bodies.length; i++) this.axisList.push(world.bodies[i]); + world.removeEventListener("addBody", this._addBodyHandler); + world.removeEventListener("removeBody", this._removeBodyHandler); + world.addEventListener("addBody", this._addBodyHandler); + world.addEventListener("removeBody", this._removeBodyHandler); + this.world = world; + this.dirty = true; + }; + SAPBroadphase.insertionSortX = function(a) { + for (var i = 1, l = a.length; i < l; i++) { + var v = a[i]; + for (var j = i - 1; j >= 0; j--) { + if (a[j].aabb.lowerBound.x <= v.aabb.lowerBound.x) break; + a[j + 1] = a[j]; + } + a[j + 1] = v; + } + return a; + }; + SAPBroadphase.insertionSortY = function(a) { + for (var i = 1, l = a.length; i < l; i++) { + var v = a[i]; + for (var j = i - 1; j >= 0; j--) { + if (a[j].aabb.lowerBound.y <= v.aabb.lowerBound.y) break; + a[j + 1] = a[j]; + } + a[j + 1] = v; + } + return a; + }; + SAPBroadphase.insertionSortZ = function(a) { + for (var i = 1, l = a.length; i < l; i++) { + var v = a[i]; + for (var j = i - 1; j >= 0; j--) { + if (a[j].aabb.lowerBound.z <= v.aabb.lowerBound.z) break; + a[j + 1] = a[j]; + } + a[j + 1] = v; + } + return a; + }; + SAPBroadphase.prototype.collisionPairs = function(world, p1, p2) { + var bodies = this.axisList, N = bodies.length, axisIndex = this.axisIndex, i, j; + if (this.dirty) { + this.sortList(); + this.dirty = false; + } + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + for (j = i + 1; j < N; j++) { + var bj = bodies[j]; + if (!this.needBroadphaseCollision(bi, bj)) continue; + if (!SAPBroadphase.checkBounds(bi, bj, axisIndex)) break; + this.intersectionTest(bi, bj, p1, p2); + } + } + }; + SAPBroadphase.prototype.sortList = function() { + var axisList = this.axisList; + var axisIndex = this.axisIndex; + var N = axisList.length; + for (var i = 0; i !== N; i++) { + var bi = axisList[i]; + bi.aabbNeedsUpdate && bi.computeAABB(); + } + 0 === axisIndex ? SAPBroadphase.insertionSortX(axisList) : 1 === axisIndex ? SAPBroadphase.insertionSortY(axisList) : 2 === axisIndex && SAPBroadphase.insertionSortZ(axisList); + }; + SAPBroadphase.checkBounds = function(bi, bj, axisIndex) { + var biPos; + var bjPos; + if (0 === axisIndex) { + biPos = bi.position.x; + bjPos = bj.position.x; + } else if (1 === axisIndex) { + biPos = bi.position.y; + bjPos = bj.position.y; + } else if (2 === axisIndex) { + biPos = bi.position.z; + bjPos = bj.position.z; + } + var ri = bi.boundingRadius, rj = bj.boundingRadius, boundA1 = biPos - ri, boundA2 = biPos + ri, boundB1 = bjPos - rj, boundB2 = bjPos + rj; + return boundB1 < boundA2; + }; + SAPBroadphase.prototype.autoDetectAxis = function() { + var sumX = 0, sumX2 = 0, sumY = 0, sumY2 = 0, sumZ = 0, sumZ2 = 0, bodies = this.axisList, N = bodies.length, invN = 1 / N; + for (var i = 0; i !== N; i++) { + var b = bodies[i]; + var centerX = b.position.x; + sumX += centerX; + sumX2 += centerX * centerX; + var centerY = b.position.y; + sumY += centerY; + sumY2 += centerY * centerY; + var centerZ = b.position.z; + sumZ += centerZ; + sumZ2 += centerZ * centerZ; + } + var varianceX = sumX2 - sumX * sumX * invN, varianceY = sumY2 - sumY * sumY * invN, varianceZ = sumZ2 - sumZ * sumZ * invN; + this.axisIndex = varianceX > varianceY ? varianceX > varianceZ ? 0 : 2 : varianceY > varianceZ ? 1 : 2; + }; + SAPBroadphase.prototype.aabbQuery = function(world, aabb, result) { + result = result || []; + if (this.dirty) { + this.sortList(); + this.dirty = false; + } + var axisIndex = this.axisIndex, axis = "x"; + 1 === axisIndex && (axis = "y"); + 2 === axisIndex && (axis = "z"); + var axisList = this.axisList; + var lower = aabb.lowerBound[axis]; + var upper = aabb.upperBound[axis]; + for (var i = 0; i < axisList.length; i++) { + var b = axisList[i]; + b.aabbNeedsUpdate && b.computeAABB(); + b.aabb.overlaps(aabb) && result.push(b); + } + return result; + }; + }, { + "../collision/Broadphase": 5, + "../shapes/Shape": 45 + } ], + 13: [ function(_dereq_, module, exports) { + module.exports = ConeTwistConstraint; + var Constraint = _dereq_("./Constraint"); + var PointToPointConstraint = _dereq_("./PointToPointConstraint"); + var ConeEquation = _dereq_("../equations/ConeEquation"); + var RotationalEquation = _dereq_("../equations/RotationalEquation"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + var Vec3 = _dereq_("../math/Vec3"); + function ConeTwistConstraint(bodyA, bodyB, options) { + options = options || {}; + var maxForce = "undefined" !== typeof options.maxForce ? options.maxForce : 1e6; + var pivotA = options.pivotA ? options.pivotA.clone() : new Vec3(); + var pivotB = options.pivotB ? options.pivotB.clone() : new Vec3(); + this.axisA = options.axisA ? options.axisA.clone() : new Vec3(); + this.axisB = options.axisB ? options.axisB.clone() : new Vec3(); + PointToPointConstraint.call(this, bodyA, pivotA, bodyB, pivotB, maxForce); + this.collideConnected = !!options.collideConnected; + this.angle = "undefined" !== typeof options.angle ? options.angle : 0; + var c = this.coneEquation = new ConeEquation(bodyA, bodyB, options); + var t = this.twistEquation = new RotationalEquation(bodyA, bodyB, options); + this.twistAngle = "undefined" !== typeof options.twistAngle ? options.twistAngle : 0; + c.maxForce = 0; + c.minForce = -maxForce; + t.maxForce = 0; + t.minForce = -maxForce; + this.equations.push(c, t); + } + ConeTwistConstraint.prototype = new PointToPointConstraint(); + ConeTwistConstraint.constructor = ConeTwistConstraint; + var ConeTwistConstraint_update_tmpVec1 = new Vec3(); + var ConeTwistConstraint_update_tmpVec2 = new Vec3(); + ConeTwistConstraint.prototype.update = function() { + var bodyA = this.bodyA, bodyB = this.bodyB, cone = this.coneEquation, twist = this.twistEquation; + PointToPointConstraint.prototype.update.call(this); + bodyA.vectorToWorldFrame(this.axisA, cone.axisA); + bodyB.vectorToWorldFrame(this.axisB, cone.axisB); + this.axisA.tangents(twist.axisA, twist.axisA); + bodyA.vectorToWorldFrame(twist.axisA, twist.axisA); + this.axisB.tangents(twist.axisB, twist.axisB); + bodyB.vectorToWorldFrame(twist.axisB, twist.axisB); + cone.angle = this.angle; + twist.maxAngle = this.twistAngle; + }; + }, { + "../equations/ConeEquation": 19, + "../equations/ContactEquation": 20, + "../equations/RotationalEquation": 23, + "../math/Vec3": 32, + "./Constraint": 14, + "./PointToPointConstraint": 18 + } ], + 14: [ function(_dereq_, module, exports) { + module.exports = Constraint; + var Utils = _dereq_("../utils/Utils"); + function Constraint(bodyA, bodyB, options) { + options = Utils.defaults(options, { + collideConnected: true, + wakeUpBodies: true + }); + this.equations = []; + this.bodyA = bodyA; + this.bodyB = bodyB; + this.id = Constraint.idCounter++; + this.collideConnected = options.collideConnected; + if (options.wakeUpBodies) { + bodyA && bodyA.wakeUp(); + bodyB && bodyB.wakeUp(); + } + } + Constraint.prototype.update = function() { + throw new Error("method update() not implmemented in this Constraint subclass!"); + }; + Constraint.prototype.enable = function() { + var eqs = this.equations; + for (var i = 0; i < eqs.length; i++) eqs[i].enabled = true; + }; + Constraint.prototype.disable = function() { + var eqs = this.equations; + for (var i = 0; i < eqs.length; i++) eqs[i].enabled = false; + }; + Constraint.idCounter = 0; + }, { + "../utils/Utils": 55 + } ], + 15: [ function(_dereq_, module, exports) { + module.exports = DistanceConstraint; + var Constraint = _dereq_("./Constraint"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + function DistanceConstraint(bodyA, bodyB, distance, maxForce) { + Constraint.call(this, bodyA, bodyB); + "undefined" === typeof distance && (distance = bodyA.position.distanceTo(bodyB.position)); + "undefined" === typeof maxForce && (maxForce = 1e6); + this.distance = distance; + var eq = this.distanceEquation = new ContactEquation(bodyA, bodyB); + this.equations.push(eq); + eq.minForce = -maxForce; + eq.maxForce = maxForce; + } + DistanceConstraint.prototype = new Constraint(); + DistanceConstraint.prototype.update = function() { + var bodyA = this.bodyA; + var bodyB = this.bodyB; + var eq = this.distanceEquation; + var halfDist = .5 * this.distance; + var normal = eq.ni; + bodyB.position.vsub(bodyA.position, normal); + normal.normalize(); + normal.mult(halfDist, eq.ri); + normal.mult(-halfDist, eq.rj); + }; + }, { + "../equations/ContactEquation": 20, + "./Constraint": 14 + } ], + 16: [ function(_dereq_, module, exports) { + module.exports = HingeConstraint; + var Constraint = _dereq_("./Constraint"); + var PointToPointConstraint = _dereq_("./PointToPointConstraint"); + var RotationalEquation = _dereq_("../equations/RotationalEquation"); + var RotationalMotorEquation = _dereq_("../equations/RotationalMotorEquation"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + var Vec3 = _dereq_("../math/Vec3"); + function HingeConstraint(bodyA, bodyB, options) { + options = options || {}; + var maxForce = "undefined" !== typeof options.maxForce ? options.maxForce : 1e6; + var pivotA = options.pivotA ? options.pivotA.clone() : new Vec3(); + var pivotB = options.pivotB ? options.pivotB.clone() : new Vec3(); + PointToPointConstraint.call(this, bodyA, pivotA, bodyB, pivotB, maxForce); + var axisA = this.axisA = options.axisA ? options.axisA.clone() : new Vec3(1, 0, 0); + axisA.normalize(); + var axisB = this.axisB = options.axisB ? options.axisB.clone() : new Vec3(1, 0, 0); + axisB.normalize(); + var r1 = this.rotationalEquation1 = new RotationalEquation(bodyA, bodyB, options); + var r2 = this.rotationalEquation2 = new RotationalEquation(bodyA, bodyB, options); + var motor = this.motorEquation = new RotationalMotorEquation(bodyA, bodyB, maxForce); + motor.enabled = false; + this.equations.push(r1, r2, motor); + } + HingeConstraint.prototype = new PointToPointConstraint(); + HingeConstraint.constructor = HingeConstraint; + HingeConstraint.prototype.enableMotor = function() { + this.motorEquation.enabled = true; + }; + HingeConstraint.prototype.disableMotor = function() { + this.motorEquation.enabled = false; + }; + HingeConstraint.prototype.setMotorSpeed = function(speed) { + this.motorEquation.targetVelocity = speed; + }; + HingeConstraint.prototype.setMotorMaxForce = function(maxForce) { + this.motorEquation.maxForce = maxForce; + this.motorEquation.minForce = -maxForce; + }; + var HingeConstraint_update_tmpVec1 = new Vec3(); + var HingeConstraint_update_tmpVec2 = new Vec3(); + HingeConstraint.prototype.update = function() { + var bodyA = this.bodyA, bodyB = this.bodyB, motor = this.motorEquation, r1 = this.rotationalEquation1, r2 = this.rotationalEquation2, worldAxisA = HingeConstraint_update_tmpVec1, worldAxisB = HingeConstraint_update_tmpVec2; + var axisA = this.axisA; + var axisB = this.axisB; + PointToPointConstraint.prototype.update.call(this); + bodyA.quaternion.vmult(axisA, worldAxisA); + bodyB.quaternion.vmult(axisB, worldAxisB); + worldAxisA.tangents(r1.axisA, r2.axisA); + r1.axisB.copy(worldAxisB); + r2.axisB.copy(worldAxisB); + if (this.motorEquation.enabled) { + bodyA.quaternion.vmult(this.axisA, motor.axisA); + bodyB.quaternion.vmult(this.axisB, motor.axisB); + } + }; + }, { + "../equations/ContactEquation": 20, + "../equations/RotationalEquation": 23, + "../equations/RotationalMotorEquation": 24, + "../math/Vec3": 32, + "./Constraint": 14, + "./PointToPointConstraint": 18 + } ], + 17: [ function(_dereq_, module, exports) { + module.exports = LockConstraint; + var Constraint = _dereq_("./Constraint"); + var PointToPointConstraint = _dereq_("./PointToPointConstraint"); + var RotationalEquation = _dereq_("../equations/RotationalEquation"); + var RotationalMotorEquation = _dereq_("../equations/RotationalMotorEquation"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + var Vec3 = _dereq_("../math/Vec3"); + function LockConstraint(bodyA, bodyB, options) { + options = options || {}; + var maxForce = "undefined" !== typeof options.maxForce ? options.maxForce : 1e6; + var pivotA = new Vec3(); + var pivotB = new Vec3(); + var halfWay = new Vec3(); + bodyA.position.vadd(bodyB.position, halfWay); + halfWay.scale(.5, halfWay); + bodyB.pointToLocalFrame(halfWay, pivotB); + bodyA.pointToLocalFrame(halfWay, pivotA); + PointToPointConstraint.call(this, bodyA, pivotA, bodyB, pivotB, maxForce); + this.xA = bodyA.vectorToLocalFrame(Vec3.UNIT_X); + this.xB = bodyB.vectorToLocalFrame(Vec3.UNIT_X); + this.yA = bodyA.vectorToLocalFrame(Vec3.UNIT_Y); + this.yB = bodyB.vectorToLocalFrame(Vec3.UNIT_Y); + this.zA = bodyA.vectorToLocalFrame(Vec3.UNIT_Z); + this.zB = bodyB.vectorToLocalFrame(Vec3.UNIT_Z); + var r1 = this.rotationalEquation1 = new RotationalEquation(bodyA, bodyB, options); + var r2 = this.rotationalEquation2 = new RotationalEquation(bodyA, bodyB, options); + var r3 = this.rotationalEquation3 = new RotationalEquation(bodyA, bodyB, options); + this.equations.push(r1, r2, r3); + } + LockConstraint.prototype = new PointToPointConstraint(); + LockConstraint.constructor = LockConstraint; + var LockConstraint_update_tmpVec1 = new Vec3(); + var LockConstraint_update_tmpVec2 = new Vec3(); + LockConstraint.prototype.update = function() { + var bodyA = this.bodyA, bodyB = this.bodyB, motor = this.motorEquation, r1 = this.rotationalEquation1, r2 = this.rotationalEquation2, r3 = this.rotationalEquation3, worldAxisA = LockConstraint_update_tmpVec1, worldAxisB = LockConstraint_update_tmpVec2; + PointToPointConstraint.prototype.update.call(this); + bodyA.vectorToWorldFrame(this.xA, r1.axisA); + bodyB.vectorToWorldFrame(this.yB, r1.axisB); + bodyA.vectorToWorldFrame(this.yA, r2.axisA); + bodyB.vectorToWorldFrame(this.zB, r2.axisB); + bodyA.vectorToWorldFrame(this.zA, r3.axisA); + bodyB.vectorToWorldFrame(this.xB, r3.axisB); + }; + }, { + "../equations/ContactEquation": 20, + "../equations/RotationalEquation": 23, + "../equations/RotationalMotorEquation": 24, + "../math/Vec3": 32, + "./Constraint": 14, + "./PointToPointConstraint": 18 + } ], + 18: [ function(_dereq_, module, exports) { + module.exports = PointToPointConstraint; + var Constraint = _dereq_("./Constraint"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + var Vec3 = _dereq_("../math/Vec3"); + function PointToPointConstraint(bodyA, pivotA, bodyB, pivotB, maxForce) { + Constraint.call(this, bodyA, bodyB); + maxForce = "undefined" !== typeof maxForce ? maxForce : 1e6; + this.pivotA = pivotA ? pivotA.clone() : new Vec3(); + this.pivotB = pivotB ? pivotB.clone() : new Vec3(); + var x = this.equationX = new ContactEquation(bodyA, bodyB); + var y = this.equationY = new ContactEquation(bodyA, bodyB); + var z = this.equationZ = new ContactEquation(bodyA, bodyB); + this.equations.push(x, y, z); + x.minForce = y.minForce = z.minForce = -maxForce; + x.maxForce = y.maxForce = z.maxForce = maxForce; + x.ni.set(1, 0, 0); + y.ni.set(0, 1, 0); + z.ni.set(0, 0, 1); + } + PointToPointConstraint.prototype = new Constraint(); + PointToPointConstraint.prototype.update = function() { + var bodyA = this.bodyA; + var bodyB = this.bodyB; + var x = this.equationX; + var y = this.equationY; + var z = this.equationZ; + bodyA.quaternion.vmult(this.pivotA, x.ri); + bodyB.quaternion.vmult(this.pivotB, x.rj); + y.ri.copy(x.ri); + y.rj.copy(x.rj); + z.ri.copy(x.ri); + z.rj.copy(x.rj); + }; + }, { + "../equations/ContactEquation": 20, + "../math/Vec3": 32, + "./Constraint": 14 + } ], + 19: [ function(_dereq_, module, exports) { + module.exports = ConeEquation; + var Vec3 = _dereq_("../math/Vec3"); + var Mat3 = _dereq_("../math/Mat3"); + var Equation = _dereq_("./Equation"); + var CMath = _dereq_("../math/CMath"); + function ConeEquation(bodyA, bodyB, options) { + options = options || {}; + var maxForce = "undefined" !== typeof options.maxForce ? options.maxForce : 1e6; + Equation.call(this, bodyA, bodyB, -maxForce, maxForce); + this.axisA = options.axisA ? options.axisA.clone() : new Vec3(1, 0, 0); + this.axisB = options.axisB ? options.axisB.clone() : new Vec3(0, 1, 0); + this.angle = "undefined" !== typeof options.angle ? options.angle : 0; + } + ConeEquation.prototype = new Equation(); + ConeEquation.prototype.constructor = ConeEquation; + var tmpVec1 = new Vec3(); + var tmpVec2 = new Vec3(); + ConeEquation.prototype.computeB = function(h) { + var a = this.a, b = this.b, ni = this.axisA, nj = this.axisB, nixnj = tmpVec1, njxni = tmpVec2, GA = this.jacobianElementA, GB = this.jacobianElementB; + ni.cross(nj, nixnj); + nj.cross(ni, njxni); + GA.rotational.copy(njxni); + GB.rotational.copy(nixnj); + var g = CMath.cos(this.angle) - ni.dot(nj), GW = this.computeGW(), GiMf = this.computeGiMf(); + var B = -g * a - GW * b - h * GiMf; + return B; + }; + }, { + "../math/CMath": 27, + "../math/Mat3": 29, + "../math/Vec3": 32, + "./Equation": 21 + } ], + 20: [ function(_dereq_, module, exports) { + module.exports = ContactEquation; + var Equation = _dereq_("./Equation"); + var Vec3 = _dereq_("../math/Vec3"); + var Mat3 = _dereq_("../math/Mat3"); + function ContactEquation(bodyA, bodyB, maxForce) { + maxForce = "undefined" !== typeof maxForce ? maxForce : 1e6; + Equation.call(this, bodyA, bodyB, 0, maxForce); + this.si = null; + this.sj = null; + this.restitution = 0; + this.ri = new Vec3(); + this.rj = new Vec3(); + this.ni = new Vec3(); + } + ContactEquation.prototype = new Equation(); + ContactEquation.prototype.constructor = ContactEquation; + var ContactEquation_computeB_temp1 = new Vec3(); + var ContactEquation_computeB_temp2 = new Vec3(); + var ContactEquation_computeB_temp3 = new Vec3(); + ContactEquation.prototype.computeB = function(h) { + var a = this.a, b = this.b, bi = this.bi, bj = this.bj, ri = this.ri, rj = this.rj, rixn = ContactEquation_computeB_temp1, rjxn = ContactEquation_computeB_temp2, vi = bi.velocity, wi = bi.angularVelocity, fi = bi.force, taui = bi.torque, vj = bj.velocity, wj = bj.angularVelocity, fj = bj.force, tauj = bj.torque, penetrationVec = ContactEquation_computeB_temp3, GA = this.jacobianElementA, GB = this.jacobianElementB, n = this.ni; + ri.cross(n, rixn); + rj.cross(n, rjxn); + n.negate(GA.spatial); + rixn.negate(GA.rotational); + GB.spatial.copy(n); + GB.rotational.copy(rjxn); + penetrationVec.copy(bj.position); + penetrationVec.vadd(rj, penetrationVec); + penetrationVec.vsub(bi.position, penetrationVec); + penetrationVec.vsub(ri, penetrationVec); + var g = n.dot(penetrationVec); + var ePlusOne = this.restitution + 1; + var GW = ePlusOne * vj.dot(n) - ePlusOne * vi.dot(n) + wj.dot(rjxn) - wi.dot(rixn); + var GiMf = this.computeGiMf(); + var B = -g * a - GW * b - h * GiMf; + return B; + }; + var ContactEquation_getImpactVelocityAlongNormal_vi = new Vec3(); + var ContactEquation_getImpactVelocityAlongNormal_vj = new Vec3(); + var ContactEquation_getImpactVelocityAlongNormal_xi = new Vec3(); + var ContactEquation_getImpactVelocityAlongNormal_xj = new Vec3(); + var ContactEquation_getImpactVelocityAlongNormal_relVel = new Vec3(); + ContactEquation.prototype.getImpactVelocityAlongNormal = function() { + var vi = ContactEquation_getImpactVelocityAlongNormal_vi; + var vj = ContactEquation_getImpactVelocityAlongNormal_vj; + var xi = ContactEquation_getImpactVelocityAlongNormal_xi; + var xj = ContactEquation_getImpactVelocityAlongNormal_xj; + var relVel = ContactEquation_getImpactVelocityAlongNormal_relVel; + this.bi.position.vadd(this.ri, xi); + this.bj.position.vadd(this.rj, xj); + this.bi.getVelocityAtWorldPoint(xi, vi); + this.bj.getVelocityAtWorldPoint(xj, vj); + vi.vsub(vj, relVel); + return this.ni.dot(relVel); + }; + }, { + "../math/Mat3": 29, + "../math/Vec3": 32, + "./Equation": 21 + } ], + 21: [ function(_dereq_, module, exports) { + module.exports = Equation; + var JacobianElement = _dereq_("../math/JacobianElement"), Vec3 = _dereq_("../math/Vec3"); + function Equation(bi, bj, minForce, maxForce) { + this.id = Equation.id++; + this.minForce = "undefined" === typeof minForce ? -1e6 : minForce; + this.maxForce = "undefined" === typeof maxForce ? 1e6 : maxForce; + this.bi = bi; + this.bj = bj; + this.a = 0; + this.b = 0; + this.eps = 0; + this.jacobianElementA = new JacobianElement(); + this.jacobianElementB = new JacobianElement(); + this.enabled = true; + this.multiplier = 0; + this.setSpookParams(1e7, 4, 1 / 60); + } + Equation.prototype.constructor = Equation; + Equation.id = 0; + Equation.prototype.setSpookParams = function(stiffness, relaxation, timeStep) { + var d = relaxation, k = stiffness, h = timeStep; + this.a = 4 / (h * (1 + 4 * d)); + this.b = 4 * d / (1 + 4 * d); + this.eps = 4 / (h * h * k * (1 + 4 * d)); + }; + Equation.prototype.computeB = function(a, b, h) { + var GW = this.computeGW(), Gq = this.computeGq(), GiMf = this.computeGiMf(); + return -Gq * a - GW * b - GiMf * h; + }; + Equation.prototype.computeGq = function() { + var GA = this.jacobianElementA, GB = this.jacobianElementB, bi = this.bi, bj = this.bj, xi = bi.position, xj = bj.position; + return GA.spatial.dot(xi) + GB.spatial.dot(xj); + }; + var zero = new Vec3(); + Equation.prototype.computeGW = function() { + var GA = this.jacobianElementA, GB = this.jacobianElementB, bi = this.bi, bj = this.bj, vi = bi.velocity, vj = bj.velocity, wi = bi.angularVelocity, wj = bj.angularVelocity; + return GA.multiplyVectors(vi, wi) + GB.multiplyVectors(vj, wj); + }; + Equation.prototype.computeGWlambda = function() { + var GA = this.jacobianElementA, GB = this.jacobianElementB, bi = this.bi, bj = this.bj, vi = bi.vlambda, vj = bj.vlambda, wi = bi.wlambda, wj = bj.wlambda; + return GA.multiplyVectors(vi, wi) + GB.multiplyVectors(vj, wj); + }; + var iMfi = new Vec3(), iMfj = new Vec3(), invIi_vmult_taui = new Vec3(), invIj_vmult_tauj = new Vec3(); + Equation.prototype.computeGiMf = function() { + var GA = this.jacobianElementA, GB = this.jacobianElementB, bi = this.bi, bj = this.bj, fi = bi.force, ti = bi.torque, fj = bj.force, tj = bj.torque, invMassi = bi.invMassSolve, invMassj = bj.invMassSolve; + fi.scale(invMassi, iMfi); + fj.scale(invMassj, iMfj); + bi.invInertiaWorldSolve.vmult(ti, invIi_vmult_taui); + bj.invInertiaWorldSolve.vmult(tj, invIj_vmult_tauj); + return GA.multiplyVectors(iMfi, invIi_vmult_taui) + GB.multiplyVectors(iMfj, invIj_vmult_tauj); + }; + var tmp = new Vec3(); + Equation.prototype.computeGiMGt = function() { + var GA = this.jacobianElementA, GB = this.jacobianElementB, bi = this.bi, bj = this.bj, invMassi = bi.invMassSolve, invMassj = bj.invMassSolve, invIi = bi.invInertiaWorldSolve, invIj = bj.invInertiaWorldSolve, result = invMassi + invMassj; + invIi.vmult(GA.rotational, tmp); + result += tmp.dot(GA.rotational); + invIj.vmult(GB.rotational, tmp); + result += tmp.dot(GB.rotational); + return result; + }; + var addToWlambda_temp = new Vec3(), addToWlambda_Gi = new Vec3(), addToWlambda_Gj = new Vec3(), addToWlambda_ri = new Vec3(), addToWlambda_rj = new Vec3(), addToWlambda_Mdiag = new Vec3(); + Equation.prototype.addToWlambda = function(deltalambda) { + var GA = this.jacobianElementA, GB = this.jacobianElementB, bi = this.bi, bj = this.bj, temp = addToWlambda_temp; + bi.vlambda.addScaledVector(bi.invMassSolve * deltalambda, GA.spatial, bi.vlambda); + bj.vlambda.addScaledVector(bj.invMassSolve * deltalambda, GB.spatial, bj.vlambda); + bi.invInertiaWorldSolve.vmult(GA.rotational, temp); + bi.wlambda.addScaledVector(deltalambda, temp, bi.wlambda); + bj.invInertiaWorldSolve.vmult(GB.rotational, temp); + bj.wlambda.addScaledVector(deltalambda, temp, bj.wlambda); + }; + Equation.prototype.computeC = function() { + return this.computeGiMGt() + this.eps; + }; + }, { + "../math/JacobianElement": 28, + "../math/Vec3": 32 + } ], + 22: [ function(_dereq_, module, exports) { + module.exports = FrictionEquation; + var Equation = _dereq_("./Equation"); + var Vec3 = _dereq_("../math/Vec3"); + var Mat3 = _dereq_("../math/Mat3"); + function FrictionEquation(bodyA, bodyB, slipForce) { + Equation.call(this, bodyA, bodyB, -slipForce, slipForce); + this.ri = new Vec3(); + this.rj = new Vec3(); + this.t = new Vec3(); + } + FrictionEquation.prototype = new Equation(); + FrictionEquation.prototype.constructor = FrictionEquation; + var FrictionEquation_computeB_temp1 = new Vec3(); + var FrictionEquation_computeB_temp2 = new Vec3(); + FrictionEquation.prototype.computeB = function(h) { + var a = this.a, b = this.b, bi = this.bi, bj = this.bj, ri = this.ri, rj = this.rj, rixt = FrictionEquation_computeB_temp1, rjxt = FrictionEquation_computeB_temp2, t = this.t; + ri.cross(t, rixt); + rj.cross(t, rjxt); + var GA = this.jacobianElementA, GB = this.jacobianElementB; + t.negate(GA.spatial); + rixt.negate(GA.rotational); + GB.spatial.copy(t); + GB.rotational.copy(rjxt); + var GW = this.computeGW(); + var GiMf = this.computeGiMf(); + var B = -GW * b - h * GiMf; + return B; + }; + }, { + "../math/Mat3": 29, + "../math/Vec3": 32, + "./Equation": 21 + } ], + 23: [ function(_dereq_, module, exports) { + module.exports = RotationalEquation; + var Vec3 = _dereq_("../math/Vec3"); + var Mat3 = _dereq_("../math/Mat3"); + var Equation = _dereq_("./Equation"); + var CMath = _dereq_("../math/CMath"); + function RotationalEquation(bodyA, bodyB, options) { + options = options || {}; + var maxForce = "undefined" !== typeof options.maxForce ? options.maxForce : 1e6; + Equation.call(this, bodyA, bodyB, -maxForce, maxForce); + this.axisA = options.axisA ? options.axisA.clone() : new Vec3(1, 0, 0); + this.axisB = options.axisB ? options.axisB.clone() : new Vec3(0, 1, 0); + this.maxAngle = Math.PI / 2; + } + RotationalEquation.prototype = new Equation(); + RotationalEquation.prototype.constructor = RotationalEquation; + var tmpVec1 = new Vec3(); + var tmpVec2 = new Vec3(); + RotationalEquation.prototype.computeB = function(h) { + var a = this.a, b = this.b, ni = this.axisA, nj = this.axisB, nixnj = tmpVec1, njxni = tmpVec2, GA = this.jacobianElementA, GB = this.jacobianElementB; + ni.cross(nj, nixnj); + nj.cross(ni, njxni); + GA.rotational.copy(njxni); + GB.rotational.copy(nixnj); + var g = CMath.cos(this.maxAngle) - ni.dot(nj), GW = this.computeGW(), GiMf = this.computeGiMf(); + var B = -g * a - GW * b - h * GiMf; + return B; + }; + }, { + "../math/CMath": 27, + "../math/Mat3": 29, + "../math/Vec3": 32, + "./Equation": 21 + } ], + 24: [ function(_dereq_, module, exports) { + module.exports = RotationalMotorEquation; + var Vec3 = _dereq_("../math/Vec3"); + var Mat3 = _dereq_("../math/Mat3"); + var Equation = _dereq_("./Equation"); + function RotationalMotorEquation(bodyA, bodyB, maxForce) { + maxForce = "undefined" !== typeof maxForce ? maxForce : 1e6; + Equation.call(this, bodyA, bodyB, -maxForce, maxForce); + this.axisA = new Vec3(); + this.axisB = new Vec3(); + this.targetVelocity = 0; + } + RotationalMotorEquation.prototype = new Equation(); + RotationalMotorEquation.prototype.constructor = RotationalMotorEquation; + RotationalMotorEquation.prototype.computeB = function(h) { + var a = this.a, b = this.b, bi = this.bi, bj = this.bj, axisA = this.axisA, axisB = this.axisB, GA = this.jacobianElementA, GB = this.jacobianElementB; + GA.rotational.copy(axisA); + axisB.negate(GB.rotational); + var GW = this.computeGW() - this.targetVelocity, GiMf = this.computeGiMf(); + var B = -GW * b - h * GiMf; + return B; + }; + }, { + "../math/Mat3": 29, + "../math/Vec3": 32, + "./Equation": 21 + } ], + 25: [ function(_dereq_, module, exports) { + var Utils = _dereq_("../utils/Utils"); + module.exports = ContactMaterial; + function ContactMaterial(m1, m2, options) { + options = Utils.defaults(options, { + friction: .3, + restitution: .3, + contactEquationStiffness: 1e7, + contactEquationRelaxation: 3, + frictionEquationStiffness: 1e7, + frictionEquationRelaxation: 3 + }); + this.id = ContactMaterial.idCounter++; + this.materials = [ m1, m2 ]; + this.friction = options.friction; + this.restitution = options.restitution; + this.contactEquationStiffness = options.contactEquationStiffness; + this.contactEquationRelaxation = options.contactEquationRelaxation; + this.frictionEquationStiffness = options.frictionEquationStiffness; + this.frictionEquationRelaxation = options.frictionEquationRelaxation; + } + ContactMaterial.idCounter = 0; + }, { + "../utils/Utils": 55 + } ], + 26: [ function(_dereq_, module, exports) { + module.exports = Material; + function Material(options) { + var name = ""; + options = options || {}; + if ("string" === typeof options) { + name = options; + options = {}; + } else "object" === typeof options && (name = ""); + this.name = name; + this.id = Material.idCounter++; + this.friction = "undefined" !== typeof options.friction ? options.friction : -1; + this.restitution = "undefined" !== typeof options.restitution ? options.restitution : -1; + } + Material.idCounter = 0; + }, {} ], + 27: [ function(_dereq_, module, exports) { + var rad2ang = 180 / Math.PI; + function radian2angle(rad) { + return rad * rad2ang; + } + var sinArr = {}; + function calculateSinByDigit(digit) { + if (sinArr.digit == digit) return; + var step = 1 / Math.pow(10, digit); + for (var i = 0; i <= 90; i += step) sinArr[i.toFixed(digit)] = Math.sin(i / rad2ang); + sinArr.digit = digit; + } + function sin360(angle, digit) { + if (angle <= 90) return sinArr[angle.toFixed(digit)]; + if (angle <= 180) { + angle = 180 - angle; + return sinArr[angle.toFixed(digit)]; + } + if (angle <= 270) { + angle -= 180; + return -sinArr[angle.toFixed(digit)]; + } + angle = 360 - angle; + return -sinArr[angle.toFixed(digit)]; + } + function sin(rad) { + var angle = radian2angle(rad) % 360; + angle < 0 && (angle += 360); + return sin360(angle, CMath._digit); + } + function cos(rad) { + var angle = (radian2angle(rad) + 90) % 360; + angle < 0 && (angle += 360); + return sin360(angle, CMath._digit); + } + function sinNative(rad) { + return Math.sin(rad).toFixed(CMath.digit); + } + function cosNative(rad) { + return Math.cos(rad).toFixed(CMath.digit); + } + var CMath = { + sin: Math.sin, + cos: Math.cos, + atan2: Math.atan2 + }; + CMath._sin = sin; + CMath._cos = cos; + CMath._sinArr = sinArr; + CMath._sin360 = sin360; + CMath._sinNative = sinNative; + CMath._cosNative = cosNative; + CMath._radian2angle = radian2angle; + CMath._calculateSinByDigit = calculateSinByDigit; + CMath._digit = 1; + Object.defineProperty(CMath, "digit", { + get: function get() { + return this._digit; + }, + set: function set(v) { + this._digit = v; + 1 == this._mode && calculateSinByDigit(v); + } + }); + CMath._mode = 0; + Object.defineProperty(CMath, "mode", { + get: function get() { + return this._mode; + }, + set: function set(v) { + if (this._mode != v) { + this._mode = v; + if (0 == v) { + CMath.sin = Math.sin; + CMath.cos = Math.cos; + } else if (1 == v) { + CMath.digit = CMath._digit; + CMath.sin = sin; + CMath.cos = cos; + } else if (2 == v) { + CMath.sin = sinNative; + CMath.cos = cosNative; + } + } + } + }); + module.exports = CMath; + }, {} ], + 28: [ function(_dereq_, module, exports) { + module.exports = JacobianElement; + var Vec3 = _dereq_("./Vec3"); + function JacobianElement() { + this.spatial = new Vec3(); + this.rotational = new Vec3(); + } + JacobianElement.prototype.multiplyElement = function(element) { + return element.spatial.dot(this.spatial) + element.rotational.dot(this.rotational); + }; + JacobianElement.prototype.multiplyVectors = function(spatial, rotational) { + return spatial.dot(this.spatial) + rotational.dot(this.rotational); + }; + }, { + "./Vec3": 32 + } ], + 29: [ function(_dereq_, module, exports) { + module.exports = Mat3; + var Vec3 = _dereq_("./Vec3"); + function Mat3(elements) { + this.elements = elements || [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; + } + Mat3.prototype.identity = function() { + var e = this.elements; + e[0] = 1; + e[1] = 0; + e[2] = 0; + e[3] = 0; + e[4] = 1; + e[5] = 0; + e[6] = 0; + e[7] = 0; + e[8] = 1; + }; + Mat3.prototype.setZero = function() { + var e = this.elements; + e[0] = 0; + e[1] = 0; + e[2] = 0; + e[3] = 0; + e[4] = 0; + e[5] = 0; + e[6] = 0; + e[7] = 0; + e[8] = 0; + }; + Mat3.prototype.setTrace = function(vec3) { + var e = this.elements; + e[0] = vec3.x; + e[4] = vec3.y; + e[8] = vec3.z; + }; + Mat3.prototype.getTrace = function(target) { + var target = target || new Vec3(); + var e = this.elements; + target.x = e[0]; + target.y = e[4]; + target.z = e[8]; + }; + Mat3.prototype.vmult = function(v, target) { + target = target || new Vec3(); + var e = this.elements, x = v.x, y = v.y, z = v.z; + target.x = e[0] * x + e[1] * y + e[2] * z; + target.y = e[3] * x + e[4] * y + e[5] * z; + target.z = e[6] * x + e[7] * y + e[8] * z; + return target; + }; + Mat3.prototype.smult = function(s) { + for (var i = 0; i < this.elements.length; i++) this.elements[i] *= s; + }; + Mat3.prototype.mmult = function(m, target) { + var r = target || new Mat3(); + for (var i = 0; i < 3; i++) for (var j = 0; j < 3; j++) { + var sum = 0; + for (var k = 0; k < 3; k++) sum += m.elements[i + 3 * k] * this.elements[k + 3 * j]; + r.elements[i + 3 * j] = sum; + } + return r; + }; + Mat3.prototype.scale = function(v, target) { + target = target || new Mat3(); + var e = this.elements, t = target.elements; + for (var i = 0; 3 !== i; i++) { + t[3 * i + 0] = v.x * e[3 * i + 0]; + t[3 * i + 1] = v.y * e[3 * i + 1]; + t[3 * i + 2] = v.z * e[3 * i + 2]; + } + return target; + }; + Mat3.prototype.solve = function(b, target) { + target = target || new Vec3(); + var nr = 3; + var nc = 4; + var eqns = []; + for (var i = 0; i < nr * nc; i++) eqns.push(0); + var i, j; + for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) eqns[i + nc * j] = this.elements[i + 3 * j]; + eqns[3] = b.x; + eqns[7] = b.y; + eqns[11] = b.z; + var n = 3, k = n, np; + var kp = 4; + var p, els; + do { + i = k - n; + if (0 === eqns[i + nc * i]) for (j = i + 1; j < k; j++) if (0 !== eqns[i + nc * j]) { + np = kp; + do { + p = kp - np; + eqns[p + nc * i] += eqns[p + nc * j]; + } while (--np); + break; + } + if (0 !== eqns[i + nc * i]) for (j = i + 1; j < k; j++) { + var multiplier = eqns[i + nc * j] / eqns[i + nc * i]; + np = kp; + do { + p = kp - np; + eqns[p + nc * j] = p <= i ? 0 : eqns[p + nc * j] - eqns[p + nc * i] * multiplier; + } while (--np); + } + } while (--n); + target.z = eqns[2 * nc + 3] / eqns[2 * nc + 2]; + target.y = (eqns[1 * nc + 3] - eqns[1 * nc + 2] * target.z) / eqns[1 * nc + 1]; + target.x = (eqns[0 * nc + 3] - eqns[0 * nc + 2] * target.z - eqns[0 * nc + 1] * target.y) / eqns[0 * nc + 0]; + if (isNaN(target.x) || isNaN(target.y) || isNaN(target.z) || Infinity === target.x || Infinity === target.y || Infinity === target.z) throw "Could not solve equation! Got x=[" + target.toString() + "], b=[" + b.toString() + "], A=[" + this.toString() + "]"; + return target; + }; + Mat3.prototype.e = function(row, column, value) { + if (void 0 === value) return this.elements[column + 3 * row]; + this.elements[column + 3 * row] = value; + }; + Mat3.prototype.copy = function(source) { + for (var i = 0; i < source.elements.length; i++) this.elements[i] = source.elements[i]; + return this; + }; + Mat3.prototype.toString = function() { + var r = ""; + var sep = ","; + for (var i = 0; i < 9; i++) r += this.elements[i] + sep; + return r; + }; + Mat3.prototype.reverse = function(target) { + target = target || new Mat3(); + var nr = 3; + var nc = 6; + var eqns = []; + for (var i = 0; i < nr * nc; i++) eqns.push(0); + var i, j; + for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) eqns[i + nc * j] = this.elements[i + 3 * j]; + eqns[3] = 1; + eqns[9] = 0; + eqns[15] = 0; + eqns[4] = 0; + eqns[10] = 1; + eqns[16] = 0; + eqns[5] = 0; + eqns[11] = 0; + eqns[17] = 1; + var n = 3, k = n, np; + var kp = nc; + var p; + do { + i = k - n; + if (0 === eqns[i + nc * i]) for (j = i + 1; j < k; j++) if (0 !== eqns[i + nc * j]) { + np = kp; + do { + p = kp - np; + eqns[p + nc * i] += eqns[p + nc * j]; + } while (--np); + break; + } + if (0 !== eqns[i + nc * i]) for (j = i + 1; j < k; j++) { + var multiplier = eqns[i + nc * j] / eqns[i + nc * i]; + np = kp; + do { + p = kp - np; + eqns[p + nc * j] = p <= i ? 0 : eqns[p + nc * j] - eqns[p + nc * i] * multiplier; + } while (--np); + } + } while (--n); + i = 2; + do { + j = i - 1; + do { + var multiplier = eqns[i + nc * j] / eqns[i + nc * i]; + np = nc; + do { + p = nc - np; + eqns[p + nc * j] = eqns[p + nc * j] - eqns[p + nc * i] * multiplier; + } while (--np); + } while (j--); + } while (--i); + i = 2; + do { + var multiplier = 1 / eqns[i + nc * i]; + np = nc; + do { + p = nc - np; + eqns[p + nc * i] = eqns[p + nc * i] * multiplier; + } while (--np); + } while (i--); + i = 2; + do { + j = 2; + do { + p = eqns[nr + j + nc * i]; + if (isNaN(p) || Infinity === p) throw "Could not reverse! A=[" + this.toString() + "]"; + target.e(i, j, p); + } while (j--); + } while (i--); + return target; + }; + Mat3.prototype.setRotationFromQuaternion = function(q) { + var x = q.x, y = q.y, z = q.z, w = q.w, x2 = x + x, y2 = y + y, z2 = z + z, xx = x * x2, xy = x * y2, xz = x * z2, yy = y * y2, yz = y * z2, zz = z * z2, wx = w * x2, wy = w * y2, wz = w * z2, e = this.elements; + e[0] = 1 - (yy + zz); + e[1] = xy - wz; + e[2] = xz + wy; + e[3] = xy + wz; + e[4] = 1 - (xx + zz); + e[5] = yz - wx; + e[6] = xz - wy; + e[7] = yz + wx; + e[8] = 1 - (xx + yy); + return this; + }; + Mat3.prototype.transpose = function(target) { + target = target || new Mat3(); + var Mt = target.elements, M = this.elements; + for (var i = 0; 3 !== i; i++) for (var j = 0; 3 !== j; j++) Mt[3 * i + j] = M[3 * j + i]; + return target; + }; + }, { + "./Vec3": 32 + } ], + 30: [ function(_dereq_, module, exports) { + module.exports = Quaternion; + var Vec3 = _dereq_("./Vec3"); + var CMath = _dereq_("./CMath"); + function Quaternion(x, y, z, w) { + this.x = void 0 !== x ? x : 0; + this.y = void 0 !== y ? y : 0; + this.z = void 0 !== z ? z : 0; + this.w = void 0 !== w ? w : 1; + } + Quaternion.prototype.set = function(x, y, z, w) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + return this; + }; + Quaternion.prototype.toString = function() { + return this.x + "," + this.y + "," + this.z + "," + this.w; + }; + Quaternion.prototype.toArray = function() { + return [ this.x, this.y, this.z, this.w ]; + }; + Quaternion.prototype.setFromAxisAngle = function(axis, angle) { + var s = CMath.sin(.5 * angle); + this.x = axis.x * s; + this.y = axis.y * s; + this.z = axis.z * s; + this.w = CMath.cos(.5 * angle); + return this; + }; + Quaternion.prototype.toAxisAngle = function(targetAxis) { + targetAxis = targetAxis || new Vec3(); + this.normalize(); + var angle = 2 * Math.acos(this.w); + var s = Math.sqrt(1 - this.w * this.w); + if (s < .001) { + targetAxis.x = this.x; + targetAxis.y = this.y; + targetAxis.z = this.z; + } else { + targetAxis.x = this.x / s; + targetAxis.y = this.y / s; + targetAxis.z = this.z / s; + } + return [ targetAxis, angle ]; + }; + var sfv_t1 = new Vec3(), sfv_t2 = new Vec3(); + Quaternion.prototype.setFromVectors = function(u, v) { + if (u.isAntiparallelTo(v)) { + var t1 = sfv_t1; + var t2 = sfv_t2; + u.tangents(t1, t2); + this.setFromAxisAngle(t1, Math.PI); + } else { + var a = u.cross(v); + this.x = a.x; + this.y = a.y; + this.z = a.z; + this.w = Math.sqrt(Math.pow(u.norm(), 2) * Math.pow(v.norm(), 2)) + u.dot(v); + this.normalize(); + } + return this; + }; + var Quaternion_mult_va = new Vec3(); + var Quaternion_mult_vb = new Vec3(); + var Quaternion_mult_vaxvb = new Vec3(); + Quaternion.prototype.mult = function(q, target) { + target = target || new Quaternion(); + var ax = this.x, ay = this.y, az = this.z, aw = this.w, bx = q.x, by = q.y, bz = q.z, bw = q.w; + target.x = ax * bw + aw * bx + ay * bz - az * by; + target.y = ay * bw + aw * by + az * bx - ax * bz; + target.z = az * bw + aw * bz + ax * by - ay * bx; + target.w = aw * bw - ax * bx - ay * by - az * bz; + return target; + }; + Quaternion.prototype.inverse = function(target) { + var x = this.x, y = this.y, z = this.z, w = this.w; + target = target || new Quaternion(); + this.conjugate(target); + var inorm2 = 1 / (x * x + y * y + z * z + w * w); + target.x *= inorm2; + target.y *= inorm2; + target.z *= inorm2; + target.w *= inorm2; + return target; + }; + Quaternion.prototype.conjugate = function(target) { + target = target || new Quaternion(); + target.x = -this.x; + target.y = -this.y; + target.z = -this.z; + target.w = this.w; + return target; + }; + Quaternion.prototype.normalize = function() { + var l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); + if (0 === l) { + this.x = 0; + this.y = 0; + this.z = 0; + this.w = 0; + } else { + l = 1 / l; + this.x *= l; + this.y *= l; + this.z *= l; + this.w *= l; + } + return this; + }; + Quaternion.prototype.normalizeFast = function() { + var f = (3 - (this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w)) / 2; + if (0 === f) { + this.x = 0; + this.y = 0; + this.z = 0; + this.w = 0; + } else { + this.x *= f; + this.y *= f; + this.z *= f; + this.w *= f; + } + return this; + }; + Quaternion.prototype.vmult = function(v, target) { + target = target || new Vec3(); + var x = v.x, y = v.y, z = v.z; + var qx = this.x, qy = this.y, qz = this.z, qw = this.w; + var ix = qw * x + qy * z - qz * y, iy = qw * y + qz * x - qx * z, iz = qw * z + qx * y - qy * x, iw = -qx * x - qy * y - qz * z; + target.x = ix * qw + iw * -qx + iy * -qz - iz * -qy; + target.y = iy * qw + iw * -qy + iz * -qx - ix * -qz; + target.z = iz * qw + iw * -qz + ix * -qy - iy * -qx; + return target; + }; + Quaternion.prototype.copy = function(source) { + this.x = source.x; + this.y = source.y; + this.z = source.z; + this.w = source.w; + return this; + }; + Quaternion.prototype.toEuler = function(target, order) { + order = order || "YZX"; + var heading, attitude, bank; + var x = this.x, y = this.y, z = this.z, w = this.w; + switch (order) { + case "YZX": + var test = x * y + z * w; + if (test > .499) { + heading = 2 * CMath.atan2(x, w); + attitude = Math.PI / 2; + bank = 0; + } + if (test < -.499) { + heading = -2 * CMath.atan2(x, w); + attitude = -Math.PI / 2; + bank = 0; + } + if (isNaN(heading)) { + var sqx = x * x; + var sqy = y * y; + var sqz = z * z; + heading = CMath.atan2(2 * y * w - 2 * x * z, 1 - 2 * sqy - 2 * sqz); + attitude = Math.asin(2 * test); + bank = CMath.atan2(2 * x * w - 2 * y * z, 1 - 2 * sqx - 2 * sqz); + } + break; + + default: + throw new Error("Euler order " + order + " not supported yet."); + } + target.y = heading; + target.z = attitude; + target.x = bank; + }; + Quaternion.prototype.setFromEuler = function(x, y, z, order) { + order = order || "XYZ"; + var c1 = CMath.cos(x / 2); + var c2 = CMath.cos(y / 2); + var c3 = CMath.cos(z / 2); + var s1 = CMath.sin(x / 2); + var s2 = CMath.sin(y / 2); + var s3 = CMath.sin(z / 2); + if ("XYZ" === order) { + this.x = s1 * c2 * c3 + c1 * s2 * s3; + this.y = c1 * s2 * c3 - s1 * c2 * s3; + this.z = c1 * c2 * s3 + s1 * s2 * c3; + this.w = c1 * c2 * c3 - s1 * s2 * s3; + } else if ("YXZ" === order) { + this.x = s1 * c2 * c3 + c1 * s2 * s3; + this.y = c1 * s2 * c3 - s1 * c2 * s3; + this.z = c1 * c2 * s3 - s1 * s2 * c3; + this.w = c1 * c2 * c3 + s1 * s2 * s3; + } else if ("ZXY" === order) { + this.x = s1 * c2 * c3 - c1 * s2 * s3; + this.y = c1 * s2 * c3 + s1 * c2 * s3; + this.z = c1 * c2 * s3 + s1 * s2 * c3; + this.w = c1 * c2 * c3 - s1 * s2 * s3; + } else if ("ZYX" === order) { + this.x = s1 * c2 * c3 - c1 * s2 * s3; + this.y = c1 * s2 * c3 + s1 * c2 * s3; + this.z = c1 * c2 * s3 - s1 * s2 * c3; + this.w = c1 * c2 * c3 + s1 * s2 * s3; + } else if ("YZX" === order) { + this.x = s1 * c2 * c3 + c1 * s2 * s3; + this.y = c1 * s2 * c3 + s1 * c2 * s3; + this.z = c1 * c2 * s3 - s1 * s2 * c3; + this.w = c1 * c2 * c3 - s1 * s2 * s3; + } else if ("XZY" === order) { + this.x = s1 * c2 * c3 - c1 * s2 * s3; + this.y = c1 * s2 * c3 - s1 * c2 * s3; + this.z = c1 * c2 * s3 + s1 * s2 * c3; + this.w = c1 * c2 * c3 + s1 * s2 * s3; + } + return this; + }; + Quaternion.prototype.clone = function() { + return new Quaternion(this.x, this.y, this.z, this.w); + }; + Quaternion.prototype.slerp = function(toQuat, t, target) { + target = target || new Quaternion(); + var ax = this.x, ay = this.y, az = this.z, aw = this.w, bx = toQuat.x, by = toQuat.y, bz = toQuat.z, bw = toQuat.w; + var omega, cosom, sinom, scale0, scale1; + cosom = ax * bx + ay * by + az * bz + aw * bw; + if (cosom < 0) { + cosom = -cosom; + bx = -bx; + by = -by; + bz = -bz; + bw = -bw; + } + if (1 - cosom > 1e-6) { + omega = Math.acos(cosom); + sinom = CMath.sin(omega); + scale0 = CMath.sin((1 - t) * omega) / sinom; + scale1 = CMath.sin(t * omega) / sinom; + } else { + scale0 = 1 - t; + scale1 = t; + } + target.x = scale0 * ax + scale1 * bx; + target.y = scale0 * ay + scale1 * by; + target.z = scale0 * az + scale1 * bz; + target.w = scale0 * aw + scale1 * bw; + return target; + }; + Quaternion.prototype.integrate = function(angularVelocity, dt, angularFactor, target) { + target = target || new Quaternion(); + var ax = angularVelocity.x * angularFactor.x, ay = angularVelocity.y * angularFactor.y, az = angularVelocity.z * angularFactor.z, bx = this.x, by = this.y, bz = this.z, bw = this.w; + var half_dt = .5 * dt; + target.x += half_dt * (ax * bw + ay * bz - az * by); + target.y += half_dt * (ay * bw + az * bx - ax * bz); + target.z += half_dt * (az * bw + ax * by - ay * bx); + target.w += half_dt * (-ax * bx - ay * by - az * bz); + return target; + }; + }, { + "./CMath": 27, + "./Vec3": 32 + } ], + 31: [ function(_dereq_, module, exports) { + var Vec3 = _dereq_("./Vec3"); + var Quaternion = _dereq_("./Quaternion"); + module.exports = Transform; + function Transform(options) { + options = options || {}; + this.position = new Vec3(); + options.position && this.position.copy(options.position); + this.quaternion = new Quaternion(); + options.quaternion && this.quaternion.copy(options.quaternion); + } + var tmpQuat = new Quaternion(); + Transform.pointToLocalFrame = function(position, quaternion, worldPoint, result) { + var result = result || new Vec3(); + worldPoint.vsub(position, result); + quaternion.conjugate(tmpQuat); + tmpQuat.vmult(result, result); + return result; + }; + Transform.prototype.pointToLocal = function(worldPoint, result) { + return Transform.pointToLocalFrame(this.position, this.quaternion, worldPoint, result); + }; + Transform.pointToWorldFrame = function(position, quaternion, localPoint, result) { + var result = result || new Vec3(); + quaternion.vmult(localPoint, result); + result.vadd(position, result); + return result; + }; + Transform.prototype.pointToWorld = function(localPoint, result) { + return Transform.pointToWorldFrame(this.position, this.quaternion, localPoint, result); + }; + Transform.prototype.vectorToWorldFrame = function(localVector, result) { + var result = result || new Vec3(); + this.quaternion.vmult(localVector, result); + return result; + }; + Transform.vectorToWorldFrame = function(quaternion, localVector, result) { + quaternion.vmult(localVector, result); + return result; + }; + Transform.vectorToLocalFrame = function(position, quaternion, worldVector, result) { + var result = result || new Vec3(); + quaternion.w *= -1; + quaternion.vmult(worldVector, result); + quaternion.w *= -1; + return result; + }; + }, { + "./Quaternion": 30, + "./Vec3": 32 + } ], + 32: [ function(_dereq_, module, exports) { + module.exports = Vec3; + var Mat3 = _dereq_("./Mat3"); + function Vec3(x, y, z) { + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + } + Vec3.ZERO = new Vec3(0, 0, 0); + Vec3.UNIT_X = new Vec3(1, 0, 0); + Vec3.UNIT_Y = new Vec3(0, 1, 0); + Vec3.UNIT_Z = new Vec3(0, 0, 1); + Vec3.prototype.cross = function(v, target) { + var vx = v.x, vy = v.y, vz = v.z, x = this.x, y = this.y, z = this.z; + target = target || new Vec3(); + target.x = y * vz - z * vy; + target.y = z * vx - x * vz; + target.z = x * vy - y * vx; + return target; + }; + Vec3.prototype.set = function(x, y, z) { + this.x = x; + this.y = y; + this.z = z; + return this; + }; + Vec3.prototype.setZero = function() { + this.x = this.y = this.z = 0; + }; + Vec3.prototype.vadd = function(v, target) { + if (!target) return new Vec3(this.x + v.x, this.y + v.y, this.z + v.z); + target.x = v.x + this.x; + target.y = v.y + this.y; + target.z = v.z + this.z; + }; + Vec3.prototype.vsub = function(v, target) { + if (!target) return new Vec3(this.x - v.x, this.y - v.y, this.z - v.z); + target.x = this.x - v.x; + target.y = this.y - v.y; + target.z = this.z - v.z; + }; + Vec3.prototype.crossmat = function() { + return new Mat3([ 0, -this.z, this.y, this.z, 0, -this.x, -this.y, this.x, 0 ]); + }; + Vec3.prototype.normalize = function() { + var x = this.x, y = this.y, z = this.z; + var n = Math.sqrt(x * x + y * y + z * z); + if (n > 0) { + var invN = 1 / n; + this.x *= invN; + this.y *= invN; + this.z *= invN; + } else { + this.x = 0; + this.y = 0; + this.z = 0; + } + return n; + }; + Vec3.prototype.unit = function(target) { + target = target || new Vec3(); + var x = this.x, y = this.y, z = this.z; + var ninv = Math.sqrt(x * x + y * y + z * z); + if (ninv > 0) { + ninv = 1 / ninv; + target.x = x * ninv; + target.y = y * ninv; + target.z = z * ninv; + } else { + target.x = 1; + target.y = 0; + target.z = 0; + } + return target; + }; + Vec3.prototype.norm = function() { + var x = this.x, y = this.y, z = this.z; + return Math.sqrt(x * x + y * y + z * z); + }; + Vec3.prototype.length = Vec3.prototype.norm; + Vec3.prototype.norm2 = function() { + return this.dot(this); + }; + Vec3.prototype.lengthSquared = Vec3.prototype.norm2; + Vec3.prototype.distanceTo = function(p) { + var x = this.x, y = this.y, z = this.z; + var px = p.x, py = p.y, pz = p.z; + return Math.sqrt((px - x) * (px - x) + (py - y) * (py - y) + (pz - z) * (pz - z)); + }; + Vec3.prototype.distanceSquared = function(p) { + var x = this.x, y = this.y, z = this.z; + var px = p.x, py = p.y, pz = p.z; + return (px - x) * (px - x) + (py - y) * (py - y) + (pz - z) * (pz - z); + }; + Vec3.prototype.mult = function(scalar, target) { + target = target || new Vec3(); + var x = this.x, y = this.y, z = this.z; + target.x = scalar * x; + target.y = scalar * y; + target.z = scalar * z; + return target; + }; + Vec3.prototype.vmul = function(vector, target) { + target = target || new Vec3(); + target.x = vector.x * this.x; + target.y = vector.y * this.y; + target.z = vector.z * this.z; + return target; + }; + Vec3.prototype.scale = Vec3.prototype.mult; + Vec3.prototype.addScaledVector = function(scalar, vector, target) { + target = target || new Vec3(); + target.x = this.x + scalar * vector.x; + target.y = this.y + scalar * vector.y; + target.z = this.z + scalar * vector.z; + return target; + }; + Vec3.prototype.dot = function(v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + }; + Vec3.prototype.isZero = function() { + return 0 === this.x && 0 === this.y && 0 === this.z; + }; + Vec3.prototype.negate = function(target) { + target = target || new Vec3(); + target.x = -this.x; + target.y = -this.y; + target.z = -this.z; + return target; + }; + var Vec3_tangents_n = new Vec3(); + var Vec3_tangents_randVec = new Vec3(); + Vec3.prototype.tangents = function(t1, t2) { + var norm = this.norm(); + if (norm > 0) { + var n = Vec3_tangents_n; + var inorm = 1 / norm; + n.set(this.x * inorm, this.y * inorm, this.z * inorm); + var randVec = Vec3_tangents_randVec; + if (Math.abs(n.x) < .9) { + randVec.set(1, 0, 0); + n.cross(randVec, t1); + } else { + randVec.set(0, 1, 0); + n.cross(randVec, t1); + } + n.cross(t1, t2); + } else { + t1.set(1, 0, 0); + t2.set(0, 1, 0); + } + }; + Vec3.prototype.toString = function() { + return this.x + "," + this.y + "," + this.z; + }; + Vec3.prototype.toArray = function() { + return [ this.x, this.y, this.z ]; + }; + Vec3.prototype.copy = function(source) { + this.x = source.x; + this.y = source.y; + this.z = source.z; + return this; + }; + Vec3.prototype.lerp = function(v, t, target) { + var x = this.x, y = this.y, z = this.z; + target.x = x + (v.x - x) * t; + target.y = y + (v.y - y) * t; + target.z = z + (v.z - z) * t; + }; + Vec3.prototype.almostEquals = function(v, precision) { + void 0 === precision && (precision = 1e-6); + if (Math.abs(this.x - v.x) > precision || Math.abs(this.y - v.y) > precision || Math.abs(this.z - v.z) > precision) return false; + return true; + }; + Vec3.prototype.almostZero = function(precision) { + void 0 === precision && (precision = 1e-6); + if (Math.abs(this.x) > precision || Math.abs(this.y) > precision || Math.abs(this.z) > precision) return false; + return true; + }; + var antip_neg = new Vec3(); + Vec3.prototype.isAntiparallelTo = function(v, precision) { + this.negate(antip_neg); + return antip_neg.almostEquals(v, precision); + }; + Vec3.prototype.clone = function() { + return new Vec3(this.x, this.y, this.z); + }; + }, { + "./Mat3": 29 + } ], + 33: [ function(_dereq_, module, exports) { + module.exports = Body; + var EventTarget = _dereq_("../utils/EventTarget"); + var Shape = _dereq_("../shapes/Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Mat3 = _dereq_("../math/Mat3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Material = _dereq_("../material/Material"); + var AABB = _dereq_("../collision/AABB"); + var Box = _dereq_("../shapes/Box"); + var World = _dereq_("../world/World"); + function Body(options) { + options = options || {}; + EventTarget.apply(this); + this.id = Body.idCounter++; + this.world = null; + this.preStep = null; + this.postStep = null; + this.vlambda = new Vec3(); + this.collisionFilterGroup = "number" === typeof options.collisionFilterGroup ? options.collisionFilterGroup : 1; + this.collisionFilterMask = "number" === typeof options.collisionFilterMask ? options.collisionFilterMask : -1; + this.collisionResponse = true; + this.position = new Vec3(); + this.previousPosition = new Vec3(); + this.interpolatedPosition = new Vec3(); + this.initPosition = new Vec3(); + if (options.position) { + this.position.copy(options.position); + this.previousPosition.copy(options.position); + this.interpolatedPosition.copy(options.position); + this.initPosition.copy(options.position); + } + this.velocity = new Vec3(); + options.velocity && this.velocity.copy(options.velocity); + this.initVelocity = new Vec3(); + this.force = new Vec3(); + var mass = "number" === typeof options.mass ? options.mass : 0; + this.mass = mass; + this.invMass = mass > 0 ? 1 / mass : 0; + this.material = options.material || null; + this.linearDamping = "number" === typeof options.linearDamping ? options.linearDamping : .01; + this.type = mass <= 0 ? Body.STATIC : Body.DYNAMIC; + typeof options.type === typeof Body.STATIC && (this.type = options.type); + this.allowSleep = "undefined" === typeof options.allowSleep || options.allowSleep; + this.sleepState = 0; + this.sleepSpeedLimit = "undefined" !== typeof options.sleepSpeedLimit ? options.sleepSpeedLimit : .1; + this.sleepTimeLimit = "undefined" !== typeof options.sleepTimeLimit ? options.sleepTimeLimit : 1; + this.timeLastSleepy = 0; + this._wakeUpAfterNarrowphase = false; + this.torque = new Vec3(); + this.quaternion = new Quaternion(); + this.initQuaternion = new Quaternion(); + this.previousQuaternion = new Quaternion(); + this.interpolatedQuaternion = new Quaternion(); + if (options.quaternion) { + this.quaternion.copy(options.quaternion); + this.initQuaternion.copy(options.quaternion); + this.previousQuaternion.copy(options.quaternion); + this.interpolatedQuaternion.copy(options.quaternion); + } + this.angularVelocity = new Vec3(); + options.angularVelocity && this.angularVelocity.copy(options.angularVelocity); + this.initAngularVelocity = new Vec3(); + this.shapes = []; + this.shapeOffsets = []; + this.shapeOrientations = []; + this.inertia = new Vec3(); + this.invInertia = new Vec3(); + this.invInertiaWorld = new Mat3(); + this.invMassSolve = 0; + this.invInertiaSolve = new Vec3(); + this.invInertiaWorldSolve = new Mat3(); + this.fixedRotation = "undefined" !== typeof options.fixedRotation && options.fixedRotation; + this.useGravity = true; + this.angularDamping = "undefined" !== typeof options.angularDamping ? options.angularDamping : .01; + this.linearFactor = new Vec3(1, 1, 1); + options.linearFactor && this.linearFactor.copy(options.linearFactor); + this.angularFactor = new Vec3(1, 1, 1); + options.angularFactor && this.angularFactor.copy(options.angularFactor); + this.aabb = new AABB(); + this.aabbNeedsUpdate = true; + this.boundingRadius = 0; + this.wlambda = new Vec3(); + options.shape && this.addShape(options.shape); + this.hasTrigger = true; + this.updateMassProperties(); + } + Body.prototype = new EventTarget(); + Body.prototype.constructor = Body; + Body.COLLIDE_EVENT_NAME = "collide"; + Body.DYNAMIC = 1; + Body.STATIC = 2; + Body.KINEMATIC = 4; + Body.AWAKE = 0; + Body.SLEEPY = 1; + Body.SLEEPING = 2; + Body.idCounter = 0; + Body.wakeupEvent = { + type: "wakeup" + }; + Body.prototype.wakeUp = function() { + World.SLEEPING = false; + var s = this.sleepState; + this.sleepState = 0; + this._wakeUpAfterNarrowphase = false; + s === Body.SLEEPING && this.dispatchEvent(Body.wakeupEvent); + }; + Body.prototype.sleep = function() { + this.sleepState = Body.SLEEPING; + this.velocity.set(0, 0, 0); + this.angularVelocity.set(0, 0, 0); + this._wakeUpAfterNarrowphase = false; + }; + Body.sleepyEvent = { + type: "sleepy" + }; + Body.sleepEvent = { + type: "sleep" + }; + Body.prototype.sleepTick = function(time) { + if (this.allowSleep) { + var sleepState = this.sleepState; + var speedSquared = this.velocity.norm2() + this.angularVelocity.norm2(); + var speedLimitSquared = Math.pow(this.sleepSpeedLimit, 2); + if (sleepState === Body.AWAKE && speedSquared < speedLimitSquared) { + this.sleepState = Body.SLEEPY; + this.timeLastSleepy = time; + this.dispatchEvent(Body.sleepyEvent); + } else if (sleepState === Body.SLEEPY && speedSquared > speedLimitSquared) this.wakeUp(); else if (sleepState === Body.SLEEPY && time - this.timeLastSleepy > this.sleepTimeLimit) { + this.sleep(); + this.dispatchEvent(Body.sleepEvent); + } + } + }; + Body.prototype.updateSolveMassProperties = function() { + if (this.sleepState === Body.SLEEPING || this.type === Body.KINEMATIC) { + this.invMassSolve = 0; + this.invInertiaSolve.setZero(); + this.invInertiaWorldSolve.setZero(); + } else { + this.invMassSolve = this.invMass; + this.invInertiaSolve.copy(this.invInertia); + this.invInertiaWorldSolve.copy(this.invInertiaWorld); + } + }; + Body.prototype.pointToLocalFrame = function(worldPoint, result) { + var result = result || new Vec3(); + worldPoint.vsub(this.position, result); + this.quaternion.conjugate().vmult(result, result); + return result; + }; + Body.prototype.vectorToLocalFrame = function(worldVector, result) { + var result = result || new Vec3(); + this.quaternion.conjugate().vmult(worldVector, result); + return result; + }; + Body.prototype.pointToWorldFrame = function(localPoint, result) { + var result = result || new Vec3(); + this.quaternion.vmult(localPoint, result); + result.vadd(this.position, result); + return result; + }; + Body.prototype.vectorToWorldFrame = function(localVector, result) { + var result = result || new Vec3(); + this.quaternion.vmult(localVector, result); + return result; + }; + var tmpVec = new Vec3(); + var tmpQuat = new Quaternion(); + Body.prototype.addShape = function(shape, _offset, _orientation) { + var offset = new Vec3(); + var orientation = new Quaternion(); + _offset && offset.copy(_offset); + _orientation && orientation.copy(_orientation); + this.shapes.push(shape); + this.shapeOffsets.push(offset); + this.shapeOrientations.push(orientation); + this.aabbNeedsUpdate = true; + this.updateMassProperties(); + this.updateBoundingRadius(); + this.updateHasTrigger(); + World.idToShapeMap[shape.id] = shape; + shape.body = this; + return this; + }; + Body.prototype.removeShape = function(shape) { + var idx = this.shapes.indexOf(shape); + if (-1 === idx) return; + this.shapes.splice(idx, 1); + this.shapeOffsets.splice(idx, 1); + this.shapeOrientations.splice(idx, 1); + this.aabbNeedsUpdate = true; + this.updateMassProperties(); + this.updateBoundingRadius(); + this.updateHasTrigger(); + }; + Body.prototype.updateBoundingRadius = function() { + var shapes = this.shapes, shapeOffsets = this.shapeOffsets, N = shapes.length, radius = 0; + for (var i = 0; i !== N; i++) { + var shape = shapes[i]; + shape.updateBoundingSphereRadius(); + var offset = shapeOffsets[i].norm(), r = shape.boundingSphereRadius; + offset + r > radius && (radius = offset + r); + } + this.boundingRadius = radius; + }; + var computeAABB_shapeAABB = new AABB(); + Body.prototype.computeAABB = function() { + var shapes = this.shapes, shapeOffsets = this.shapeOffsets, shapeOrientations = this.shapeOrientations, N = shapes.length, offset = tmpVec, orientation = tmpQuat, bodyQuat = this.quaternion, aabb = this.aabb, shapeAABB = computeAABB_shapeAABB; + for (var i = 0; i !== N; i++) { + var shape = shapes[i]; + bodyQuat.vmult(shapeOffsets[i], offset); + offset.vadd(this.position, offset); + shapeOrientations[i].mult(bodyQuat, orientation); + shape.calculateWorldAABB(offset, orientation, shapeAABB.lowerBound, shapeAABB.upperBound); + 0 === i ? aabb.copy(shapeAABB) : aabb.extend(shapeAABB); + } + this.aabbNeedsUpdate = false; + }; + var uiw_m1 = new Mat3(), uiw_m2 = new Mat3(), uiw_m3 = new Mat3(); + Body.prototype.updateInertiaWorld = function(force) { + var I = this.invInertia; + if (I.x !== I.y || I.y !== I.z || force) { + var m1 = uiw_m1, m2 = uiw_m2, m3 = uiw_m3; + m1.setRotationFromQuaternion(this.quaternion); + m1.transpose(m2); + m1.scale(I, m1); + m1.mmult(m2, this.invInertiaWorld); + } else ; + }; + var Body_applyForce_r = new Vec3(); + var Body_applyForce_rotForce = new Vec3(); + Body.prototype.applyForce = function(force, relativePoint) { + if (this.type !== Body.DYNAMIC) return; + var rotForce = Body_applyForce_rotForce; + relativePoint.cross(force, rotForce); + this.force.vadd(force, this.force); + this.torque.vadd(rotForce, this.torque); + }; + var Body_applyLocalForce_worldForce = new Vec3(); + var Body_applyLocalForce_relativePointWorld = new Vec3(); + Body.prototype.applyLocalForce = function(localForce, localPoint) { + if (this.type !== Body.DYNAMIC) return; + var worldForce = Body_applyLocalForce_worldForce; + var relativePointWorld = Body_applyLocalForce_relativePointWorld; + this.vectorToWorldFrame(localForce, worldForce); + this.vectorToWorldFrame(localPoint, relativePointWorld); + this.applyForce(worldForce, relativePointWorld); + }; + var Body_applyImpulse_r = new Vec3(); + var Body_applyImpulse_velo = new Vec3(); + var Body_applyImpulse_rotVelo = new Vec3(); + Body.prototype.applyImpulse = function(impulse, relativePoint) { + if (this.type !== Body.DYNAMIC) return; + var r = relativePoint; + var velo = Body_applyImpulse_velo; + velo.copy(impulse); + velo.mult(this.invMass, velo); + this.velocity.vadd(velo, this.velocity); + var rotVelo = Body_applyImpulse_rotVelo; + r.cross(impulse, rotVelo); + this.invInertiaWorld.vmult(rotVelo, rotVelo); + this.angularVelocity.vadd(rotVelo, this.angularVelocity); + }; + var Body_applyLocalImpulse_worldImpulse = new Vec3(); + var Body_applyLocalImpulse_relativePoint = new Vec3(); + Body.prototype.applyLocalImpulse = function(localImpulse, localPoint) { + if (this.type !== Body.DYNAMIC) return; + var worldImpulse = Body_applyLocalImpulse_worldImpulse; + var relativePointWorld = Body_applyLocalImpulse_relativePoint; + this.vectorToWorldFrame(localImpulse, worldImpulse); + this.vectorToWorldFrame(localPoint, relativePointWorld); + this.applyImpulse(worldImpulse, relativePointWorld); + }; + var Body_updateMassProperties_halfExtents = new Vec3(); + Body.prototype.updateMassProperties = function() { + var halfExtents = Body_updateMassProperties_halfExtents; + this.invMass = this.mass > 0 ? 1 / this.mass : 0; + var I = this.inertia; + var fixed = this.fixedRotation; + this.computeAABB(); + halfExtents.set((this.aabb.upperBound.x - this.aabb.lowerBound.x) / 2, (this.aabb.upperBound.y - this.aabb.lowerBound.y) / 2, (this.aabb.upperBound.z - this.aabb.lowerBound.z) / 2); + Box.calculateInertia(halfExtents, this.mass, I); + this.invInertia.set(I.x > 0 && !fixed ? 1 / I.x : 0, I.y > 0 && !fixed ? 1 / I.y : 0, I.z > 0 && !fixed ? 1 / I.z : 0); + this.updateInertiaWorld(true); + }; + Body.prototype.getVelocityAtWorldPoint = function(worldPoint, result) { + var r = new Vec3(); + worldPoint.vsub(this.position, r); + this.angularVelocity.cross(r, result); + this.velocity.vadd(result, result); + return result; + }; + var torque = new Vec3(); + var invI_tau_dt = new Vec3(); + var w = new Quaternion(); + var wq = new Quaternion(); + Body.prototype.integrate = function(dt, quatNormalize, quatNormalizeFast) { + this.previousPosition.copy(this.position); + this.previousQuaternion.copy(this.quaternion); + if (!(this.type === Body.DYNAMIC || this.type === Body.KINEMATIC) || this.sleepState === Body.SLEEPING) return; + var velo = this.velocity, angularVelo = this.angularVelocity, pos = this.position, force = this.force, torque = this.torque, quat = this.quaternion, invMass = this.invMass, invInertia = this.invInertiaWorld, linearFactor = this.linearFactor; + var iMdt = invMass * dt; + velo.x += force.x * iMdt * linearFactor.x; + velo.y += force.y * iMdt * linearFactor.y; + velo.z += force.z * iMdt * linearFactor.z; + var e = invInertia.elements; + var angularFactor = this.angularFactor; + var tx = torque.x * angularFactor.x; + var ty = torque.y * angularFactor.y; + var tz = torque.z * angularFactor.z; + angularVelo.x += dt * (e[0] * tx + e[1] * ty + e[2] * tz); + angularVelo.y += dt * (e[3] * tx + e[4] * ty + e[5] * tz); + angularVelo.z += dt * (e[6] * tx + e[7] * ty + e[8] * tz); + pos.x += velo.x * dt; + pos.y += velo.y * dt; + pos.z += velo.z * dt; + quat.integrate(this.angularVelocity, dt, this.angularFactor, quat); + quatNormalize && (quatNormalizeFast ? quat.normalizeFast() : quat.normalize()); + this.aabbNeedsUpdate = true; + this.updateInertiaWorld(); + }; + Body.prototype.isSleeping = function() { + return this.sleepState === Body.SLEEPING; + }; + Body.prototype.isSleepy = function() { + return this.sleepState === Body.SLEEPY; + }; + Body.prototype.isAwake = function() { + return this.sleepState === Body.AWAKE; + }; + Body.prototype.updateHasTrigger = function() { + for (var i = this.shapes.length; i--; ) { + this.hasTrigger = !this.shapes[i].collisionResponse; + if (this.hasTrigger) break; + } + }; + }, { + "../collision/AABB": 3, + "../material/Material": 26, + "../math/Mat3": 29, + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../shapes/Box": 39, + "../shapes/Shape": 45, + "../utils/EventTarget": 51, + "../world/World": 58 + } ], + 34: [ function(_dereq_, module, exports) { + var Body = _dereq_("./Body"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var RaycastResult = _dereq_("../collision/RaycastResult"); + var Ray = _dereq_("../collision/Ray"); + var WheelInfo = _dereq_("../objects/WheelInfo"); + module.exports = RaycastVehicle; + function RaycastVehicle(options) { + this.chassisBody = options.chassisBody; + this.wheelInfos = []; + this.sliding = false; + this.world = null; + this.indexRightAxis = "undefined" !== typeof options.indexRightAxis ? options.indexRightAxis : 1; + this.indexForwardAxis = "undefined" !== typeof options.indexForwardAxis ? options.indexForwardAxis : 0; + this.indexUpAxis = "undefined" !== typeof options.indexUpAxis ? options.indexUpAxis : 2; + } + var tmpVec1 = new Vec3(); + var tmpVec2 = new Vec3(); + var tmpVec3 = new Vec3(); + var tmpVec4 = new Vec3(); + var tmpVec5 = new Vec3(); + var tmpVec6 = new Vec3(); + var tmpRay = new Ray(); + RaycastVehicle.prototype.addWheel = function(options) { + options = options || {}; + var info = new WheelInfo(options); + var index = this.wheelInfos.length; + this.wheelInfos.push(info); + return index; + }; + RaycastVehicle.prototype.setSteeringValue = function(value, wheelIndex) { + var wheel = this.wheelInfos[wheelIndex]; + wheel.steering = value; + }; + var torque = new Vec3(); + RaycastVehicle.prototype.applyEngineForce = function(value, wheelIndex) { + this.wheelInfos[wheelIndex].engineForce = value; + }; + RaycastVehicle.prototype.setBrake = function(brake, wheelIndex) { + this.wheelInfos[wheelIndex].brake = brake; + }; + RaycastVehicle.prototype.addToWorld = function(world) { + var constraints = this.constraints; + world.addBody(this.chassisBody); + var that = this; + this.preStepCallback = function() { + that.updateVehicle(world.dt); + }; + world.addEventListener("preStep", this.preStepCallback); + this.world = world; + }; + RaycastVehicle.prototype.getVehicleAxisWorld = function(axisIndex, result) { + result.set(0 === axisIndex ? 1 : 0, 1 === axisIndex ? 1 : 0, 2 === axisIndex ? 1 : 0); + this.chassisBody.vectorToWorldFrame(result, result); + }; + RaycastVehicle.prototype.updateVehicle = function(timeStep) { + var wheelInfos = this.wheelInfos; + var numWheels = wheelInfos.length; + var chassisBody = this.chassisBody; + for (var i = 0; i < numWheels; i++) this.updateWheelTransform(i); + this.currentVehicleSpeedKmHour = 3.6 * chassisBody.velocity.norm(); + var forwardWorld = new Vec3(); + this.getVehicleAxisWorld(this.indexForwardAxis, forwardWorld); + forwardWorld.dot(chassisBody.velocity) < 0 && (this.currentVehicleSpeedKmHour *= -1); + for (var i = 0; i < numWheels; i++) this.castRay(wheelInfos[i]); + this.updateSuspension(timeStep); + var impulse = new Vec3(); + var relpos = new Vec3(); + for (var i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + var suspensionForce = wheel.suspensionForce; + suspensionForce > wheel.maxSuspensionForce && (suspensionForce = wheel.maxSuspensionForce); + wheel.raycastResult.hitNormalWorld.scale(suspensionForce * timeStep, impulse); + wheel.raycastResult.hitPointWorld.vsub(chassisBody.position, relpos); + chassisBody.applyImpulse(impulse, relpos); + } + this.updateFriction(timeStep); + var hitNormalWorldScaledWithProj = new Vec3(); + var fwd = new Vec3(); + var vel = new Vec3(); + for (i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + chassisBody.getVelocityAtWorldPoint(wheel.chassisConnectionPointWorld, vel); + var m = 1; + switch (this.indexUpAxis) { + case 1: + m = -1; + } + if (wheel.isInContact) { + this.getVehicleAxisWorld(this.indexForwardAxis, fwd); + var proj = fwd.dot(wheel.raycastResult.hitNormalWorld); + wheel.raycastResult.hitNormalWorld.scale(proj, hitNormalWorldScaledWithProj); + fwd.vsub(hitNormalWorldScaledWithProj, fwd); + var proj2 = fwd.dot(vel); + wheel.deltaRotation = m * proj2 * timeStep / wheel.radius; + } + !wheel.sliding && wheel.isInContact || 0 === wheel.engineForce || !wheel.useCustomSlidingRotationalSpeed || (wheel.deltaRotation = (wheel.engineForce > 0 ? 1 : -1) * wheel.customSlidingRotationalSpeed * timeStep); + Math.abs(wheel.brake) > Math.abs(wheel.engineForce) && (wheel.deltaRotation = 0); + wheel.rotation += wheel.deltaRotation; + wheel.deltaRotation *= .99; + } + }; + RaycastVehicle.prototype.updateSuspension = function(deltaTime) { + var chassisBody = this.chassisBody; + var chassisMass = chassisBody.mass; + var wheelInfos = this.wheelInfos; + var numWheels = wheelInfos.length; + for (var w_it = 0; w_it < numWheels; w_it++) { + var wheel = wheelInfos[w_it]; + if (wheel.isInContact) { + var force; + var susp_length = wheel.suspensionRestLength; + var current_length = wheel.suspensionLength; + var length_diff = susp_length - current_length; + force = wheel.suspensionStiffness * length_diff * wheel.clippedInvContactDotSuspension; + var projected_rel_vel = wheel.suspensionRelativeVelocity; + var susp_damping; + susp_damping = projected_rel_vel < 0 ? wheel.dampingCompression : wheel.dampingRelaxation; + force -= susp_damping * projected_rel_vel; + wheel.suspensionForce = force * chassisMass; + wheel.suspensionForce < 0 && (wheel.suspensionForce = 0); + } else wheel.suspensionForce = 0; + } + }; + RaycastVehicle.prototype.removeFromWorld = function(world) { + var constraints = this.constraints; + world.remove(this.chassisBody); + world.removeEventListener("preStep", this.preStepCallback); + this.world = null; + }; + var castRay_rayvector = new Vec3(); + var castRay_target = new Vec3(); + RaycastVehicle.prototype.castRay = function(wheel) { + var rayvector = castRay_rayvector; + var target = castRay_target; + this.updateWheelTransformWorld(wheel); + var chassisBody = this.chassisBody; + var depth = -1; + var raylen = wheel.suspensionRestLength + wheel.radius; + wheel.directionWorld.scale(raylen, rayvector); + var source = wheel.chassisConnectionPointWorld; + source.vadd(rayvector, target); + var raycastResult = wheel.raycastResult; + var param = 0; + raycastResult.reset(); + var oldState = chassisBody.collisionResponse; + chassisBody.collisionResponse = false; + this.world.rayTest(source, target, raycastResult); + chassisBody.collisionResponse = oldState; + var object = raycastResult.body; + wheel.raycastResult.groundObject = 0; + if (object) { + depth = raycastResult.distance; + wheel.raycastResult.hitNormalWorld = raycastResult.hitNormalWorld; + wheel.isInContact = true; + var hitDistance = raycastResult.distance; + wheel.suspensionLength = hitDistance - wheel.radius; + var minSuspensionLength = wheel.suspensionRestLength - wheel.maxSuspensionTravel; + var maxSuspensionLength = wheel.suspensionRestLength + wheel.maxSuspensionTravel; + wheel.suspensionLength < minSuspensionLength && (wheel.suspensionLength = minSuspensionLength); + if (wheel.suspensionLength > maxSuspensionLength) { + wheel.suspensionLength = maxSuspensionLength; + wheel.raycastResult.reset(); + } + var denominator = wheel.raycastResult.hitNormalWorld.dot(wheel.directionWorld); + var chassis_velocity_at_contactPoint = new Vec3(); + chassisBody.getVelocityAtWorldPoint(wheel.raycastResult.hitPointWorld, chassis_velocity_at_contactPoint); + var projVel = wheel.raycastResult.hitNormalWorld.dot(chassis_velocity_at_contactPoint); + if (denominator >= -.1) { + wheel.suspensionRelativeVelocity = 0; + wheel.clippedInvContactDotSuspension = 10; + } else { + var inv = -1 / denominator; + wheel.suspensionRelativeVelocity = projVel * inv; + wheel.clippedInvContactDotSuspension = inv; + } + } else { + wheel.suspensionLength = wheel.suspensionRestLength + 0 * wheel.maxSuspensionTravel; + wheel.suspensionRelativeVelocity = 0; + wheel.directionWorld.scale(-1, wheel.raycastResult.hitNormalWorld); + wheel.clippedInvContactDotSuspension = 1; + } + return depth; + }; + RaycastVehicle.prototype.updateWheelTransformWorld = function(wheel) { + wheel.isInContact = false; + var chassisBody = this.chassisBody; + chassisBody.pointToWorldFrame(wheel.chassisConnectionPointLocal, wheel.chassisConnectionPointWorld); + chassisBody.vectorToWorldFrame(wheel.directionLocal, wheel.directionWorld); + chassisBody.vectorToWorldFrame(wheel.axleLocal, wheel.axleWorld); + }; + RaycastVehicle.prototype.updateWheelTransform = function(wheelIndex) { + var up = tmpVec4; + var right = tmpVec5; + var fwd = tmpVec6; + var wheel = this.wheelInfos[wheelIndex]; + this.updateWheelTransformWorld(wheel); + wheel.directionLocal.scale(-1, up); + right.copy(wheel.axleLocal); + up.cross(right, fwd); + fwd.normalize(); + right.normalize(); + var steering = wheel.steering; + var steeringOrn = new Quaternion(); + steeringOrn.setFromAxisAngle(up, steering); + var rotatingOrn = new Quaternion(); + rotatingOrn.setFromAxisAngle(right, wheel.rotation); + var q = wheel.worldTransform.quaternion; + this.chassisBody.quaternion.mult(steeringOrn, q); + q.mult(rotatingOrn, q); + q.normalize(); + var p = wheel.worldTransform.position; + p.copy(wheel.directionWorld); + p.scale(wheel.suspensionLength, p); + p.vadd(wheel.chassisConnectionPointWorld, p); + }; + var directions = [ new Vec3(1, 0, 0), new Vec3(0, 1, 0), new Vec3(0, 0, 1) ]; + RaycastVehicle.prototype.getWheelTransformWorld = function(wheelIndex) { + return this.wheelInfos[wheelIndex].worldTransform; + }; + var updateFriction_surfNormalWS_scaled_proj = new Vec3(); + var updateFriction_axle = []; + var updateFriction_forwardWS = []; + var sideFrictionStiffness2 = 1; + RaycastVehicle.prototype.updateFriction = function(timeStep) { + var surfNormalWS_scaled_proj = updateFriction_surfNormalWS_scaled_proj; + var wheelInfos = this.wheelInfos; + var numWheels = wheelInfos.length; + var chassisBody = this.chassisBody; + var forwardWS = updateFriction_forwardWS; + var axle = updateFriction_axle; + var numWheelsOnGround = 0; + for (var i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + var groundObject = wheel.raycastResult.body; + groundObject && numWheelsOnGround++; + wheel.sideImpulse = 0; + wheel.forwardImpulse = 0; + forwardWS[i] || (forwardWS[i] = new Vec3()); + axle[i] || (axle[i] = new Vec3()); + } + for (var i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + var groundObject = wheel.raycastResult.body; + if (groundObject) { + var axlei = axle[i]; + var wheelTrans = this.getWheelTransformWorld(i); + wheelTrans.vectorToWorldFrame(directions[this.indexRightAxis], axlei); + var surfNormalWS = wheel.raycastResult.hitNormalWorld; + var proj = axlei.dot(surfNormalWS); + surfNormalWS.scale(proj, surfNormalWS_scaled_proj); + axlei.vsub(surfNormalWS_scaled_proj, axlei); + axlei.normalize(); + surfNormalWS.cross(axlei, forwardWS[i]); + forwardWS[i].normalize(); + wheel.sideImpulse = resolveSingleBilateral(chassisBody, wheel.raycastResult.hitPointWorld, groundObject, wheel.raycastResult.hitPointWorld, axlei); + wheel.sideImpulse *= sideFrictionStiffness2; + } + } + var sideFactor = 1; + var fwdFactor = .5; + this.sliding = false; + for (var i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + var groundObject = wheel.raycastResult.body; + var rollingFriction = 0; + wheel.slipInfo = 1; + if (groundObject) { + var defaultRollingFrictionImpulse = 0; + var maxImpulse = wheel.brake ? wheel.brake : defaultRollingFrictionImpulse; + rollingFriction = calcRollingFriction(chassisBody, groundObject, wheel.raycastResult.hitPointWorld, forwardWS[i], maxImpulse); + rollingFriction += wheel.engineForce * timeStep; + var factor = maxImpulse / rollingFriction; + wheel.slipInfo *= factor; + } + wheel.forwardImpulse = 0; + wheel.skidInfo = 1; + if (groundObject) { + wheel.skidInfo = 1; + var maximp = wheel.suspensionForce * timeStep * wheel.frictionSlip; + var maximpSide = maximp; + var maximpSquared = maximp * maximpSide; + wheel.forwardImpulse = rollingFriction; + var x = wheel.forwardImpulse * fwdFactor; + var y = wheel.sideImpulse * sideFactor; + var impulseSquared = x * x + y * y; + wheel.sliding = false; + if (impulseSquared > maximpSquared) { + this.sliding = true; + wheel.sliding = true; + var factor = maximp / Math.sqrt(impulseSquared); + wheel.skidInfo *= factor; + } + } + } + if (this.sliding) for (var i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + if (0 !== wheel.sideImpulse && wheel.skidInfo < 1) { + wheel.forwardImpulse *= wheel.skidInfo; + wheel.sideImpulse *= wheel.skidInfo; + } + } + for (var i = 0; i < numWheels; i++) { + var wheel = wheelInfos[i]; + var rel_pos = new Vec3(); + wheel.raycastResult.hitPointWorld.vsub(chassisBody.position, rel_pos); + if (0 !== wheel.forwardImpulse) { + var impulse = new Vec3(); + forwardWS[i].scale(wheel.forwardImpulse, impulse); + chassisBody.applyImpulse(impulse, rel_pos); + } + if (0 !== wheel.sideImpulse) { + var groundObject = wheel.raycastResult.body; + var rel_pos2 = new Vec3(); + wheel.raycastResult.hitPointWorld.vsub(groundObject.position, rel_pos2); + var sideImp = new Vec3(); + axle[i].scale(wheel.sideImpulse, sideImp); + chassisBody.vectorToLocalFrame(rel_pos, rel_pos); + rel_pos["xyz"[this.indexUpAxis]] *= wheel.rollInfluence; + chassisBody.vectorToWorldFrame(rel_pos, rel_pos); + chassisBody.applyImpulse(sideImp, rel_pos); + sideImp.scale(-1, sideImp); + groundObject.applyImpulse(sideImp, rel_pos2); + } + } + }; + var calcRollingFriction_vel1 = new Vec3(); + var calcRollingFriction_vel2 = new Vec3(); + var calcRollingFriction_vel = new Vec3(); + function calcRollingFriction(body0, body1, frictionPosWorld, frictionDirectionWorld, maxImpulse) { + var j1 = 0; + var contactPosWorld = frictionPosWorld; + var vel1 = calcRollingFriction_vel1; + var vel2 = calcRollingFriction_vel2; + var vel = calcRollingFriction_vel; + body0.getVelocityAtWorldPoint(contactPosWorld, vel1); + body1.getVelocityAtWorldPoint(contactPosWorld, vel2); + vel1.vsub(vel2, vel); + var vrel = frictionDirectionWorld.dot(vel); + var denom0 = computeImpulseDenominator(body0, frictionPosWorld, frictionDirectionWorld); + var denom1 = computeImpulseDenominator(body1, frictionPosWorld, frictionDirectionWorld); + var relaxation = 1; + var jacDiagABInv = relaxation / (denom0 + denom1); + j1 = -vrel * jacDiagABInv; + maxImpulse < j1 && (j1 = maxImpulse); + j1 < -maxImpulse && (j1 = -maxImpulse); + return j1; + } + var computeImpulseDenominator_r0 = new Vec3(); + var computeImpulseDenominator_c0 = new Vec3(); + var computeImpulseDenominator_vec = new Vec3(); + var computeImpulseDenominator_m = new Vec3(); + function computeImpulseDenominator(body, pos, normal) { + var r0 = computeImpulseDenominator_r0; + var c0 = computeImpulseDenominator_c0; + var vec = computeImpulseDenominator_vec; + var m = computeImpulseDenominator_m; + pos.vsub(body.position, r0); + r0.cross(normal, c0); + body.invInertiaWorld.vmult(c0, m); + m.cross(r0, vec); + return body.invMass + normal.dot(vec); + } + var resolveSingleBilateral_vel1 = new Vec3(); + var resolveSingleBilateral_vel2 = new Vec3(); + var resolveSingleBilateral_vel = new Vec3(); + function resolveSingleBilateral(body1, pos1, body2, pos2, normal, impulse) { + var normalLenSqr = normal.norm2(); + if (normalLenSqr > 1.1) return 0; + var vel1 = resolveSingleBilateral_vel1; + var vel2 = resolveSingleBilateral_vel2; + var vel = resolveSingleBilateral_vel; + body1.getVelocityAtWorldPoint(pos1, vel1); + body2.getVelocityAtWorldPoint(pos2, vel2); + vel1.vsub(vel2, vel); + var rel_vel = normal.dot(vel); + var contactDamping = .2; + var massTerm = 1 / (body1.invMass + body2.invMass); + var impulse = -contactDamping * rel_vel * massTerm; + return impulse; + } + }, { + "../collision/Ray": 10, + "../collision/RaycastResult": 11, + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../objects/WheelInfo": 38, + "./Body": 33 + } ], + 35: [ function(_dereq_, module, exports) { + var Body = _dereq_("./Body"); + var Sphere = _dereq_("../shapes/Sphere"); + var Box = _dereq_("../shapes/Box"); + var Vec3 = _dereq_("../math/Vec3"); + var HingeConstraint = _dereq_("../constraints/HingeConstraint"); + var CMath = _dereq_("../math/CMath"); + module.exports = RigidVehicle; + function RigidVehicle(options) { + this.wheelBodies = []; + this.coordinateSystem = "undefined" === typeof options.coordinateSystem ? new Vec3(1, 2, 3) : options.coordinateSystem.clone(); + this.chassisBody = options.chassisBody; + if (!this.chassisBody) { + var chassisShape = new Box(new Vec3(5, 2, .5)); + this.chassisBody = new Body(1, chassisShape); + } + this.constraints = []; + this.wheelAxes = []; + this.wheelForces = []; + } + RigidVehicle.prototype.addWheel = function(options) { + options = options || {}; + var wheelBody = options.body; + wheelBody || (wheelBody = new Body(1, new Sphere(1.2))); + this.wheelBodies.push(wheelBody); + this.wheelForces.push(0); + var zero = new Vec3(); + var position = "undefined" !== typeof options.position ? options.position.clone() : new Vec3(); + var worldPosition = new Vec3(); + this.chassisBody.pointToWorldFrame(position, worldPosition); + wheelBody.position.set(worldPosition.x, worldPosition.y, worldPosition.z); + var axis = "undefined" !== typeof options.axis ? options.axis.clone() : new Vec3(0, 1, 0); + this.wheelAxes.push(axis); + var hingeConstraint = new HingeConstraint(this.chassisBody, wheelBody, { + pivotA: position, + axisA: axis, + pivotB: Vec3.ZERO, + axisB: axis, + collideConnected: false + }); + this.constraints.push(hingeConstraint); + return this.wheelBodies.length - 1; + }; + RigidVehicle.prototype.setSteeringValue = function(value, wheelIndex) { + var axis = this.wheelAxes[wheelIndex]; + var c = CMath.cos(value), s = CMath.sin(value), x = axis.x, y = axis.y; + this.constraints[wheelIndex].axisA.set(c * x - s * y, s * x + c * y, 0); + }; + RigidVehicle.prototype.setMotorSpeed = function(value, wheelIndex) { + var hingeConstraint = this.constraints[wheelIndex]; + hingeConstraint.enableMotor(); + hingeConstraint.motorTargetVelocity = value; + }; + RigidVehicle.prototype.disableMotor = function(wheelIndex) { + var hingeConstraint = this.constraints[wheelIndex]; + hingeConstraint.disableMotor(); + }; + var torque = new Vec3(); + RigidVehicle.prototype.setWheelForce = function(value, wheelIndex) { + this.wheelForces[wheelIndex] = value; + }; + RigidVehicle.prototype.applyWheelForce = function(value, wheelIndex) { + var axis = this.wheelAxes[wheelIndex]; + var wheelBody = this.wheelBodies[wheelIndex]; + var bodyTorque = wheelBody.torque; + axis.scale(value, torque); + wheelBody.vectorToWorldFrame(torque, torque); + bodyTorque.vadd(torque, bodyTorque); + }; + RigidVehicle.prototype.addToWorld = function(world) { + var constraints = this.constraints; + var bodies = this.wheelBodies.concat([ this.chassisBody ]); + for (var i = 0; i < bodies.length; i++) world.addBody(bodies[i]); + for (var i = 0; i < constraints.length; i++) world.addConstraint(constraints[i]); + world.addEventListener("preStep", this._update.bind(this)); + }; + RigidVehicle.prototype._update = function() { + var wheelForces = this.wheelForces; + for (var i = 0; i < wheelForces.length; i++) this.applyWheelForce(wheelForces[i], i); + }; + RigidVehicle.prototype.removeFromWorld = function(world) { + var constraints = this.constraints; + var bodies = this.wheelBodies.concat([ this.chassisBody ]); + for (var i = 0; i < bodies.length; i++) world.remove(bodies[i]); + for (var i = 0; i < constraints.length; i++) world.removeConstraint(constraints[i]); + }; + var worldAxis = new Vec3(); + RigidVehicle.prototype.getWheelSpeed = function(wheelIndex) { + var axis = this.wheelAxes[wheelIndex]; + var wheelBody = this.wheelBodies[wheelIndex]; + var w = wheelBody.angularVelocity; + this.chassisBody.vectorToWorldFrame(axis, worldAxis); + return w.dot(worldAxis); + }; + }, { + "../constraints/HingeConstraint": 16, + "../math/CMath": 27, + "../math/Vec3": 32, + "../shapes/Box": 39, + "../shapes/Sphere": 46, + "./Body": 33 + } ], + 36: [ function(_dereq_, module, exports) { + module.exports = SPHSystem; + var Shape = _dereq_("../shapes/Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Particle = _dereq_("../shapes/Particle"); + var Body = _dereq_("../objects/Body"); + var Material = _dereq_("../material/Material"); + function SPHSystem() { + this.particles = []; + this.density = 1; + this.smoothingRadius = 1; + this.speedOfSound = 1; + this.viscosity = .01; + this.eps = 1e-6; + this.pressures = []; + this.densities = []; + this.neighbors = []; + } + SPHSystem.prototype.add = function(particle) { + this.particles.push(particle); + this.neighbors.length < this.particles.length && this.neighbors.push([]); + }; + SPHSystem.prototype.remove = function(particle) { + var idx = this.particles.indexOf(particle); + if (-1 !== idx) { + this.particles.splice(idx, 1); + this.neighbors.length > this.particles.length && this.neighbors.pop(); + } + }; + var SPHSystem_getNeighbors_dist = new Vec3(); + SPHSystem.prototype.getNeighbors = function(particle, neighbors) { + var N = this.particles.length, id = particle.id, R2 = this.smoothingRadius * this.smoothingRadius, dist = SPHSystem_getNeighbors_dist; + for (var i = 0; i !== N; i++) { + var p = this.particles[i]; + p.position.vsub(particle.position, dist); + id !== p.id && dist.norm2() < R2 && neighbors.push(p); + } + }; + var SPHSystem_update_dist = new Vec3(), SPHSystem_update_a_pressure = new Vec3(), SPHSystem_update_a_visc = new Vec3(), SPHSystem_update_gradW = new Vec3(), SPHSystem_update_r_vec = new Vec3(), SPHSystem_update_u = new Vec3(); + SPHSystem.prototype.update = function() { + var N = this.particles.length, dist = SPHSystem_update_dist, cs = this.speedOfSound, eps = this.eps; + for (var i = 0; i !== N; i++) { + var p = this.particles[i]; + var neighbors = this.neighbors[i]; + neighbors.length = 0; + this.getNeighbors(p, neighbors); + neighbors.push(this.particles[i]); + var numNeighbors = neighbors.length; + var sum = 0; + for (var j = 0; j !== numNeighbors; j++) { + p.position.vsub(neighbors[j].position, dist); + var len = dist.norm(); + var weight = this.w(len); + sum += neighbors[j].mass * weight; + } + this.densities[i] = sum; + this.pressures[i] = cs * cs * (this.densities[i] - this.density); + } + var a_pressure = SPHSystem_update_a_pressure; + var a_visc = SPHSystem_update_a_visc; + var gradW = SPHSystem_update_gradW; + var r_vec = SPHSystem_update_r_vec; + var u = SPHSystem_update_u; + for (var i = 0; i !== N; i++) { + var particle = this.particles[i]; + a_pressure.set(0, 0, 0); + a_visc.set(0, 0, 0); + var Pij; + var nabla; + var Vij; + var neighbors = this.neighbors[i]; + var numNeighbors = neighbors.length; + for (var j = 0; j !== numNeighbors; j++) { + var neighbor = neighbors[j]; + particle.position.vsub(neighbor.position, r_vec); + var r = r_vec.norm(); + Pij = -neighbor.mass * (this.pressures[i] / (this.densities[i] * this.densities[i] + eps) + this.pressures[j] / (this.densities[j] * this.densities[j] + eps)); + this.gradw(r_vec, gradW); + gradW.mult(Pij, gradW); + a_pressure.vadd(gradW, a_pressure); + neighbor.velocity.vsub(particle.velocity, u); + u.mult(1 / (1e-4 + this.densities[i] * this.densities[j]) * this.viscosity * neighbor.mass, u); + nabla = this.nablaw(r); + u.mult(nabla, u); + a_visc.vadd(u, a_visc); + } + a_visc.mult(particle.mass, a_visc); + a_pressure.mult(particle.mass, a_pressure); + particle.force.vadd(a_visc, particle.force); + particle.force.vadd(a_pressure, particle.force); + } + }; + SPHSystem.prototype.w = function(r) { + var h = this.smoothingRadius; + return 315 / (64 * Math.PI * Math.pow(h, 9)) * Math.pow(h * h - r * r, 3); + }; + SPHSystem.prototype.gradw = function(rVec, resultVec) { + var r = rVec.norm(), h = this.smoothingRadius; + rVec.mult(945 / (32 * Math.PI * Math.pow(h, 9)) * Math.pow(h * h - r * r, 2), resultVec); + }; + SPHSystem.prototype.nablaw = function(r) { + var h = this.smoothingRadius; + var nabla = 945 / (32 * Math.PI * Math.pow(h, 9)) * (h * h - r * r) * (7 * r * r - 3 * h * h); + return nabla; + }; + }, { + "../material/Material": 26, + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../objects/Body": 33, + "../shapes/Particle": 43, + "../shapes/Shape": 45 + } ], + 37: [ function(_dereq_, module, exports) { + var Vec3 = _dereq_("../math/Vec3"); + module.exports = Spring; + function Spring(bodyA, bodyB, options) { + options = options || {}; + this.restLength = "number" === typeof options.restLength ? options.restLength : 1; + this.stiffness = options.stiffness || 100; + this.damping = options.damping || 1; + this.bodyA = bodyA; + this.bodyB = bodyB; + this.localAnchorA = new Vec3(); + this.localAnchorB = new Vec3(); + options.localAnchorA && this.localAnchorA.copy(options.localAnchorA); + options.localAnchorB && this.localAnchorB.copy(options.localAnchorB); + options.worldAnchorA && this.setWorldAnchorA(options.worldAnchorA); + options.worldAnchorB && this.setWorldAnchorB(options.worldAnchorB); + } + Spring.prototype.setWorldAnchorA = function(worldAnchorA) { + this.bodyA.pointToLocalFrame(worldAnchorA, this.localAnchorA); + }; + Spring.prototype.setWorldAnchorB = function(worldAnchorB) { + this.bodyB.pointToLocalFrame(worldAnchorB, this.localAnchorB); + }; + Spring.prototype.getWorldAnchorA = function(result) { + this.bodyA.pointToWorldFrame(this.localAnchorA, result); + }; + Spring.prototype.getWorldAnchorB = function(result) { + this.bodyB.pointToWorldFrame(this.localAnchorB, result); + }; + var applyForce_r = new Vec3(), applyForce_r_unit = new Vec3(), applyForce_u = new Vec3(), applyForce_f = new Vec3(), applyForce_worldAnchorA = new Vec3(), applyForce_worldAnchorB = new Vec3(), applyForce_ri = new Vec3(), applyForce_rj = new Vec3(), applyForce_ri_x_f = new Vec3(), applyForce_rj_x_f = new Vec3(), applyForce_tmp = new Vec3(); + Spring.prototype.applyForce = function() { + var k = this.stiffness, d = this.damping, l = this.restLength, bodyA = this.bodyA, bodyB = this.bodyB, r = applyForce_r, r_unit = applyForce_r_unit, u = applyForce_u, f = applyForce_f, tmp = applyForce_tmp; + var worldAnchorA = applyForce_worldAnchorA, worldAnchorB = applyForce_worldAnchorB, ri = applyForce_ri, rj = applyForce_rj, ri_x_f = applyForce_ri_x_f, rj_x_f = applyForce_rj_x_f; + this.getWorldAnchorA(worldAnchorA); + this.getWorldAnchorB(worldAnchorB); + worldAnchorA.vsub(bodyA.position, ri); + worldAnchorB.vsub(bodyB.position, rj); + worldAnchorB.vsub(worldAnchorA, r); + var rlen = r.norm(); + r_unit.copy(r); + r_unit.normalize(); + bodyB.velocity.vsub(bodyA.velocity, u); + bodyB.angularVelocity.cross(rj, tmp); + u.vadd(tmp, u); + bodyA.angularVelocity.cross(ri, tmp); + u.vsub(tmp, u); + r_unit.mult(-k * (rlen - l) - d * u.dot(r_unit), f); + bodyA.force.vsub(f, bodyA.force); + bodyB.force.vadd(f, bodyB.force); + ri.cross(f, ri_x_f); + rj.cross(f, rj_x_f); + bodyA.torque.vsub(ri_x_f, bodyA.torque); + bodyB.torque.vadd(rj_x_f, bodyB.torque); + }; + }, { + "../math/Vec3": 32 + } ], + 38: [ function(_dereq_, module, exports) { + var Vec3 = _dereq_("../math/Vec3"); + var Transform = _dereq_("../math/Transform"); + var RaycastResult = _dereq_("../collision/RaycastResult"); + var Utils = _dereq_("../utils/Utils"); + module.exports = WheelInfo; + function WheelInfo(options) { + options = Utils.defaults(options, { + chassisConnectionPointLocal: new Vec3(), + chassisConnectionPointWorld: new Vec3(), + directionLocal: new Vec3(), + directionWorld: new Vec3(), + axleLocal: new Vec3(), + axleWorld: new Vec3(), + suspensionRestLength: 1, + suspensionMaxLength: 2, + radius: 1, + suspensionStiffness: 100, + dampingCompression: 10, + dampingRelaxation: 10, + frictionSlip: 1e4, + steering: 0, + rotation: 0, + deltaRotation: 0, + rollInfluence: .01, + maxSuspensionForce: Number.MAX_VALUE, + isFrontWheel: true, + clippedInvContactDotSuspension: 1, + suspensionRelativeVelocity: 0, + suspensionForce: 0, + skidInfo: 0, + suspensionLength: 0, + maxSuspensionTravel: 1, + useCustomSlidingRotationalSpeed: false, + customSlidingRotationalSpeed: -.1 + }); + this.maxSuspensionTravel = options.maxSuspensionTravel; + this.customSlidingRotationalSpeed = options.customSlidingRotationalSpeed; + this.useCustomSlidingRotationalSpeed = options.useCustomSlidingRotationalSpeed; + this.sliding = false; + this.chassisConnectionPointLocal = options.chassisConnectionPointLocal.clone(); + this.chassisConnectionPointWorld = options.chassisConnectionPointWorld.clone(); + this.directionLocal = options.directionLocal.clone(); + this.directionWorld = options.directionWorld.clone(); + this.axleLocal = options.axleLocal.clone(); + this.axleWorld = options.axleWorld.clone(); + this.suspensionRestLength = options.suspensionRestLength; + this.suspensionMaxLength = options.suspensionMaxLength; + this.radius = options.radius; + this.suspensionStiffness = options.suspensionStiffness; + this.dampingCompression = options.dampingCompression; + this.dampingRelaxation = options.dampingRelaxation; + this.frictionSlip = options.frictionSlip; + this.steering = 0; + this.rotation = 0; + this.deltaRotation = 0; + this.rollInfluence = options.rollInfluence; + this.maxSuspensionForce = options.maxSuspensionForce; + this.engineForce = 0; + this.brake = 0; + this.isFrontWheel = options.isFrontWheel; + this.clippedInvContactDotSuspension = 1; + this.suspensionRelativeVelocity = 0; + this.suspensionForce = 0; + this.skidInfo = 0; + this.suspensionLength = 0; + this.sideImpulse = 0; + this.forwardImpulse = 0; + this.raycastResult = new RaycastResult(); + this.worldTransform = new Transform(); + this.isInContact = false; + } + var chassis_velocity_at_contactPoint = new Vec3(); + var relpos = new Vec3(); + var chassis_velocity_at_contactPoint = new Vec3(); + WheelInfo.prototype.updateWheel = function(chassis) { + var raycastResult = this.raycastResult; + if (this.isInContact) { + var project = raycastResult.hitNormalWorld.dot(raycastResult.directionWorld); + raycastResult.hitPointWorld.vsub(chassis.position, relpos); + chassis.getVelocityAtWorldPoint(relpos, chassis_velocity_at_contactPoint); + var projVel = raycastResult.hitNormalWorld.dot(chassis_velocity_at_contactPoint); + if (project >= -.1) { + this.suspensionRelativeVelocity = 0; + this.clippedInvContactDotSuspension = 10; + } else { + var inv = -1 / project; + this.suspensionRelativeVelocity = projVel * inv; + this.clippedInvContactDotSuspension = inv; + } + } else { + raycastResult.suspensionLength = this.suspensionRestLength; + this.suspensionRelativeVelocity = 0; + raycastResult.directionWorld.scale(-1, raycastResult.hitNormalWorld); + this.clippedInvContactDotSuspension = 1; + } + }; + }, { + "../collision/RaycastResult": 11, + "../math/Transform": 31, + "../math/Vec3": 32, + "../utils/Utils": 55 + } ], + 39: [ function(_dereq_, module, exports) { + module.exports = Box; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var ConvexPolyhedron = _dereq_("./ConvexPolyhedron"); + function Box(halfExtents) { + Shape.call(this, { + type: Shape.types.BOX + }); + this.halfExtents = halfExtents; + this.convexPolyhedronRepresentation = null; + this.updateConvexPolyhedronRepresentation(); + this.updateBoundingSphereRadius(); + } + Box.prototype = new Shape(); + Box.prototype.constructor = Box; + Box.prototype.updateConvexPolyhedronRepresentation = function() { + var sx = this.halfExtents.x; + var sy = this.halfExtents.y; + var sz = this.halfExtents.z; + var V = Vec3; + var vertices = [ new V(-sx, -sy, -sz), new V(sx, -sy, -sz), new V(sx, sy, -sz), new V(-sx, sy, -sz), new V(-sx, -sy, sz), new V(sx, -sy, sz), new V(sx, sy, sz), new V(-sx, sy, sz) ]; + var indices = [ [ 3, 2, 1, 0 ], [ 4, 5, 6, 7 ], [ 5, 4, 0, 1 ], [ 2, 3, 7, 6 ], [ 0, 4, 7, 3 ], [ 1, 2, 6, 5 ] ]; + var axes = [ new V(0, 0, 1), new V(0, 1, 0), new V(1, 0, 0) ]; + var h = new ConvexPolyhedron(vertices, indices); + this.convexPolyhedronRepresentation = h; + h.material = this.material; + }; + Box.prototype.calculateLocalInertia = function(mass, target) { + target = target || new Vec3(); + Box.calculateInertia(this.halfExtents, mass, target); + return target; + }; + Box.calculateInertia = function(halfExtents, mass, target) { + var e = halfExtents; + if (e.isZero()) { + target.x = 2 / 12 * mass; + target.y = 2 / 12 * mass; + target.z = 2 / 12 * mass; + } else { + target.x = 1 / 12 * mass * (2 * e.y * 2 * e.y + 2 * e.z * 2 * e.z); + target.y = 1 / 12 * mass * (2 * e.x * 2 * e.x + 2 * e.z * 2 * e.z); + target.z = 1 / 12 * mass * (2 * e.y * 2 * e.y + 2 * e.x * 2 * e.x); + } + }; + Box.prototype.getSideNormals = function(sixTargetVectors, quat) { + var sides = sixTargetVectors; + var ex = this.halfExtents; + sides[0].set(ex.x, 0, 0); + sides[1].set(0, ex.y, 0); + sides[2].set(0, 0, ex.z); + sides[3].set(-ex.x, 0, 0); + sides[4].set(0, -ex.y, 0); + sides[5].set(0, 0, -ex.z); + if (void 0 !== quat) for (var i = 0; i !== sides.length; i++) quat.vmult(sides[i], sides[i]); + return sides; + }; + Box.prototype.volume = function() { + return 8 * this.halfExtents.x * this.halfExtents.y * this.halfExtents.z; + }; + Box.prototype.updateBoundingSphereRadius = function() { + this.boundingSphereRadius = this.halfExtents.norm(); + }; + var worldCornerTempPos = new Vec3(); + var worldCornerTempNeg = new Vec3(); + Box.prototype.forEachWorldCorner = function(pos, quat, callback) { + var e = this.halfExtents; + var corners = [ [ e.x, e.y, e.z ], [ -e.x, e.y, e.z ], [ -e.x, -e.y, e.z ], [ -e.x, -e.y, -e.z ], [ e.x, -e.y, -e.z ], [ e.x, e.y, -e.z ], [ -e.x, e.y, -e.z ], [ e.x, -e.y, e.z ] ]; + for (var i = 0; i < corners.length; i++) { + worldCornerTempPos.set(corners[i][0], corners[i][1], corners[i][2]); + quat.vmult(worldCornerTempPos, worldCornerTempPos); + pos.vadd(worldCornerTempPos, worldCornerTempPos); + callback(worldCornerTempPos.x, worldCornerTempPos.y, worldCornerTempPos.z); + } + }; + var worldCornersTemp = [ new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3() ]; + Box.prototype.calculateWorldAABB = function(pos, quat, min, max) { + var e = this.halfExtents; + worldCornersTemp[0].set(e.x, e.y, e.z); + worldCornersTemp[1].set(-e.x, e.y, e.z); + worldCornersTemp[2].set(-e.x, -e.y, e.z); + worldCornersTemp[3].set(-e.x, -e.y, -e.z); + worldCornersTemp[4].set(e.x, -e.y, -e.z); + worldCornersTemp[5].set(e.x, e.y, -e.z); + worldCornersTemp[6].set(-e.x, e.y, -e.z); + worldCornersTemp[7].set(e.x, -e.y, e.z); + var wc = worldCornersTemp[0]; + quat.vmult(wc, wc); + pos.vadd(wc, wc); + max.copy(wc); + min.copy(wc); + for (var i = 1; i < 8; i++) { + var wc = worldCornersTemp[i]; + quat.vmult(wc, wc); + pos.vadd(wc, wc); + var x = wc.x; + var y = wc.y; + var z = wc.z; + x > max.x && (max.x = x); + y > max.y && (max.y = y); + z > max.z && (max.z = z); + x < min.x && (min.x = x); + y < min.y && (min.y = y); + z < min.z && (min.z = z); + } + }; + }, { + "../math/Vec3": 32, + "./ConvexPolyhedron": 40, + "./Shape": 45 + } ], + 40: [ function(_dereq_, module, exports) { + module.exports = ConvexPolyhedron; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Transform = _dereq_("../math/Transform"); + function ConvexPolyhedron(points, faces, uniqueAxes) { + Shape.call(this, { + type: Shape.types.CONVEXPOLYHEDRON + }); + this.vertices = points || []; + this.worldVertices = []; + this.worldVerticesNeedsUpdate = true; + this.faces = faces || []; + this.faceNormals = []; + this.computeNormals(); + this.worldFaceNormalsNeedsUpdate = true; + this.worldFaceNormals = []; + this.uniqueEdges = []; + this.uniqueAxes = uniqueAxes ? uniqueAxes.slice() : null; + this.computeEdges(); + this.updateBoundingSphereRadius(); + } + ConvexPolyhedron.prototype = new Shape(); + ConvexPolyhedron.prototype.constructor = ConvexPolyhedron; + var computeEdges_tmpEdge = new Vec3(); + ConvexPolyhedron.prototype.computeEdges = function() { + var faces = this.faces; + var vertices = this.vertices; + var nv = vertices.length; + var edges = this.uniqueEdges; + edges.length = 0; + var edge = computeEdges_tmpEdge; + for (var i = 0; i !== faces.length; i++) { + var face = faces[i]; + var numVertices = face.length; + for (var j = 0; j !== numVertices; j++) { + var k = (j + 1) % numVertices; + vertices[face[j]].vsub(vertices[face[k]], edge); + edge.normalize(); + var found = false; + for (var p = 0; p !== edges.length; p++) if (edges[p].almostEquals(edge) || edges[p].almostEquals(edge)) { + found = true; + break; + } + found || edges.push(edge.clone()); + } + } + }; + ConvexPolyhedron.prototype.computeNormals = function() { + this.faceNormals.length = this.faces.length; + for (var i = 0; i < this.faces.length; i++) { + for (var j = 0; j < this.faces[i].length; j++) if (!this.vertices[this.faces[i][j]]) throw new Error("Vertex " + this.faces[i][j] + " not found!"); + var n = this.faceNormals[i] || new Vec3(); + this.getFaceNormal(i, n); + n.negate(n); + this.faceNormals[i] = n; + var vertex = this.vertices[this.faces[i][0]]; + if (n.dot(vertex) < 0) { + console.error(".faceNormals[" + i + "] = Vec3(" + n.toString() + ") looks like it points into the shape? The vertices follow. Make sure they are ordered CCW around the normal, using the right hand rule."); + for (var j = 0; j < this.faces[i].length; j++) console.warn(".vertices[" + this.faces[i][j] + "] = Vec3(" + this.vertices[this.faces[i][j]].toString() + ")"); + } + } + }; + var cb = new Vec3(); + var ab = new Vec3(); + ConvexPolyhedron.computeNormal = function(va, vb, vc, target) { + vb.vsub(va, ab); + vc.vsub(vb, cb); + cb.cross(ab, target); + target.isZero() || target.normalize(); + }; + ConvexPolyhedron.prototype.getFaceNormal = function(i, target) { + var f = this.faces[i]; + var va = this.vertices[f[0]]; + var vb = this.vertices[f[1]]; + var vc = this.vertices[f[2]]; + return ConvexPolyhedron.computeNormal(va, vb, vc, target); + }; + var cah_WorldNormal = new Vec3(); + ConvexPolyhedron.prototype.clipAgainstHull = function(posA, quatA, hullB, posB, quatB, separatingNormal, minDist, maxDist, result) { + var WorldNormal = cah_WorldNormal; + var hullA = this; + var curMaxDist = maxDist; + var closestFaceB = -1; + var dmax = -Number.MAX_VALUE; + for (var face = 0; face < hullB.faces.length; face++) { + WorldNormal.copy(hullB.faceNormals[face]); + quatB.vmult(WorldNormal, WorldNormal); + var d = WorldNormal.dot(separatingNormal); + if (d > dmax) { + dmax = d; + closestFaceB = face; + } + } + var worldVertsB1 = []; + var polyB = hullB.faces[closestFaceB]; + var numVertices = polyB.length; + for (var e0 = 0; e0 < numVertices; e0++) { + var b = hullB.vertices[polyB[e0]]; + var worldb = new Vec3(); + worldb.copy(b); + quatB.vmult(worldb, worldb); + posB.vadd(worldb, worldb); + worldVertsB1.push(worldb); + } + closestFaceB >= 0 && this.clipFaceAgainstHull(separatingNormal, posA, quatA, worldVertsB1, minDist, maxDist, result); + }; + var fsa_faceANormalWS3 = new Vec3(), fsa_Worldnormal1 = new Vec3(), fsa_deltaC = new Vec3(), fsa_worldEdge0 = new Vec3(), fsa_worldEdge1 = new Vec3(), fsa_Cross = new Vec3(); + ConvexPolyhedron.prototype.findSeparatingAxis = function(hullB, posA, quatA, posB, quatB, target, faceListA, faceListB) { + var faceANormalWS3 = fsa_faceANormalWS3, Worldnormal1 = fsa_Worldnormal1, deltaC = fsa_deltaC, worldEdge0 = fsa_worldEdge0, worldEdge1 = fsa_worldEdge1, Cross = fsa_Cross; + var dmin = Number.MAX_VALUE; + var hullA = this; + var curPlaneTests = 0; + if (hullA.uniqueAxes) for (var i = 0; i !== hullA.uniqueAxes.length; i++) { + quatA.vmult(hullA.uniqueAxes[i], faceANormalWS3); + var d = hullA.testSepAxis(faceANormalWS3, hullB, posA, quatA, posB, quatB); + if (false === d) return false; + if (d < dmin) { + dmin = d; + target.copy(faceANormalWS3); + } + } else { + var numFacesA = faceListA ? faceListA.length : hullA.faces.length; + for (var i = 0; i < numFacesA; i++) { + var fi = faceListA ? faceListA[i] : i; + faceANormalWS3.copy(hullA.faceNormals[fi]); + quatA.vmult(faceANormalWS3, faceANormalWS3); + var d = hullA.testSepAxis(faceANormalWS3, hullB, posA, quatA, posB, quatB); + if (false === d) return false; + if (d < dmin) { + dmin = d; + target.copy(faceANormalWS3); + } + } + } + if (hullB.uniqueAxes) for (var i = 0; i !== hullB.uniqueAxes.length; i++) { + quatB.vmult(hullB.uniqueAxes[i], Worldnormal1); + curPlaneTests++; + var d = hullA.testSepAxis(Worldnormal1, hullB, posA, quatA, posB, quatB); + if (false === d) return false; + if (d < dmin) { + dmin = d; + target.copy(Worldnormal1); + } + } else { + var numFacesB = faceListB ? faceListB.length : hullB.faces.length; + for (var i = 0; i < numFacesB; i++) { + var fi = faceListB ? faceListB[i] : i; + Worldnormal1.copy(hullB.faceNormals[fi]); + quatB.vmult(Worldnormal1, Worldnormal1); + curPlaneTests++; + var d = hullA.testSepAxis(Worldnormal1, hullB, posA, quatA, posB, quatB); + if (false === d) return false; + if (d < dmin) { + dmin = d; + target.copy(Worldnormal1); + } + } + } + for (var e0 = 0; e0 !== hullA.uniqueEdges.length; e0++) { + quatA.vmult(hullA.uniqueEdges[e0], worldEdge0); + for (var e1 = 0; e1 !== hullB.uniqueEdges.length; e1++) { + quatB.vmult(hullB.uniqueEdges[e1], worldEdge1); + worldEdge0.cross(worldEdge1, Cross); + if (!Cross.almostZero()) { + Cross.normalize(); + var dist = hullA.testSepAxis(Cross, hullB, posA, quatA, posB, quatB); + if (false === dist) return false; + if (dist < dmin) { + dmin = dist; + target.copy(Cross); + } + } + } + } + posB.vsub(posA, deltaC); + deltaC.dot(target) > 0 && target.negate(target); + return true; + }; + var maxminA = [], maxminB = []; + ConvexPolyhedron.prototype.testSepAxis = function(axis, hullB, posA, quatA, posB, quatB) { + var hullA = this; + ConvexPolyhedron.project(hullA, axis, posA, quatA, maxminA); + ConvexPolyhedron.project(hullB, axis, posB, quatB, maxminB); + var maxA = maxminA[0]; + var minA = maxminA[1]; + var maxB = maxminB[0]; + var minB = maxminB[1]; + if (maxA < minB || maxB < minA) return false; + var d0 = maxA - minB; + var d1 = maxB - minA; + var depth = d0 < d1 ? d0 : d1; + return depth; + }; + var cli_aabbmin = new Vec3(), cli_aabbmax = new Vec3(); + ConvexPolyhedron.prototype.calculateLocalInertia = function(mass, target) { + this.computeLocalAABB(cli_aabbmin, cli_aabbmax); + var x = cli_aabbmax.x - cli_aabbmin.x, y = cli_aabbmax.y - cli_aabbmin.y, z = cli_aabbmax.z - cli_aabbmin.z; + target.x = 1 / 12 * mass * (2 * y * 2 * y + 2 * z * 2 * z); + target.y = 1 / 12 * mass * (2 * x * 2 * x + 2 * z * 2 * z); + target.z = 1 / 12 * mass * (2 * y * 2 * y + 2 * x * 2 * x); + }; + ConvexPolyhedron.prototype.getPlaneConstantOfFace = function(face_i) { + var f = this.faces[face_i]; + var n = this.faceNormals[face_i]; + var v = this.vertices[f[0]]; + var c = -n.dot(v); + return c; + }; + var cfah_faceANormalWS = new Vec3(), cfah_edge0 = new Vec3(), cfah_WorldEdge0 = new Vec3(), cfah_worldPlaneAnormal1 = new Vec3(), cfah_planeNormalWS1 = new Vec3(), cfah_worldA1 = new Vec3(), cfah_localPlaneNormal = new Vec3(), cfah_planeNormalWS = new Vec3(); + ConvexPolyhedron.prototype.clipFaceAgainstHull = function(separatingNormal, posA, quatA, worldVertsB1, minDist, maxDist, result) { + var faceANormalWS = cfah_faceANormalWS, edge0 = cfah_edge0, WorldEdge0 = cfah_WorldEdge0, worldPlaneAnormal1 = cfah_worldPlaneAnormal1, planeNormalWS1 = cfah_planeNormalWS1, worldA1 = cfah_worldA1, localPlaneNormal = cfah_localPlaneNormal, planeNormalWS = cfah_planeNormalWS; + var hullA = this; + var worldVertsB2 = []; + var pVtxIn = worldVertsB1; + var pVtxOut = worldVertsB2; + var closestFaceA = -1; + var dmin = Number.MAX_VALUE; + for (var face = 0; face < hullA.faces.length; face++) { + faceANormalWS.copy(hullA.faceNormals[face]); + quatA.vmult(faceANormalWS, faceANormalWS); + var d = faceANormalWS.dot(separatingNormal); + if (d < dmin) { + dmin = d; + closestFaceA = face; + } + } + if (closestFaceA < 0) return; + var polyA = hullA.faces[closestFaceA]; + polyA.connectedFaces = []; + for (var i = 0; i < hullA.faces.length; i++) for (var j = 0; j < hullA.faces[i].length; j++) -1 !== polyA.indexOf(hullA.faces[i][j]) && i !== closestFaceA && -1 === polyA.connectedFaces.indexOf(i) && polyA.connectedFaces.push(i); + var numContacts = pVtxIn.length; + var numVerticesA = polyA.length; + var res = []; + for (var e0 = 0; e0 < numVerticesA; e0++) { + var a = hullA.vertices[polyA[e0]]; + var b = hullA.vertices[polyA[(e0 + 1) % numVerticesA]]; + a.vsub(b, edge0); + WorldEdge0.copy(edge0); + quatA.vmult(WorldEdge0, WorldEdge0); + posA.vadd(WorldEdge0, WorldEdge0); + worldPlaneAnormal1.copy(this.faceNormals[closestFaceA]); + quatA.vmult(worldPlaneAnormal1, worldPlaneAnormal1); + posA.vadd(worldPlaneAnormal1, worldPlaneAnormal1); + WorldEdge0.cross(worldPlaneAnormal1, planeNormalWS1); + planeNormalWS1.negate(planeNormalWS1); + worldA1.copy(a); + quatA.vmult(worldA1, worldA1); + posA.vadd(worldA1, worldA1); + var planeEqWS1 = -worldA1.dot(planeNormalWS1); + var planeEqWS; + true; + var otherFace = polyA.connectedFaces[e0]; + localPlaneNormal.copy(this.faceNormals[otherFace]); + var localPlaneEq = this.getPlaneConstantOfFace(otherFace); + planeNormalWS.copy(localPlaneNormal); + quatA.vmult(planeNormalWS, planeNormalWS); + var planeEqWS = localPlaneEq - planeNormalWS.dot(posA); + this.clipFaceAgainstPlane(pVtxIn, pVtxOut, planeNormalWS, planeEqWS); + while (pVtxIn.length) pVtxIn.shift(); + while (pVtxOut.length) pVtxIn.push(pVtxOut.shift()); + } + localPlaneNormal.copy(this.faceNormals[closestFaceA]); + var localPlaneEq = this.getPlaneConstantOfFace(closestFaceA); + planeNormalWS.copy(localPlaneNormal); + quatA.vmult(planeNormalWS, planeNormalWS); + var planeEqWS = localPlaneEq - planeNormalWS.dot(posA); + for (var i = 0; i < pVtxIn.length; i++) { + var depth = planeNormalWS.dot(pVtxIn[i]) + planeEqWS; + depth <= minDist && (depth = minDist); + if (depth <= maxDist) { + var point = pVtxIn[i]; + if (depth <= 0) { + var p = { + point: point, + normal: planeNormalWS, + depth: depth + }; + result.push(p); + } + } + } + }; + ConvexPolyhedron.prototype.clipFaceAgainstPlane = function(inVertices, outVertices, planeNormal, planeConstant) { + var n_dot_first, n_dot_last; + var numVerts = inVertices.length; + if (numVerts < 2) return outVertices; + var firstVertex = inVertices[inVertices.length - 1], lastVertex = inVertices[0]; + n_dot_first = planeNormal.dot(firstVertex) + planeConstant; + for (var vi = 0; vi < numVerts; vi++) { + lastVertex = inVertices[vi]; + n_dot_last = planeNormal.dot(lastVertex) + planeConstant; + if (n_dot_first < 0) if (n_dot_last < 0) { + var newv = new Vec3(); + newv.copy(lastVertex); + outVertices.push(newv); + } else { + var newv = new Vec3(); + firstVertex.lerp(lastVertex, n_dot_first / (n_dot_first - n_dot_last), newv); + outVertices.push(newv); + } else if (n_dot_last < 0) { + var newv = new Vec3(); + firstVertex.lerp(lastVertex, n_dot_first / (n_dot_first - n_dot_last), newv); + outVertices.push(newv); + outVertices.push(lastVertex); + } + firstVertex = lastVertex; + n_dot_first = n_dot_last; + } + return outVertices; + }; + ConvexPolyhedron.prototype.computeWorldVertices = function(position, quat) { + var N = this.vertices.length; + while (this.worldVertices.length < N) this.worldVertices.push(new Vec3()); + var verts = this.vertices, worldVerts = this.worldVertices; + for (var i = 0; i !== N; i++) { + quat.vmult(verts[i], worldVerts[i]); + position.vadd(worldVerts[i], worldVerts[i]); + } + this.worldVerticesNeedsUpdate = false; + }; + var computeLocalAABB_worldVert = new Vec3(); + ConvexPolyhedron.prototype.computeLocalAABB = function(aabbmin, aabbmax) { + var n = this.vertices.length, vertices = this.vertices, worldVert = computeLocalAABB_worldVert; + aabbmin.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE); + aabbmax.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE); + for (var i = 0; i < n; i++) { + var v = vertices[i]; + v.x < aabbmin.x ? aabbmin.x = v.x : v.x > aabbmax.x && (aabbmax.x = v.x); + v.y < aabbmin.y ? aabbmin.y = v.y : v.y > aabbmax.y && (aabbmax.y = v.y); + v.z < aabbmin.z ? aabbmin.z = v.z : v.z > aabbmax.z && (aabbmax.z = v.z); + } + }; + ConvexPolyhedron.prototype.computeWorldFaceNormals = function(quat) { + var N = this.faceNormals.length; + while (this.worldFaceNormals.length < N) this.worldFaceNormals.push(new Vec3()); + var normals = this.faceNormals, worldNormals = this.worldFaceNormals; + for (var i = 0; i !== N; i++) quat.vmult(normals[i], worldNormals[i]); + this.worldFaceNormalsNeedsUpdate = false; + }; + ConvexPolyhedron.prototype.updateBoundingSphereRadius = function() { + var max2 = 0; + var verts = this.vertices; + for (var i = 0, N = verts.length; i !== N; i++) { + var norm2 = verts[i].norm2(); + norm2 > max2 && (max2 = norm2); + } + this.boundingSphereRadius = Math.sqrt(max2); + }; + var tempWorldVertex = new Vec3(); + ConvexPolyhedron.prototype.calculateWorldAABB = function(pos, quat, min, max) { + var n = this.vertices.length, verts = this.vertices; + var minx, miny, minz, maxx, maxy, maxz; + for (var i = 0; i < n; i++) { + tempWorldVertex.copy(verts[i]); + quat.vmult(tempWorldVertex, tempWorldVertex); + pos.vadd(tempWorldVertex, tempWorldVertex); + var v = tempWorldVertex; + (v.x < minx || void 0 === minx) && (minx = v.x); + (v.x > maxx || void 0 === maxx) && (maxx = v.x); + (v.y < miny || void 0 === miny) && (miny = v.y); + (v.y > maxy || void 0 === maxy) && (maxy = v.y); + (v.z < minz || void 0 === minz) && (minz = v.z); + (v.z > maxz || void 0 === maxz) && (maxz = v.z); + } + min.set(minx, miny, minz); + max.set(maxx, maxy, maxz); + }; + ConvexPolyhedron.prototype.volume = function() { + return 4 * Math.PI * this.boundingSphereRadius / 3; + }; + ConvexPolyhedron.prototype.getAveragePointLocal = function(target) { + target = target || new Vec3(); + var n = this.vertices.length, verts = this.vertices; + for (var i = 0; i < n; i++) target.vadd(verts[i], target); + target.mult(1 / n, target); + return target; + }; + ConvexPolyhedron.prototype.transformAllPoints = function(offset, quat) { + var n = this.vertices.length, verts = this.vertices; + if (quat) { + for (var i = 0; i < n; i++) { + var v = verts[i]; + quat.vmult(v, v); + } + for (var i = 0; i < this.faceNormals.length; i++) { + var v = this.faceNormals[i]; + quat.vmult(v, v); + } + } + if (offset) for (var i = 0; i < n; i++) { + var v = verts[i]; + v.vadd(offset, v); + } + }; + var ConvexPolyhedron_pointIsInside = new Vec3(); + var ConvexPolyhedron_vToP = new Vec3(); + var ConvexPolyhedron_vToPointInside = new Vec3(); + ConvexPolyhedron.prototype.pointIsInside = function(p) { + var n = this.vertices.length, verts = this.vertices, faces = this.faces, normals = this.faceNormals; + var positiveResult = null; + var N = this.faces.length; + var pointInside = ConvexPolyhedron_pointIsInside; + this.getAveragePointLocal(pointInside); + for (var i = 0; i < N; i++) { + var numVertices = this.faces[i].length; + var n = normals[i]; + var v = verts[faces[i][0]]; + var vToP = ConvexPolyhedron_vToP; + p.vsub(v, vToP); + var r1 = n.dot(vToP); + var vToPointInside = ConvexPolyhedron_vToPointInside; + pointInside.vsub(v, vToPointInside); + var r2 = n.dot(vToPointInside); + if (r1 < 0 && r2 > 0 || r1 > 0 && r2 < 0) return false; + } + return positiveResult ? 1 : -1; + }; + var project_worldVertex = new Vec3(); + var project_localAxis = new Vec3(); + var project_localOrigin = new Vec3(); + ConvexPolyhedron.project = function(hull, axis, pos, quat, result) { + var n = hull.vertices.length, worldVertex = project_worldVertex, localAxis = project_localAxis, max = 0, min = 0, localOrigin = project_localOrigin, vs = hull.vertices; + localOrigin.setZero(); + Transform.vectorToLocalFrame(pos, quat, axis, localAxis); + Transform.pointToLocalFrame(pos, quat, localOrigin, localOrigin); + var add = localOrigin.dot(localAxis); + min = max = vs[0].dot(localAxis); + for (var i = 1; i < n; i++) { + var val = vs[i].dot(localAxis); + val > max && (max = val); + val < min && (min = val); + } + min -= add; + max -= add; + if (min > max) { + var temp = min; + min = max; + max = temp; + } + result[0] = max; + result[1] = min; + }; + }, { + "../math/Quaternion": 30, + "../math/Transform": 31, + "../math/Vec3": 32, + "./Shape": 45 + } ], + 41: [ function(_dereq_, module, exports) { + module.exports = Cylinder; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var ConvexPolyhedron = _dereq_("./ConvexPolyhedron"); + var CMath = _dereq_("../math/CMath"); + function Cylinder(radiusTop, radiusBottom, height, numSegments, isDirY) { + if (isDirY) { + var N = numSegments, cos = CMath.cos, sin = CMath.sin; + var halfH = height / 2; + var vertices = []; + var indices = []; + var tf = [ 0 ]; + var bf = [ 1 ]; + var axes = []; + var theta = 2 * Math.PI / N; + for (var i = 0; i < N; i++) { + vertices.push(new Vec3(radiusTop * cos(theta * i), halfH, radiusTop * sin(theta * i))); + vertices.push(new Vec3(radiusTop * cos(theta * i), -halfH, radiusTop * sin(theta * i))); + if (i < N - 1) { + indices.push([ 2 * i + 2, 2 * i + 3, 2 * i + 1, 2 * i ]); + tf.push(2 * i + 2); + bf.push(2 * i + 3); + } else indices.push([ 0, 1, 2 * i + 1, 2 * i ]); + (N % 2 === 1 || i < N / 2) && axes.push(new Vec3(cos(theta * (i + .5)), 0, sin(theta * (i + .5)))); + } + indices.push(bf); + var temp = []; + for (var i = 0; i < tf.length; i++) temp.push(tf[tf.length - i - 1]); + indices.push(temp); + axes.push(new Vec3(0, 1, 0)); + ConvexPolyhedron.call(this, vertices, indices, axes); + return; + } + var N = numSegments, verts = [], axes = [], faces = [], bottomface = [], topface = [], cos = CMath.cos, sin = CMath.sin; + verts.push(new Vec3(radiusBottom * cos(0), radiusBottom * sin(0), .5 * -height)); + bottomface.push(0); + verts.push(new Vec3(radiusTop * cos(0), radiusTop * sin(0), .5 * height)); + topface.push(1); + for (var i = 0; i < N; i++) { + var theta = 2 * Math.PI / N * (i + 1); + var thetaN = 2 * Math.PI / N * (i + .5); + if (i < N - 1) { + verts.push(new Vec3(radiusBottom * cos(theta), radiusBottom * sin(theta), .5 * -height)); + bottomface.push(2 * i + 2); + verts.push(new Vec3(radiusTop * cos(theta), radiusTop * sin(theta), .5 * height)); + topface.push(2 * i + 3); + faces.push([ 2 * i + 2, 2 * i + 3, 2 * i + 1, 2 * i ]); + } else faces.push([ 0, 1, 2 * i + 1, 2 * i ]); + (N % 2 === 1 || i < N / 2) && axes.push(new Vec3(cos(thetaN), sin(thetaN), 0)); + } + faces.push(topface); + axes.push(new Vec3(0, 0, 1)); + var temp = []; + for (var i = 0; i < bottomface.length; i++) temp.push(bottomface[bottomface.length - i - 1]); + faces.push(temp); + ConvexPolyhedron.call(this, verts, faces, axes); + } + Cylinder.prototype = new ConvexPolyhedron(); + }, { + "../math/CMath": 27, + "../math/Quaternion": 30, + "../math/Vec3": 32, + "./ConvexPolyhedron": 40, + "./Shape": 45 + } ], + 42: [ function(_dereq_, module, exports) { + var Shape = _dereq_("./Shape"); + var ConvexPolyhedron = _dereq_("./ConvexPolyhedron"); + var Vec3 = _dereq_("../math/Vec3"); + var Utils = _dereq_("../utils/Utils"); + module.exports = Heightfield; + function Heightfield(data, options) { + options = Utils.defaults(options, { + maxValue: null, + minValue: null, + elementSize: 1 + }); + this.data = data; + this.maxValue = options.maxValue; + this.minValue = options.minValue; + this.elementSize = options.elementSize; + null === options.minValue && this.updateMinValue(); + null === options.maxValue && this.updateMaxValue(); + this.cacheEnabled = true; + Shape.call(this, { + type: Shape.types.HEIGHTFIELD + }); + this.pillarConvex = new ConvexPolyhedron(); + this.pillarOffset = new Vec3(); + this.updateBoundingSphereRadius(); + this._cachedPillars = {}; + } + Heightfield.prototype = new Shape(); + Heightfield.prototype.update = function() { + this._cachedPillars = {}; + }; + Heightfield.prototype.updateMinValue = function() { + var data = this.data; + var minValue = data[0][0]; + for (var i = 0; i !== data.length; i++) for (var j = 0; j !== data[i].length; j++) { + var v = data[i][j]; + v < minValue && (minValue = v); + } + this.minValue = minValue; + }; + Heightfield.prototype.updateMaxValue = function() { + var data = this.data; + var maxValue = data[0][0]; + for (var i = 0; i !== data.length; i++) for (var j = 0; j !== data[i].length; j++) { + var v = data[i][j]; + v > maxValue && (maxValue = v); + } + this.maxValue = maxValue; + }; + Heightfield.prototype.setHeightValueAtIndex = function(xi, yi, value) { + var data = this.data; + data[xi][yi] = value; + this.clearCachedConvexTrianglePillar(xi, yi, false); + if (xi > 0) { + this.clearCachedConvexTrianglePillar(xi - 1, yi, true); + this.clearCachedConvexTrianglePillar(xi - 1, yi, false); + } + if (yi > 0) { + this.clearCachedConvexTrianglePillar(xi, yi - 1, true); + this.clearCachedConvexTrianglePillar(xi, yi - 1, false); + } + yi > 0 && xi > 0 && this.clearCachedConvexTrianglePillar(xi - 1, yi - 1, true); + }; + Heightfield.prototype.getRectMinMax = function(iMinX, iMinY, iMaxX, iMaxY, result) { + result = result || []; + var data = this.data, max = this.minValue; + for (var i = iMinX; i <= iMaxX; i++) for (var j = iMinY; j <= iMaxY; j++) { + var height = data[i][j]; + height > max && (max = height); + } + result[0] = this.minValue; + result[1] = max; + }; + Heightfield.prototype.getIndexOfPosition = function(x, y, result, clamp) { + var w = this.elementSize; + var data = this.data; + var xi = Math.floor(x / w); + var yi = Math.floor(y / w); + result[0] = xi; + result[1] = yi; + if (clamp) { + xi < 0 && (xi = 0); + yi < 0 && (yi = 0); + xi >= data.length - 1 && (xi = data.length - 1); + yi >= data[0].length - 1 && (yi = data[0].length - 1); + } + if (xi < 0 || yi < 0 || xi >= data.length - 1 || yi >= data[0].length - 1) return false; + return true; + }; + var getHeightAt_idx = []; + var getHeightAt_weights = new Vec3(); + var getHeightAt_a = new Vec3(); + var getHeightAt_b = new Vec3(); + var getHeightAt_c = new Vec3(); + Heightfield.prototype.getTriangleAt = function(x, y, edgeClamp, a, b, c) { + var idx = getHeightAt_idx; + this.getIndexOfPosition(x, y, idx, edgeClamp); + var xi = idx[0]; + var yi = idx[1]; + var data = this.data; + if (edgeClamp) { + xi = Math.min(data.length - 2, Math.max(0, xi)); + yi = Math.min(data[0].length - 2, Math.max(0, yi)); + } + var elementSize = this.elementSize; + var lowerDist2 = Math.pow(x / elementSize - xi, 2) + Math.pow(y / elementSize - yi, 2); + var upperDist2 = Math.pow(x / elementSize - (xi + 1), 2) + Math.pow(y / elementSize - (yi + 1), 2); + var upper = lowerDist2 > upperDist2; + this.getTriangle(xi, yi, upper, a, b, c); + return upper; + }; + var getNormalAt_a = new Vec3(); + var getNormalAt_b = new Vec3(); + var getNormalAt_c = new Vec3(); + var getNormalAt_e0 = new Vec3(); + var getNormalAt_e1 = new Vec3(); + Heightfield.prototype.getNormalAt = function(x, y, edgeClamp, result) { + var a = getNormalAt_a; + var b = getNormalAt_b; + var c = getNormalAt_c; + var e0 = getNormalAt_e0; + var e1 = getNormalAt_e1; + this.getTriangleAt(x, y, edgeClamp, a, b, c); + b.vsub(a, e0); + c.vsub(a, e1); + e0.cross(e1, result); + result.normalize(); + }; + Heightfield.prototype.getAabbAtIndex = function(xi, yi, result) { + var data = this.data; + var elementSize = this.elementSize; + result.lowerBound.set(xi * elementSize, yi * elementSize, data[xi][yi]); + result.upperBound.set((xi + 1) * elementSize, (yi + 1) * elementSize, data[xi + 1][yi + 1]); + }; + Heightfield.prototype.getHeightAt = function(x, y, edgeClamp) { + var data = this.data; + var a = getHeightAt_a; + var b = getHeightAt_b; + var c = getHeightAt_c; + var idx = getHeightAt_idx; + this.getIndexOfPosition(x, y, idx, edgeClamp); + var xi = idx[0]; + var yi = idx[1]; + if (edgeClamp) { + xi = Math.min(data.length - 2, Math.max(0, xi)); + yi = Math.min(data[0].length - 2, Math.max(0, yi)); + } + var upper = this.getTriangleAt(x, y, edgeClamp, a, b, c); + barycentricWeights(x, y, a.x, a.y, b.x, b.y, c.x, c.y, getHeightAt_weights); + var w = getHeightAt_weights; + return upper ? data[xi + 1][yi + 1] * w.x + data[xi][yi + 1] * w.y + data[xi + 1][yi] * w.z : data[xi][yi] * w.x + data[xi + 1][yi] * w.y + data[xi][yi + 1] * w.z; + }; + function barycentricWeights(x, y, ax, ay, bx, by, cx, cy, result) { + result.x = ((by - cy) * (x - cx) + (cx - bx) * (y - cy)) / ((by - cy) * (ax - cx) + (cx - bx) * (ay - cy)); + result.y = ((cy - ay) * (x - cx) + (ax - cx) * (y - cy)) / ((by - cy) * (ax - cx) + (cx - bx) * (ay - cy)); + result.z = 1 - result.x - result.y; + } + Heightfield.prototype.getCacheConvexTrianglePillarKey = function(xi, yi, getUpperTriangle) { + return xi + "_" + yi + "_" + (getUpperTriangle ? 1 : 0); + }; + Heightfield.prototype.getCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle) { + return this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)]; + }; + Heightfield.prototype.setCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle, convex, offset) { + this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)] = { + convex: convex, + offset: offset + }; + }; + Heightfield.prototype.clearCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle) { + delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)]; + }; + Heightfield.prototype.getTriangle = function(xi, yi, upper, a, b, c) { + var data = this.data; + var elementSize = this.elementSize; + if (upper) { + a.set((xi + 1) * elementSize, (yi + 1) * elementSize, data[xi + 1][yi + 1]); + b.set(xi * elementSize, (yi + 1) * elementSize, data[xi][yi + 1]); + c.set((xi + 1) * elementSize, yi * elementSize, data[xi + 1][yi]); + } else { + a.set(xi * elementSize, yi * elementSize, data[xi][yi]); + b.set((xi + 1) * elementSize, yi * elementSize, data[xi + 1][yi]); + c.set(xi * elementSize, (yi + 1) * elementSize, data[xi][yi + 1]); + } + }; + Heightfield.prototype.getConvexTrianglePillar = function(xi, yi, getUpperTriangle) { + var result = this.pillarConvex; + var offsetResult = this.pillarOffset; + if (this.cacheEnabled) { + var data = this.getCachedConvexTrianglePillar(xi, yi, getUpperTriangle); + if (data) { + this.pillarConvex = data.convex; + this.pillarOffset = data.offset; + return; + } + result = new ConvexPolyhedron(); + offsetResult = new Vec3(); + this.pillarConvex = result; + this.pillarOffset = offsetResult; + } + var data = this.data; + var elementSize = this.elementSize; + var faces = result.faces; + result.vertices.length = 6; + for (var i = 0; i < 6; i++) result.vertices[i] || (result.vertices[i] = new Vec3()); + faces.length = 5; + for (var i = 0; i < 5; i++) faces[i] || (faces[i] = []); + var verts = result.vertices; + var h = (Math.min(data[xi][yi], data[xi + 1][yi], data[xi][yi + 1], data[xi + 1][yi + 1]) - this.minValue) / 2 + this.minValue; + if (getUpperTriangle) { + offsetResult.set((xi + .75) * elementSize, (yi + .75) * elementSize, h); + verts[0].set(.25 * elementSize, .25 * elementSize, data[xi + 1][yi + 1] - h); + verts[1].set(-.75 * elementSize, .25 * elementSize, data[xi][yi + 1] - h); + verts[2].set(.25 * elementSize, -.75 * elementSize, data[xi + 1][yi] - h); + verts[3].set(.25 * elementSize, .25 * elementSize, -h - 1); + verts[4].set(-.75 * elementSize, .25 * elementSize, -h - 1); + verts[5].set(.25 * elementSize, -.75 * elementSize, -h - 1); + faces[0][0] = 0; + faces[0][1] = 1; + faces[0][2] = 2; + faces[1][0] = 5; + faces[1][1] = 4; + faces[1][2] = 3; + faces[2][0] = 2; + faces[2][1] = 5; + faces[2][2] = 3; + faces[2][3] = 0; + faces[3][0] = 3; + faces[3][1] = 4; + faces[3][2] = 1; + faces[3][3] = 0; + faces[4][0] = 1; + faces[4][1] = 4; + faces[4][2] = 5; + faces[4][3] = 2; + } else { + offsetResult.set((xi + .25) * elementSize, (yi + .25) * elementSize, h); + verts[0].set(-.25 * elementSize, -.25 * elementSize, data[xi][yi] - h); + verts[1].set(.75 * elementSize, -.25 * elementSize, data[xi + 1][yi] - h); + verts[2].set(-.25 * elementSize, .75 * elementSize, data[xi][yi + 1] - h); + verts[3].set(-.25 * elementSize, -.25 * elementSize, -h - 1); + verts[4].set(.75 * elementSize, -.25 * elementSize, -h - 1); + verts[5].set(-.25 * elementSize, .75 * elementSize, -h - 1); + faces[0][0] = 0; + faces[0][1] = 1; + faces[0][2] = 2; + faces[1][0] = 5; + faces[1][1] = 4; + faces[1][2] = 3; + faces[2][0] = 0; + faces[2][1] = 2; + faces[2][2] = 5; + faces[2][3] = 3; + faces[3][0] = 1; + faces[3][1] = 0; + faces[3][2] = 3; + faces[3][3] = 4; + faces[4][0] = 4; + faces[4][1] = 5; + faces[4][2] = 2; + faces[4][3] = 1; + } + result.computeNormals(); + result.computeEdges(); + result.updateBoundingSphereRadius(); + this.setCachedConvexTrianglePillar(xi, yi, getUpperTriangle, result, offsetResult); + }; + Heightfield.prototype.calculateLocalInertia = function(mass, target) { + target = target || new Vec3(); + target.set(0, 0, 0); + return target; + }; + Heightfield.prototype.volume = function() { + return Number.MAX_VALUE; + }; + Heightfield.prototype.calculateWorldAABB = function(pos, quat, min, max) { + min.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE); + max.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE); + }; + Heightfield.prototype.updateBoundingSphereRadius = function() { + var data = this.data, s = this.elementSize; + this.boundingSphereRadius = new Vec3(data.length * s, data[0].length * s, Math.max(Math.abs(this.maxValue), Math.abs(this.minValue))).norm(); + }; + Heightfield.prototype.setHeightsFromImage = function(image, scale) { + var canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + var context = canvas.getContext("2d"); + context.drawImage(image, 0, 0); + var imageData = context.getImageData(0, 0, image.width, image.height); + var matrix = this.data; + matrix.length = 0; + this.elementSize = Math.abs(scale.x) / imageData.width; + for (var i = 0; i < imageData.height; i++) { + var row = []; + for (var j = 0; j < imageData.width; j++) { + var a = imageData.data[4 * (i * imageData.height + j)]; + var b = imageData.data[4 * (i * imageData.height + j) + 1]; + var c = imageData.data[4 * (i * imageData.height + j) + 2]; + var height = (a + b + c) / 4 / 255 * scale.z; + scale.x < 0 ? row.push(height) : row.unshift(height); + } + scale.y < 0 ? matrix.unshift(row) : matrix.push(row); + } + this.updateMaxValue(); + this.updateMinValue(); + this.update(); + }; + }, { + "../math/Vec3": 32, + "../utils/Utils": 55, + "./ConvexPolyhedron": 40, + "./Shape": 45 + } ], + 43: [ function(_dereq_, module, exports) { + module.exports = Particle; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + function Particle() { + Shape.call(this, { + type: Shape.types.PARTICLE + }); + } + Particle.prototype = new Shape(); + Particle.prototype.constructor = Particle; + Particle.prototype.calculateLocalInertia = function(mass, target) { + target = target || new Vec3(); + target.set(0, 0, 0); + return target; + }; + Particle.prototype.volume = function() { + return 0; + }; + Particle.prototype.updateBoundingSphereRadius = function() { + this.boundingSphereRadius = 0; + }; + Particle.prototype.calculateWorldAABB = function(pos, quat, min, max) { + min.copy(pos); + max.copy(pos); + }; + }, { + "../math/Vec3": 32, + "./Shape": 45 + } ], + 44: [ function(_dereq_, module, exports) { + module.exports = Plane; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + function Plane() { + Shape.call(this, { + type: Shape.types.PLANE + }); + this.worldNormal = new Vec3(); + this.worldNormalNeedsUpdate = true; + this.boundingSphereRadius = Number.MAX_VALUE; + } + Plane.prototype = new Shape(); + Plane.prototype.constructor = Plane; + Plane.prototype.computeWorldNormal = function(quat) { + var n = this.worldNormal; + n.set(0, 0, 1); + quat.vmult(n, n); + this.worldNormalNeedsUpdate = false; + }; + Plane.prototype.calculateLocalInertia = function(mass, target) { + target = target || new Vec3(); + return target; + }; + Plane.prototype.volume = function() { + return Number.MAX_VALUE; + }; + var tempNormal = new Vec3(); + Plane.prototype.calculateWorldAABB = function(pos, quat, min, max) { + tempNormal.set(0, 0, 1); + quat.vmult(tempNormal, tempNormal); + var maxVal = Number.MAX_VALUE; + min.set(-maxVal, -maxVal, -maxVal); + max.set(maxVal, maxVal, maxVal); + 1 === tempNormal.x && (max.x = pos.x); + 1 === tempNormal.y && (max.y = pos.y); + 1 === tempNormal.z && (max.z = pos.z); + -1 === tempNormal.x && (min.x = pos.x); + -1 === tempNormal.y && (min.y = pos.y); + -1 === tempNormal.z && (min.z = pos.z); + }; + Plane.prototype.updateBoundingSphereRadius = function() { + this.boundingSphereRadius = Number.MAX_VALUE; + }; + }, { + "../math/Vec3": 32, + "./Shape": 45 + } ], + 45: [ function(_dereq_, module, exports) { + module.exports = Shape; + var EventTarget = _dereq_("../utils/EventTarget"); + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Material = _dereq_("../material/Material"); + function Shape(options) { + options = options || {}; + EventTarget.apply(this); + this.id = Shape.idCounter++; + this.type = options.type || 0; + this.boundingSphereRadius = 0; + this.collisionResponse = !options.collisionResponse || options.collisionResponse; + this.collisionFilterGroup = void 0 !== options.collisionFilterGroup ? options.collisionFilterGroup : 1; + this.collisionFilterMask = void 0 !== options.collisionFilterMask ? options.collisionFilterMask : -1; + this.material = options.material ? options.material : null; + this.body = null; + } + Shape.prototype = new EventTarget(); + Shape.prototype.constructor = Shape; + Shape.prototype.updateBoundingSphereRadius = function() { + throw "computeBoundingSphereRadius() not implemented for shape type " + this.type; + }; + Shape.prototype.volume = function() { + throw "volume() not implemented for shape type " + this.type; + }; + Shape.prototype.calculateLocalInertia = function(mass, target) { + throw "calculateLocalInertia() not implemented for shape type " + this.type; + }; + Shape.idCounter = 0; + Shape.types = { + SPHERE: 1, + PLANE: 2, + BOX: 4, + COMPOUND: 8, + CONVEXPOLYHEDRON: 16, + HEIGHTFIELD: 32, + PARTICLE: 64, + CYLINDER: 128, + TRIMESH: 256 + }; + }, { + "../material/Material": 26, + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../utils/EventTarget": 51, + "./Shape": 45 + } ], + 46: [ function(_dereq_, module, exports) { + module.exports = Sphere; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + function Sphere(radius) { + Shape.call(this, { + type: Shape.types.SPHERE + }); + this.radius = void 0 !== radius ? radius : 1; + if (this.radius < 0) throw new Error("The sphere radius cannot be negative."); + this.updateBoundingSphereRadius(); + } + Sphere.prototype = new Shape(); + Sphere.prototype.constructor = Sphere; + Sphere.prototype.calculateLocalInertia = function(mass, target) { + target = target || new Vec3(); + var I = 2 * mass * this.radius * this.radius / 5; + target.x = I; + target.y = I; + target.z = I; + return target; + }; + Sphere.prototype.volume = function() { + return 4 * Math.PI * this.radius / 3; + }; + Sphere.prototype.updateBoundingSphereRadius = function() { + this.boundingSphereRadius = this.radius; + }; + Sphere.prototype.calculateWorldAABB = function(pos, quat, min, max) { + var r = this.radius; + var axes = [ "x", "y", "z" ]; + for (var i = 0; i < axes.length; i++) { + var ax = axes[i]; + min[ax] = pos[ax] - r; + max[ax] = pos[ax] + r; + } + }; + }, { + "../math/Vec3": 32, + "./Shape": 45 + } ], + 47: [ function(_dereq_, module, exports) { + module.exports = Trimesh; + var Shape = _dereq_("./Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Transform = _dereq_("../math/Transform"); + var AABB = _dereq_("../collision/AABB"); + var Octree = _dereq_("../utils/Octree"); + var CMath = _dereq_("../math/CMath"); + function Trimesh(vertices, indices) { + Shape.call(this, { + type: Shape.types.TRIMESH + }); + this.vertices = new Float32Array(vertices); + this.indices = new Int16Array(indices); + this.normals = new Float32Array(indices.length); + this.aabb = new AABB(); + this.edges = null; + this.scale = new Vec3(1, 1, 1); + this.tree = new Octree(); + this.updateEdges(); + this.updateNormals(); + this.updateAABB(); + this.updateBoundingSphereRadius(); + this.updateTree(); + } + Trimesh.prototype = new Shape(); + Trimesh.prototype.constructor = Trimesh; + var computeNormals_n = new Vec3(); + Trimesh.prototype.updateTree = function() { + var tree = this.tree; + tree.reset(); + tree.aabb.copy(this.aabb); + var scale = this.scale; + tree.aabb.lowerBound.x *= 1 / scale.x; + tree.aabb.lowerBound.y *= 1 / scale.y; + tree.aabb.lowerBound.z *= 1 / scale.z; + tree.aabb.upperBound.x *= 1 / scale.x; + tree.aabb.upperBound.y *= 1 / scale.y; + tree.aabb.upperBound.z *= 1 / scale.z; + var triangleAABB = new AABB(); + var a = new Vec3(); + var b = new Vec3(); + var c = new Vec3(); + var points = [ a, b, c ]; + for (var i = 0; i < this.indices.length / 3; i++) { + var i3 = 3 * i; + this._getUnscaledVertex(this.indices[i3], a); + this._getUnscaledVertex(this.indices[i3 + 1], b); + this._getUnscaledVertex(this.indices[i3 + 2], c); + triangleAABB.setFromPoints(points); + tree.insert(triangleAABB, i); + } + tree.removeEmptyNodes(); + }; + var unscaledAABB = new AABB(); + Trimesh.prototype.getTrianglesInAABB = function(aabb, result) { + unscaledAABB.copy(aabb); + var scale = this.scale; + var isx = scale.x; + var isy = scale.y; + var isz = scale.z; + var l = unscaledAABB.lowerBound; + var u = unscaledAABB.upperBound; + l.x /= isx; + l.y /= isy; + l.z /= isz; + u.x /= isx; + u.y /= isy; + u.z /= isz; + return this.tree.aabbQuery(unscaledAABB, result); + }; + Trimesh.prototype.setScale = function(scale) { + var wasUniform = this.scale.x === this.scale.y === this.scale.z; + var isUniform = scale.x === scale.y === scale.z; + wasUniform && isUniform || this.updateNormals(); + this.scale.copy(scale); + this.updateAABB(); + this.updateBoundingSphereRadius(); + }; + Trimesh.prototype.updateNormals = function() { + var n = computeNormals_n; + var normals = this.normals; + for (var i = 0; i < this.indices.length / 3; i++) { + var i3 = 3 * i; + var a = this.indices[i3], b = this.indices[i3 + 1], c = this.indices[i3 + 2]; + this.getVertex(a, va); + this.getVertex(b, vb); + this.getVertex(c, vc); + Trimesh.computeNormal(vb, va, vc, n); + normals[i3] = n.x; + normals[i3 + 1] = n.y; + normals[i3 + 2] = n.z; + } + }; + Trimesh.prototype.updateEdges = function() { + var edges = {}; + var add = function add(indexA, indexB) { + var key = a < b ? a + "_" + b : b + "_" + a; + edges[key] = true; + }; + for (var i = 0; i < this.indices.length / 3; i++) { + var i3 = 3 * i; + var a = this.indices[i3], b = this.indices[i3 + 1], c = this.indices[i3 + 2]; + add(a, b); + add(b, c); + add(c, a); + } + var keys = Object.keys(edges); + this.edges = new Int16Array(2 * keys.length); + for (var i = 0; i < keys.length; i++) { + var indices = keys[i].split("_"); + this.edges[2 * i] = parseInt(indices[0], 10); + this.edges[2 * i + 1] = parseInt(indices[1], 10); + } + }; + Trimesh.prototype.getEdgeVertex = function(edgeIndex, firstOrSecond, vertexStore) { + var vertexIndex = this.edges[2 * edgeIndex + (firstOrSecond ? 1 : 0)]; + this.getVertex(vertexIndex, vertexStore); + }; + var getEdgeVector_va = new Vec3(); + var getEdgeVector_vb = new Vec3(); + Trimesh.prototype.getEdgeVector = function(edgeIndex, vectorStore) { + var va = getEdgeVector_va; + var vb = getEdgeVector_vb; + this.getEdgeVertex(edgeIndex, 0, va); + this.getEdgeVertex(edgeIndex, 1, vb); + vb.vsub(va, vectorStore); + }; + var cb = new Vec3(); + var ab = new Vec3(); + Trimesh.computeNormal = function(va, vb, vc, target) { + vb.vsub(va, ab); + vc.vsub(vb, cb); + cb.cross(ab, target); + target.isZero() || target.normalize(); + }; + var va = new Vec3(); + var vb = new Vec3(); + var vc = new Vec3(); + Trimesh.prototype.getVertex = function(i, out) { + var scale = this.scale; + this._getUnscaledVertex(i, out); + out.x *= scale.x; + out.y *= scale.y; + out.z *= scale.z; + return out; + }; + Trimesh.prototype._getUnscaledVertex = function(i, out) { + var i3 = 3 * i; + var vertices = this.vertices; + return out.set(vertices[i3], vertices[i3 + 1], vertices[i3 + 2]); + }; + Trimesh.prototype.getWorldVertex = function(i, pos, quat, out) { + this.getVertex(i, out); + Transform.pointToWorldFrame(pos, quat, out, out); + return out; + }; + Trimesh.prototype.getTriangleVertices = function(i, a, b, c) { + var i3 = 3 * i; + this.getVertex(this.indices[i3], a); + this.getVertex(this.indices[i3 + 1], b); + this.getVertex(this.indices[i3 + 2], c); + }; + Trimesh.prototype.getNormal = function(i, target) { + var i3 = 3 * i; + return target.set(this.normals[i3], this.normals[i3 + 1], this.normals[i3 + 2]); + }; + var cli_aabb = new AABB(); + Trimesh.prototype.calculateLocalInertia = function(mass, target) { + this.computeLocalAABB(cli_aabb); + var x = cli_aabb.upperBound.x - cli_aabb.lowerBound.x, y = cli_aabb.upperBound.y - cli_aabb.lowerBound.y, z = cli_aabb.upperBound.z - cli_aabb.lowerBound.z; + return target.set(1 / 12 * mass * (2 * y * 2 * y + 2 * z * 2 * z), 1 / 12 * mass * (2 * x * 2 * x + 2 * z * 2 * z), 1 / 12 * mass * (2 * y * 2 * y + 2 * x * 2 * x)); + }; + var computeLocalAABB_worldVert = new Vec3(); + Trimesh.prototype.computeLocalAABB = function(aabb) { + var l = aabb.lowerBound, u = aabb.upperBound, n = this.vertices.length, vertices = this.vertices, v = computeLocalAABB_worldVert; + this.getVertex(0, v); + l.copy(v); + u.copy(v); + for (var i = 0; i !== n; i++) { + this.getVertex(i, v); + v.x < l.x ? l.x = v.x : v.x > u.x && (u.x = v.x); + v.y < l.y ? l.y = v.y : v.y > u.y && (u.y = v.y); + v.z < l.z ? l.z = v.z : v.z > u.z && (u.z = v.z); + } + }; + Trimesh.prototype.updateAABB = function() { + this.computeLocalAABB(this.aabb); + }; + Trimesh.prototype.updateBoundingSphereRadius = function() { + var max2 = 0; + var vertices = this.vertices; + var v = new Vec3(); + for (var i = 0, N = vertices.length / 3; i !== N; i++) { + this.getVertex(i, v); + var norm2 = v.norm2(); + norm2 > max2 && (max2 = norm2); + } + this.boundingSphereRadius = Math.sqrt(max2); + }; + var tempWorldVertex = new Vec3(); + var calculateWorldAABB_frame = new Transform(); + var calculateWorldAABB_aabb = new AABB(); + Trimesh.prototype.calculateWorldAABB = function(pos, quat, min, max) { + var frame = calculateWorldAABB_frame; + var result = calculateWorldAABB_aabb; + frame.position = pos; + frame.quaternion = quat; + this.aabb.toWorldFrame(frame, result); + min.copy(result.lowerBound); + max.copy(result.upperBound); + }; + Trimesh.prototype.volume = function() { + return 4 * Math.PI * this.boundingSphereRadius / 3; + }; + Trimesh.createTorus = function(radius, tube, radialSegments, tubularSegments, arc) { + radius = radius || 1; + tube = tube || .5; + radialSegments = radialSegments || 8; + tubularSegments = tubularSegments || 6; + arc = arc || 2 * Math.PI; + var vertices = []; + var indices = []; + for (var j = 0; j <= radialSegments; j++) for (var i = 0; i <= tubularSegments; i++) { + var u = i / tubularSegments * arc; + var v = j / radialSegments * Math.PI * 2; + var x = (radius + tube * CMath.cos(v)) * CMath.cos(u); + var y = (radius + tube * CMath.cos(v)) * CMath.sin(u); + var z = tube * CMath.sin(v); + vertices.push(x, y, z); + } + for (var j = 1; j <= radialSegments; j++) for (var i = 1; i <= tubularSegments; i++) { + var a = (tubularSegments + 1) * j + i - 1; + var b = (tubularSegments + 1) * (j - 1) + i - 1; + var c = (tubularSegments + 1) * (j - 1) + i; + var d = (tubularSegments + 1) * j + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + return new Trimesh(vertices, indices); + }; + }, { + "../collision/AABB": 3, + "../math/CMath": 27, + "../math/Quaternion": 30, + "../math/Transform": 31, + "../math/Vec3": 32, + "../utils/Octree": 52, + "./Shape": 45 + } ], + 48: [ function(_dereq_, module, exports) { + module.exports = GSSolver; + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Solver = _dereq_("./Solver"); + function GSSolver() { + Solver.call(this); + this.iterations = 10; + this.tolerance = 1e-7; + } + GSSolver.prototype = new Solver(); + var GSSolver_solve_lambda = []; + var GSSolver_solve_invCs = []; + var GSSolver_solve_Bs = []; + GSSolver.prototype.solve = function(dt, world) { + var iter = 0, maxIter = this.iterations, tolSquared = this.tolerance * this.tolerance, equations = this.equations, Neq = equations.length, bodies = world.bodies, Nbodies = bodies.length, h = dt, q, B, invC, deltalambda, deltalambdaTot, GWlambda, lambdaj; + if (0 !== Neq) for (var i = 0; i !== Nbodies; i++) bodies[i].updateSolveMassProperties(); + var invCs = GSSolver_solve_invCs, Bs = GSSolver_solve_Bs, lambda = GSSolver_solve_lambda; + invCs.length = Neq; + Bs.length = Neq; + lambda.length = Neq; + for (var i = 0; i !== Neq; i++) { + var c = equations[i]; + lambda[i] = 0; + Bs[i] = c.computeB(h); + invCs[i] = 1 / c.computeC(); + } + if (0 !== Neq) { + for (var i = 0; i !== Nbodies; i++) { + var b = bodies[i], vlambda = b.vlambda, wlambda = b.wlambda; + vlambda.set(0, 0, 0); + wlambda.set(0, 0, 0); + } + for (iter = 0; iter !== maxIter; iter++) { + deltalambdaTot = 0; + for (var j = 0; j !== Neq; j++) { + var c = equations[j]; + B = Bs[j]; + invC = invCs[j]; + lambdaj = lambda[j]; + GWlambda = c.computeGWlambda(); + deltalambda = invC * (B - GWlambda - c.eps * lambdaj); + lambdaj + deltalambda < c.minForce ? deltalambda = c.minForce - lambdaj : lambdaj + deltalambda > c.maxForce && (deltalambda = c.maxForce - lambdaj); + lambda[j] += deltalambda; + deltalambdaTot += deltalambda > 0 ? deltalambda : -deltalambda; + c.addToWlambda(deltalambda); + } + if (deltalambdaTot * deltalambdaTot < tolSquared) break; + } + for (var i = 0; i !== Nbodies; i++) { + var b = bodies[i], v = b.velocity, w = b.angularVelocity; + b.vlambda.vmul(b.linearFactor, b.vlambda); + v.vadd(b.vlambda, v); + b.wlambda.vmul(b.angularFactor, b.wlambda); + w.vadd(b.wlambda, w); + } + var l = equations.length; + var invDt = 1 / h; + while (l--) equations[l].multiplier = lambda[l] * invDt; + } + return iter; + }; + }, { + "../math/Quaternion": 30, + "../math/Vec3": 32, + "./Solver": 49 + } ], + 49: [ function(_dereq_, module, exports) { + module.exports = Solver; + function Solver() { + this.equations = []; + } + Solver.prototype.solve = function(dt, world) { + return 0; + }; + Solver.prototype.addEquation = function(eq) { + eq.enabled && this.equations.push(eq); + }; + Solver.prototype.removeEquation = function(eq) { + var eqs = this.equations; + var i = eqs.indexOf(eq); + -1 !== i && eqs.splice(i, 1); + }; + Solver.prototype.removeAllEquations = function() { + this.equations.length = 0; + }; + }, {} ], + 50: [ function(_dereq_, module, exports) { + module.exports = SplitSolver; + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var Solver = _dereq_("./Solver"); + var Body = _dereq_("../objects/Body"); + function SplitSolver(subsolver) { + Solver.call(this); + this.iterations = 10; + this.tolerance = 1e-7; + this.subsolver = subsolver; + this.nodes = []; + this.nodePool = []; + while (this.nodePool.length < 128) this.nodePool.push(this.createNode()); + } + SplitSolver.prototype = new Solver(); + var SplitSolver_solve_nodes = []; + var SplitSolver_solve_nodePool = []; + var SplitSolver_solve_eqs = []; + var SplitSolver_solve_bds = []; + var SplitSolver_solve_dummyWorld = { + bodies: [] + }; + var STATIC = Body.STATIC; + function getUnvisitedNode(nodes) { + var Nnodes = nodes.length; + for (var i = 0; i !== Nnodes; i++) { + var node = nodes[i]; + if (!node.visited && !(node.body.type & STATIC)) return node; + } + return false; + } + var queue = []; + function bfs(root, visitFunc, bds, eqs) { + queue.push(root); + root.visited = true; + visitFunc(root, bds, eqs); + while (queue.length) { + var node = queue.pop(); + var child; + while (child = getUnvisitedNode(node.children)) { + child.visited = true; + visitFunc(child, bds, eqs); + queue.push(child); + } + } + } + function visitFunc(node, bds, eqs) { + bds.push(node.body); + var Neqs = node.eqs.length; + for (var i = 0; i !== Neqs; i++) { + var eq = node.eqs[i]; + -1 === eqs.indexOf(eq) && eqs.push(eq); + } + } + SplitSolver.prototype.createNode = function() { + return { + body: null, + children: [], + eqs: [], + visited: false + }; + }; + SplitSolver.prototype.solve = function(dt, world) { + var nodes = SplitSolver_solve_nodes, nodePool = this.nodePool, bodies = world.bodies, equations = this.equations, Neq = equations.length, Nbodies = bodies.length, subsolver = this.subsolver; + while (nodePool.length < Nbodies) nodePool.push(this.createNode()); + nodes.length = Nbodies; + for (var i = 0; i < Nbodies; i++) nodes[i] = nodePool[i]; + for (var i = 0; i !== Nbodies; i++) { + var node = nodes[i]; + node.body = bodies[i]; + node.children.length = 0; + node.eqs.length = 0; + node.visited = false; + } + for (var k = 0; k !== Neq; k++) { + var eq = equations[k], i = bodies.indexOf(eq.bi), j = bodies.indexOf(eq.bj), ni = nodes[i], nj = nodes[j]; + ni.children.push(nj); + ni.eqs.push(eq); + nj.children.push(ni); + nj.eqs.push(eq); + } + var child, n = 0, eqs = SplitSolver_solve_eqs; + subsolver.tolerance = this.tolerance; + subsolver.iterations = this.iterations; + var dummyWorld = SplitSolver_solve_dummyWorld; + while (child = getUnvisitedNode(nodes)) { + eqs.length = 0; + dummyWorld.bodies.length = 0; + bfs(child, visitFunc, dummyWorld.bodies, eqs); + var Neqs = eqs.length; + eqs = eqs.sort(sortById); + for (var i = 0; i !== Neqs; i++) subsolver.addEquation(eqs[i]); + var iter = subsolver.solve(dt, dummyWorld); + subsolver.removeAllEquations(); + n++; + } + return n; + }; + function sortById(a, b) { + return b.id - a.id; + } + }, { + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../objects/Body": 33, + "./Solver": 49 + } ], + 51: [ function(_dereq_, module, exports) { + var EventTarget = function EventTarget() {}; + module.exports = EventTarget; + EventTarget.prototype = { + constructor: EventTarget, + addEventListener: function addEventListener(type, listener) { + void 0 === this._listeners && (this._listeners = {}); + var listeners = this._listeners; + void 0 === listeners[type] && (listeners[type] = []); + -1 === listeners[type].indexOf(listener) && listeners[type].push(listener); + return this; + }, + hasEventListener: function hasEventListener(type, listener) { + if (void 0 === this._listeners) return false; + var listeners = this._listeners; + if (void 0 !== listeners[type] && -1 !== listeners[type].indexOf(listener)) return true; + return false; + }, + hasAnyEventListener: function hasAnyEventListener(type) { + if (void 0 === this._listeners) return false; + var listeners = this._listeners; + return void 0 !== listeners[type]; + }, + removeEventListener: function removeEventListener(type, listener) { + if (void 0 === this._listeners) return this; + var listeners = this._listeners; + if (void 0 === listeners[type]) return this; + var index = listeners[type].indexOf(listener); + -1 !== index && listeners[type].splice(index, 1); + return this; + }, + dispatchEvent: function dispatchEvent(event) { + if (void 0 === this._listeners) return this; + var listeners = this._listeners; + var listenerArray = listeners[event.type]; + if (void 0 !== listenerArray) { + event.target = this; + for (var i = 0, l = listenerArray.length; i < l; i++) listenerArray[i].call(this, event); + } + return this; + } + }; + }, {} ], + 52: [ function(_dereq_, module, exports) { + var AABB = _dereq_("../collision/AABB"); + var Vec3 = _dereq_("../math/Vec3"); + module.exports = Octree; + function OctreeNode(options) { + options = options || {}; + this.root = options.root || null; + this.aabb = options.aabb ? options.aabb.clone() : new AABB(); + this.data = []; + this.children = []; + } + function Octree(aabb, options) { + options = options || {}; + options.root = null; + options.aabb = aabb; + OctreeNode.call(this, options); + this.maxDepth = "undefined" !== typeof options.maxDepth ? options.maxDepth : 8; + } + Octree.prototype = new OctreeNode(); + OctreeNode.prototype.reset = function(aabb, options) { + this.children.length = this.data.length = 0; + }; + OctreeNode.prototype.insert = function(aabb, elementData, level) { + var nodeData = this.data; + level = level || 0; + if (!this.aabb.contains(aabb)) return false; + var children = this.children; + if (level < (this.maxDepth || this.root.maxDepth)) { + var subdivided = false; + if (!children.length) { + this.subdivide(); + subdivided = true; + } + for (var i = 0; 8 !== i; i++) if (children[i].insert(aabb, elementData, level + 1)) return true; + subdivided && (children.length = 0); + } + nodeData.push(elementData); + return true; + }; + var halfDiagonal = new Vec3(); + OctreeNode.prototype.subdivide = function() { + var aabb = this.aabb; + var l = aabb.lowerBound; + var u = aabb.upperBound; + var children = this.children; + children.push(new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(0, 0, 0) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(1, 0, 0) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(1, 1, 0) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(1, 1, 1) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(0, 1, 1) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(0, 0, 1) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(1, 0, 1) + }) + }), new OctreeNode({ + aabb: new AABB({ + lowerBound: new Vec3(0, 1, 0) + }) + })); + u.vsub(l, halfDiagonal); + halfDiagonal.scale(.5, halfDiagonal); + var root = this.root || this; + for (var i = 0; 8 !== i; i++) { + var child = children[i]; + child.root = root; + var lowerBound = child.aabb.lowerBound; + lowerBound.x *= halfDiagonal.x; + lowerBound.y *= halfDiagonal.y; + lowerBound.z *= halfDiagonal.z; + lowerBound.vadd(l, lowerBound); + lowerBound.vadd(halfDiagonal, child.aabb.upperBound); + } + }; + OctreeNode.prototype.aabbQuery = function(aabb, result) { + var nodeData = this.data; + var children = this.children; + var queue = [ this ]; + while (queue.length) { + var node = queue.pop(); + node.aabb.overlaps(aabb) && Array.prototype.push.apply(result, node.data); + Array.prototype.push.apply(queue, node.children); + } + return result; + }; + var tmpAABB = new AABB(); + OctreeNode.prototype.rayQuery = function(ray, treeTransform, result) { + ray.getAABB(tmpAABB); + tmpAABB.toLocalFrame(treeTransform, tmpAABB); + this.aabbQuery(tmpAABB, result); + return result; + }; + OctreeNode.prototype.removeEmptyNodes = function() { + for (var i = this.children.length - 1; i >= 0; i--) { + this.children[i].removeEmptyNodes(); + this.children[i].children.length || this.children[i].data.length || this.children.splice(i, 1); + } + }; + }, { + "../collision/AABB": 3, + "../math/Vec3": 32 + } ], + 53: [ function(_dereq_, module, exports) { + module.exports = Pool; + function Pool() { + this.objects = []; + this.type = Object; + } + Pool.prototype.release = function() { + var Nargs = arguments.length; + for (var i = 0; i !== Nargs; i++) this.objects.push(arguments[i]); + return this; + }; + Pool.prototype.get = function() { + return 0 === this.objects.length ? this.constructObject() : this.objects.pop(); + }; + Pool.prototype.constructObject = function() { + throw new Error("constructObject() not implemented in this Pool subclass yet!"); + }; + Pool.prototype.resize = function(size) { + var objects = this.objects; + while (objects.length > size) objects.pop(); + while (objects.length < size) objects.push(this.constructObject()); + return this; + }; + }, {} ], + 54: [ function(_dereq_, module, exports) { + module.exports = TupleDictionary; + function TupleDictionary() { + this.data = { + keys: [] + }; + } + TupleDictionary.prototype.get = function(i, j) { + if (i > j) { + var temp = j; + j = i; + i = temp; + } + return this.data[i + "-" + j]; + }; + TupleDictionary.prototype.set = function(i, j, value) { + if (i > j) { + var temp = j; + j = i; + i = temp; + } + var key = i + "-" + j; + this.get(i, j) || this.data.keys.push(key); + this.data[key] = value; + return this.data[key]; + }; + TupleDictionary.prototype.del = function(i, j) { + if (i > j) { + var temp = j; + j = i; + i = temp; + } + var key = i + "-" + j; + var index = this.data.keys.indexOf(key); + if (index >= 0) { + this.data.keys.splice(index, 1); + delete this.data[key]; + return true; + } + return false; + }; + TupleDictionary.prototype.reset = function() { + this.data = { + keys: [] + }; + }; + TupleDictionary.prototype.getLength = function() { + return this.data.keys.length; + }; + TupleDictionary.prototype.getKeyByIndex = function(index) { + return this.data.keys[index]; + }; + TupleDictionary.prototype.getDataByKey = function(Key) { + return this.data[Key]; + }; + }, {} ], + 55: [ function(_dereq_, module, exports) { + function Utils() {} + module.exports = Utils; + Utils.defaults = function(options, defaults) { + options = options || {}; + for (var key in defaults) key in options || (options[key] = defaults[key]); + return options; + }; + }, {} ], + 56: [ function(_dereq_, module, exports) { + module.exports = Vec3Pool; + var Vec3 = _dereq_("../math/Vec3"); + var Pool = _dereq_("./Pool"); + function Vec3Pool() { + Pool.call(this); + this.type = Vec3; + } + Vec3Pool.prototype = new Pool(); + Vec3Pool.prototype.constructObject = function() { + return new Vec3(); + }; + }, { + "../math/Vec3": 32, + "./Pool": 53 + } ], + 57: [ function(_dereq_, module, exports) { + module.exports = Narrowphase; + var AABB = _dereq_("../collision/AABB"); + var Body = _dereq_("../objects/Body"); + var Shape = _dereq_("../shapes/Shape"); + var Ray = _dereq_("../collision/Ray"); + var Vec3 = _dereq_("../math/Vec3"); + var Transform = _dereq_("../math/Transform"); + var ConvexPolyhedron = _dereq_("../shapes/ConvexPolyhedron"); + var Quaternion = _dereq_("../math/Quaternion"); + var Solver = _dereq_("../solver/Solver"); + var Vec3Pool = _dereq_("../utils/Vec3Pool"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + var FrictionEquation = _dereq_("../equations/FrictionEquation"); + function Narrowphase(world) { + this.contactPointPool = []; + this.frictionEquationPool = []; + this.result = []; + this.frictionResult = []; + this.v3pool = new Vec3Pool(); + this.world = world; + this.currentContactMaterial = null; + this.enableFrictionReduction = false; + } + Narrowphase.prototype.createContactEquation = function(bi, bj, si, sj, overrideShapeA, overrideShapeB) { + var c; + if (this.contactPointPool.length) { + c = this.contactPointPool.pop(); + c.bi = bi; + c.bj = bj; + } else c = new ContactEquation(bi, bj); + c.enabled = bi.collisionResponse && bj.collisionResponse && si.collisionResponse && sj.collisionResponse; + var cm = this.currentContactMaterial; + c.restitution = cm.restitution; + c.setSpookParams(cm.contactEquationStiffness, cm.contactEquationRelaxation, this.world.dt); + var matA = si.material || bi.material; + var matB = sj.material || bj.material; + matA && matB && matA.restitution >= 0 && matB.restitution >= 0 && (c.restitution = matA.restitution * matB.restitution); + c.si = overrideShapeA || si; + c.sj = overrideShapeB || sj; + return c; + }; + Narrowphase.prototype.createFrictionEquationsFromContact = function(contactEquation, outArray) { + var bodyA = contactEquation.bi; + var bodyB = contactEquation.bj; + var shapeA = contactEquation.si; + var shapeB = contactEquation.sj; + var world = this.world; + var cm = this.currentContactMaterial; + var friction = cm.friction; + var matA = shapeA.material || bodyA.material; + var matB = shapeB.material || bodyB.material; + matA && matB && matA.friction >= 0 && matB.friction >= 0 && (friction = matA.friction * matB.friction); + if (friction > 0) { + var mug = friction * world.gravity.length(); + var reducedMass = bodyA.invMass + bodyB.invMass; + reducedMass > 0 && (reducedMass = 1 / reducedMass); + var pool = this.frictionEquationPool; + var c1 = pool.length ? pool.pop() : new FrictionEquation(bodyA, bodyB, mug * reducedMass); + var c2 = pool.length ? pool.pop() : new FrictionEquation(bodyA, bodyB, mug * reducedMass); + c1.bi = c2.bi = bodyA; + c1.bj = c2.bj = bodyB; + c1.minForce = c2.minForce = -mug * reducedMass; + c1.maxForce = c2.maxForce = mug * reducedMass; + c1.ri.copy(contactEquation.ri); + c1.rj.copy(contactEquation.rj); + c2.ri.copy(contactEquation.ri); + c2.rj.copy(contactEquation.rj); + contactEquation.ni.tangents(c1.t, c2.t); + c1.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, world.dt); + c2.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, world.dt); + c1.enabled = c2.enabled = contactEquation.enabled; + outArray.push(c1, c2); + return true; + } + return false; + }; + var averageNormal = new Vec3(); + var averageContactPointA = new Vec3(); + var averageContactPointB = new Vec3(); + Narrowphase.prototype.createFrictionFromAverage = function(numContacts) { + var c = this.result[this.result.length - 1]; + if (!this.createFrictionEquationsFromContact(c, this.frictionResult) || 1 === numContacts) return; + var f1 = this.frictionResult[this.frictionResult.length - 2]; + var f2 = this.frictionResult[this.frictionResult.length - 1]; + averageNormal.setZero(); + averageContactPointA.setZero(); + averageContactPointB.setZero(); + var bodyA = c.bi; + var bodyB = c.bj; + for (var i = 0; i !== numContacts; i++) { + c = this.result[this.result.length - 1 - i]; + if (c.bodyA !== bodyA) { + averageNormal.vadd(c.ni, averageNormal); + averageContactPointA.vadd(c.ri, averageContactPointA); + averageContactPointB.vadd(c.rj, averageContactPointB); + } else { + averageNormal.vsub(c.ni, averageNormal); + averageContactPointA.vadd(c.rj, averageContactPointA); + averageContactPointB.vadd(c.ri, averageContactPointB); + } + } + var invNumContacts = 1 / numContacts; + averageContactPointA.scale(invNumContacts, f1.ri); + averageContactPointB.scale(invNumContacts, f1.rj); + f2.ri.copy(f1.ri); + f2.rj.copy(f1.rj); + averageNormal.normalize(); + averageNormal.tangents(f1.t, f2.t); + }; + var tmpVec1 = new Vec3(); + var tmpVec2 = new Vec3(); + var tmpQuat1 = new Quaternion(); + var tmpQuat2 = new Quaternion(); + Narrowphase.prototype.getContacts = function(p1, p2, world, result, oldcontacts, frictionResult, frictionPool) { + this.contactPointPool = oldcontacts; + this.frictionEquationPool = frictionPool; + this.result = result; + this.frictionResult = frictionResult; + var qi = tmpQuat1; + var qj = tmpQuat2; + var xi = tmpVec1; + var xj = tmpVec2; + for (var k = 0, N = p1.length; k !== N; k++) { + var bi = p1[k], bj = p2[k]; + var bodyContactMaterial = null; + bi.material && bj.material && (bodyContactMaterial = world.getContactMaterial(bi.material, bj.material) || null); + var justTest = false == bi.collisionResponse || false == bj.collisionResponse || bi.type & Body.KINEMATIC && bj.type & Body.STATIC || bi.type & Body.STATIC && bj.type & Body.KINEMATIC || bi.type & Body.KINEMATIC && bj.type & Body.KINEMATIC; + for (var i = 0; i < bi.shapes.length; i++) { + bi.quaternion.mult(bi.shapeOrientations[i], qi); + bi.quaternion.vmult(bi.shapeOffsets[i], xi); + xi.vadd(bi.position, xi); + var si = bi.shapes[i]; + for (var j = 0; j < bj.shapes.length; j++) { + bj.quaternion.mult(bj.shapeOrientations[j], qj); + bj.quaternion.vmult(bj.shapeOffsets[j], xj); + xj.vadd(bj.position, xj); + var sj = bj.shapes[j]; + if (!(si.collisionFilterMask & sj.collisionFilterGroup && sj.collisionFilterMask & si.collisionFilterGroup)) continue; + if (xi.distanceTo(xj) > si.boundingSphereRadius + sj.boundingSphereRadius) continue; + justTest |= false == si.collisionResponse || false == sj.collisionResponse; + var shapeContactMaterial = null; + si.material && sj.material && (shapeContactMaterial = world.getContactMaterial(si.material, sj.material) || null); + this.currentContactMaterial = shapeContactMaterial || bodyContactMaterial || world.defaultContactMaterial; + var resolver = this[si.type | sj.type]; + if (resolver) { + var retval = false; + retval = si.type < sj.type ? resolver.call(this, si, sj, xi, xj, qi, qj, bi, bj, si, sj, justTest) : resolver.call(this, sj, si, xj, xi, qj, qi, bj, bi, si, sj, justTest); + if (retval && justTest) { + world.shapeOverlapKeeper.set(si.id, sj.id); + world.bodyOverlapKeeper.set(bi.id, bj.id); + var data = { + si: si, + sj: sj + }; + world.triggerDic.set(si.id, sj.id, data); + world.oldTriggerDic.set(si.id, sj.id, data); + } + } + } + } + } + }; + var numWarnings = 0; + var maxWarnings = 10; + function warn(msg) { + if (numWarnings > maxWarnings) return; + numWarnings++; + console.warn(msg); + } + Narrowphase.prototype[Shape.types.BOX | Shape.types.BOX] = Narrowphase.prototype.boxBox = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + si.convexPolyhedronRepresentation.material = si.material; + sj.convexPolyhedronRepresentation.material = sj.material; + si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse; + sj.convexPolyhedronRepresentation.collisionResponse = sj.collisionResponse; + return this.convexConvex(si.convexPolyhedronRepresentation, sj.convexPolyhedronRepresentation, xi, xj, qi, qj, bi, bj, si, sj, justTest); + }; + Narrowphase.prototype[Shape.types.BOX | Shape.types.CONVEXPOLYHEDRON] = Narrowphase.prototype.boxConvex = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + si.convexPolyhedronRepresentation.material = si.material; + si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse; + return this.convexConvex(si.convexPolyhedronRepresentation, sj, xi, xj, qi, qj, bi, bj, si, sj, justTest); + }; + Narrowphase.prototype[Shape.types.BOX | Shape.types.PARTICLE] = Narrowphase.prototype.boxParticle = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + si.convexPolyhedronRepresentation.material = si.material; + si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse; + return this.convexParticle(si.convexPolyhedronRepresentation, sj, xi, xj, qi, qj, bi, bj, si, sj, justTest); + }; + Narrowphase.prototype[Shape.types.SPHERE] = Narrowphase.prototype.sphereSphere = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + if (justTest) return xi.distanceSquared(xj) < Math.pow(si.radius + sj.radius, 2); + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + xj.vsub(xi, r.ni); + r.ni.normalize(); + r.ri.copy(r.ni); + r.rj.copy(r.ni); + r.ri.mult(si.radius, r.ri); + r.rj.mult(-sj.radius, r.rj); + r.ri.vadd(xi, r.ri); + r.ri.vsub(bi.position, r.ri); + r.rj.vadd(xj, r.rj); + r.rj.vsub(bj.position, r.rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + }; + var planeTrimesh_normal = new Vec3(); + var planeTrimesh_relpos = new Vec3(); + var planeTrimesh_projected = new Vec3(); + Narrowphase.prototype[Shape.types.PLANE | Shape.types.TRIMESH] = Narrowphase.prototype.planeTrimesh = function(planeShape, trimeshShape, planePos, trimeshPos, planeQuat, trimeshQuat, planeBody, trimeshBody, rsi, rsj, justTest) { + var v = new Vec3(); + var normal = planeTrimesh_normal; + normal.set(0, 0, 1); + planeQuat.vmult(normal, normal); + for (var i = 0; i < trimeshShape.vertices.length / 3; i++) { + trimeshShape.getVertex(i, v); + var v2 = new Vec3(); + v2.copy(v); + Transform.pointToWorldFrame(trimeshPos, trimeshQuat, v2, v); + var relpos = planeTrimesh_relpos; + v.vsub(planePos, relpos); + var dot = normal.dot(relpos); + if (dot <= 0) { + if (justTest) return true; + var r = this.createContactEquation(planeBody, trimeshBody, planeShape, trimeshShape, rsi, rsj); + r.ni.copy(normal); + var projected = planeTrimesh_projected; + normal.scale(relpos.dot(normal), projected); + v.vsub(projected, projected); + r.ri.copy(projected); + r.ri.vsub(planeBody.position, r.ri); + r.rj.copy(v); + r.rj.vsub(trimeshBody.position, r.rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + } + }; + var sphereTrimesh_normal = new Vec3(); + var sphereTrimesh_relpos = new Vec3(); + var sphereTrimesh_projected = new Vec3(); + var sphereTrimesh_v = new Vec3(); + var sphereTrimesh_v2 = new Vec3(); + var sphereTrimesh_edgeVertexA = new Vec3(); + var sphereTrimesh_edgeVertexB = new Vec3(); + var sphereTrimesh_edgeVector = new Vec3(); + var sphereTrimesh_edgeVectorUnit = new Vec3(); + var sphereTrimesh_localSpherePos = new Vec3(); + var sphereTrimesh_tmp = new Vec3(); + var sphereTrimesh_va = new Vec3(); + var sphereTrimesh_vb = new Vec3(); + var sphereTrimesh_vc = new Vec3(); + var sphereTrimesh_localSphereAABB = new AABB(); + var sphereTrimesh_triangles = []; + Narrowphase.prototype[Shape.types.SPHERE | Shape.types.TRIMESH] = Narrowphase.prototype.sphereTrimesh = function(sphereShape, trimeshShape, spherePos, trimeshPos, sphereQuat, trimeshQuat, sphereBody, trimeshBody, rsi, rsj, justTest) { + var edgeVertexA = sphereTrimesh_edgeVertexA; + var edgeVertexB = sphereTrimesh_edgeVertexB; + var edgeVector = sphereTrimesh_edgeVector; + var edgeVectorUnit = sphereTrimesh_edgeVectorUnit; + var localSpherePos = sphereTrimesh_localSpherePos; + var tmp = sphereTrimesh_tmp; + var localSphereAABB = sphereTrimesh_localSphereAABB; + var v2 = sphereTrimesh_v2; + var relpos = sphereTrimesh_relpos; + var triangles = sphereTrimesh_triangles; + Transform.pointToLocalFrame(trimeshPos, trimeshQuat, spherePos, localSpherePos); + var sphereRadius = sphereShape.radius; + localSphereAABB.lowerBound.set(localSpherePos.x - sphereRadius, localSpherePos.y - sphereRadius, localSpherePos.z - sphereRadius); + localSphereAABB.upperBound.set(localSpherePos.x + sphereRadius, localSpherePos.y + sphereRadius, localSpherePos.z + sphereRadius); + trimeshShape.getTrianglesInAABB(localSphereAABB, triangles); + var v = sphereTrimesh_v; + var radiusSquared = sphereShape.radius * sphereShape.radius; + for (var i = 0; i < triangles.length; i++) for (var j = 0; j < 3; j++) { + trimeshShape.getVertex(trimeshShape.indices[3 * triangles[i] + j], v); + v.vsub(localSpherePos, relpos); + if (relpos.norm2() <= radiusSquared) { + v2.copy(v); + Transform.pointToWorldFrame(trimeshPos, trimeshQuat, v2, v); + v.vsub(spherePos, relpos); + if (justTest) return true; + var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape, rsi, rsj); + r.ni.copy(relpos); + r.ni.normalize(); + r.ri.copy(r.ni); + r.ri.scale(sphereShape.radius, r.ri); + r.ri.vadd(spherePos, r.ri); + r.ri.vsub(sphereBody.position, r.ri); + r.rj.copy(v); + r.rj.vsub(trimeshBody.position, r.rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + } + for (var i = 0; i < triangles.length; i++) for (var j = 0; j < 3; j++) { + trimeshShape.getVertex(trimeshShape.indices[3 * triangles[i] + j], edgeVertexA); + trimeshShape.getVertex(trimeshShape.indices[3 * triangles[i] + (j + 1) % 3], edgeVertexB); + edgeVertexB.vsub(edgeVertexA, edgeVector); + localSpherePos.vsub(edgeVertexB, tmp); + var positionAlongEdgeB = tmp.dot(edgeVector); + localSpherePos.vsub(edgeVertexA, tmp); + var positionAlongEdgeA = tmp.dot(edgeVector); + if (positionAlongEdgeA > 0 && positionAlongEdgeB < 0) { + localSpherePos.vsub(edgeVertexA, tmp); + edgeVectorUnit.copy(edgeVector); + edgeVectorUnit.normalize(); + positionAlongEdgeA = tmp.dot(edgeVectorUnit); + edgeVectorUnit.scale(positionAlongEdgeA, tmp); + tmp.vadd(edgeVertexA, tmp); + var dist = tmp.distanceTo(localSpherePos); + if (dist < sphereShape.radius) { + if (justTest) return true; + var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape, rsi, rsj); + tmp.vsub(localSpherePos, r.ni); + r.ni.normalize(); + r.ni.scale(sphereShape.radius, r.ri); + Transform.pointToWorldFrame(trimeshPos, trimeshQuat, tmp, tmp); + tmp.vsub(trimeshBody.position, r.rj); + Transform.vectorToWorldFrame(trimeshQuat, r.ni, r.ni); + Transform.vectorToWorldFrame(trimeshQuat, r.ri, r.ri); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + } + } + var va = sphereTrimesh_va; + var vb = sphereTrimesh_vb; + var vc = sphereTrimesh_vc; + var normal = sphereTrimesh_normal; + for (var i = 0, N = triangles.length; i !== N; i++) { + trimeshShape.getTriangleVertices(triangles[i], va, vb, vc); + trimeshShape.getNormal(triangles[i], normal); + localSpherePos.vsub(va, tmp); + var dist = tmp.dot(normal); + normal.scale(dist, tmp); + localSpherePos.vsub(tmp, tmp); + dist = tmp.distanceTo(localSpherePos); + if (Ray.pointInTriangle(tmp, va, vb, vc) && dist < sphereShape.radius) { + if (justTest) return true; + var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape, rsi, rsj); + tmp.vsub(localSpherePos, r.ni); + r.ni.normalize(); + r.ni.scale(sphereShape.radius, r.ri); + Transform.pointToWorldFrame(trimeshPos, trimeshQuat, tmp, tmp); + tmp.vsub(trimeshBody.position, r.rj); + Transform.vectorToWorldFrame(trimeshQuat, r.ni, r.ni); + Transform.vectorToWorldFrame(trimeshQuat, r.ri, r.ri); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + } + triangles.length = 0; + }; + var point_on_plane_to_sphere = new Vec3(); + var plane_to_sphere_ortho = new Vec3(); + var p_s_ni = new Vec3(); + var p_s_ri = new Vec3(); + var p_s_rj = new Vec3(); + Narrowphase.prototype[Shape.types.SPHERE | Shape.types.PLANE] = Narrowphase.prototype.spherePlane = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + p_s_ni.set(0, 0, 1); + qj.vmult(p_s_ni, p_s_ni); + p_s_ni.negate(p_s_ni); + p_s_ni.normalize(); + p_s_ni.mult(si.radius, p_s_ri); + xi.vsub(xj, point_on_plane_to_sphere); + p_s_ni.mult(p_s_ni.dot(point_on_plane_to_sphere), plane_to_sphere_ortho); + point_on_plane_to_sphere.vsub(plane_to_sphere_ortho, p_s_rj); + if (-point_on_plane_to_sphere.dot(p_s_ni) <= si.radius) { + if (justTest) return true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + r.ni.copy(p_s_ni); + r.ri.copy(p_s_ri); + r.rj.copy(p_s_rj); + var ri = r.ri; + var rj = r.rj; + ri.vadd(xi, ri); + ri.vsub(bi.position, ri); + rj.vadd(xj, rj); + rj.vsub(bj.position, rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + return false; + }; + var pointInPolygon_edge = new Vec3(); + var pointInPolygon_edge_x_normal = new Vec3(); + var pointInPolygon_vtp = new Vec3(); + function pointInPolygon(verts, normal, p) { + var positiveResult = null; + var N = verts.length; + for (var i = 0; i !== N; i++) { + var v = verts[i]; + var edge = pointInPolygon_edge; + verts[(i + 1) % N].vsub(v, edge); + var edge_x_normal = pointInPolygon_edge_x_normal; + edge.cross(normal, edge_x_normal); + var vertex_to_p = pointInPolygon_vtp; + p.vsub(v, vertex_to_p); + var r = edge_x_normal.dot(vertex_to_p); + if (null === positiveResult || r > 0 && true === positiveResult || r <= 0 && false === positiveResult) { + null === positiveResult && (positiveResult = r > 0); + continue; + } + return false; + } + return true; + } + var box_to_sphere = new Vec3(); + var sphereBox_ns = new Vec3(); + var sphereBox_ns1 = new Vec3(); + var sphereBox_ns2 = new Vec3(); + var sphereBox_sides = [ new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3(), new Vec3() ]; + var sphereBox_sphere_to_corner = new Vec3(); + var sphereBox_side_ns = new Vec3(); + var sphereBox_side_ns1 = new Vec3(); + var sphereBox_side_ns2 = new Vec3(); + Narrowphase.prototype[Shape.types.SPHERE | Shape.types.BOX] = Narrowphase.prototype.sphereBox = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + var v3pool = this.v3pool; + var sides = sphereBox_sides; + xi.vsub(xj, box_to_sphere); + sj.getSideNormals(sides, qj); + var R = si.radius; + var penetrating_sides = []; + var found = false; + var side_ns = sphereBox_side_ns; + var side_ns1 = sphereBox_side_ns1; + var side_ns2 = sphereBox_side_ns2; + var side_h = null; + var side_penetrations = 0; + var side_dot1 = 0; + var side_dot2 = 0; + var side_distance = null; + for (var idx = 0, nsides = sides.length; idx !== nsides && false === found; idx++) { + var ns = sphereBox_ns; + ns.copy(sides[idx]); + var h = ns.norm(); + ns.normalize(); + var dot = box_to_sphere.dot(ns); + if (dot < h + R && dot > 0) { + var ns1 = sphereBox_ns1; + var ns2 = sphereBox_ns2; + ns1.copy(sides[(idx + 1) % 3]); + ns2.copy(sides[(idx + 2) % 3]); + var h1 = ns1.norm(); + var h2 = ns2.norm(); + ns1.normalize(); + ns2.normalize(); + var dot1 = box_to_sphere.dot(ns1); + var dot2 = box_to_sphere.dot(ns2); + if (dot1 < h1 && dot1 > -h1 && dot2 < h2 && dot2 > -h2) { + var dist = Math.abs(dot - h - R); + if (null === side_distance || dist < side_distance) { + side_distance = dist; + side_dot1 = dot1; + side_dot2 = dot2; + side_h = h; + side_ns.copy(ns); + side_ns1.copy(ns1); + side_ns2.copy(ns2); + side_penetrations++; + if (justTest) return true; + } + } + } + } + if (side_penetrations) { + found = true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + side_ns.mult(-R, r.ri); + r.ni.copy(side_ns); + r.ni.negate(r.ni); + side_ns.mult(side_h, side_ns); + side_ns1.mult(side_dot1, side_ns1); + side_ns.vadd(side_ns1, side_ns); + side_ns2.mult(side_dot2, side_ns2); + side_ns.vadd(side_ns2, r.rj); + r.ri.vadd(xi, r.ri); + r.ri.vsub(bi.position, r.ri); + r.rj.vadd(xj, r.rj); + r.rj.vsub(bj.position, r.rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + var rj = v3pool.get(); + var sphere_to_corner = sphereBox_sphere_to_corner; + for (var j = 0; 2 !== j && !found; j++) for (var k = 0; 2 !== k && !found; k++) for (var l = 0; 2 !== l && !found; l++) { + rj.set(0, 0, 0); + j ? rj.vadd(sides[0], rj) : rj.vsub(sides[0], rj); + k ? rj.vadd(sides[1], rj) : rj.vsub(sides[1], rj); + l ? rj.vadd(sides[2], rj) : rj.vsub(sides[2], rj); + xj.vadd(rj, sphere_to_corner); + sphere_to_corner.vsub(xi, sphere_to_corner); + if (sphere_to_corner.norm2() < R * R) { + if (justTest) return true; + found = true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + r.ri.copy(sphere_to_corner); + r.ri.normalize(); + r.ni.copy(r.ri); + r.ri.mult(R, r.ri); + r.rj.copy(rj); + r.ri.vadd(xi, r.ri); + r.ri.vsub(bi.position, r.ri); + r.rj.vadd(xj, r.rj); + r.rj.vsub(bj.position, r.rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + } + v3pool.release(rj); + rj = null; + var edgeTangent = v3pool.get(); + var edgeCenter = v3pool.get(); + var r = v3pool.get(); + var orthogonal = v3pool.get(); + var dist = v3pool.get(); + var Nsides = sides.length; + for (var j = 0; j !== Nsides && !found; j++) for (var k = 0; k !== Nsides && !found; k++) if (j % 3 !== k % 3) { + sides[k].cross(sides[j], edgeTangent); + edgeTangent.normalize(); + sides[j].vadd(sides[k], edgeCenter); + r.copy(xi); + r.vsub(edgeCenter, r); + r.vsub(xj, r); + var orthonorm = r.dot(edgeTangent); + edgeTangent.mult(orthonorm, orthogonal); + var l = 0; + while (l === j % 3 || l === k % 3) l++; + dist.copy(xi); + dist.vsub(orthogonal, dist); + dist.vsub(edgeCenter, dist); + dist.vsub(xj, dist); + var tdist = Math.abs(orthonorm); + var ndist = dist.norm(); + if (tdist < sides[l].norm() && ndist < R) { + if (justTest) return true; + found = true; + var res = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + edgeCenter.vadd(orthogonal, res.rj); + res.rj.copy(res.rj); + dist.negate(res.ni); + res.ni.normalize(); + res.ri.copy(res.rj); + res.ri.vadd(xj, res.ri); + res.ri.vsub(xi, res.ri); + res.ri.normalize(); + res.ri.mult(R, res.ri); + res.ri.vadd(xi, res.ri); + res.ri.vsub(bi.position, res.ri); + res.rj.vadd(xj, res.rj); + res.rj.vsub(bj.position, res.rj); + this.result.push(res); + this.createFrictionEquationsFromContact(res, this.frictionResult); + } + } + v3pool.release(edgeTangent, edgeCenter, r, orthogonal, dist); + }; + var convex_to_sphere = new Vec3(); + var sphereConvex_edge = new Vec3(); + var sphereConvex_edgeUnit = new Vec3(); + var sphereConvex_sphereToCorner = new Vec3(); + var sphereConvex_worldCorner = new Vec3(); + var sphereConvex_worldNormal = new Vec3(); + var sphereConvex_worldPoint = new Vec3(); + var sphereConvex_worldSpherePointClosestToPlane = new Vec3(); + var sphereConvex_penetrationVec = new Vec3(); + var sphereConvex_sphereToWorldPoint = new Vec3(); + Narrowphase.prototype[Shape.types.SPHERE | Shape.types.CONVEXPOLYHEDRON] = Narrowphase.prototype.sphereConvex = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + var v3pool = this.v3pool; + xi.vsub(xj, convex_to_sphere); + var normals = sj.faceNormals; + var faces = sj.faces; + var verts = sj.vertices; + var R = si.radius; + var penetrating_sides = []; + for (var i = 0; i !== verts.length; i++) { + var v = verts[i]; + var worldCorner = sphereConvex_worldCorner; + qj.vmult(v, worldCorner); + xj.vadd(worldCorner, worldCorner); + var sphere_to_corner = sphereConvex_sphereToCorner; + worldCorner.vsub(xi, sphere_to_corner); + if (sphere_to_corner.norm2() < R * R) { + if (justTest) return true; + found = true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + r.ri.copy(sphere_to_corner); + r.ri.normalize(); + r.ni.copy(r.ri); + r.ri.mult(R, r.ri); + worldCorner.vsub(xj, r.rj); + r.ri.vadd(xi, r.ri); + r.ri.vsub(bi.position, r.ri); + r.rj.vadd(xj, r.rj); + r.rj.vsub(bj.position, r.rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + return; + } + } + var found = false; + for (var i = 0, nfaces = faces.length; i !== nfaces && false === found; i++) { + var normal = normals[i]; + var face = faces[i]; + var worldNormal = sphereConvex_worldNormal; + qj.vmult(normal, worldNormal); + var worldPoint = sphereConvex_worldPoint; + qj.vmult(verts[face[0]], worldPoint); + worldPoint.vadd(xj, worldPoint); + var worldSpherePointClosestToPlane = sphereConvex_worldSpherePointClosestToPlane; + worldNormal.mult(-R, worldSpherePointClosestToPlane); + xi.vadd(worldSpherePointClosestToPlane, worldSpherePointClosestToPlane); + var penetrationVec = sphereConvex_penetrationVec; + worldSpherePointClosestToPlane.vsub(worldPoint, penetrationVec); + var penetration = penetrationVec.dot(worldNormal); + var worldPointToSphere = sphereConvex_sphereToWorldPoint; + xi.vsub(worldPoint, worldPointToSphere); + if (penetration < 0 && worldPointToSphere.dot(worldNormal) > 0) { + var faceVerts = []; + for (var j = 0, Nverts = face.length; j !== Nverts; j++) { + var worldVertex = v3pool.get(); + qj.vmult(verts[face[j]], worldVertex); + xj.vadd(worldVertex, worldVertex); + faceVerts.push(worldVertex); + } + if (pointInPolygon(faceVerts, worldNormal, xi)) { + if (justTest) return true; + found = true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + worldNormal.mult(-R, r.ri); + worldNormal.negate(r.ni); + var penetrationVec2 = v3pool.get(); + worldNormal.mult(-penetration, penetrationVec2); + var penetrationSpherePoint = v3pool.get(); + worldNormal.mult(-R, penetrationSpherePoint); + xi.vsub(xj, r.rj); + r.rj.vadd(penetrationSpherePoint, r.rj); + r.rj.vadd(penetrationVec2, r.rj); + r.rj.vadd(xj, r.rj); + r.rj.vsub(bj.position, r.rj); + r.ri.vadd(xi, r.ri); + r.ri.vsub(bi.position, r.ri); + v3pool.release(penetrationVec2); + v3pool.release(penetrationSpherePoint); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + for (var j = 0, Nfaceverts = faceVerts.length; j !== Nfaceverts; j++) v3pool.release(faceVerts[j]); + return; + } + for (var j = 0; j !== face.length; j++) { + var v1 = v3pool.get(); + var v2 = v3pool.get(); + qj.vmult(verts[face[(j + 1) % face.length]], v1); + qj.vmult(verts[face[(j + 2) % face.length]], v2); + xj.vadd(v1, v1); + xj.vadd(v2, v2); + var edge = sphereConvex_edge; + v2.vsub(v1, edge); + var edgeUnit = sphereConvex_edgeUnit; + edge.unit(edgeUnit); + var p = v3pool.get(); + var v1_to_xi = v3pool.get(); + xi.vsub(v1, v1_to_xi); + var dot = v1_to_xi.dot(edgeUnit); + edgeUnit.mult(dot, p); + p.vadd(v1, p); + var xi_to_p = v3pool.get(); + p.vsub(xi, xi_to_p); + if (dot > 0 && dot * dot < edge.norm2() && xi_to_p.norm2() < R * R) { + if (justTest) return true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + p.vsub(xj, r.rj); + p.vsub(xi, r.ni); + r.ni.normalize(); + r.ni.mult(R, r.ri); + r.rj.vadd(xj, r.rj); + r.rj.vsub(bj.position, r.rj); + r.ri.vadd(xi, r.ri); + r.ri.vsub(bi.position, r.ri); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + for (var j = 0, Nfaceverts = faceVerts.length; j !== Nfaceverts; j++) v3pool.release(faceVerts[j]); + v3pool.release(v1); + v3pool.release(v2); + v3pool.release(p); + v3pool.release(xi_to_p); + v3pool.release(v1_to_xi); + return; + } + v3pool.release(v1); + v3pool.release(v2); + v3pool.release(p); + v3pool.release(xi_to_p); + v3pool.release(v1_to_xi); + } + for (var j = 0, Nfaceverts = faceVerts.length; j !== Nfaceverts; j++) v3pool.release(faceVerts[j]); + } + } + }; + var planeBox_normal = new Vec3(); + var plane_to_corner = new Vec3(); + Narrowphase.prototype[Shape.types.PLANE | Shape.types.BOX] = Narrowphase.prototype.planeBox = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + sj.convexPolyhedronRepresentation.material = sj.material; + sj.convexPolyhedronRepresentation.collisionResponse = sj.collisionResponse; + sj.convexPolyhedronRepresentation.id = sj.id; + return this.planeConvex(si, sj.convexPolyhedronRepresentation, xi, xj, qi, qj, bi, bj, si, sj, justTest); + }; + var planeConvex_v = new Vec3(); + var planeConvex_normal = new Vec3(); + var planeConvex_relpos = new Vec3(); + var planeConvex_projected = new Vec3(); + Narrowphase.prototype[Shape.types.PLANE | Shape.types.CONVEXPOLYHEDRON] = Narrowphase.prototype.planeConvex = function(planeShape, convexShape, planePosition, convexPosition, planeQuat, convexQuat, planeBody, convexBody, si, sj, justTest) { + var worldVertex = planeConvex_v, worldNormal = planeConvex_normal; + worldNormal.set(0, 0, 1); + planeQuat.vmult(worldNormal, worldNormal); + var numContacts = 0; + var relpos = planeConvex_relpos; + for (var i = 0; i !== convexShape.vertices.length; i++) { + worldVertex.copy(convexShape.vertices[i]); + convexQuat.vmult(worldVertex, worldVertex); + convexPosition.vadd(worldVertex, worldVertex); + worldVertex.vsub(planePosition, relpos); + var dot = worldNormal.dot(relpos); + if (dot <= 0) { + if (justTest) return true; + var r = this.createContactEquation(planeBody, convexBody, planeShape, convexShape, si, sj); + var projected = planeConvex_projected; + worldNormal.mult(worldNormal.dot(relpos), projected); + worldVertex.vsub(projected, projected); + projected.vsub(planePosition, r.ri); + r.ni.copy(worldNormal); + worldVertex.vsub(convexPosition, r.rj); + r.ri.vadd(planePosition, r.ri); + r.ri.vsub(planeBody.position, r.ri); + r.rj.vadd(convexPosition, r.rj); + r.rj.vsub(convexBody.position, r.rj); + this.result.push(r); + numContacts++; + this.enableFrictionReduction || this.createFrictionEquationsFromContact(r, this.frictionResult); + } + } + this.enableFrictionReduction && numContacts && this.createFrictionFromAverage(numContacts); + }; + var convexConvex_sepAxis = new Vec3(); + var convexConvex_q = new Vec3(); + Narrowphase.prototype[Shape.types.CONVEXPOLYHEDRON] = Narrowphase.prototype.convexConvex = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest, faceListA, faceListB) { + var sepAxis = convexConvex_sepAxis; + if (xi.distanceTo(xj) > si.boundingSphereRadius + sj.boundingSphereRadius) return; + if (si.findSeparatingAxis(sj, xi, qi, xj, qj, sepAxis, faceListA, faceListB)) { + var res = []; + var q = convexConvex_q; + si.clipAgainstHull(xi, qi, sj, xj, qj, sepAxis, -100, 100, res); + var numContacts = 0; + for (var j = 0; j !== res.length; j++) { + if (justTest) return true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj), ri = r.ri, rj = r.rj; + sepAxis.negate(r.ni); + res[j].normal.negate(q); + q.mult(res[j].depth, q); + res[j].point.vadd(q, ri); + rj.copy(res[j].point); + ri.vsub(xi, ri); + rj.vsub(xj, rj); + ri.vadd(xi, ri); + ri.vsub(bi.position, ri); + rj.vadd(xj, rj); + rj.vsub(bj.position, rj); + this.result.push(r); + numContacts++; + this.enableFrictionReduction || this.createFrictionEquationsFromContact(r, this.frictionResult); + } + this.enableFrictionReduction && numContacts && this.createFrictionFromAverage(numContacts); + } + }; + var particlePlane_normal = new Vec3(); + var particlePlane_relpos = new Vec3(); + var particlePlane_projected = new Vec3(); + Narrowphase.prototype[Shape.types.PLANE | Shape.types.PARTICLE] = Narrowphase.prototype.planeParticle = function(sj, si, xj, xi, qj, qi, bj, bi, rsi, rsj, justTest) { + var normal = particlePlane_normal; + normal.set(0, 0, 1); + bj.quaternion.vmult(normal, normal); + var relpos = particlePlane_relpos; + xi.vsub(bj.position, relpos); + var dot = normal.dot(relpos); + if (dot <= 0) { + if (justTest) return true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + r.ni.copy(normal); + r.ni.negate(r.ni); + r.ri.set(0, 0, 0); + var projected = particlePlane_projected; + normal.mult(normal.dot(xi), projected); + xi.vsub(projected, projected); + r.rj.copy(projected); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + }; + var particleSphere_normal = new Vec3(); + Narrowphase.prototype[Shape.types.PARTICLE | Shape.types.SPHERE] = Narrowphase.prototype.sphereParticle = function(sj, si, xj, xi, qj, qi, bj, bi, rsi, rsj, justTest) { + var normal = particleSphere_normal; + normal.set(0, 0, 1); + xi.vsub(xj, normal); + var lengthSquared = normal.norm2(); + if (lengthSquared <= sj.radius * sj.radius) { + if (justTest) return true; + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + normal.normalize(); + r.rj.copy(normal); + r.rj.mult(sj.radius, r.rj); + r.ni.copy(normal); + r.ni.negate(r.ni); + r.ri.set(0, 0, 0); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } + }; + var cqj = new Quaternion(); + var convexParticle_local = new Vec3(); + var convexParticle_normal = new Vec3(); + var convexParticle_penetratedFaceNormal = new Vec3(); + var convexParticle_vertexToParticle = new Vec3(); + var convexParticle_worldPenetrationVec = new Vec3(); + Narrowphase.prototype[Shape.types.PARTICLE | Shape.types.CONVEXPOLYHEDRON] = Narrowphase.prototype.convexParticle = function(sj, si, xj, xi, qj, qi, bj, bi, rsi, rsj, justTest) { + var penetratedFaceIndex = -1; + var penetratedFaceNormal = convexParticle_penetratedFaceNormal; + var worldPenetrationVec = convexParticle_worldPenetrationVec; + var minPenetration = null; + var numDetectedFaces = 0; + var local = convexParticle_local; + local.copy(xi); + local.vsub(xj, local); + qj.conjugate(cqj); + cqj.vmult(local, local); + if (sj.pointIsInside(local)) { + sj.worldVerticesNeedsUpdate && sj.computeWorldVertices(xj, qj); + sj.worldFaceNormalsNeedsUpdate && sj.computeWorldFaceNormals(qj); + for (var i = 0, nfaces = sj.faces.length; i !== nfaces; i++) { + var verts = [ sj.worldVertices[sj.faces[i][0]] ]; + var normal = sj.worldFaceNormals[i]; + xi.vsub(verts[0], convexParticle_vertexToParticle); + var penetration = -normal.dot(convexParticle_vertexToParticle); + if (null === minPenetration || Math.abs(penetration) < Math.abs(minPenetration)) { + if (justTest) return true; + minPenetration = penetration; + penetratedFaceIndex = i; + penetratedFaceNormal.copy(normal); + numDetectedFaces++; + } + } + if (-1 !== penetratedFaceIndex) { + var r = this.createContactEquation(bi, bj, si, sj, rsi, rsj); + penetratedFaceNormal.mult(minPenetration, worldPenetrationVec); + worldPenetrationVec.vadd(xi, worldPenetrationVec); + worldPenetrationVec.vsub(xj, worldPenetrationVec); + r.rj.copy(worldPenetrationVec); + penetratedFaceNormal.negate(r.ni); + r.ri.set(0, 0, 0); + var ri = r.ri, rj = r.rj; + ri.vadd(xi, ri); + ri.vsub(bi.position, ri); + rj.vadd(xj, rj); + rj.vsub(bj.position, rj); + this.result.push(r); + this.createFrictionEquationsFromContact(r, this.frictionResult); + } else console.warn("Point found inside convex, but did not find penetrating face!"); + } + }; + Narrowphase.prototype[Shape.types.BOX | Shape.types.HEIGHTFIELD] = Narrowphase.prototype.boxHeightfield = function(si, sj, xi, xj, qi, qj, bi, bj, rsi, rsj, justTest) { + si.convexPolyhedronRepresentation.material = si.material; + si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse; + return this.convexHeightfield(si.convexPolyhedronRepresentation, sj, xi, xj, qi, qj, bi, bj, si, sj, justTest); + }; + var convexHeightfield_tmp1 = new Vec3(); + var convexHeightfield_tmp2 = new Vec3(); + var convexHeightfield_faceList = [ 0 ]; + Narrowphase.prototype[Shape.types.CONVEXPOLYHEDRON | Shape.types.HEIGHTFIELD] = Narrowphase.prototype.convexHeightfield = function(convexShape, hfShape, convexPos, hfPos, convexQuat, hfQuat, convexBody, hfBody, rsi, rsj, justTest) { + var data = hfShape.data, w = hfShape.elementSize, radius = convexShape.boundingSphereRadius, worldPillarOffset = convexHeightfield_tmp2, faceList = convexHeightfield_faceList; + var localConvexPos = convexHeightfield_tmp1; + Transform.pointToLocalFrame(hfPos, hfQuat, convexPos, localConvexPos); + var iMinX = Math.floor((localConvexPos.x - radius) / w) - 1, iMaxX = Math.ceil((localConvexPos.x + radius) / w) + 1, iMinY = Math.floor((localConvexPos.y - radius) / w) - 1, iMaxY = Math.ceil((localConvexPos.y + radius) / w) + 1; + if (iMaxX < 0 || iMaxY < 0 || iMinX > data.length || iMinY > data[0].length) return; + iMinX < 0 && (iMinX = 0); + iMaxX < 0 && (iMaxX = 0); + iMinY < 0 && (iMinY = 0); + iMaxY < 0 && (iMaxY = 0); + iMinX >= data.length && (iMinX = data.length - 1); + iMaxX >= data.length && (iMaxX = data.length - 1); + iMaxY >= data[0].length && (iMaxY = data[0].length - 1); + iMinY >= data[0].length && (iMinY = data[0].length - 1); + var minMax = []; + hfShape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax); + var min = minMax[0]; + var max = minMax[1]; + if (localConvexPos.z - radius > max || localConvexPos.z + radius < min) return; + for (var i = iMinX; i < iMaxX; i++) for (var j = iMinY; j < iMaxY; j++) { + var intersecting = false; + hfShape.getConvexTrianglePillar(i, j, false); + Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset); + convexPos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + convexShape.boundingSphereRadius && (intersecting = this.convexConvex(convexShape, hfShape.pillarConvex, convexPos, worldPillarOffset, convexQuat, hfQuat, convexBody, hfBody, rsi, rsj, justTest, faceList, null)); + if (justTest && intersecting) return true; + hfShape.getConvexTrianglePillar(i, j, true); + Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset); + convexPos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + convexShape.boundingSphereRadius && (intersecting = this.convexConvex(convexShape, hfShape.pillarConvex, convexPos, worldPillarOffset, convexQuat, hfQuat, convexBody, hfBody, rsi, rsj, justTest, faceList, null)); + if (justTest && intersecting) return true; + } + }; + var sphereHeightfield_tmp1 = new Vec3(); + var sphereHeightfield_tmp2 = new Vec3(); + Narrowphase.prototype[Shape.types.SPHERE | Shape.types.HEIGHTFIELD] = Narrowphase.prototype.sphereHeightfield = function(sphereShape, hfShape, spherePos, hfPos, sphereQuat, hfQuat, sphereBody, hfBody, rsi, rsj, justTest) { + var data = hfShape.data, radius = sphereShape.radius, w = hfShape.elementSize, worldPillarOffset = sphereHeightfield_tmp2; + var localSpherePos = sphereHeightfield_tmp1; + Transform.pointToLocalFrame(hfPos, hfQuat, spherePos, localSpherePos); + var iMinX = Math.floor((localSpherePos.x - radius) / w) - 1, iMaxX = Math.ceil((localSpherePos.x + radius) / w) + 1, iMinY = Math.floor((localSpherePos.y - radius) / w) - 1, iMaxY = Math.ceil((localSpherePos.y + radius) / w) + 1; + if (iMaxX < 0 || iMaxY < 0 || iMinX > data.length || iMinY > data[0].length) return; + iMinX < 0 && (iMinX = 0); + iMaxX < 0 && (iMaxX = 0); + iMinY < 0 && (iMinY = 0); + iMaxY < 0 && (iMaxY = 0); + iMinX >= data.length && (iMinX = data.length - 1); + iMaxX >= data.length && (iMaxX = data.length - 1); + iMaxY >= data[0].length && (iMaxY = data[0].length - 1); + iMinY >= data[0].length && (iMinY = data[0].length - 1); + var minMax = []; + hfShape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax); + var min = minMax[0]; + var max = minMax[1]; + if (localSpherePos.z - radius > max || localSpherePos.z + radius < min) return; + var result = this.result; + for (var i = iMinX; i < iMaxX; i++) for (var j = iMinY; j < iMaxY; j++) { + var numContactsBefore = result.length; + var intersecting = false; + hfShape.getConvexTrianglePillar(i, j, false); + Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset); + spherePos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + sphereShape.boundingSphereRadius && (intersecting = this.sphereConvex(sphereShape, hfShape.pillarConvex, spherePos, worldPillarOffset, sphereQuat, hfQuat, sphereBody, hfBody, sphereShape, hfShape, justTest)); + if (justTest && intersecting) return true; + hfShape.getConvexTrianglePillar(i, j, true); + Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset); + spherePos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + sphereShape.boundingSphereRadius && (intersecting = this.sphereConvex(sphereShape, hfShape.pillarConvex, spherePos, worldPillarOffset, sphereQuat, hfQuat, sphereBody, hfBody, sphereShape, hfShape, justTest)); + if (justTest && intersecting) return true; + var numContacts = result.length - numContactsBefore; + if (numContacts > 2) return; + } + }; + }, { + "../collision/AABB": 3, + "../collision/Ray": 10, + "../equations/ContactEquation": 20, + "../equations/FrictionEquation": 22, + "../math/Quaternion": 30, + "../math/Transform": 31, + "../math/Vec3": 32, + "../objects/Body": 33, + "../shapes/ConvexPolyhedron": 40, + "../shapes/Shape": 45, + "../solver/Solver": 49, + "../utils/Vec3Pool": 56 + } ], + 58: [ function(_dereq_, module, exports) { + module.exports = World; + var Shape = _dereq_("../shapes/Shape"); + var Vec3 = _dereq_("../math/Vec3"); + var Quaternion = _dereq_("../math/Quaternion"); + var GSSolver = _dereq_("../solver/GSSolver"); + var ContactEquation = _dereq_("../equations/ContactEquation"); + var FrictionEquation = _dereq_("../equations/FrictionEquation"); + var Narrowphase = _dereq_("./Narrowphase"); + var EventTarget = _dereq_("../utils/EventTarget"); + var ArrayCollisionMatrix = _dereq_("../collision/ArrayCollisionMatrix"); + var ObjectCollisionMatrix = _dereq_("../collision/ObjectCollisionMatrix"); + var OverlapKeeper = _dereq_("../collision/OverlapKeeper"); + var Material = _dereq_("../material/Material"); + var ContactMaterial = _dereq_("../material/ContactMaterial"); + var Body = _dereq_("../objects/Body"); + var TupleDictionary = _dereq_("../utils/TupleDictionary"); + var RaycastResult = _dereq_("../collision/RaycastResult"); + var AABB = _dereq_("../collision/AABB"); + var Ray = _dereq_("../collision/Ray"); + var NaiveBroadphase = _dereq_("../collision/NaiveBroadphase"); + function World(options) { + options = options || {}; + EventTarget.apply(this); + this.dt = -1; + this.allowSleep = !!options.allowSleep; + this.contacts = []; + this.frictionEquations = []; + this.quatNormalizeSkip = void 0 !== options.quatNormalizeSkip ? options.quatNormalizeSkip : 0; + this.quatNormalizeFast = void 0 !== options.quatNormalizeFast && options.quatNormalizeFast; + this.time = 0; + this.timeFixed = 0; + this.stepnumber = 0; + this.default_dt = 1 / 60; + this.nextId = 0; + this.gravity = new Vec3(); + options.gravity && this.gravity.copy(options.gravity); + this.broadphase = void 0 !== options.broadphase ? options.broadphase : new NaiveBroadphase(); + this.bodies = []; + this.solver = void 0 !== options.solver ? options.solver : new GSSolver(); + this.constraints = []; + this.narrowphase = new Narrowphase(this); + this.collisionMatrix = new ArrayCollisionMatrix(); + this.collisionMatrixPrevious = new ArrayCollisionMatrix(); + this.bodyOverlapKeeper = new OverlapKeeper(); + this.shapeOverlapKeeper = new OverlapKeeper(); + this.materials = []; + this.contactmaterials = []; + this.contactMaterialTable = new TupleDictionary(); + this.defaultMaterial = new Material("default"); + this.defaultContactMaterial = new ContactMaterial(this.defaultMaterial, this.defaultMaterial, { + friction: .3, + restitution: 0 + }); + this.doProfiling = false; + this.profile = { + solve: 0, + makeContactConstraints: 0, + broadphase: 0, + integrate: 0, + narrowphase: 0 + }; + this.accumulator = 0; + this.subsystems = []; + this.addBodyEvent = { + type: "addBody", + body: null + }; + this.removeBodyEvent = { + type: "removeBody", + body: null + }; + this.idToBodyMap = {}; + this.broadphase.setWorld(this); + this.substeps = 0; + this.cm = new ObjectCollisionMatrix(); + this.tm = new ObjectCollisionMatrix(); + this.triggerDic = new TupleDictionary(); + this.oldTriggerDic = new TupleDictionary(); + this.contactsDic = new TupleDictionary(); + this.oldContactsDic = new TupleDictionary(); + } + World.idToBodyMap = {}; + World.idToShapeMap = {}; + World.prototype = new EventTarget(); + var tmpAABB1 = new AABB(); + var tmpArray1 = []; + var tmpRay = new Ray(); + World.prototype.getContactMaterial = function(m1, m2) { + return this.contactMaterialTable.get(m1.id, m2.id); + }; + World.prototype.numObjects = function() { + return this.bodies.length; + }; + World.prototype.collisionMatrixTick = function() { + var temp = this.collisionMatrixPrevious; + this.collisionMatrixPrevious = this.collisionMatrix; + this.collisionMatrix = temp; + this.collisionMatrix.reset(); + this.bodyOverlapKeeper.tick(); + this.shapeOverlapKeeper.tick(); + }; + World.prototype.add = World.prototype.addBody = function(body) { + World.SLEEPING = false; + if (-1 !== this.bodies.indexOf(body)) return; + body.index = this.bodies.length; + this.bodies.push(body); + body.world = this; + body.initPosition.copy(body.position); + body.initVelocity.copy(body.velocity); + body.timeLastSleepy = this.time; + if (body instanceof Body) { + body.initAngularVelocity.copy(body.angularVelocity); + body.initQuaternion.copy(body.quaternion); + } + this.collisionMatrix.setNumObjects(this.bodies.length); + this.addBodyEvent.body = body; + this.cm.setNumObjects(this.bodies.length); + World.idToBodyMap[body.id] = body; + this.dispatchEvent(this.addBodyEvent); + }; + World.prototype.addConstraint = function(c) { + World.SLEEPING = false; + this.constraints.push(c); + }; + World.prototype.removeConstraint = function(c) { + World.SLEEPING = false; + var idx = this.constraints.indexOf(c); + -1 !== idx && this.constraints.splice(idx, 1); + }; + World.prototype.rayTest = function(from, to, result) { + result instanceof RaycastResult ? this.raycastClosest(from, to, { + skipBackfaces: true + }, result) : this.raycastAll(from, to, { + skipBackfaces: true + }, result); + }; + World.prototype.raycastAll = function(from, to, options, callback) { + options.mode = Ray.ALL; + options.from = from; + options.to = to; + options.callback = callback; + return tmpRay.intersectWorld(this, options); + }; + World.prototype.raycastAny = function(from, to, options, result) { + options.mode = Ray.ANY; + options.from = from; + options.to = to; + options.result = result; + return tmpRay.intersectWorld(this, options); + }; + World.prototype.raycastClosest = function(from, to, options, result) { + options.mode = Ray.CLOSEST; + options.from = from; + options.to = to; + options.result = result; + return tmpRay.intersectWorld(this, options); + }; + World.prototype.remove = function(body) { + World.SLEEPING = false; + body.world = null; + var n = this.bodies.length - 1, bodies = this.bodies, idx = bodies.indexOf(body); + if (-1 !== idx) { + bodies.splice(idx, 1); + for (var i = 0; i !== bodies.length; i++) bodies[i].index = i; + this.collisionMatrix.setNumObjects(n); + this.removeBodyEvent.body = body; + delete World.idToBodyMap[body.id]; + this.cm.setNumObjects(n); + this.dispatchEvent(this.removeBodyEvent); + } + }; + World.prototype.removeBody = World.prototype.remove; + World.prototype.getBodyById = function(id) { + return World.idToBodyMap[id]; + }; + World.prototype.getShapeById = function(id) { + return World.idToShapeMap[id]; + }; + World.prototype.addMaterial = function(m) { + this.materials.push(m); + }; + World.prototype.addContactMaterial = function(cmat) { + this.contactmaterials.push(cmat); + this.contactMaterialTable.set(cmat.materials[0].id, cmat.materials[1].id, cmat); + }; + "undefined" === typeof performance && (performance = {}); + if (!performance.now) { + var nowOffset = Date.now(); + performance.timing && performance.timing.navigationStart && (nowOffset = performance.timing.navigationStart); + performance.now = function() { + return Date.now() - nowOffset; + }; + } + var step_tmp1 = new Vec3(); + World.prototype.step = function(dt, timeSinceLastCalled, maxSubSteps) { + maxSubSteps = maxSubSteps || 10; + timeSinceLastCalled = timeSinceLastCalled || 0; + if (0 === timeSinceLastCalled) { + this.internalStep(dt); + this.time += dt; + this.substeps = 1; + } else { + this.accumulator += timeSinceLastCalled; + this.substeps = 0; + while (this.accumulator >= dt && this.substeps < maxSubSteps) { + this.internalStep(dt); + this.accumulator -= dt; + this.substeps++; + } + var t = this.accumulator % dt / dt; + for (var j = 0; j !== this.bodies.length; j++) { + var b = this.bodies[j]; + b.previousPosition.lerp(b.position, t, b.interpolatedPosition); + b.previousQuaternion.slerp(b.quaternion, t, b.interpolatedQuaternion); + b.previousQuaternion.normalize(); + } + this.time += timeSinceLastCalled; + } + }; + var World_step_postStepEvent = { + type: "postStep" + }, World_step_preStepEvent = { + type: "preStep" + }, World_step_collideEvent = { + type: "collide", + body: null, + contact: null + }, World_step_oldContacts = [], World_step_frictionEquationPool = [], World_step_p1 = [], World_step_p2 = [], World_step_gvec = new Vec3(), World_step_vi = new Vec3(), World_step_vj = new Vec3(), World_step_wi = new Vec3(), World_step_wj = new Vec3(), World_step_t1 = new Vec3(), World_step_t2 = new Vec3(), World_step_rixn = new Vec3(), World_step_rjxn = new Vec3(), World_step_step_q = new Quaternion(), World_step_step_w = new Quaternion(), World_step_step_wq = new Quaternion(), invI_tau_dt = new Vec3(); + World.prototype.internalStep = function(dt) { + this.dt = dt; + var world = this, that = this, contacts = this.contacts, p1 = World_step_p1, p2 = World_step_p2, N = this.numObjects(), bodies = this.bodies, solver = this.solver, gravity = this.gravity, doProfiling = this.doProfiling, profile = this.profile, DYNAMIC = Body.DYNAMIC, profilingStart, constraints = this.constraints, frictionEquationPool = World_step_frictionEquationPool, gnorm = gravity.norm(), gx = gravity.x, gy = gravity.y, gz = gravity.z, i = 0; + doProfiling && (profilingStart = performance.now()); + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + if (bi.useGravity && bi.type === DYNAMIC) { + var f = bi.force, m = bi.mass; + f.x += m * gx; + f.y += m * gy; + f.z += m * gz; + } + } + for (var i = 0, Nsubsystems = this.subsystems.length; i !== Nsubsystems; i++) this.subsystems[i].update(); + doProfiling && (profilingStart = performance.now()); + p1.length = 0; + p2.length = 0; + this.broadphase.collisionPairs(this, p1, p2); + doProfiling && (profile.broadphase = performance.now() - profilingStart); + var Nconstraints = constraints.length; + for (i = 0; i !== Nconstraints; i++) { + var c = constraints[i]; + if (!c.collideConnected) for (var j = p1.length - 1; j >= 0; j -= 1) if (c.bodyA === p1[j] && c.bodyB === p2[j] || c.bodyB === p1[j] && c.bodyA === p2[j]) { + p1.splice(j, 1); + p2.splice(j, 1); + } + } + this.collisionMatrixTick(); + doProfiling && (profilingStart = performance.now()); + var oldcontacts = World_step_oldContacts; + var NoldContacts = contacts.length; + for (i = 0; i !== NoldContacts; i++) oldcontacts.push(contacts[i]); + contacts.length = 0; + var NoldFrictionEquations = this.frictionEquations.length; + for (i = 0; i !== NoldFrictionEquations; i++) frictionEquationPool.push(this.frictionEquations[i]); + this.frictionEquations.length = 0; + this.narrowphase.getContacts(p1, p2, this, contacts, oldcontacts, this.frictionEquations, frictionEquationPool); + if (0 == contacts.length && World.SLEEPING) return; + doProfiling && (profile.narrowphase = performance.now() - profilingStart); + doProfiling && (profilingStart = performance.now()); + for (var i = 0; i < this.frictionEquations.length; i++) solver.addEquation(this.frictionEquations[i]); + var ncontacts = contacts.length; + for (var k = 0; k !== ncontacts; k++) { + var c = contacts[k]; + var bi = c.bi, bj = c.bj, si = c.si, sj = c.sj; + si.material && sj.material ? si.material.restitution >= 0 && sj.material.restitution >= 0 && (c.restitution = si.material.restitution * sj.material.restitution) : bi.material && bj.material && bi.material.restitution >= 0 && bj.material.restitution >= 0 && (c.restitution = bi.material.restitution * bj.material.restitution); + solver.addEquation(c); + if (bi.allowSleep && bi.type === Body.DYNAMIC && bi.sleepState === Body.SLEEPING && bj.sleepState === Body.AWAKE && bj.type !== Body.STATIC) { + var speedSquaredB = bj.velocity.norm2() + bj.angularVelocity.norm2(); + var speedLimitSquaredB = Math.pow(bj.sleepSpeedLimit, 2); + speedSquaredB >= 2 * speedLimitSquaredB && (bi._wakeUpAfterNarrowphase = true); + } + if (bj.allowSleep && bj.type === Body.DYNAMIC && bj.sleepState === Body.SLEEPING && bi.sleepState === Body.AWAKE && bi.type !== Body.STATIC) { + var speedSquaredA = bi.velocity.norm2() + bi.angularVelocity.norm2(); + var speedLimitSquaredA = Math.pow(bi.sleepSpeedLimit, 2); + speedSquaredA >= 2 * speedLimitSquaredA && (bj._wakeUpAfterNarrowphase = true); + } + this.collisionMatrix.set(bi, bj, true); + if (!this.collisionMatrixPrevious.get(bi, bj)) { + World_step_collideEvent.body = bj; + World_step_collideEvent.contact = c; + bi.dispatchEvent(World_step_collideEvent); + World_step_collideEvent.body = bi; + bj.dispatchEvent(World_step_collideEvent); + } + this.bodyOverlapKeeper.set(bi.id, bj.id); + this.shapeOverlapKeeper.set(si.id, sj.id); + } + this.emitContactEvents(); + if (doProfiling) { + profile.makeContactConstraints = performance.now() - profilingStart; + profilingStart = performance.now(); + } + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + if (bi._wakeUpAfterNarrowphase) { + bi.wakeUp(); + bi._wakeUpAfterNarrowphase = false; + } + } + var Nconstraints = constraints.length; + for (i = 0; i !== Nconstraints; i++) { + var c = constraints[i]; + c.update(); + for (var j = 0, Neq = c.equations.length; j !== Neq; j++) { + var eq = c.equations[j]; + solver.addEquation(eq); + } + } + solver.solve(dt, this); + doProfiling && (profile.solve = performance.now() - profilingStart); + solver.removeAllEquations(); + var pow = Math.pow; + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + if (bi.type & DYNAMIC) { + var ld = pow(1 - bi.linearDamping, dt); + var v = bi.velocity; + v.mult(ld, v); + var av = bi.angularVelocity; + if (av) { + var ad = pow(1 - bi.angularDamping, dt); + av.mult(ad, av); + } + } + } + this.dispatchEvent(World_step_preStepEvent); + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + bi.preStep && bi.preStep.call(bi); + } + doProfiling && (profilingStart = performance.now()); + var stepnumber = this.stepnumber; + var quatNormalize = stepnumber % (this.quatNormalizeSkip + 1) === 0; + var quatNormalizeFast = this.quatNormalizeFast; + for (i = 0; i !== N; i++) bodies[i].integrate(dt, quatNormalize, quatNormalizeFast); + this.clearForces(); + this.broadphase.dirty = true; + doProfiling && (profile.integrate = performance.now() - profilingStart); + this.time += dt; + this.timeFixed += dt; + this.stepnumber += 1; + this.dispatchEvent(World_step_postStepEvent); + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + var postStep = bi.postStep; + postStep && postStep.call(bi); + } + if (this.allowSleep) { + for (i = 0; i !== N; i++) bodies[i].sleepTick(this.time); + World.SLEEPING = true; + for (i = 0; i !== N; i++) { + var bi = bodies[i]; + if (bi.type != Body.STATIC && !bi.isSleeping()) { + World.SLEEPING = false; + break; + } + } + } else World.SLEEPING = false; + }; + World.prototype.emitContactEvents = function() { + var additions = []; + var removals = []; + var beginContactEvent = { + type: "beginContact", + bodyA: null, + bodyB: null + }; + var endContactEvent = { + type: "endContact", + bodyA: null, + bodyB: null + }; + var beginShapeContactEvent = { + type: "beginShapeContact", + bodyA: null, + bodyB: null, + shapeA: null, + shapeB: null + }; + var endShapeContactEvent = { + type: "endShapeContact", + bodyA: null, + bodyB: null, + shapeA: null, + shapeB: null + }; + return function() { + var hasBeginContact = this.hasAnyEventListener("beginContact"); + var hasEndContact = this.hasAnyEventListener("endContact"); + (hasBeginContact || hasEndContact) && this.bodyOverlapKeeper.getDiff(additions, removals); + if (hasBeginContact) { + for (var i = 0, l = additions.length; i < l; i += 2) { + beginContactEvent.bodyA = this.getBodyById(additions[i]); + beginContactEvent.bodyB = this.getBodyById(additions[i + 1]); + this.dispatchEvent(beginContactEvent); + } + beginContactEvent.bodyA = beginContactEvent.bodyB = null; + } + if (hasEndContact) { + for (var i = 0, l = removals.length; i < l; i += 2) { + endContactEvent.bodyA = this.getBodyById(removals[i]); + endContactEvent.bodyB = this.getBodyById(removals[i + 1]); + this.dispatchEvent(endContactEvent); + } + endContactEvent.bodyA = endContactEvent.bodyB = null; + } + additions.length = removals.length = 0; + var hasBeginShapeContact = this.hasAnyEventListener("beginShapeContact"); + var hasEndShapeContact = this.hasAnyEventListener("endShapeContact"); + (hasBeginShapeContact || hasEndShapeContact) && this.shapeOverlapKeeper.getDiff(additions, removals); + if (hasBeginShapeContact) { + for (var i = 0, l = additions.length; i < l; i += 2) { + var shapeA = this.getShapeById(additions[i]); + var shapeB = this.getShapeById(additions[i + 1]); + beginShapeContactEvent.shapeA = shapeA; + beginShapeContactEvent.shapeB = shapeB; + beginShapeContactEvent.bodyA = shapeA.body; + beginShapeContactEvent.bodyB = shapeB.body; + this.dispatchEvent(beginShapeContactEvent); + } + beginShapeContactEvent.bodyA = beginShapeContactEvent.bodyB = beginShapeContactEvent.shapeA = beginShapeContactEvent.shapeB = null; + } + if (hasEndShapeContact) { + for (var i = 0, l = removals.length; i < l; i += 2) { + var shapeA = this.getShapeById(removals[i]); + var shapeB = this.getShapeById(removals[i + 1]); + endShapeContactEvent.shapeA = shapeA; + endShapeContactEvent.shapeB = shapeB; + endShapeContactEvent.bodyA = shapeA.body; + endShapeContactEvent.bodyB = shapeB.body; + this.dispatchEvent(endShapeContactEvent); + } + endShapeContactEvent.bodyA = endShapeContactEvent.bodyB = endShapeContactEvent.shapeA = endShapeContactEvent.shapeB = null; + } + }; + }(); + World.prototype.clearForces = function() { + var bodies = this.bodies; + var N = bodies.length; + for (var i = 0; i !== N; i++) { + var b = bodies[i], force = b.force, tau = b.torque; + b.force.set(0, 0, 0); + b.torque.set(0, 0, 0); + } + }; + var cc_trigger = { + type: "cc-trigger", + event: "", + selfBody: null, + otherBody: null, + selfShape: null, + otherShape: null + }; + var cc_collide = { + type: "cc-collide", + event: "", + body: null, + selfShape: null, + otherShape: null, + contacts: null + }; + var cc_oldContacts = []; + World.prototype.emitTriggeredEvents = function() { + if (0 == this.substeps) return; + var key; + var data; + var i = this.triggerDic.getLength(); + while (i--) { + key = this.triggerDic.getKeyByIndex(i); + data = this.triggerDic.getDataByKey(key); + if (null == data) continue; + var shapeA = data.si; + var shapeB = data.sj; + if (this.tm.get(shapeA, shapeB)) cc_trigger.event = "onTriggerStay"; else { + this.tm.set(shapeA, shapeB, true); + cc_trigger.event = "onTriggerEnter"; + } + cc_trigger.selfShape = shapeA; + cc_trigger.otherShape = shapeB; + cc_trigger.selfBody = shapeA.body; + cc_trigger.otherBody = shapeB.body; + shapeA.dispatchEvent(cc_trigger); + cc_trigger.selfShape = shapeB; + cc_trigger.otherShape = shapeA; + cc_trigger.selfBody = shapeB.body; + cc_trigger.otherBody = shapeA.body; + shapeB.dispatchEvent(cc_trigger); + } + i = this.oldTriggerDic.getLength(); + while (i > 0) { + i--; + key = this.oldTriggerDic.getKeyByIndex(i); + if (null != this.triggerDic.getDataByKey(key)) continue; + data = this.oldTriggerDic.getDataByKey(key); + if (null == data) continue; + var shapeA = data.si; + var shapeB = data.sj; + this.tm.set(shapeA, shapeB, false); + this.oldTriggerDic.del(shapeA.id, shapeB.id) && i--; + cc_trigger.event = "onTriggerExit"; + cc_trigger.selfShape = shapeA; + cc_trigger.otherShape = shapeB; + cc_trigger.selfBody = shapeA.body; + cc_trigger.otherBody = shapeB.body; + shapeA.dispatchEvent(cc_trigger); + cc_trigger.selfShape = shapeB; + cc_trigger.otherShape = shapeA; + cc_trigger.selfBody = shapeB.body; + cc_trigger.otherBody = shapeA.body; + shapeB.dispatchEvent(cc_trigger); + } + this.triggerDic.reset(); + }; + World.prototype.emitCollisionEvents = function() { + if (0 == this.substeps) return; + var contacts = this.contacts; + var i = this.contacts.length; + while (i--) { + var c = contacts[i]; + var si = c.si; + var sj = c.sj; + var item = this.contactsDic.get(si.id, sj.id); + null == item && (item = this.contactsDic.set(si.id, sj.id, [])); + item.push(c); + } + var key; + var data; + var i = this.contactsDic.getLength(); + while (i--) { + key = this.contactsDic.getKeyByIndex(i); + data = this.contactsDic.getDataByKey(key); + if (null == data) continue; + var si = data[0].si; + var sj = data[0].sj; + var bi = si.body; + var bj = sj.body; + if (this.cm.get(bi, bj)) cc_collide.event = "onCollisionStay"; else { + this.cm.set(bi, bj, true); + cc_collide.event = "onCollisionEnter"; + } + cc_collide.bi = bi; + cc_collide.contact = data[0]; + cc_collide.contacts = data; + cc_collide.body = bj; + cc_collide.selfShape = si; + cc_collide.otherShape = sj; + bi.dispatchEvent(cc_collide); + cc_collide.body = bi; + cc_collide.selfShape = sj; + cc_collide.otherShape = si; + bj.dispatchEvent(cc_collide); + } + var oldcontacts = cc_oldContacts; + for (i = oldcontacts.length; i--; ) { + var c = oldcontacts[i]; + var si = c.si; + var sj = c.sj; + null == this.oldContactsDic.get(si.id, sj.id) && this.oldContactsDic.set(si.id, sj.id, c); + } + i = this.oldContactsDic.getLength(); + while (i--) { + key = this.oldContactsDic.getKeyByIndex(i); + if (null == this.contactsDic.getDataByKey(key)) { + data = this.oldContactsDic.getDataByKey(key); + var si = data.si; + var sj = data.sj; + var bi = si.body; + var bj = sj.body; + if (this.cm.get(bi, bj) && (!bi.isSleeping() || !bj.isSleeping())) { + this.cm.set(bi, bj, false); + cc_collide.bi = bi; + cc_collide.contact = data; + cc_collide.event = "onCollisionExit"; + cc_collide.body = bj; + cc_collide.selfShape = si; + cc_collide.otherShape = sj; + cc_collide.contacts.length = 0; + cc_collide.contacts.push(data); + bi.dispatchEvent(cc_collide); + cc_collide.body = bi; + cc_collide.selfShape = sj; + cc_collide.otherShape = si; + bj.dispatchEvent(cc_collide); + } + } + } + this.contactsDic.reset(); + this.oldContactsDic.reset(); + World_step_oldContacts = cc_oldContacts; + cc_oldContacts = this.contacts.slice(); + this.contacts.length = 0; + }; + }, { + "../collision/AABB": 3, + "../collision/ArrayCollisionMatrix": 4, + "../collision/NaiveBroadphase": 7, + "../collision/ObjectCollisionMatrix": 8, + "../collision/OverlapKeeper": 9, + "../collision/Ray": 10, + "../collision/RaycastResult": 11, + "../equations/ContactEquation": 20, + "../equations/FrictionEquation": 22, + "../material/ContactMaterial": 25, + "../material/Material": 26, + "../math/Quaternion": 30, + "../math/Vec3": 32, + "../objects/Body": 33, + "../shapes/Shape": 45, + "../solver/GSSolver": 48, + "../utils/EventTarget": 51, + "../utils/TupleDictionary": 54, + "./Narrowphase": 57 + } ] + }, {}, [ 2 ])(2); + }); + }).call(this, "undefined" !== typeof global ? global : "undefined" !== typeof self ? self : "undefined" !== typeof window ? window : {}); + }, {} ] +}, {}, [ 10, 9 ]); \ No newline at end of file diff --git a/static/cocos-build/web-mobile/splash.png b/static/cocos-build/web-mobile/splash.png new file mode 100644 index 0000000..708c9eb Binary files /dev/null and b/static/cocos-build/web-mobile/splash.png differ diff --git a/static/cocos-build/web-mobile/src/settings.js b/static/cocos-build/web-mobile/src/settings.js new file mode 100644 index 0000000..2c36641 --- /dev/null +++ b/static/cocos-build/web-mobile/src/settings.js @@ -0,0 +1,19 @@ +window._CCSettings = { + platform: "web-mobile", + groupList: [ + "default" + ], + collisionMatrix: [ + [ + true + ] + ], + hasResourcesBundle: false, + hasStartSceneBundle: false, + remoteBundles: [], + subpackages: [], + launchScene: "db://assets/Scene/helloworld.fire", + orientation: "", + debug: true, + jsList: [] +}; diff --git a/static/cocos-build/web-mobile/style-desktop.css b/static/cocos-build/web-mobile/style-desktop.css new file mode 100644 index 0000000..44c9989 --- /dev/null +++ b/static/cocos-build/web-mobile/style-desktop.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.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/static/cocos-build/web-mobile/style-mobile.css b/static/cocos-build/web-mobile/style-mobile.css new file mode 100644 index 0000000..6184846 --- /dev/null +++ b/static/cocos-build/web-mobile/style-mobile.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.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/static/cocos-loader/creator-load.js b/static/cocos-loader/creator-load.js new file mode 100644 index 0000000..3bd9316 --- /dev/null +++ b/static/cocos-loader/creator-load.js @@ -0,0 +1,64 @@ +/* eslint-disable no-undef */ +const GAME_INIT = (cbFN) => { + 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; + + var jsList = settings.jsList + + if (jsList) { + jsList = jsList.map(function (x) { + return './static/cocos-build/web-mobile/src/' + x + }) + } + + 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, + } + + // init assets + cc.AssetLibrary.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); + if (!err) + cc.game.run(option, () => { + cbFN && cbFN() + }); + }); + } + } + + 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); + } + + // cc.game.run(option, () => { + // cb && cb() + // }) +} + +export default GAME_INIT diff --git a/static/css/element-variables.scss b/static/css/element-variables.scss new file mode 100644 index 0000000..d6fefc4 --- /dev/null +++ b/static/css/element-variables.scss @@ -0,0 +1,7 @@ +/* 改变主题色变量 */ + +$--color-primary: #f3d031; +/* 改变 icon 字体路径变量,必需 */ + +$--font-path: '~element-ui/lib/theme-chalk/fonts'; +@import "~element-ui/packages/theme-chalk/src/index"; \ No newline at end of file diff --git a/static/css/reset.css b/static/css/reset.css new file mode 100644 index 0000000..6caab57 --- /dev/null +++ b/static/css/reset.css @@ -0,0 +1,1418 @@ +@charset "UTF-8"; +/*-- 当前变量 --*/ + +/* @import url(wxCode.css); */ + +html, +body, +div, +span, +input, +button, +figure, +i, +h1, +h2, +h3, +h4, +h5, +h6, +em, +img, +strong, +sub, +sup, +tt, +dd, +dl, +dt, +form, +label, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +ul, +ol, +li, +p, +a { + margin: 0; + padding: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: normal; +} + +html, +body { + height: 100%; + /* background: #f4f4f4; */ + background: #f2f3f4; + color: #555; + font-size: 14px; + font-family: "Arial", "Microsoft YaHei", "黑体", "宋体", sans-serif; +} + +input, +textarea, +select, +button { + font-family: inherit; + font-size: 14px; + border: 0; + outline: none; +} + +button::-moz-focus-inner, +input[type="button"]::-moz-focus-inner { + border: none; + padding: 0; +} + +body { + font: 14px/1.5 "PingFang SC", "Lantinghei SC", "Microsoft YaHei", "HanHei SC", "Helvetica Neue", "Open Sans", Arial, "Hiragino Sans GB", "微软雅黑", "STHeiti", "WenQuanYi Micro Hei", SimSun, sans-serif; +} + +img { + border: 0; +} + +ul li { + list-style-type: none; +} + +a { + text-decoration: none; + color: inherit; +} + +a:hover { + text-decoration: none; +} + +a[class|=btn] { + display: inline-block; + vertical-align: top; + *vertical-align: auto; + zoom: 1; + *display: inline; +} + +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +i { + font-style: normal; +} + +b { + font-weight: normal; +} + +main { + display: block; +} + +input:-webkit-autofill, +textarea:-webkit-autofill, +select:-webkit-autofill { + background-color: #FFFFFF !important; + background-image: none !important; + color: #333 !important; + -webkit-box-shadow: 0 0 0px 1000px #f4f4f4 inset; +} + +input:-webkit-autofill:focus, +textarea:-webkit-autofill:focus { + -webkit-box-shadow: 0 0 0px 1000px #ffffff inset; +} + +input[type=text]:focus, +input[type=password]:focus, +textarea:focus { + background: #ffffff; +} + +#body, +#login-body { + min-height: 100%; + position: relative; + padding-bottom: 206px; + background: #f4f4f4; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#login-body { + /* background: url("../images/login-ground.jpg") no-repeat; */ + -moz-background-size: cover; + -webkit-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +.main-wrapper { + margin-bottom: 40px; +} + +.block { + display: block; +} + +.left { + float: left; +} + +.right { + float: right; +} + +.clear { + clear: both; +} + +.mt-10 { + margin-top: 10px; +} + +div.mt-20, +a.mt-20 { + margin-top: 20px; +} + +.mt-30 { + margin-top: 30px; +} + +.pt-30 { + padding-top: 30px; +} + +.clearfix:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +.clearfix { + zoom: 1; +} + +.ranking-new { + font-size: 12px; + background: #F34D37; + display: inline-block; + color: #FFFFFF; + border-radius: 8px; + padding: 0 6px; + line-height: 16px; + margin-left: 8px; +} + +.container-area { + margin: 20px auto 0; + *zoom: 1; +} + +.container-area:after { + content: ""; + display: table; +} + +.container-area:after { + clear: both; +} + +.border-bottom { + border-bottom: 1px solid #eeeeee; +} + +.border-top { + border-top: 1px solid #eeeeee; +} + +.border-radius-top { + border-radius: 4px 4px 0 0; +} + +.border-radius-bottom { + border-radius: 0 0 4px 4px; +} + +.hightlight { + color: #f4523b; +} + +.btn-default-secondary { + color: #666666; + background: transparent; + border: 1px solid #bbbbbb; + border-radius: 4px; + cursor: pointer; + text-align: center; +} + +.btn-default-secondary:hover { + color: #444444; + background: transparent; + border: 1px solid #999999; +} + +.btn-disabled { + color: #bbbbbb; + background: #eeeeee; + border: 1px solid #eeeeee; + border-radius: 4px; + cursor: pointer; + text-align: center; + cursor: default; +} + +.disabled { + color: #bbbbbb !important; + cursor: default !important; +} + +.disabled-color { + color: #bbbbbb !important; + cursor: default !important; +} + +.btn-current-big { + width: 320px; + height: 42px; + font-size: 16px; +} + +.btn-current-middle { + width: 118px; + height: 36px; + line-height: 36px; + font-size: 14px; + margin: 0 10px; +} + +.btn-small { + width: 76px; + height: 28px; + line-height: 28px; + text-align: center; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-default-loading { + color: #444444; + background: #ffd100; + border: 1px solid #ffd100; + border-radius: 4px; + cursor: pointer; + text-align: center; +} + +.btn-current-null { + min-width: 126px; + height: 36px; + padding: 0 19px; + line-height: 36px; +} + +.mask-layer-full-screen { + width: 100%; + height: 100%; + position: fixed; + top: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 2; +} + +.closebtn { + width: 20px; + height: 20px; + /* background: url(../images/svg/shanchuxiao.svg) no-repeat; */ + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + cursor: pointer; +} + +.main-wrapper .main-wrapper-advlong-top { + padding: 20px 0; + background: #ffffff; +} + +.mCSB_inside>.mCSB_container { + margin: 0; +} + +.mCSB_scrollTools a+.mCSB_draggerContainer { + margin: 6px 0; +} + +.zcool-link-color { + color: #d36f16; + cursor: pointer; +} + +.alert-confirm, +.pop-up-confirm { + padding: 0 0 83px; +} + +.alert-confirm .tips-text-normal, +.pop-up-confirm .tips-text-normal { + position: absolute; + top: 50%; + margin-top: -12px; +} + +.alert-confirm .tips-text-normal .medium-text, +.pop-up-confirm .tips-text-normal .medium-text { + font-size: 14px; +} + +.alert-confirm .tips-text-normal .large-text, +.pop-up-confirm .tips-text-normal .large-text { + color: #444444; +} + +.alert-confirm .tips-text, +.pop-up-confirm .tips-text { + width: 100%; + font-size: 16px; + text-align: center; + color: #666666; + padding: 56px 30px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.pop-up-normal { + padding: 30px 0; +} + +.pop-up-normal .medium-text { + font-size: 14px; +} + +.pop-up-normal .large-text { + color: #444444; +} + +.pop-up-normal .tips-text { + width: 100%; + font-size: 16px; + text-align: center; + color: #666666; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.pop-up-normal, +.alert-confirm, +.pop-up-confirm { + width: 300px; + background: #ffffff; + color: #444444; + position: fixed; + top: 50%; + left: 50%; + margin-left: -150px; + margin-top: -120px; + display: block; + vertical-align: middle; + z-index: 13; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.pop-up-normal .pop-btn-con, +.alert-confirm .pop-btn-con, +.pop-up-confirm .pop-btn-con { + position: absolute; + bottom: 20px; +} + +.pop-up-normal .pop-confirm, +.pop-up-normal .pop-cancel, +.alert-confirm .pop-confirm, +.alert-confirm .pop-cancel, +.pop-up-confirm .pop-confirm, +.pop-up-confirm .pop-cancel { + font-size: 14px; +} + +.pop-up-normal .pop-btn-con, +.pop-up-confirm .pop-btn-con { + width: 100%; +} + +.alert-confirm .pop-btn-con { + left: 50%; + margin-left: -68px; +} + +.toast-success, +.toast-fail { + padding: 30px; + text-align: center; + z-index: 14; + width: 300px; + min-height: 200px; + background: #ffffff; + color: #444444; + position: fixed; + top: 50%; + left: 50%; + margin-left: -150px; + margin-top: -120px; + display: block; + vertical-align: middle; + z-index: 150; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.toast-success .toast-tips-text, +.toast-fail .toast-tips-text { + font-size: 16px; + margin-top: 14px; +} + +.toast-success .toast-socend-text, +.toast-fail .toast-socend-text { + font-size: 14px; +} + +.toast-pictrue { + width: 132px; + height: 100px; + background-repeat: no-repeat; + background-position: center; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; +} + +.error-color { + color: #f4523b; +} + +.checkbox-wrap label { + height: 14px; + line-height: 1; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + cursor: pointer; +} + +.checkbox-wrap input[type="checkbox"] { + opacity: 0; + margin-right: 10px; + vertical-align: middle; + cursor: pointer; +} + +.check-c { + margin-right: 10px; + /* background: url("../images/common/checkbox.svg") no-repeat 0 0; */ + background-size: 14px; +} + +.check-cd { + margin-right: 10px; + /* background: url("../images/common/checkboxed.svg") no-repeat; */ + background-size: 14px; +} + +.submission { + cursor: default; +} + +.leaveout-tips { + padding: 16px; + text-align: center; + position: absolute; + left: 50%; + background: #ffffff; + display: none; + z-index: 4; + top: 26px; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); +} + +.leaveout-tips img { + vertical-align: middle; +} + +.leaveout-tips:before { + content: ""; + display: block; + width: 30px; + height: 13px; + /* background: url(../images/poptriangle.png) no-repeat; */ + position: absolute; + top: -13px; + left: 50%; + margin-left: -15px; +} + +.air-bubble { + width: 235px; + padding: 20px 28px; + color: #666666; + background-color: #282828; + position: absolute; + left: 50%; + margin-left: -111px; + z-index: 3; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.air-bubble .recommend-notlogin { + color: #d36f16; + margin-right: 5px; + cursor: pointer; +} + +.air-bubble:before { + content: ""; + display: block; + border: 10px solid transparent; + border-bottom: 10px solid #282828; + position: absolute; + top: -20px; + left: 50%; + margin-left: -10px; +} + +.air-bubble-tips { + padding: 20px; + color: #666666; + background-color: #282828; + font-size: 12px; + position: absolute; + top: 40px; + right: 22px; + z-index: 9; + display: none; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.air-bubble-tips .recommend-notlogin { + color: #d36f16; + margin-right: 5px; + cursor: pointer; +} + +.air-bubble-tips:before { + content: ""; + display: block; + border: 10px solid transparent; + border-bottom: 10px solid #282828; + position: absolute; + top: -20px; + left: 50%; + margin-left: -10px; +} + +.tab-nav-fixed { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 11; + -webkit-transform: translateZ(0); +} + +.section-title { + line-height: 14px; + margin: 30px 0 20px 0; + position: relative; + color: #444444; +} + +.section-title .filtrate { + color: #444444; +} + +.section-title .filtrate .specific-symbol { + display: inline-block; + /* background: url("../images/selectarrow.png") no-repeat; */ + width: 12px; + height: 7px; + margin: 0 0px 1px 6px; +} + +.section-title a { + position: absolute; + right: 0; + color: #d36f16; +} + +.section-title a .specific-symbol { + display: inline-block; + /* background: url("../images/all-right-arrow.png") no-repeat; */ + width: 6px; + height: 9px; +} + +.auto-select { + line-height: 14px; +} + +.auto-select input { + vertical-align: middle; + opacity: 0; +} + +.auto-select .new-user-register { + float: right; + color: #d36f16; +} + +.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar.hoverscroll { + background-color: rgba(0, 0, 0, 0.2); + transition: all linear 0.2s; +} + +.mCS-dark.mCSB_scrollTools .mCSB_draggerRail { + background-color: rgba(0, 0, 0, 0.1); +} + +.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, +.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar { + background-color: rgba(0, 0, 0, 0.2); +} + +.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar, +.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar { + background-color: rgba(0, 0, 0, 0.2); +} + +.work-null { + width: 100%; + margin-top: 20px; + text-align: center; + background: #ffffff; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.work-null .work-null-inner { + padding: 40px 0; +} + +.work-null .work-null-inner .null-images { + display: inline-block; + /* background: url("../images/null-page-draw.png") no-repeat; */ + width: 280px; + height: 165px; + background-size: 280px; + vertical-align: middle; +} + +.work-null .work-null-inner .work-null-tips { + text-align: center; + color: #666666; + margin-top: 26px; +} + +.work-null .work-null-inner .work-null-tips .subject-title { + color: #444444; + font-size: 16px; +} + +.work-null .work-null-inner .work-null-tips .subhead-title { + font-size: 14px; +} + +.work-null .work-null-inner .btn-current-null { + margin-top: 16px; +} + +.work-null-nobg { + background: transparent; +} + +.msg-box-null { + text-align: center; + height: 225px; + position: absolute; + top: 0px; + left: 61px; + cursor: default; +} + +.msg-box-null .msg-box-inner { + padding-top: 40px; +} + +.msg-box-null .msg-box-inner .null-images { + display: inline-block; + /* background: url("../images/null-page-draw.png") no-repeat; */ + background-size: 180px; + width: 180px; + height: 121px; + vertical-align: middle; +} + +.msg-box-null .msg-box-inner .msg-null-tips { + line-height: 20px; + padding: 0; + margin-top: 0px; + display: block; +} + +.more-leaveout { + height: 16px; + margin-left: -2px; + cursor: pointer; + position: relative; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + display: none; +} + +.more-leaveout img { + width: 16px; + height: 16px; +} + +.more-leaveout:hover .leaveout-tips { + display: block; +} + +.active-filter-down .flat .selected:hover { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.textarea-common-style { + background: #f2f2f2; + border: 1px solid #dddddd; + border-radius: 4px; + resize: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.text-style { + height: 42px; + padding-left: 20px; + padding-right: 20px; + color: #666666; + font-size: 14px; + border: 1px solid #dddddd; + background: #f4f4f4; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.text-style.text-withcount { + padding-right: 40px; +} + +.textarea-style, +.textarea-style2 { + width: 100%; + height: 42px; + max-height: 134px; + padding: 10px 20px; + color: #666666; + font-size: 14px; + border: 1px solid #dddddd; + background: #f4f4f4; + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + overflow: hidden; + resize: none; +} + +.textarea-style2 { + height: 108px; + overflow-y: auto; +} + +.textarea-style.text-withcount { + padding-right: 50px; +} + +.bg-box-radius { + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + background: #ffffff; +} + +.ptb-6 { + padding: 6px 0; +} + +.pop-login { + position: fixed; + top: 100px; + left: 50%; + margin-left: -200px; + z-index: 13; +} + +.login-box { + position: relative; +} + +.member-login { + margin-top: -5px; + padding-bottom: 20px; + text-align: left; + border-bottom: 1px solid #eaeaea; +} + +.body-fixed, +.confirm-body-fixed { + overflow: hidden; +} + +.fixed-card { + position: fixed; + top: 0; +} + +.scroll-fixed { + padding-right: 17px; +} + +.cursor-default { + cursor: default; +} + +.error-prompt { + color: #f14538; + font-size: 12px; +} + +.error-prompt .error-icon { + width: 24px; + height: 24px; + margin-right: 10px; + font-style: normal; + color: #ffffff; + text-align: center; + line-height: 24px; + background: #f14538; + border-radius: 50%; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; +} + +.verify-code-form { + width: 120px; + height: 42px; + color: #666666; + background: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.verify-code-form:hover { + border: 1px solid #999999; +} + +.radio label { + height: 16px; + line-height: 1; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; +} + +.radio label input { + opacity: 0; + margin-right: 10px; + cursor: pointer; +} + +.empty { + font-size: 14px; + color: #666666; + text-align: center; + line-height: 156px; +} + +#page-loading { + margin: 6px 0 26px 0; + text-align: center; +} + +.pinlun-loadding { + text-align: center; + margin: 6px 0 26px 0; +} + +.loading { + text-align: center; + padding: 30px 0; + line-height: 200px; +} + +.error-pictrue { + text-align: center; +} + +.error-pictrue .error-content { + width: 100%; + font-size: 16px; + color: #282828; + background-repeat: no-repeat; + background-position: center top; + position: absolute; + top: 50%; + margin-top: -242px; +} + +.five-error-pictrue { + height: 100%; + text-align: center; +} + +.five-error-pictrue .error-content { + width: 100%; + padding-top: 165px; + font-size: 16px; + color: #282828; +} + +.zcool-skip-inner { + text-align: center; + margin-top: 70px; +} + +.zcool-skip-inner .zcool-skip-tips { + font-size: 16px; + color: #444444; +} + +.zcool-skip-inner .skip-images { + /* background: url("../../common/images/skip404.png") no-repeat; */ + width: 179px; + height: 179px; + margin: 30px auto; +} + +.zcool-skip-inner .time-tips { + font-size: 14px; + color: #444444; + margin-bottom: 24px; +} + +.zcool-skip-inner .time-tips span { + color: #ea4335; +} + +.zcool-skip-inner .btn-default-secondary { + background: #f4f4f4; +} + +.zcool-skip-inner .btn-current-skip { + width: 118px; + height: 40px; + line-height: 40px; +} + +@media screen and (max-width: 1200px) { + header, + main, + #footer, + #body { + width: 1200px; + } +} + +.ellipsis { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.main-bg-color { + background: #ffd100; + color: #333333; +} + +.main-link-color { + color: #d36f16; +} + +.hide { + display: none; +} + +.medium-title { + font-size: 14px; + color: #666666; +} + +.select-shixin-arrow { + display: inline-block; + width: 11px; + height: 6px; + margin-left: 10px; + /* background: url(../images/common/shixinjiantou.svg) no-repeat; */ +} + +.center-section-wrap { + width: 900px; + margin: 30px auto 0; + background: #ffffff; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + overflow: hidden; +} + +.trade-tips { + color: #bbbbbb; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; + margin-bottom: 20px; +} + +.arrowhead-style { + color: #bbbbbb; +} + +.select-scroll-box { + max-height: 200px; +} + +.popFace.scrollbar, +.scrollbar { + overflow: hidden; + overflow-y: scroll; +} + +.scrollbar::-webkit-scrollbar { + width: 4px; + background-color: #f2f2f2; +} + +.scrollbar::-webkit-scrollbar-track { + border-radius: 50px; + background-color: transparent; +} + +.flat .old option { + display: none; + height: 0; + border: 0; + outline: none; +} + +/*定义滑块,内阴影及圆角*/ + +.scrollbar::-webkit-scrollbar-thumb { + height: 40px; + border-radius: 50px; + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2); + background-color: rgba(0, 0, 0, 0.2); +} + +.text-ifram { + position: relative; +} + +.counter { + position: absolute; + right: 20px; + font-style: normal; + font-size: 12px; + color: #999999; +} + +.count { + position: absolute; + line-height: 1; + right: 20px; + font-style: normal; + font-size: 12px; + color: #999999; + bottom: 15px; +} + +input[type=text]:focus, +input[type=password]:focus, +textarea:focus { + background: #ffffff; + color: #444444; +} + +input[type='text'].borderred, +textarea.borderred { + border: 1px solid #f4523b !important; +} + +.warning, +.exceeded { + color: #F00 !important; +} + +.shade { + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + position: fixed; + top: 0; + left: 0; + z-index: 12; +} + +.pop-up, +.conutry-area-code-wrap { + color: #444444; + background: #ffffff; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + position: fixed; + left: 50%; + top: 50%; + z-index: 13; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.conutry-area-code-wrap { + width: 334px; + position: absolute; + left: 0; + top: 46px; +} + +.popup-title { + padding: 20px 30px 20px; + font-size: 14px; + line-height: 14px; + border-bottom: 1px solid #eeeeee; +} + +.popup-con { + padding: 30px; +} + +.pop-subtitle { + margin-top: 25px; + font-size: 14px; +} + +.login-close, +.pop-close, +.small-close { + width: 15px; + height: 15px; + /* background: url(../images/common/guanbi.svg) no-repeat; */ + cursor: pointer; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; +} + +.login-close { + position: absolute; + top: 35px; + right: 40px; +} + +.pop-close, +.small-close { + position: absolute; + right: 30px; + top: 20px; +} + +.pop-confirm, +.pop-cancel { + width: 120px; + height: 36px; + margin: 20px 8px 0; +} + +.ul-select { + max-height: 200px; +} + +.text-center { + text-align: center; +} + +.redwarn { + width: 4px; + height: 4px; + background: #f14538; + border-radius: 50%; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + display: inline-block; + vertical-align: middle; + *vertical-align: auto; + zoom: 1; + *display: inline; +} + +.pt20 { + padding: 0 20px; +} + +.project-view { + overflow-y: auto; +} + +.v-show-content { + /* markdown背景色 */ + background: #fff !important; +} + +.help-content .v-note-panel { + /* markdown边框 */ + box-shadow: none !important; +} + +/*公共类*/ + +.fl { + float: left +} + +.fr { + float: right +} + +.al { + text-align: left +} + +.ac { + text-align: center +} + +.ar { + text-align: right +} + +.hide { + display: none +} + +.clearfix:after { + content: '\0020'; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.clearfix:after { + content: '\0020'; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* .content-type .el-badge__content.is-fixed { + top: 28px !important; + right: 36px !important; +} */ \ No newline at end of file diff --git a/static/img/cover/helloworld1.jpg b/static/img/cover/helloworld1.jpg new file mode 100644 index 0000000..73da25b Binary files /dev/null and b/static/img/cover/helloworld1.jpg differ diff --git a/static/img/cover/helloworld2.jpg b/static/img/cover/helloworld2.jpg new file mode 100644 index 0000000..be176cd Binary files /dev/null and b/static/img/cover/helloworld2.jpg differ diff --git a/static/img/head.jpg b/static/img/head.jpg new file mode 100644 index 0000000..33fdc62 Binary files /dev/null and b/static/img/head.jpg differ diff --git a/static/img/loading-yy.gif b/static/img/loading-yy.gif new file mode 100644 index 0000000..153785d Binary files /dev/null and b/static/img/loading-yy.gif differ diff --git a/static/img/nodata.png b/static/img/nodata.png new file mode 100644 index 0000000..93970d7 Binary files /dev/null and b/static/img/nodata.png differ diff --git a/static/img/wordBg.png b/static/img/wordBg.png new file mode 100644 index 0000000..955f5ce Binary files /dev/null and b/static/img/wordBg.png differ diff --git a/static/js/EventBus.js b/static/js/EventBus.js new file mode 100644 index 0000000..0d081b3 --- /dev/null +++ b/static/js/EventBus.js @@ -0,0 +1,179 @@ +/** + * 实现发布-订阅模式下的消息传输机制,支持命名空间与离线事件 + * @param {string} [key] 事件的名称 + * @param {function} [fn] 事件的回调 + * @param {string} [last] 是否只执行最后一次绑定的消息 last ==“last”时只执行最后一次绑定的消息,否则执行之前所有绑定的消息 + * + * @example + * 1.常规 + * eventBus.on('click',function(a){ + * console.log(a) // 输出 :1 + * }) + * eventBus.emit('click',1) + * + * 2. 先发布后订阅 + * eventBus.emit('click',1) + * eventBus.on('click',function(a){ + * console.log(a) // 输出 :1 + * }) + * + * 3.使用命名空间 + * eventBus.create('namespace1').on('click',function(a){ + * console.log(a) // 输出 :1 + * }) + * eventBus.create('namespace1').emit('click',1) + * + * auth by guoqiang + * 注意:支持离线事件可能会带来一些副作用,比如意外的某个页面发布了某个消息,这时如果另一个订阅了这个消息,这个消息的回调会立即执行,而且大多请况下,回调的参数会出问题。在逻辑没理清之前不建议先发布再订阅 + * 注意:支持离线事件可能会带来一些副作用,比如意外的某个页面发布了某个消息,这时如果另一个订阅了这个消息,这个消息的回调会立即执行,而且大多请况下,回调的参数会出问题。在逻辑没理清之前不建议先发布再订阅 + * 注意:支持离线事件可能会带来一些副作用,比如意外的某个页面发布了某个消息,这时如果另一个订阅了这个消息,这个消息的回调会立即执行,而且大多请况下,回调的参数会出问题。在逻辑没理清之前不建议先发布再订阅 + */ +(function(window, undefined) { + var _subscribe = null, + _publish = null, + _unsubscribe = null, + _shift = Array.prototype.shift, // 删除数组的第一个 元素,并返回这个元素 + _unshift = Array.prototype.unshift, // 在数组的开头添加一个或者多个元素,并返回数组新的length值 + namespaceCache = {}, + _create = null, + each = function(ary, fn) { + var ret = null; + for (var i = 0, len = ary.length; i < len; i++) { + var n = ary[i]; + ret = fn.call(n, i, n); + } + return ret; + }; + + // 订阅消息名称为:'+key+' + _subscribe = function(key, fn, cache) { + if (!cache[key]) { + cache[key] = []; + } + cache[key].push(fn); + }; + + // 取消订阅(取消全部或者指定消息) + _unsubscribe = function(key, cache, fn) { + if (cache[key]) { + if (fn) { + for (var i = cache[key].length; i >= 0; i--) { + if (cache[key][i] === fn) { + cache[key].splice(i, 1); + } + } + } else { + cache[key] = []; + } + } else if (!key) { + for (var key in cache) { + delete cache[key]; + } + } else { + console.log("不存在该消息的监听:" + key); + } + }; + + // 发布消息 + _publish = function() { + var cache = _shift.call(arguments), + key = _shift.call(arguments), + args = arguments, + _self = this, + ret = null, + stack = cache[key]; + + if (!stack || !stack.length) { + return; + } + + return each(stack, function() { + return this.apply(_self, args); + }); + }; + + // 创建命名空间 + _create = function(namespace) { + var namespace = namespace || "default"; + var cache = {}, + offlineStack = {}, // 离线事件,用于先发布后订阅,只执行一次 + ret = { + on: function(key, fn, last) { + _subscribe(key, fn, cache); + if (!offlineStack[key]) { + offlineStack[key] = null; + return; + } + if (last === "last") { + // 指定执行离线队列的最后一个函数,执行完成之后删除 + offlineStack[key].length && offlineStack[key].pop()(); // [].pop => 删除一个数组中的最后的一个元素,并且返回这个元素 + } else { + each(offlineStack[key], function() { + this(); + }); + } + offlineStack[key] = null; + }, + one: function(key, fn, last) { + _unsubscribe(key, cache); + this.on(key, fn, last); + }, + off: function(key, fn) { + _unsubscribe(key, cache, fn); + }, + emit: function() { + var fn = null, + args = null, + key = _shift.call(arguments), + _self = this; + + _unshift.call(arguments, cache, key); + args = arguments; + fn = function() { + return _publish.apply(_self, args); + }; + + if (offlineStack && offlineStack[key] === undefined) { + offlineStack[key] = []; + return offlineStack[key].push(fn); + } + return fn(); + } + }; + + return namespace + ? namespaceCache[namespace] + ? namespaceCache[namespace] + : (namespaceCache[namespace] = ret) + : ret; + }; + + window.eventBus = { + create: _create, // 创建命名空间 + one: function(key, fn, last) { + // 订阅消息,只能单一对象订阅 + var namespace = "default"; + var pubsub = this.create(namespace); + pubsub.one(key, fn, last); + }, + on: function(key, fn, last) { + // 订阅消息,可多对象同时订阅 + var namespace = "default"; + var pubsub = this.create(namespace); + pubsub.on(key, fn, last); + }, + off: function(key, fn, namespace) { + // 取消订阅,(取消全部或指定消息) + namespace = "default"; + var pubsub = this.create(namespace); + console.trace(""); + pubsub.off(key, fn); + }, + emit: function(key, fn) { + // 发布消息 + var namespace = "default"; + var pubsub = this.create(namespace); + pubsub.emit.apply(this, arguments); + } + }; +})(window, undefined); diff --git a/static/js/common.js b/static/js/common.js new file mode 100644 index 0000000..74e8ce7 --- /dev/null +++ b/static/js/common.js @@ -0,0 +1,141 @@ +// import { rootPath } from '../../src/api/apiConfig' +import axios from 'axios' +import { Message, Notification } from 'element-ui' +/** + * post请求 + * @DateTime 2018-4-10 + * @param {[string]} url [地址] + * @param {[object]} data [数据] + * @param {{object}} options 这个参数供扩展使用,暂时没有加 + */ +export const post = (url, data, options = { }) => { + if (!url) { + console.log(new Error('地址是必须的')) + return false + } + return axios(Object.assign({ + method: 'POST', + url: url, + data: data + }, options)).then(res => { + return Promise.resolve(res) + }, res => { + return Promise.reject(res) + }) +} +/** + * get请求 + * @DateTime 2018-4-10 + * @param {[string]} url [地址] + * @param {[object]} data [数据] + */ +export const get = (url, data) => { + if (!url) { + console.log(new Error('地址是必须的')) + return false + } + // const baseUrl = rootPath + url + return axios({ + method: 'GET', + url: url, + data: data + }).then(res => { + return Promise.resolve(res) + }, res => { + return Promise.reject(res) + }) +} +/** + * 中部的alert + * @DateTime 2018-4-10 + * @param {[string]} msg [要提示的信息] + */ +export const msgbox = { + success (msg) { + Message({ + message: msg, + type: 'success' + }) + }, + warning (msg) { + Message({ + message: msg, + type: 'warning' + }) + }, + error (msg) { + Message({ + message: msg, + type: 'error' + }) + } +} +/** + * 右上角提示框 + * @DateTime 2018-4-10 + * @param {[string]} msg [要提示的信息] + */ +export const notice = { + success (msg) { + Notification({ + title: '成功', + message: msg, + type: 'success' + }) + }, + warning (msg) { + Notification({ + title: '警告', + message: msg, + type: 'warning' + }) + }, + error (msg) { + Notification({ + title: '错误', + message: msg, + type: 'error' + // duration: 0 + }) + } +} + +/** + * 时间戳转为格式化时间 + * @DateTime 2018-4-10 + * @param {[date]} timestamp [时间戳] + * @param {[string]} formats [时间格式] + */ +export const formatDate = (timestamp, formats) => { + /* + formats格式包括 + 1. Y-M-D + 2. Y-M-D h:m:s + 3. Y年M月D日 + 4. Y年M月D日 h时m分 + 5. Y年M月D日 h时m分s秒 + 示例:console.log(formatDate(1500305226034, 'Y年M月D日 h:m:s')) ==> 2017年07月17日 23:27:06 + */ + formats = formats || 'Y-M-D' + var myDate = timestamp ? new Date(timestamp) : new Date() + var year = myDate.getFullYear() + var month = formatDigit(myDate.getMonth() + 1) + var day = formatDigit(myDate.getDate()) + var hour = formatDigit(myDate.getHours()) + var minute = formatDigit(myDate.getMinutes()) + var second = formatDigit(myDate.getSeconds()) + return formats.replace(/Y|M|D|h|m|s/g, function (matches) { + return ({ + Y: year, + M: month, + D: day, + h: hour, + m: minute, + s: second + })[matches] + }) + // 小于10补0 + function formatDigit (n) { + return n.toString().replace(/^(\d)$/, '0$1') + } +}