mirror of
https://github.com/VickScarlet/lifeRestart.git
synced 2026-04-13 16:06:10 +08:00
Compare commits
53 Commits
v2.0.0-bet
...
dd5a003801
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd5a003801 | ||
|
|
ddc87ebf40 | ||
|
|
23bcae0b74 | ||
|
|
e075dfc23d | ||
|
|
9088ab0eb1 | ||
|
|
39388c6eaf | ||
|
|
0ce9b0ed02 | ||
|
|
aee4fcf164 | ||
|
|
5c0fe56915 | ||
|
|
b82da6c9a7 | ||
|
|
b1ffae9eaf | ||
|
|
fee986432d | ||
|
|
25fc74398a | ||
|
|
35c5fe36fb | ||
|
|
3f58e3deae | ||
|
|
788c864e71 | ||
|
|
680a4f8a5a | ||
|
|
8f46e286dd | ||
|
|
2eaf7a1ba2 | ||
|
|
6b58fa99cf | ||
|
|
5d1b623230 | ||
|
|
6e442c14c1 | ||
|
|
2eadb6fb23 | ||
|
|
d19afd7b1a | ||
|
|
98eda94f66 | ||
|
|
e0f5cb71c5 | ||
|
|
58140fd4d2 | ||
|
|
b44e0e65a5 | ||
|
|
cc460d6108 | ||
|
|
1dd1927612 | ||
|
|
21d4c9d568 | ||
|
|
35eac7d19d | ||
|
|
c1ed14385a | ||
|
|
50ad3d35e7 | ||
|
|
4df53d9f58 | ||
|
|
8a6f50dda6 | ||
|
|
49488505e2 | ||
|
|
dd64e8f44e | ||
|
|
b39772fd94 | ||
|
|
fc1135a621 | ||
|
|
d7ea91a1b8 | ||
|
|
53a8729968 | ||
|
|
ad93703a45 | ||
|
|
329c2f09c4 | ||
|
|
1f7434a133 | ||
|
|
145211ba9a | ||
|
|
1d58fd6bfd | ||
|
|
26d4e09bc8 | ||
|
|
49619fbaa2 | ||
|
|
751a0dec0f | ||
|
|
bc560c393b | ||
|
|
8eb0e44845 | ||
|
|
14f9340d0a |
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
29
.github/workflows/deploy.yml
vendored
Normal file
29
.github/workflows/deploy.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
name: Build and Deploy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
concurrency: ci-${{ github.ref }} # Recommended if you intend to make multiple deployments in quick succession.
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout 🛎️
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
- name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built.
|
||||||
|
run: |
|
||||||
|
pnpm install
|
||||||
|
pnpm xlsx2json
|
||||||
|
pnpm build
|
||||||
|
|
||||||
|
- name: Deploy 🚀
|
||||||
|
uses: JamesIves/github-pages-deploy-action@v4
|
||||||
|
with:
|
||||||
|
folder: template # The folder the action should deploy.
|
||||||
31
.github/workflows/node.js.yml
vendored
31
.github/workflows/node.js.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
|
||||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
|
||||||
|
|
||||||
name: Node.js CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [14.x, 16.x]
|
|
||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'npm'
|
|
||||||
- run: npm install
|
|
||||||
- run: npm run build --if-present
|
|
||||||
- run: npm test
|
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -107,4 +107,7 @@ utils/xlsxTransform-*
|
|||||||
|
|
||||||
/.idea
|
/.idea
|
||||||
|
|
||||||
__localStorage.json
|
__localStorage.json
|
||||||
|
|
||||||
|
template/public
|
||||||
|
public/data
|
||||||
29
.vscode/launch.json
vendored
29
.vscode/launch.json
vendored
@@ -4,40 +4,15 @@
|
|||||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
|
||||||
"name": "Launch Chrome",
|
|
||||||
"request": "launch",
|
|
||||||
"type": "pwa-chrome",
|
|
||||||
"url": "http://127.0.0.1:8000/public/index.html",
|
|
||||||
"webRoot": "${workspaceFolder}"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "test",
|
"name": "test",
|
||||||
"program": "${workspaceFolder}/test",
|
"program": "${workspaceFolder}/test",
|
||||||
"skipFiles": [
|
"skipFiles": [
|
||||||
"<node_internals>/**"
|
"<node_internals>/**",
|
||||||
|
"**/node_modumes/**"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"name": "xlsx2json",
|
|
||||||
"program": "${workspaceFolder}/node_modules/v-transform/src/index.js",
|
|
||||||
"args": ["transform", "jobs/xlsx2json/config.json"],
|
|
||||||
"skipFiles": [
|
|
||||||
"<node_internals>/**"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Attach by Process ID",
|
|
||||||
"processId": "${command:PickProcess}",
|
|
||||||
"request": "attach",
|
|
||||||
"skipFiles": [
|
|
||||||
"<node_internals>/**"
|
|
||||||
],
|
|
||||||
"type": "node"
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -14,38 +14,22 @@
|
|||||||
<summary><strong>网页版</strong></summary>
|
<summary><strong>网页版</strong></summary>
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
1. 下载项目代码。
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# 1. 下载项目代码
|
||||||
git clone https://github.com/VickScarlet/lifeRestart.git my-project
|
git clone https://github.com/VickScarlet/lifeRestart.git my-project
|
||||||
|
|
||||||
|
# 2. 进入目录安装依赖
|
||||||
cd my-project
|
cd my-project
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
# 3. 转换XLSX表
|
||||||
|
pnpm xlsx2json
|
||||||
|
|
||||||
|
# 4. 启动本地开发服务器
|
||||||
|
pnpm dev
|
||||||
```
|
```
|
||||||
|
|
||||||
2. 进入目录安装依赖。
|
启动完成后打开浏览器访问 [http://localhost:5173](http://localhost:5173)。
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn install
|
|
||||||
```
|
|
||||||
|
|
||||||
或者
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
3. 启动本地服务器。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn dev
|
|
||||||
```
|
|
||||||
|
|
||||||
或者
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
4. 启动完成后会自动打开浏览器访问 [http://localhost:8081/view/index.html](http://localhost:8081/view/index.html)。
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
37
README.md
37
README.md
@@ -14,38 +14,23 @@ English | [简体中文](./README-zh_CN.md)
|
|||||||
<summary><strong>Web Version</strong></summary>
|
<summary><strong>Web Version</strong></summary>
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
1. Clone project code.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# 1. Clone project code.
|
||||||
git clone git@github.com:VickScarlet/lifeRestart.git my-project
|
git clone git@github.com:VickScarlet/lifeRestart.git my-project
|
||||||
cd my-project
|
cd my-project
|
||||||
|
|
||||||
|
# 2. Installation dependence.
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
# 3. Transform XLSX
|
||||||
|
pnpm xlsx2json
|
||||||
|
|
||||||
|
# 4. Start local dev server.
|
||||||
|
pnpm dev
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Installation dependence.
|
After the startup is complete, open a browser and visit [http://localhost:5173](http://localhost:5173).
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn install
|
|
||||||
```
|
|
||||||
|
|
||||||
Or
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Start local server.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Or
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
4. After the startup is complete, will automatically open a browser and visit [http://localhost:8081/view/index.html](http://localhost:8081/view/index.html).
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
BIN
data/en-us/character.xlsx
Normal file
BIN
data/en-us/character.xlsx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
data/zh-cn/character.xlsx
Normal file
BIN
data/zh-cn/character.xlsx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -15,12 +15,22 @@
|
|||||||
<meta name="laya" screenorientation ="landscape"/>
|
<meta name="laya" screenorientation ="landscape"/>
|
||||||
<meta http-equiv="expires" content="0"/>
|
<meta http-equiv="expires" content="0"/>
|
||||||
<meta http-equiv="Cache-Control" content="no-siteapp"/>
|
<meta http-equiv="Cache-Control" content="no-siteapp"/>
|
||||||
|
<font-face font-family="方正像素12" src="fonts/方正像素12.ttf"/>
|
||||||
<title>Life Restart</title>
|
<title>Life Restart</title>
|
||||||
|
<!--
|
||||||
|
<script type="text/javascript" src="libs/laya/laya.core.js"></script>
|
||||||
|
<script type="text/javascript" src="libs/laya/laya.webgl.js"></script>
|
||||||
|
<script type="text/javascript" src="libs/laya/laya.filter.js"></script>
|
||||||
|
<script type="text/javascript" src="libs/laya/laya.html.js"></script>
|
||||||
|
<script type="text/javascript" src="libs/laya/laya.particle.js"></script>
|
||||||
|
<script type="text/javascript" src="libs/laya/laya.ui.js"></script>
|
||||||
|
-->
|
||||||
<script type="text/javascript" src="libs/laya/min/laya.core.min.js"></script>
|
<script type="text/javascript" src="libs/laya/min/laya.core.min.js"></script>
|
||||||
<script type="text/javascript" src="libs/laya/min/laya.webgl.min.js"></script>
|
<script type="text/javascript" src="libs/laya/min/laya.webgl.min.js"></script>
|
||||||
<script type="text/javascript" src="libs/laya/min/laya.filter.min.js"></script>
|
<script type="text/javascript" src="libs/laya/min/laya.filter.min.js"></script>
|
||||||
<script type="text/javascript" src="libs/laya/min/laya.particle.min.js"></script>
|
<script type="text/javascript" src="libs/laya/min/laya.particle.min.js"></script>
|
||||||
<script type="text/javascript" src="libs/laya/min/laya.ui.min.js"></script>
|
<script type="text/javascript" src="libs/laya/min/laya.ui.min.js"></script>
|
||||||
|
<script type="module" src="src/index.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body style="background:black"></body>
|
<body style="background:black"></body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"source": [
|
|
||||||
"../../data/specialthanks-afd.xlsx",
|
|
||||||
"../../data/specialthanks-dun.xlsx"
|
|
||||||
],
|
|
||||||
"target": "../../public/data"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"source": "../../data/zh-cn",
|
|
||||||
"target": "../../public/data/zh-cn"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"source": "../../data/en-us",
|
|
||||||
"target": "../../public/data/en-us"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
{
|
{
|
||||||
// See http://go.microsoft.com/fwlink/?LinkId=759670
|
// See http://go.microsoft.com/fwlink/?LinkId=759670
|
||||||
// for the documentation about the jsconfig.json format
|
// for the documentation about the jsconfig.json format
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es5"
|
"module": "esnext",
|
||||||
},
|
"target": "es6",
|
||||||
"exclude": [
|
},
|
||||||
"node_modules",
|
"include":["src", "repl", "vite.config.js"],
|
||||||
"public",
|
"exclude": ["node_modules", "public", "view"]
|
||||||
"view"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
1204
laya/pages/view/CyberTheme/Celebrity.ui
Normal file
1204
laya/pages/view/CyberTheme/Celebrity.ui
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"x":0,
|
"x":0,
|
||||||
"type":"View",
|
"type":"View",
|
||||||
"selectedBox":1,
|
"selectedBox":93,
|
||||||
"selecteID":12,
|
"selecteID":94,
|
||||||
"props":{"y":1218,"x":562,"width":1125,"sceneColor":"#000000","sceneBg":"laya/views/view/CyberTheme/CyberMain.png","runtime":"Laya.runtime.ViewBase","height":2436,"anchorY":0.5,"anchorX":0.5},
|
"props":{"y":1218,"x":562,"width":1125,"sceneColor":"#000000","sceneBg":"laya/views/view/CyberTheme/CyberMain.png","runtime":"Laya.runtime.ViewBase","height":2436,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":-1,
|
"nodeParent":-1,
|
||||||
"label":"View",
|
"label":"View",
|
||||||
@@ -548,14 +548,13 @@
|
|||||||
"props":{"width":1,"left":0,"height":1,"bottom":0},
|
"props":{"width":1,"left":0,"height":1,"bottom":0},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box",
|
"label":"Box",
|
||||||
"isOpen":true,
|
"isOpen":false,
|
||||||
"isDirectory":true,
|
"isDirectory":true,
|
||||||
"isAniNode":true,
|
"isAniNode":true,
|
||||||
"hasChild":true,
|
"hasChild":true,
|
||||||
"compId":85,
|
"compId":85,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":-175,"x":100,"width":160,"var":"btnGithub","runtime":"Laya.runtime.ScaleButton","name":"btnGithub","height":160,"anchorY":0.5,"anchorX":0.5},
|
"props":{"y":-175,"x":100,"width":160,"var":"btnGithub","runtime":"Laya.runtime.ScaleButton","name":"btnGithub","height":160,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":85,
|
"nodeParent":85,
|
||||||
@@ -580,7 +579,6 @@
|
|||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":-355,"x":100,"width":160,"var":"btnDiscord","runtime":"Laya.runtime.ScaleButton","name":"btnDiscord","height":160,"anchorY":0.5,"anchorX":0.5},
|
"props":{"y":-355,"x":100,"width":160,"var":"btnDiscord","runtime":"Laya.runtime.ScaleButton","name":"btnDiscord","height":160,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":85,
|
"nodeParent":85,
|
||||||
@@ -611,14 +609,13 @@
|
|||||||
"props":{"right":0,"bottom":0},
|
"props":{"right":0,"bottom":0},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box",
|
"label":"Box",
|
||||||
"isOpen":true,
|
"isOpen":false,
|
||||||
"isDirectory":true,
|
"isDirectory":true,
|
||||||
"isAniNode":true,
|
"isAniNode":true,
|
||||||
"hasChild":true,
|
"hasChild":true,
|
||||||
"compId":88,
|
"compId":88,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":-300,"x":-100,"width":110,"runtime":"Laya.runtime.ScaleButton","height":110,"anchorY":0.5,"anchorX":0.5},
|
"props":{"y":-300,"x":-100,"width":110,"runtime":"Laya.runtime.ScaleButton","height":110,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":88,
|
"nodeParent":88,
|
||||||
@@ -630,7 +627,6 @@
|
|||||||
"compId":90,
|
"compId":90,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":45,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"width":110,"var":"btnSaveLoad","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","height":110,"centerY":0,"centerX":0,"anchorY":0.5,"anchorX":0.5},
|
"props":{"width":110,"var":"btnSaveLoad","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","height":110,"centerY":0,"centerX":0,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":90,
|
"nodeParent":90,
|
||||||
@@ -642,7 +638,6 @@
|
|||||||
"compId":91,
|
"compId":91,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":60,
|
|
||||||
"type":"Image",
|
"type":"Image",
|
||||||
"props":{"width":80,"skin":"images/icons/icon_save.png","height":80,"centerY":0,"centerX":0},
|
"props":{"width":80,"skin":"images/icons/icon_save.png","height":80,"centerY":0,"centerX":0},
|
||||||
"nodeParent":91,
|
"nodeParent":91,
|
||||||
@@ -657,7 +652,6 @@
|
|||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":-175,"x":-100,"width":110,"runtime":"Laya.runtime.ScaleButton","height":110,"anchorY":0.5,"anchorX":0.5},
|
"props":{"y":-175,"x":-100,"width":110,"runtime":"Laya.runtime.ScaleButton","height":110,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":88,
|
"nodeParent":88,
|
||||||
@@ -669,7 +663,6 @@
|
|||||||
"compId":89,
|
"compId":89,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":45,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"width":110,"var":"btnThemes","runtime":"Laya.runtime.ColorfulBox","name":"btnThemes","height":110,"centerY":0,"centerX":0,"anchorY":0.5,"anchorX":0.5},
|
"props":{"width":110,"var":"btnThemes","runtime":"Laya.runtime.ColorfulBox","name":"btnThemes","height":110,"centerY":0,"centerX":0,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":89,
|
"nodeParent":89,
|
||||||
@@ -694,6 +687,32 @@
|
|||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"x":572,"var":"banner","centerX":0,"bottom":100,"anchorY":1,"anchorX":0.5},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(banner)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":93,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"text":"UI_Banner","fontSize":40,"font":"方正像素12","color":"#00fffd"},
|
||||||
|
"nodeParent":93,
|
||||||
|
"label":"Label",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":94,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
}],
|
}],
|
||||||
"animations":[
|
"animations":[
|
||||||
{
|
{
|
||||||
|
|||||||
128
laya/pages/view/CyberTheme/Mode.ui
Normal file
128
laya/pages/view/CyberTheme/Mode.ui
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
{
|
||||||
|
"x":0,
|
||||||
|
"type":"View",
|
||||||
|
"selectedBox":1,
|
||||||
|
"selecteID":8,
|
||||||
|
"props":{"width":1125,"sceneColor":"#000000","height":2436},
|
||||||
|
"nodeParent":-1,
|
||||||
|
"label":"View",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":1,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":10,"x":10,"width":600,"var":"btnCustom","runtime":"Laya.runtime.ScaleButton","name":"btn","height":400,"centerY":-400,"centerX":0},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnCustom)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":2,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Image",
|
||||||
|
"props":{"top":-15,"skin":"images/border/achievement_complete@3x.png","right":-15,"left":-15,"bottom":-15},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"Image",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":10,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":50,"text":"UI_CustomMode","fontSize":80,"font":"方正像素12","color":"#ffffff","centerX":0,"bold":true},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"Label",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":4,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":200,"text":"UI_CustomModeDescription","right":0,"left":0,"leading":20,"fontSize":40,"font":"方正像素12","color":"#bcbcbc","bottom":0,"align":"center"},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"Label",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":5,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":10,"x":20,"width":600,"var":"btnCelebrity","runtime":"Laya.runtime.ScaleButton","name":"btn","height":400,"centerY":400,"centerX":0},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnCelebrity)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":3,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Image",
|
||||||
|
"props":{"y":-15,"x":-15,"top":-15,"skin":"images/border/achievement_complete@3x.png","right":-15,"left":-15,"bottom":-15},
|
||||||
|
"nodeParent":3,
|
||||||
|
"label":"Image",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":11,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":50,"text":"UI_CelebrityMode","fontSize":80,"font":"方正像素12","color":"#ffffff","centerX":0,"bold":true},
|
||||||
|
"nodeParent":3,
|
||||||
|
"label":"Label",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":7,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":200,"text":"UI_CelebrityModeDescription","right":0,"left":0,"leading":20,"fontSize":40,"font":"方正像素12","color":"#bcbcbc","bottom":0,"align":"center"},
|
||||||
|
"nodeParent":3,
|
||||||
|
"label":"Label",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":8,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"animations":[
|
||||||
|
{
|
||||||
|
"nodes":[
|
||||||
|
],
|
||||||
|
"name":"ani1",
|
||||||
|
"id":1,
|
||||||
|
"frameRate":24,
|
||||||
|
"action":0
|
||||||
|
}]
|
||||||
|
}
|
||||||
306
laya/pages/view/DefaultTheme/Celebrity.ui
Normal file
306
laya/pages/view/DefaultTheme/Celebrity.ui
Normal file
@@ -0,0 +1,306 @@
|
|||||||
|
{
|
||||||
|
"x":0,
|
||||||
|
"type":"View",
|
||||||
|
"selectedBox":1,
|
||||||
|
"selecteID":28,
|
||||||
|
"props":{"width":1125,"sceneColor":"#000000","height":2436},
|
||||||
|
"nodeParent":-1,
|
||||||
|
"label":"View",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":1,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"y":80,"text":"UI_Title_Celebrity","name":"title","fontSize":80,"font":"SimHei","color":"#ffffff","centerX":0},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Label(title)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":19,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Panel",
|
||||||
|
"props":{"var":"panelCharacter","vScrollBarSkin":" ","top":200,"right":0,"name":"panelCharacter","left":0,"bottom":700},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Panel(panelCharacter)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":2,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"VBox",
|
||||||
|
"props":{"y":10,"width":1000,"var":"vboxCharacter","space":20,"name":"vboxCharacter","centerX":0},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"VBox(vboxCharacter)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":8,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":45,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"right":0,"name":"boxCharacter","left":0},
|
||||||
|
"nodeParent":8,
|
||||||
|
"label":"Box(boxCharacter)",
|
||||||
|
"isOpen":false,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":10,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":0,"runtime":"Laya.runtime.ColorfulBox","right":0,"name":"boxName","left":0,"height":100},
|
||||||
|
"nodeParent":10,
|
||||||
|
"label":"Box(boxName)",
|
||||||
|
"isOpen":false,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":12,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","fontSize":55,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||||
|
"nodeParent":12,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":18,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type":"VBox",
|
||||||
|
"props":{"top":100,"space":20,"runtime":"Laya.runtime.ColorfulBox","right":25,"name":"vboxStates","left":25},
|
||||||
|
"nodeParent":10,
|
||||||
|
"label":"VBox(vboxStates)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":11,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","height":100,"fontSize":55,"font":"SimHei","color":"#ffffff","centerX":0,"align":"center"},
|
||||||
|
"nodeParent":11,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":14,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":45,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"runtime":"Laya.runtime.ColorfulBox","right":25,"name":"boxTalent","left":25,"height":100},
|
||||||
|
"nodeParent":8,
|
||||||
|
"label":"Box(boxTalent)",
|
||||||
|
"isOpen":false,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":15,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||||
|
"nodeParent":15,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":17,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":45,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":10,"x":10,"right":0,"name":"boxUniqueUnGenerate","left":0},
|
||||||
|
"nodeParent":8,
|
||||||
|
"label":"Box(boxUniqueUnGenerate)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":20,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":60,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":0,"runtime":"Laya.runtime.ColorfulBox","right":0,"name":"boxName","left":0,"height":100},
|
||||||
|
"nodeParent":20,
|
||||||
|
"label":"Box(boxName)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":21,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":75,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"valign":"middle","text":"UI_UniqueWaTaShi","name":"label","fontSize":55,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||||
|
"nodeParent":21,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":22,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":60,
|
||||||
|
"type":"VBox",
|
||||||
|
"props":{"top":100,"space":20,"runtime":"Laya.runtime.ColorfulBox","right":25,"name":"vboxStates","left":25},
|
||||||
|
"nodeParent":20,
|
||||||
|
"label":"VBox(vboxStates)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":23,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":75,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"y":1,"valign":"middle","text":"UI_UniqueWaTaShiContent","right":0,"name":"label","left":0,"leading":30,"fontSize":55,"font":"SimHei","color":"#ffffff","align":"center"},
|
||||||
|
"nodeParent":23,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":24,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":75,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":2,"right":0,"name":"boxBtn","left":0,"height":150},
|
||||||
|
"nodeParent":23,
|
||||||
|
"label":"Box(boxBtn)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":25,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":90,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"runtime":"Laya.runtime.ColorfulBox","right":50,"name":"btn","left":50,"height":120,"centerY":0},
|
||||||
|
"nodeParent":25,
|
||||||
|
"label":"Box(btn)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":26,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":105,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"y":30,"x":290,"text":"UI_GenerateNow","name":"label","fontSize":60,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0},
|
||||||
|
"nodeParent":26,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":27,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"width":480,"var":"btnRetry","runtime":"Laya.runtime.ColorfulBox","name":"btnRetry","height":150,"centerX":0,"bottom":400},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnRetry)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":4,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"text":"UI_AllNot","name":"label","fontSize":60,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0},
|
||||||
|
"nodeParent":4,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":5,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"width":480,"var":"btnNext","runtime":"Laya.runtime.ColorfulBox","name":"btnNext","height":150,"centerX":0,"bottom":150},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnNext)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":6,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"text":"UI_Make_New_Life","name":"label","fontSize":60,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0},
|
||||||
|
"nodeParent":6,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":7,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"animations":[
|
||||||
|
{
|
||||||
|
"nodes":[
|
||||||
|
],
|
||||||
|
"name":"ani1",
|
||||||
|
"id":1,
|
||||||
|
"frameRate":24,
|
||||||
|
"action":0
|
||||||
|
}]
|
||||||
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"x":0,
|
"x":0,
|
||||||
"type":"View",
|
"type":"View",
|
||||||
"selectedBox":99,
|
"selectedBox":101,
|
||||||
"selecteID":100,
|
"selecteID":102,
|
||||||
"props":{"y":1218,"x":562,"width":1125,"sceneColor":"#000000","runtime":"Laya.runtime.ViewBase","height":2436,"anchorY":0.5,"anchorX":0.5},
|
"props":{"y":1218,"x":562,"width":1125,"sceneColor":"#000000","runtime":"Laya.runtime.ViewBase","height":2436,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":-1,
|
"nodeParent":-1,
|
||||||
"label":"View",
|
"label":"View",
|
||||||
@@ -276,6 +276,32 @@
|
|||||||
"child":[
|
"child":[
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"x":562,"var":"banner","centerX":0,"bottom":100,"anchorY":1,"anchorX":0.5},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(banner)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":101,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"text":"UI_Banner","name":"title","fontSize":40,"font":"SimHei","color":"#ffffff"},
|
||||||
|
"nodeParent":101,
|
||||||
|
"label":"Label(title)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":102,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
}],
|
}],
|
||||||
"animations":[
|
"animations":[
|
||||||
{
|
{
|
||||||
|
|||||||
128
laya/pages/view/DefaultTheme/Mode.ui
Normal file
128
laya/pages/view/DefaultTheme/Mode.ui
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
{
|
||||||
|
"x":0,
|
||||||
|
"type":"View",
|
||||||
|
"selectedBox":1,
|
||||||
|
"selecteID":11,
|
||||||
|
"props":{"width":1125,"sceneColor":"#000000","height":2436},
|
||||||
|
"nodeParent":-1,
|
||||||
|
"label":"View",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":1,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"width":600,"var":"btnCustom","runtime":"Laya.runtime.ColorfulBox","name":"btn","height":400,"centerY":-400,"centerX":0},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnCustom)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":2,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":50,"text":"UI_CustomMode","name":"font_default","fontSize":80,"font":"SimHei","color":"#ffffff","centerX":0,"bold":true},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"Label(font_default)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":4,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":200,"text":"UI_CustomModeDescription","right":0,"name":"font_default","left":0,"leading":20,"fontSize":40,"font":"SimHei","color":"#ffffff","bottom":0,"align":"center"},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"Label(font_default)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":5,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"runtime":"Laya.runtime.ColorAgentLabel","name":"label"},
|
||||||
|
"nodeParent":2,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":10,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"x":10,"width":600,"var":"btnCelebrity","runtime":"Laya.runtime.ColorfulBox","name":"btn","height":400,"centerY":400,"centerX":0},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnCelebrity)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":3,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":50,"text":"UI_CelebrityMode","name":"font_default","fontSize":80,"font":"SimHei","color":"#ffffff","centerX":0,"bold":true},
|
||||||
|
"nodeParent":3,
|
||||||
|
"label":"Label(font_default)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":8,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"top":200,"text":"UI_CelebrityModeDescription","right":0,"name":"font_default","left":0,"leading":20,"fontSize":40,"font":"SimHei","color":"#ffffff","bottom":0,"align":"center"},
|
||||||
|
"nodeParent":3,
|
||||||
|
"label":"Label(font_default)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":9,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"y":10,"x":10,"runtime":"Laya.runtime.ColorAgentLabel","name":"label"},
|
||||||
|
"nodeParent":3,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":11,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"animations":[
|
||||||
|
{
|
||||||
|
"nodes":[
|
||||||
|
],
|
||||||
|
"name":"ani1",
|
||||||
|
"id":1,
|
||||||
|
"frameRate":24,
|
||||||
|
"action":0
|
||||||
|
}]
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"x":0,
|
"x":0,
|
||||||
"type":"View",
|
"type":"View",
|
||||||
"selectedBox":1,
|
"selectedBox":1,
|
||||||
"selecteID":153,
|
"selecteID":95,
|
||||||
"props":{"width":1125,"sceneColor":"#000000","runtime":"Laya.runtime.ViewBase","height":2436},
|
"props":{"width":1125,"sceneColor":"#000000","runtime":"Laya.runtime.ViewBase","height":2436},
|
||||||
"nodeParent":-1,
|
"nodeParent":-1,
|
||||||
"label":"View",
|
"label":"View",
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
"x":0,
|
"x":0,
|
||||||
"type":"Dialog",
|
"type":"Dialog",
|
||||||
"selectedBox":1,
|
"selectedBox":1,
|
||||||
"selecteID":15,
|
"selecteID":25,
|
||||||
"props":{"width":645,"sceneColor":"#000000","height":250},
|
"props":{"width":645,"sceneColor":"#000000","height":400},
|
||||||
"nodeParent":-1,
|
"nodeParent":-1,
|
||||||
"label":"Dialog",
|
"label":"Dialog",
|
||||||
"isOpen":true,
|
"isOpen":true,
|
||||||
@@ -15,17 +15,16 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"top":0,"right":0,"left":0,"bottom":150},
|
"props":{"top":0,"right":0,"left":0,"bottom":300},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box",
|
"label":"Box",
|
||||||
"isOpen":true,
|
"isOpen":false,
|
||||||
"isDirectory":true,
|
"isDirectory":true,
|
||||||
"isAniNode":true,
|
"isAniNode":true,
|
||||||
"hasChild":true,
|
"hasChild":true,
|
||||||
"compId":15,
|
"compId":15,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":0,"x":0,"width":645,"height":2},
|
"props":{"y":0,"x":0,"width":645,"height":2},
|
||||||
"nodeParent":15,
|
"nodeParent":15,
|
||||||
@@ -50,7 +49,6 @@
|
|||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"width":645,"height":2,"centerX":0,"bottom":0},
|
"props":{"width":645,"height":2,"centerX":0,"bottom":0},
|
||||||
"nodeParent":15,
|
"nodeParent":15,
|
||||||
@@ -75,7 +73,6 @@
|
|||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"x":30,
|
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"width":645,"height":100,"centerY":0,"centerX":0,"alpha":0.2},
|
"props":{"width":645,"height":100,"centerY":0,"centerX":0,"alpha":0.2},
|
||||||
"nodeParent":15,
|
"nodeParent":15,
|
||||||
@@ -87,7 +84,6 @@
|
|||||||
"compId":22,
|
"compId":22,
|
||||||
"child":[
|
"child":[
|
||||||
{
|
{
|
||||||
"x":45,
|
|
||||||
"type":"Rect",
|
"type":"Rect",
|
||||||
"props":{"width":645,"lineWidth":1,"height":100,"fillColor":"#000000"},
|
"props":{"width":645,"lineWidth":1,"height":100,"fillColor":"#000000"},
|
||||||
"nodeParent":22,
|
"nodeParent":22,
|
||||||
@@ -104,7 +100,7 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"TextInput",
|
"type":"TextInput",
|
||||||
"props":{"wordWrap":false,"var":"input","valign":"middle","top":0,"text":"content","right":0,"overflow":"scroll","left":0,"fontSize":35,"font":"SimHei","color":"#ffffff","bottom":150},
|
"props":{"wordWrap":false,"var":"input","valign":"middle","top":0,"text":"content","right":0,"overflow":"scroll","left":0,"fontSize":35,"font":"SimHei","color":"#ffffff","bottom":300},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"TextInput(input)",
|
"label":"TextInput(input)",
|
||||||
"isDirectory":false,
|
"isDirectory":false,
|
||||||
@@ -117,7 +113,7 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"width":120,"var":"btnSave","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":5,"height":120,"bottom":5,"anchorY":0.5,"anchorX":0.5},
|
"props":{"width":120,"var":"btnSave","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":5,"height":120,"bottom":155,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box(btnSave)",
|
"label":"Box(btnSave)",
|
||||||
"isOpen":false,
|
"isOpen":false,
|
||||||
@@ -142,7 +138,7 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"width":120,"var":"btnLoad","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":130,"height":120,"bottom":5,"anchorY":0.5,"anchorX":0.5},
|
"props":{"width":120,"var":"btnLoad","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":130,"height":120,"bottom":155,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box(btnLoad)",
|
"label":"Box(btnLoad)",
|
||||||
"isOpen":false,
|
"isOpen":false,
|
||||||
@@ -167,7 +163,7 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":335,"width":120,"var":"btnRead","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":260,"height":120,"bottom":5,"anchorY":0.5,"anchorX":0.5},
|
"props":{"width":120,"var":"btnRead","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":260,"height":120,"bottom":155,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box(btnRead)",
|
"label":"Box(btnRead)",
|
||||||
"isOpen":false,
|
"isOpen":false,
|
||||||
@@ -192,7 +188,7 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":335,"width":120,"var":"btnWrite","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":390,"height":120,"bottom":5,"anchorY":0.5,"anchorX":0.5},
|
"props":{"width":120,"var":"btnWrite","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":390,"height":120,"bottom":155,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box(btnWrite)",
|
"label":"Box(btnWrite)",
|
||||||
"isOpen":false,
|
"isOpen":false,
|
||||||
@@ -217,7 +213,7 @@
|
|||||||
{
|
{
|
||||||
"x":15,
|
"x":15,
|
||||||
"type":"Box",
|
"type":"Box",
|
||||||
"props":{"y":10,"x":10,"width":120,"var":"btnClose","runtime":"Laya.runtime.ColorfulBox","right":5,"name":"btnSmall","height":120,"bottom":5,"anchorY":0.5,"anchorX":0.5},
|
"props":{"x":10,"width":120,"var":"btnClose","runtime":"Laya.runtime.ColorfulBox","right":5,"name":"btnSmall","height":120,"bottom":155,"anchorY":0.5,"anchorX":0.5},
|
||||||
"nodeParent":1,
|
"nodeParent":1,
|
||||||
"label":"Box(btnClose)",
|
"label":"Box(btnClose)",
|
||||||
"isOpen":false,
|
"isOpen":false,
|
||||||
@@ -238,6 +234,32 @@
|
|||||||
"child":[
|
"child":[
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x":15,
|
||||||
|
"type":"Box",
|
||||||
|
"props":{"y":20,"var":"btnBackup","runtime":"Laya.runtime.ColorfulBox","right":5,"name":"btnBackup","left":5,"height":120,"bottom":5,"anchorY":0.5,"anchorX":0.5},
|
||||||
|
"nodeParent":1,
|
||||||
|
"label":"Box(btnBackup)",
|
||||||
|
"isOpen":true,
|
||||||
|
"isDirectory":true,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":true,
|
||||||
|
"compId":25,
|
||||||
|
"child":[
|
||||||
|
{
|
||||||
|
"x":30,
|
||||||
|
"type":"Label",
|
||||||
|
"props":{"text":"UI_BackupBtn","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
|
||||||
|
"nodeParent":25,
|
||||||
|
"label":"Label(label)",
|
||||||
|
"isDirectory":false,
|
||||||
|
"isAniNode":true,
|
||||||
|
"hasChild":false,
|
||||||
|
"compId":26,
|
||||||
|
"child":[
|
||||||
|
]
|
||||||
|
}]
|
||||||
}],
|
}],
|
||||||
"animations":[
|
"animations":[
|
||||||
{
|
{
|
||||||
|
|||||||
27
package.json
27
package.json
@@ -1,24 +1,19 @@
|
|||||||
{
|
{
|
||||||
"name": "life_restart",
|
"name": "life_restart",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"bin": "repl/index.js",
|
"main": "repl/index.js",
|
||||||
"version": "2.0.0",
|
"version": "2.1.0",
|
||||||
|
"author": "Vick Scarlet <vick@syaro.io>",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "node test",
|
"xlsx2json": "vt transform -d public \"data/**/*.xlsx\"",
|
||||||
"xlsxTransform": "vt transform data",
|
"dev": "vite",
|
||||||
"xlsx2json": "vt transform jobs/xlsx2json/config.json",
|
"build": "vite build",
|
||||||
"dev": "webpack serve --open /view/index.html",
|
"start": "vite preview",
|
||||||
"build": "webpack --mode production"
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.15.4",
|
"v-transform": "^2.2.0",
|
||||||
"@babel/preset-env": "^7.15.4",
|
"vite": "^7.3.1",
|
||||||
"babel-loader": "^8.2.2",
|
"vitest": "^4.0.18"
|
||||||
"core-js": "^3.17.2",
|
|
||||||
"html-webpack-plugin": "^5.5.0",
|
|
||||||
"v-transform": "^1.0.2",
|
|
||||||
"webpack": "^5.64.4",
|
|
||||||
"webpack-cli": "^4.8.0",
|
|
||||||
"webpack-dev-server": "^4.1.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
987
pnpm-lock.yaml
generated
Normal file
987
pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,987 @@
|
|||||||
|
lockfileVersion: '9.0'
|
||||||
|
|
||||||
|
settings:
|
||||||
|
autoInstallPeers: true
|
||||||
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
|
importers:
|
||||||
|
|
||||||
|
.:
|
||||||
|
devDependencies:
|
||||||
|
v-transform:
|
||||||
|
specifier: ^2.2.0
|
||||||
|
version: 2.2.0
|
||||||
|
vite:
|
||||||
|
specifier: ^7.3.1
|
||||||
|
version: 7.3.1
|
||||||
|
vitest:
|
||||||
|
specifier: ^4.0.18
|
||||||
|
version: 4.0.18
|
||||||
|
|
||||||
|
packages:
|
||||||
|
|
||||||
|
'@esbuild/aix-ppc64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [aix]
|
||||||
|
|
||||||
|
'@esbuild/android-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/android-arm@0.27.2':
|
||||||
|
resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/android-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@esbuild/darwin-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@esbuild/freebsd-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@esbuild/freebsd-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@esbuild/linux-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-arm@0.27.2':
|
||||||
|
resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-ia32@0.27.2':
|
||||||
|
resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-loong64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [loong64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-mips64el@0.27.2':
|
||||||
|
resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [mips64el]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-ppc64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-riscv64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [riscv64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-s390x@0.27.2':
|
||||||
|
resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/linux-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@esbuild/netbsd-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [netbsd]
|
||||||
|
|
||||||
|
'@esbuild/netbsd-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [netbsd]
|
||||||
|
|
||||||
|
'@esbuild/openbsd-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@esbuild/openbsd-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@esbuild/openharmony-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openharmony]
|
||||||
|
|
||||||
|
'@esbuild/sunos-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [sunos]
|
||||||
|
|
||||||
|
'@esbuild/win32-arm64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@esbuild/win32-ia32@0.27.2':
|
||||||
|
resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@esbuild/win32-x64@0.27.2':
|
||||||
|
resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@isaacs/balanced-match@4.0.1':
|
||||||
|
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
|
||||||
|
engines: {node: 20 || >=22}
|
||||||
|
|
||||||
|
'@isaacs/brace-expansion@5.0.0':
|
||||||
|
resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
|
||||||
|
engines: {node: 20 || >=22}
|
||||||
|
|
||||||
|
'@jridgewell/sourcemap-codec@1.5.5':
|
||||||
|
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
||||||
|
|
||||||
|
'@rollup/rollup-android-arm-eabi@4.56.0':
|
||||||
|
resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@rollup/rollup-android-arm64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
|
'@rollup/rollup-darwin-arm64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@rollup/rollup-darwin-x64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
'@rollup/rollup-freebsd-arm64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@rollup/rollup-freebsd-x64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm-gnueabihf@4.56.0':
|
||||||
|
resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm-musleabihf@4.56.0':
|
||||||
|
resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm64-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm64-musl@4.56.0':
|
||||||
|
resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-loong64-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==}
|
||||||
|
cpu: [loong64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-loong64-musl@4.56.0':
|
||||||
|
resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==}
|
||||||
|
cpu: [loong64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-ppc64-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-ppc64-musl@4.56.0':
|
||||||
|
resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-riscv64-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==}
|
||||||
|
cpu: [riscv64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-riscv64-musl@4.56.0':
|
||||||
|
resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==}
|
||||||
|
cpu: [riscv64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-s390x-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-x64-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-x64-musl@4.56.0':
|
||||||
|
resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
|
'@rollup/rollup-openbsd-x64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [openbsd]
|
||||||
|
|
||||||
|
'@rollup/rollup-openharmony-arm64@4.56.0':
|
||||||
|
resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openharmony]
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-arm64-msvc@4.56.0':
|
||||||
|
resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-ia32-msvc@4.56.0':
|
||||||
|
resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==}
|
||||||
|
cpu: [ia32]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-x64-gnu@4.56.0':
|
||||||
|
resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-x64-msvc@4.56.0':
|
||||||
|
resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
|
'@standard-schema/spec@1.1.0':
|
||||||
|
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
|
||||||
|
|
||||||
|
'@types/chai@5.2.3':
|
||||||
|
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
|
||||||
|
|
||||||
|
'@types/deep-eql@4.0.2':
|
||||||
|
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
|
||||||
|
|
||||||
|
'@types/estree@1.0.8':
|
||||||
|
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
|
||||||
|
|
||||||
|
'@vitest/expect@4.0.18':
|
||||||
|
resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
|
||||||
|
|
||||||
|
'@vitest/mocker@4.0.18':
|
||||||
|
resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
|
||||||
|
peerDependencies:
|
||||||
|
msw: ^2.4.9
|
||||||
|
vite: ^6.0.0 || ^7.0.0-0
|
||||||
|
peerDependenciesMeta:
|
||||||
|
msw:
|
||||||
|
optional: true
|
||||||
|
vite:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@vitest/pretty-format@4.0.18':
|
||||||
|
resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
|
||||||
|
|
||||||
|
'@vitest/runner@4.0.18':
|
||||||
|
resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
|
||||||
|
|
||||||
|
'@vitest/snapshot@4.0.18':
|
||||||
|
resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
|
||||||
|
|
||||||
|
'@vitest/spy@4.0.18':
|
||||||
|
resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
|
||||||
|
|
||||||
|
'@vitest/utils@4.0.18':
|
||||||
|
resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
|
||||||
|
|
||||||
|
argparse@2.0.1:
|
||||||
|
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
||||||
|
|
||||||
|
assertion-error@2.0.1:
|
||||||
|
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
|
chai@6.2.2:
|
||||||
|
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
commander@14.0.2:
|
||||||
|
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
|
||||||
|
engines: {node: '>=20'}
|
||||||
|
|
||||||
|
es-module-lexer@1.7.0:
|
||||||
|
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
|
||||||
|
|
||||||
|
esbuild@0.27.2:
|
||||||
|
resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
estree-walker@3.0.3:
|
||||||
|
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
|
||||||
|
|
||||||
|
expect-type@1.3.0:
|
||||||
|
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
|
||||||
|
engines: {node: '>=12.0.0'}
|
||||||
|
|
||||||
|
fdir@6.5.0:
|
||||||
|
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
|
||||||
|
engines: {node: '>=12.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
picomatch: ^3 || ^4
|
||||||
|
peerDependenciesMeta:
|
||||||
|
picomatch:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
fsevents@2.3.3:
|
||||||
|
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||||
|
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
|
glob@13.0.0:
|
||||||
|
resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
|
||||||
|
engines: {node: 20 || >=22}
|
||||||
|
|
||||||
|
js-yaml@4.1.1:
|
||||||
|
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
lru-cache@11.2.5:
|
||||||
|
resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==}
|
||||||
|
engines: {node: 20 || >=22}
|
||||||
|
|
||||||
|
magic-string@0.30.21:
|
||||||
|
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
|
||||||
|
|
||||||
|
minimatch@10.1.1:
|
||||||
|
resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
|
||||||
|
engines: {node: 20 || >=22}
|
||||||
|
|
||||||
|
minipass@7.1.2:
|
||||||
|
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
|
||||||
|
engines: {node: '>=16 || 14 >=14.17'}
|
||||||
|
|
||||||
|
nanoid@3.3.11:
|
||||||
|
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
|
||||||
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
obug@2.1.1:
|
||||||
|
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
|
||||||
|
|
||||||
|
path-scurry@2.0.1:
|
||||||
|
resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
|
||||||
|
engines: {node: 20 || >=22}
|
||||||
|
|
||||||
|
pathe@2.0.3:
|
||||||
|
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
|
||||||
|
|
||||||
|
picocolors@1.1.1:
|
||||||
|
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
||||||
|
|
||||||
|
picomatch@4.0.3:
|
||||||
|
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
|
postcss@8.5.6:
|
||||||
|
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
|
||||||
|
engines: {node: ^10 || ^12 || >=14}
|
||||||
|
|
||||||
|
rollup@4.56.0:
|
||||||
|
resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==}
|
||||||
|
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
siginfo@2.0.0:
|
||||||
|
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
|
||||||
|
|
||||||
|
source-map-js@1.2.1:
|
||||||
|
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
stackback@0.0.2:
|
||||||
|
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
||||||
|
|
||||||
|
std-env@3.10.0:
|
||||||
|
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
|
||||||
|
|
||||||
|
tinybench@2.9.0:
|
||||||
|
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
|
||||||
|
|
||||||
|
tinyexec@1.0.2:
|
||||||
|
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
tinyglobby@0.2.15:
|
||||||
|
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
|
||||||
|
engines: {node: '>=12.0.0'}
|
||||||
|
|
||||||
|
tinyrainbow@3.0.3:
|
||||||
|
resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
|
||||||
|
v-transform@2.2.0:
|
||||||
|
resolution: {integrity: sha512-UwUlkx7HFNqk1hKHVe3InG1tYXZPDoqd9UJ9qB3cg7ROuGQr+XjiZnxkSyZaBBBQSf7Ewo9ATr7L2LKBAGo+0A==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
vite@7.3.1:
|
||||||
|
resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
'@types/node': ^20.19.0 || >=22.12.0
|
||||||
|
jiti: '>=1.21.0'
|
||||||
|
less: ^4.0.0
|
||||||
|
lightningcss: ^1.21.0
|
||||||
|
sass: ^1.70.0
|
||||||
|
sass-embedded: ^1.70.0
|
||||||
|
stylus: '>=0.54.8'
|
||||||
|
sugarss: ^5.0.0
|
||||||
|
terser: ^5.16.0
|
||||||
|
tsx: ^4.8.1
|
||||||
|
yaml: ^2.4.2
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@types/node':
|
||||||
|
optional: true
|
||||||
|
jiti:
|
||||||
|
optional: true
|
||||||
|
less:
|
||||||
|
optional: true
|
||||||
|
lightningcss:
|
||||||
|
optional: true
|
||||||
|
sass:
|
||||||
|
optional: true
|
||||||
|
sass-embedded:
|
||||||
|
optional: true
|
||||||
|
stylus:
|
||||||
|
optional: true
|
||||||
|
sugarss:
|
||||||
|
optional: true
|
||||||
|
terser:
|
||||||
|
optional: true
|
||||||
|
tsx:
|
||||||
|
optional: true
|
||||||
|
yaml:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
vitest@4.0.18:
|
||||||
|
resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==}
|
||||||
|
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
'@edge-runtime/vm': '*'
|
||||||
|
'@opentelemetry/api': ^1.9.0
|
||||||
|
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
|
||||||
|
'@vitest/browser-playwright': 4.0.18
|
||||||
|
'@vitest/browser-preview': 4.0.18
|
||||||
|
'@vitest/browser-webdriverio': 4.0.18
|
||||||
|
'@vitest/ui': 4.0.18
|
||||||
|
happy-dom: '*'
|
||||||
|
jsdom: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@edge-runtime/vm':
|
||||||
|
optional: true
|
||||||
|
'@opentelemetry/api':
|
||||||
|
optional: true
|
||||||
|
'@types/node':
|
||||||
|
optional: true
|
||||||
|
'@vitest/browser-playwright':
|
||||||
|
optional: true
|
||||||
|
'@vitest/browser-preview':
|
||||||
|
optional: true
|
||||||
|
'@vitest/browser-webdriverio':
|
||||||
|
optional: true
|
||||||
|
'@vitest/ui':
|
||||||
|
optional: true
|
||||||
|
happy-dom:
|
||||||
|
optional: true
|
||||||
|
jsdom:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
why-is-node-running@2.3.0:
|
||||||
|
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
xlsx@https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz:
|
||||||
|
resolution: {tarball: https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz}
|
||||||
|
version: 0.20.3
|
||||||
|
engines: {node: '>=0.8'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
snapshots:
|
||||||
|
|
||||||
|
'@esbuild/aix-ppc64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-arm@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/android-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/freebsd-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/freebsd-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-arm@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-ia32@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-loong64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-mips64el@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-ppc64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-riscv64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-s390x@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/linux-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/netbsd-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/netbsd-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openbsd-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openbsd-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/openharmony-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/sunos-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-arm64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-ia32@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/win32-x64@0.27.2':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@isaacs/balanced-match@4.0.1': {}
|
||||||
|
|
||||||
|
'@isaacs/brace-expansion@5.0.0':
|
||||||
|
dependencies:
|
||||||
|
'@isaacs/balanced-match': 4.0.1
|
||||||
|
|
||||||
|
'@jridgewell/sourcemap-codec@1.5.5': {}
|
||||||
|
|
||||||
|
'@rollup/rollup-android-arm-eabi@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-android-arm64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-darwin-arm64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-darwin-x64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-freebsd-arm64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-freebsd-x64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm-gnueabihf@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm-musleabihf@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm64-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-arm64-musl@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-loong64-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-loong64-musl@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-ppc64-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-ppc64-musl@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-riscv64-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-riscv64-musl@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-s390x-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-x64-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-linux-x64-musl@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-openbsd-x64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-openharmony-arm64@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-arm64-msvc@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-ia32-msvc@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-x64-gnu@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-x64-msvc@4.56.0':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@standard-schema/spec@1.1.0': {}
|
||||||
|
|
||||||
|
'@types/chai@5.2.3':
|
||||||
|
dependencies:
|
||||||
|
'@types/deep-eql': 4.0.2
|
||||||
|
assertion-error: 2.0.1
|
||||||
|
|
||||||
|
'@types/deep-eql@4.0.2': {}
|
||||||
|
|
||||||
|
'@types/estree@1.0.8': {}
|
||||||
|
|
||||||
|
'@vitest/expect@4.0.18':
|
||||||
|
dependencies:
|
||||||
|
'@standard-schema/spec': 1.1.0
|
||||||
|
'@types/chai': 5.2.3
|
||||||
|
'@vitest/spy': 4.0.18
|
||||||
|
'@vitest/utils': 4.0.18
|
||||||
|
chai: 6.2.2
|
||||||
|
tinyrainbow: 3.0.3
|
||||||
|
|
||||||
|
'@vitest/mocker@4.0.18(vite@7.3.1)':
|
||||||
|
dependencies:
|
||||||
|
'@vitest/spy': 4.0.18
|
||||||
|
estree-walker: 3.0.3
|
||||||
|
magic-string: 0.30.21
|
||||||
|
optionalDependencies:
|
||||||
|
vite: 7.3.1
|
||||||
|
|
||||||
|
'@vitest/pretty-format@4.0.18':
|
||||||
|
dependencies:
|
||||||
|
tinyrainbow: 3.0.3
|
||||||
|
|
||||||
|
'@vitest/runner@4.0.18':
|
||||||
|
dependencies:
|
||||||
|
'@vitest/utils': 4.0.18
|
||||||
|
pathe: 2.0.3
|
||||||
|
|
||||||
|
'@vitest/snapshot@4.0.18':
|
||||||
|
dependencies:
|
||||||
|
'@vitest/pretty-format': 4.0.18
|
||||||
|
magic-string: 0.30.21
|
||||||
|
pathe: 2.0.3
|
||||||
|
|
||||||
|
'@vitest/spy@4.0.18': {}
|
||||||
|
|
||||||
|
'@vitest/utils@4.0.18':
|
||||||
|
dependencies:
|
||||||
|
'@vitest/pretty-format': 4.0.18
|
||||||
|
tinyrainbow: 3.0.3
|
||||||
|
|
||||||
|
argparse@2.0.1: {}
|
||||||
|
|
||||||
|
assertion-error@2.0.1: {}
|
||||||
|
|
||||||
|
chai@6.2.2: {}
|
||||||
|
|
||||||
|
commander@14.0.2: {}
|
||||||
|
|
||||||
|
es-module-lexer@1.7.0: {}
|
||||||
|
|
||||||
|
esbuild@0.27.2:
|
||||||
|
optionalDependencies:
|
||||||
|
'@esbuild/aix-ppc64': 0.27.2
|
||||||
|
'@esbuild/android-arm': 0.27.2
|
||||||
|
'@esbuild/android-arm64': 0.27.2
|
||||||
|
'@esbuild/android-x64': 0.27.2
|
||||||
|
'@esbuild/darwin-arm64': 0.27.2
|
||||||
|
'@esbuild/darwin-x64': 0.27.2
|
||||||
|
'@esbuild/freebsd-arm64': 0.27.2
|
||||||
|
'@esbuild/freebsd-x64': 0.27.2
|
||||||
|
'@esbuild/linux-arm': 0.27.2
|
||||||
|
'@esbuild/linux-arm64': 0.27.2
|
||||||
|
'@esbuild/linux-ia32': 0.27.2
|
||||||
|
'@esbuild/linux-loong64': 0.27.2
|
||||||
|
'@esbuild/linux-mips64el': 0.27.2
|
||||||
|
'@esbuild/linux-ppc64': 0.27.2
|
||||||
|
'@esbuild/linux-riscv64': 0.27.2
|
||||||
|
'@esbuild/linux-s390x': 0.27.2
|
||||||
|
'@esbuild/linux-x64': 0.27.2
|
||||||
|
'@esbuild/netbsd-arm64': 0.27.2
|
||||||
|
'@esbuild/netbsd-x64': 0.27.2
|
||||||
|
'@esbuild/openbsd-arm64': 0.27.2
|
||||||
|
'@esbuild/openbsd-x64': 0.27.2
|
||||||
|
'@esbuild/openharmony-arm64': 0.27.2
|
||||||
|
'@esbuild/sunos-x64': 0.27.2
|
||||||
|
'@esbuild/win32-arm64': 0.27.2
|
||||||
|
'@esbuild/win32-ia32': 0.27.2
|
||||||
|
'@esbuild/win32-x64': 0.27.2
|
||||||
|
|
||||||
|
estree-walker@3.0.3:
|
||||||
|
dependencies:
|
||||||
|
'@types/estree': 1.0.8
|
||||||
|
|
||||||
|
expect-type@1.3.0: {}
|
||||||
|
|
||||||
|
fdir@6.5.0(picomatch@4.0.3):
|
||||||
|
optionalDependencies:
|
||||||
|
picomatch: 4.0.3
|
||||||
|
|
||||||
|
fsevents@2.3.3:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
glob@13.0.0:
|
||||||
|
dependencies:
|
||||||
|
minimatch: 10.1.1
|
||||||
|
minipass: 7.1.2
|
||||||
|
path-scurry: 2.0.1
|
||||||
|
|
||||||
|
js-yaml@4.1.1:
|
||||||
|
dependencies:
|
||||||
|
argparse: 2.0.1
|
||||||
|
|
||||||
|
lru-cache@11.2.5: {}
|
||||||
|
|
||||||
|
magic-string@0.30.21:
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/sourcemap-codec': 1.5.5
|
||||||
|
|
||||||
|
minimatch@10.1.1:
|
||||||
|
dependencies:
|
||||||
|
'@isaacs/brace-expansion': 5.0.0
|
||||||
|
|
||||||
|
minipass@7.1.2: {}
|
||||||
|
|
||||||
|
nanoid@3.3.11: {}
|
||||||
|
|
||||||
|
obug@2.1.1: {}
|
||||||
|
|
||||||
|
path-scurry@2.0.1:
|
||||||
|
dependencies:
|
||||||
|
lru-cache: 11.2.5
|
||||||
|
minipass: 7.1.2
|
||||||
|
|
||||||
|
pathe@2.0.3: {}
|
||||||
|
|
||||||
|
picocolors@1.1.1: {}
|
||||||
|
|
||||||
|
picomatch@4.0.3: {}
|
||||||
|
|
||||||
|
postcss@8.5.6:
|
||||||
|
dependencies:
|
||||||
|
nanoid: 3.3.11
|
||||||
|
picocolors: 1.1.1
|
||||||
|
source-map-js: 1.2.1
|
||||||
|
|
||||||
|
rollup@4.56.0:
|
||||||
|
dependencies:
|
||||||
|
'@types/estree': 1.0.8
|
||||||
|
optionalDependencies:
|
||||||
|
'@rollup/rollup-android-arm-eabi': 4.56.0
|
||||||
|
'@rollup/rollup-android-arm64': 4.56.0
|
||||||
|
'@rollup/rollup-darwin-arm64': 4.56.0
|
||||||
|
'@rollup/rollup-darwin-x64': 4.56.0
|
||||||
|
'@rollup/rollup-freebsd-arm64': 4.56.0
|
||||||
|
'@rollup/rollup-freebsd-x64': 4.56.0
|
||||||
|
'@rollup/rollup-linux-arm-gnueabihf': 4.56.0
|
||||||
|
'@rollup/rollup-linux-arm-musleabihf': 4.56.0
|
||||||
|
'@rollup/rollup-linux-arm64-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-linux-arm64-musl': 4.56.0
|
||||||
|
'@rollup/rollup-linux-loong64-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-linux-loong64-musl': 4.56.0
|
||||||
|
'@rollup/rollup-linux-ppc64-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-linux-ppc64-musl': 4.56.0
|
||||||
|
'@rollup/rollup-linux-riscv64-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-linux-riscv64-musl': 4.56.0
|
||||||
|
'@rollup/rollup-linux-s390x-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-linux-x64-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-linux-x64-musl': 4.56.0
|
||||||
|
'@rollup/rollup-openbsd-x64': 4.56.0
|
||||||
|
'@rollup/rollup-openharmony-arm64': 4.56.0
|
||||||
|
'@rollup/rollup-win32-arm64-msvc': 4.56.0
|
||||||
|
'@rollup/rollup-win32-ia32-msvc': 4.56.0
|
||||||
|
'@rollup/rollup-win32-x64-gnu': 4.56.0
|
||||||
|
'@rollup/rollup-win32-x64-msvc': 4.56.0
|
||||||
|
fsevents: 2.3.3
|
||||||
|
|
||||||
|
siginfo@2.0.0: {}
|
||||||
|
|
||||||
|
source-map-js@1.2.1: {}
|
||||||
|
|
||||||
|
stackback@0.0.2: {}
|
||||||
|
|
||||||
|
std-env@3.10.0: {}
|
||||||
|
|
||||||
|
tinybench@2.9.0: {}
|
||||||
|
|
||||||
|
tinyexec@1.0.2: {}
|
||||||
|
|
||||||
|
tinyglobby@0.2.15:
|
||||||
|
dependencies:
|
||||||
|
fdir: 6.5.0(picomatch@4.0.3)
|
||||||
|
picomatch: 4.0.3
|
||||||
|
|
||||||
|
tinyrainbow@3.0.3: {}
|
||||||
|
|
||||||
|
v-transform@2.2.0:
|
||||||
|
dependencies:
|
||||||
|
commander: 14.0.2
|
||||||
|
glob: 13.0.0
|
||||||
|
js-yaml: 4.1.1
|
||||||
|
xlsx: https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
|
||||||
|
|
||||||
|
vite@7.3.1:
|
||||||
|
dependencies:
|
||||||
|
esbuild: 0.27.2
|
||||||
|
fdir: 6.5.0(picomatch@4.0.3)
|
||||||
|
picomatch: 4.0.3
|
||||||
|
postcss: 8.5.6
|
||||||
|
rollup: 4.56.0
|
||||||
|
tinyglobby: 0.2.15
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents: 2.3.3
|
||||||
|
|
||||||
|
vitest@4.0.18:
|
||||||
|
dependencies:
|
||||||
|
'@vitest/expect': 4.0.18
|
||||||
|
'@vitest/mocker': 4.0.18(vite@7.3.1)
|
||||||
|
'@vitest/pretty-format': 4.0.18
|
||||||
|
'@vitest/runner': 4.0.18
|
||||||
|
'@vitest/snapshot': 4.0.18
|
||||||
|
'@vitest/spy': 4.0.18
|
||||||
|
'@vitest/utils': 4.0.18
|
||||||
|
es-module-lexer: 1.7.0
|
||||||
|
expect-type: 1.3.0
|
||||||
|
magic-string: 0.30.21
|
||||||
|
obug: 2.1.1
|
||||||
|
pathe: 2.0.3
|
||||||
|
picomatch: 4.0.3
|
||||||
|
std-env: 3.10.0
|
||||||
|
tinybench: 2.9.0
|
||||||
|
tinyexec: 1.0.2
|
||||||
|
tinyglobby: 0.2.15
|
||||||
|
tinyrainbow: 3.0.3
|
||||||
|
vite: 7.3.1
|
||||||
|
why-is-node-running: 2.3.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- jiti
|
||||||
|
- less
|
||||||
|
- lightningcss
|
||||||
|
- msw
|
||||||
|
- sass
|
||||||
|
- sass-embedded
|
||||||
|
- stylus
|
||||||
|
- sugarss
|
||||||
|
- terser
|
||||||
|
- tsx
|
||||||
|
- yaml
|
||||||
|
|
||||||
|
why-is-node-running@2.3.0:
|
||||||
|
dependencies:
|
||||||
|
siginfo: 2.0.0
|
||||||
|
stackback: 0.0.2
|
||||||
|
|
||||||
|
xlsx@https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz: {}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,74 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
|
|
||||||
<meta name="description" content="やり直すんだ。そして、次はうまくやる。"/>
|
|
||||||
<meta name="keywords" content="人生重开模拟器 liferestart life restart remake 人生重来"/>
|
|
||||||
<meta name="renderer" content="webkit"/>
|
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
|
||||||
<meta name="full-screen" content="true"/>
|
|
||||||
<meta name="x5-fullscreen" content="true"/>
|
|
||||||
<meta name="360-fullscreen" content="true"/>
|
|
||||||
<meta name="theme-color" content="#157878"/>
|
|
||||||
<meta name="laya" screenorientation ="landscape"/>
|
|
||||||
<meta http-equiv="expires" content="0"/>
|
|
||||||
<meta http-equiv="Cache-Control" content="no-siteapp"/>
|
|
||||||
<font-face font-family="方正像素12" src="fonts/方正像素12.ttf"/>
|
|
||||||
<title>Life Restart</title>
|
|
||||||
</head>
|
|
||||||
<body style="background:black">
|
|
||||||
<!--以下引用了常用类库,如果不使用,可以删除-->
|
|
||||||
|
|
||||||
<!--核心包,封装了显示对象渲染,事件,时间管理,时间轴动画,缓动,消息交互,socket,本地存储,鼠标触摸,声音,加载,颜色滤镜,位图字体等-->
|
|
||||||
<script type="text/javascript" src="libs/laya/laya.core.js"></script>
|
|
||||||
<!--提供了微信小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.wxmini.js"></script> -->
|
|
||||||
<!--提供了百度小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.bdmini.js"></script> -->
|
|
||||||
<!--提供了小米小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.xmmini.js"></script> -->
|
|
||||||
<!--提供了OPPO小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.quickgamemini.js"></script> -->
|
|
||||||
<!--提供了bilibili小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.bilimini.js"></script> -->
|
|
||||||
<!--提供了Alipay小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.Alipaymini.js"></script> -->
|
|
||||||
<!--提供了qq小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.qqmini.js"></script> -->
|
|
||||||
<!--提供了字节跳动小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.ttmini.js"></script> -->
|
|
||||||
<!--提供了华为快游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.hwmini.js"></script> -->
|
|
||||||
<!--提供了淘宝商家应用的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.tbmini.js"></script> -->
|
|
||||||
<!--提供了淘宝小部件的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.tbplugin.js"></script> -->
|
|
||||||
<!--封装了webgl渲染管线,如果使用webgl渲染,可以在初始化时调用Laya.init(1000,800,laya.webgl.WebGL);-->
|
|
||||||
<script type="text/javascript" src="libs/laya/laya.webgl.js"></script>
|
|
||||||
<!--提供了VIVO小游戏的适配-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.vvmini.js"></script> -->
|
|
||||||
<!--是动画模块,包含了swf动画,骨骼动画等-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.ani.js"></script> -->
|
|
||||||
<!--包含更多webgl滤镜,比如外发光,阴影,模糊以及更多-->
|
|
||||||
<script type="text/javascript" src="libs/laya/laya.filter.js"></script>
|
|
||||||
<!--封装了html动态排版功能-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.html.js"></script> -->
|
|
||||||
<!--粒子类库-->
|
|
||||||
<script type="text/javascript" src="libs/laya/laya.particle.js"></script>
|
|
||||||
<!--提供tileMap解析支持-->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.tiledmap.js"></script> -->
|
|
||||||
<!--提供了制作UI的各种组件实现-->
|
|
||||||
<script type="text/javascript" src="libs/laya/laya.ui.js"></script>
|
|
||||||
<!-- 提供LayaAir3d接口 -->
|
|
||||||
<!-- <script type="text/javascript" src="libs/laya/laya.d3.js"></script> -->
|
|
||||||
|
|
||||||
<!-- 物理引擎matter.js -->
|
|
||||||
<!--自定义的js(src文件夹下)文件自动添加到下面jsfile模块标签里面里,js的顺序可以手动修改,修改后保留修改的顺序,新增加的js会默认依次追加到标签里-->
|
|
||||||
<!--删除标签,ide不会自动添加js文件,请谨慎操作-->
|
|
||||||
<!--jsfile--startTag-->
|
|
||||||
<script type="module" src="../src/index.js"></script>
|
|
||||||
<!--jsfile--endTag-->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta name="description" content="やり直すんだ。そして、次はうまくやる。"/><meta name="keywords" content="人生重开模拟器 liferestart life restart remake 人生重来"/><meta name="renderer" content="webkit"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="full-screen" content="true"/><meta name="x5-fullscreen" content="true"/><meta name="360-fullscreen" content="true"/><meta name="theme-color" content="#157878"/><meta name="laya" screenorientation="landscape"/><meta http-equiv="expires" content="0"/><meta http-equiv="Cache-Control" content="no-siteapp"/><title>Life Restart</title><script src="libs/laya/min/laya.core.min.js"></script><script src="libs/laya/min/laya.webgl.min.js"></script><script src="libs/laya/min/laya.filter.min.js"></script><script src="libs/laya/min/laya.particle.min.js"></script><script src="libs/laya/min/laya.ui.min.js"></script><script defer="defer" src="chunk/main.a3242.js"></script></head><body style="background:black"></body></html>
|
|
||||||
770
repl/app.js
770
repl/app.js
File diff suppressed because it is too large
Load Diff
@@ -1,32 +1,44 @@
|
|||||||
import App from './app.js';
|
import { fileURLToPath } from 'url'
|
||||||
import { readFile, writeFile } from 'fs/promises';
|
import { dirname } from 'path'
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url)
|
||||||
|
const __dirname = dirname(__filename)
|
||||||
|
|
||||||
|
import App from './app.js'
|
||||||
|
import { readFile, writeFile } from 'fs/promises'
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
globalThis.localStorage = JSON.parse(await readFile('__localStorage.json'));
|
globalThis.localStorage = JSON.parse(
|
||||||
|
await readFile(__dirname + '/__localStorage.json')
|
||||||
|
)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
globalThis.localStorage = {};
|
globalThis.localStorage = {}
|
||||||
}
|
}
|
||||||
localStorage.getItem = key => localStorage[key]===void 0? null: localStorage[key];
|
localStorage.getItem = key =>
|
||||||
localStorage.setItem = (key, value) => (localStorage[key] = value);
|
localStorage[key] === void 0 ? null : localStorage[key]
|
||||||
|
localStorage.setItem = (key, value) => (localStorage[key] = value)
|
||||||
|
|
||||||
globalThis.dumpLocalStorage = async ()=>await writeFile('__localStorage.json', JSON.stringify( global.localStorage))
|
globalThis.dumpLocalStorage = async () =>
|
||||||
|
await writeFile(
|
||||||
|
__dirname + '/__localStorage.json',
|
||||||
|
JSON.stringify(global.localStorage)
|
||||||
|
)
|
||||||
|
|
||||||
const app = new App();
|
const app = new App()
|
||||||
app.io(
|
app.io(
|
||||||
repl => process.stdin.on('data', data=>repl(data.toString().trim())),
|
repl => process.stdin.on('data', data => repl(data.toString().trim())),
|
||||||
(data, isRepl) => process.stdout.write(`${data}${isRepl?'\n>':''}`),
|
(data, isRepl) => process.stdout.write(`${data}${isRepl ? '\n>' : ''}`),
|
||||||
code=>process.exit(code)
|
code => process.exit(code)
|
||||||
)
|
)
|
||||||
await app.initial();
|
await app.initial()
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main()
|
||||||
|
|
||||||
// process.stdin.setRawMode(true);
|
// process.stdin.setRawMode(true);
|
||||||
|
|
||||||
// process.openStdin().on('keypress', function (chunk, key) {
|
// process.openStdin().on('keypress', function (chunk, key) {
|
||||||
// process.stdout.write('Get Chunk: ' + chunk + '\n');
|
// process.stdout.write('Get Chunk: ' + chunk + '\n');
|
||||||
// if (key && key.ctrl && key.name == 'c') process.exit();
|
// if (key && key.ctrl && key.name == 'c') process.exit();
|
||||||
// });
|
// });
|
||||||
|
|||||||
59
src/app.js
59
src/app.js
@@ -1,3 +1,4 @@
|
|||||||
|
import './ui/laya.patch.js';
|
||||||
import './ui/runtime.js';
|
import './ui/runtime.js';
|
||||||
import './ui/pluginFunction.js'
|
import './ui/pluginFunction.js'
|
||||||
import './ui/promisesLaya.js'
|
import './ui/promisesLaya.js'
|
||||||
@@ -6,21 +7,21 @@ import UIManager from './ui/uiManager.js';
|
|||||||
import * as utils from './functions/util.js';
|
import * as utils from './functions/util.js';
|
||||||
|
|
||||||
globalThis.UIManager =
|
globalThis.UIManager =
|
||||||
globalThis.UI =
|
globalThis.UI =
|
||||||
UIManager;
|
UIManager;
|
||||||
|
|
||||||
globalThis.$_ = utils;
|
globalThis.$_ = utils;
|
||||||
|
|
||||||
globalThis.goto = async tag => {
|
globalThis.goto = async tag => {
|
||||||
let url;
|
let url;
|
||||||
switch(tag) {
|
switch (tag) {
|
||||||
case 'github': url = 'https://github.com/VickScarlet/lifeRestart'; break;
|
case 'github': url = 'https://github.com/VickScarlet/lifeRestart'; break;
|
||||||
case 'discord': url = 'https://discord.gg/U3qrf49NMQ'; break;
|
case 'discord': url = 'https://discord.gg/U3qrf49NMQ'; break;
|
||||||
case 'sponsor_afd': url = 'https://afdian.net/@LifeRestart'; break;
|
case 'sponsor_afd': url = 'https://afdian.com/a/LifeRestart'; break;
|
||||||
case 'sponsor_ddf': url = 'https://dun.mianbaoduo.com/@vickscarlet'; break;
|
case 'sponsor_ddf': url = 'https://dun.mianbaoduo.com/@vickscarlet'; break;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if(Laya.Browser.onIOS) {
|
if (Laya.Browser.onIOS) {
|
||||||
window.location.href = url;
|
window.location.href = url;
|
||||||
} else {
|
} else {
|
||||||
window.open(url, '_blank');
|
window.open(url, '_blank');
|
||||||
@@ -29,8 +30,8 @@ globalThis.goto = async tag => {
|
|||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class App{
|
class App {
|
||||||
constructor(){
|
constructor() {
|
||||||
this.name = 'lifeRestart';
|
this.name = 'lifeRestart';
|
||||||
this.version = '2.0.0';
|
this.version = '2.0.0';
|
||||||
console.log(`${this.name} ${this.version}`);
|
console.log(`${this.name} ${this.version}`);
|
||||||
@@ -49,10 +50,10 @@ class App{
|
|||||||
//class laya.webgl.text.CharSegment
|
//class laya.webgl.text.CharSegment
|
||||||
class CharSegment {
|
class CharSegment {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._sourceStr=null;
|
this._sourceStr = null;
|
||||||
}
|
}
|
||||||
textToSpit(str) {
|
textToSpit(str) {
|
||||||
this._sourceStr=str;
|
this._sourceStr = str;
|
||||||
var texLen = str.length;
|
var texLen = str.length;
|
||||||
var idx = -1;
|
var idx = -1;
|
||||||
this._words = [];
|
this._words = [];
|
||||||
@@ -66,18 +67,18 @@ class App{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getChar(i){
|
getChar(i) {
|
||||||
return this._words;
|
return this._words;
|
||||||
}
|
}
|
||||||
getCharCode(i){
|
getCharCode(i) {
|
||||||
return this._words[i].codePointAt(0);
|
return this._words[i].codePointAt(0);
|
||||||
}
|
}
|
||||||
length(){
|
length() {
|
||||||
return this._words.length;
|
return this._words.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Laya.class(CharSegment,'laya.webgl.text.CharSegment');
|
Laya.class(CharSegment, 'laya.webgl.text.CharSegment');
|
||||||
Laya.imps(CharSegment.prototype,{"laya.webgl.text.ICharSegment":true})
|
Laya.imps(CharSegment.prototype, { "laya.webgl.text.ICharSegment": true })
|
||||||
|
|
||||||
|
|
||||||
// Laya.init(1125, 2436, Laya.WebGL);
|
// Laya.init(1125, 2436, Laya.WebGL);
|
||||||
@@ -102,15 +103,15 @@ class App{
|
|||||||
const screenWidth = window.innerWidth;
|
const screenWidth = window.innerWidth;
|
||||||
const screenHeight = window.innerHeight;
|
const screenHeight = window.innerHeight;
|
||||||
const screenRatio = screenWidth / screenHeight;
|
const screenRatio = screenWidth / screenHeight;
|
||||||
if(screenRatio > designRatio) {
|
if (screenRatio > designRatio) {
|
||||||
return [
|
return [
|
||||||
Math.min(screenWidth*designHeight/screenHeight, maxWidth),
|
Math.min(screenWidth * designHeight / screenHeight, maxWidth),
|
||||||
designHeight
|
designHeight
|
||||||
]
|
]
|
||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
designWidth,
|
designWidth,
|
||||||
Math.min(screenHeight*designWidth/screenWidth, maxHeight)
|
Math.min(screenHeight * designWidth / screenWidth, maxHeight)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,7 +121,7 @@ class App{
|
|||||||
}
|
}
|
||||||
|
|
||||||
async #setLanguage(language) {
|
async #setLanguage(language) {
|
||||||
switch(language) {
|
switch (language) {
|
||||||
case App.languages['en-us']:
|
case App.languages['en-us']:
|
||||||
case App.languages['zh-cn']:
|
case App.languages['zh-cn']:
|
||||||
this.#language = language;
|
this.#language = language;
|
||||||
@@ -130,23 +131,23 @@ class App{
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
globalThis.$lang =
|
globalThis.$lang =
|
||||||
Laya.Text.langPacks =
|
Laya.Text.langPacks =
|
||||||
(await import(`./i18n/${this.#language}.js`)).default;
|
(await import(`./i18n/${this.#language}.js`)).default;
|
||||||
}
|
}
|
||||||
|
|
||||||
resigterEvent() {
|
resigterEvent() {
|
||||||
$$on('achievement', achievement => {
|
$$on('achievement', achievement => {
|
||||||
$ui.popup(UI.popups.ACHIEVEMENT, {achievement});
|
$ui.popup(UI.popups.ACHIEVEMENT, { achievement });
|
||||||
})
|
})
|
||||||
$$on('message', ([message, ...args]) => {
|
$$on('message', ([message, ...args]) => {
|
||||||
if(Array.isArray(message)) {
|
if (Array.isArray(message)) {
|
||||||
message = message.map(([m, ...a]) => $_.format($lang[m], ...a)) .join('\n');
|
message = message.map(([m, ...a]) => $_.format($lang[m], ...a)).join('\n');
|
||||||
} else {
|
} else {
|
||||||
message = $_.format(
|
message = $_.format(
|
||||||
$lang[message], ...args
|
$lang[message], ...args
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$ui.popup(UI.popups.MESSAGE, {message});
|
$ui.popup(UI.popups.MESSAGE, { message });
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,12 +159,8 @@ class App{
|
|||||||
this.#initLaya();
|
this.#initLaya();
|
||||||
globalThis.$ui = UIManager.getInstance();
|
globalThis.$ui = UIManager.getInstance();
|
||||||
|
|
||||||
if(theme=='default') {
|
if (theme == 'default') {
|
||||||
if(!localStorage.getItem('__')) {
|
theme = localStorage.getItem('theme') || 'default';
|
||||||
localStorage.setItem('__', 1);
|
|
||||||
localStorage.setItem('theme', 'cyber');
|
|
||||||
}
|
|
||||||
theme = localStorage.getItem('theme');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$ui.theme = theme;
|
$ui.theme = theme;
|
||||||
@@ -171,8 +168,8 @@ class App{
|
|||||||
await $ui.setLoading(UI.pages.LOADING);
|
await $ui.setLoading(UI.pages.LOADING);
|
||||||
await $ui.switchView(UI.pages.LOADING);
|
await $ui.switchView(UI.pages.LOADING);
|
||||||
await core.initial(
|
await core.initial(
|
||||||
dataSet=>Laya.promises.loader.load(`data/${this.#language}/${dataSet}.json`, null, Laya.Loader.JSON),
|
dataSet => Laya.promises.loader.load(`data/${this.#language}/${dataSet}.json`, null, Laya.Loader.JSON),
|
||||||
dataSet=>Laya.promises.loader.load(`data/${dataSet}.json`, null, Laya.Loader.JSON),
|
dataSet => Laya.promises.loader.load(`data/${dataSet}.json`, null, Laya.Loader.JSON),
|
||||||
);
|
);
|
||||||
await $ui.switchView(UI.pages.MAIN);
|
await $ui.switchView(UI.pages.MAIN);
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ function parseCondition(condition) {
|
|||||||
return conditions;
|
return conditions;
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkCondition(property, condition) {
|
export function checkCondition(property, condition) {
|
||||||
const conditions = parseCondition(condition);
|
const conditions = parseCondition(condition);
|
||||||
return checkParsedConditions(property, conditions);
|
return checkParsedConditions(property, conditions);
|
||||||
}
|
}
|
||||||
@@ -113,7 +113,7 @@ function checkProp(property, condition) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractMaxTriggers(condition) {
|
export function extractMaxTriggers(condition) {
|
||||||
// Assuming only age related talents can be triggered multiple times.
|
// Assuming only age related talents can be triggered multiple times.
|
||||||
const RE_AGE_CONDITION = /AGE\?\[([0-9\,]+)\]/;
|
const RE_AGE_CONDITION = /AGE\?\[([0-9\,]+)\]/;
|
||||||
const match_object = RE_AGE_CONDITION.exec(condition);
|
const match_object = RE_AGE_CONDITION.exec(condition);
|
||||||
@@ -124,6 +124,4 @@ function extractMaxTriggers(condition) {
|
|||||||
|
|
||||||
const age_list = match_object[1].split(",");
|
const age_list = match_object[1].split(",");
|
||||||
return age_list.length;
|
return age_list.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { checkCondition, extractMaxTriggers };
|
|
||||||
103
src/functions/condition.spec.js
Normal file
103
src/functions/condition.spec.js
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
import { expect, test, describe } from 'vitest'
|
||||||
|
import { checkCondition } from './condition'
|
||||||
|
|
||||||
|
function withProp(prop) {
|
||||||
|
const p = {
|
||||||
|
get(key) {
|
||||||
|
return prop[key]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return condition => checkCondition(p, condition)
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('condition', () => {
|
||||||
|
const check = withProp({
|
||||||
|
n1: 0,
|
||||||
|
n2: -10,
|
||||||
|
n3: 10,
|
||||||
|
nl1: [1, 2, 3],
|
||||||
|
nl2: [0],
|
||||||
|
nl3: [],
|
||||||
|
})
|
||||||
|
test('gt(>)', () => {
|
||||||
|
expect(check('n3>11')).toBe(false)
|
||||||
|
expect(check('n3>10')).toBe(false)
|
||||||
|
expect(check('n3>9')).toBe(true)
|
||||||
|
})
|
||||||
|
test('gte(>=)', () => {
|
||||||
|
expect(check('n3>=11')).toBe(false)
|
||||||
|
expect(check('n3>=10')).toBe(true)
|
||||||
|
expect(check('n3>=9')).toBe(true)
|
||||||
|
})
|
||||||
|
test('lt(<)', () => {
|
||||||
|
expect(check('n3<9')).toBe(false)
|
||||||
|
expect(check('n3<10')).toBe(false)
|
||||||
|
expect(check('n3<11')).toBe(true)
|
||||||
|
})
|
||||||
|
test('lte(<=)', () => {
|
||||||
|
expect(check('n3<=9')).toBe(false)
|
||||||
|
expect(check('n3<=10')).toBe(true)
|
||||||
|
expect(check('n3<=11')).toBe(true)
|
||||||
|
})
|
||||||
|
test('eq(=)', () => {
|
||||||
|
expect(check('n3=9')).toBe(false)
|
||||||
|
expect(check('n3=10')).toBe(true)
|
||||||
|
expect(check('n3=11')).toBe(false)
|
||||||
|
expect(check('nl1=0')).toBe(false)
|
||||||
|
expect(check('nl1=1')).toBe(true)
|
||||||
|
expect(check('nl1=2')).toBe(true)
|
||||||
|
expect(check('nl1=3')).toBe(true)
|
||||||
|
})
|
||||||
|
test('ne(!=)', () => {
|
||||||
|
expect(check('n3!=9')).toBe(true)
|
||||||
|
expect(check('n3!=10')).toBe(false)
|
||||||
|
expect(check('n3!=11')).toBe(true)
|
||||||
|
expect(check('nl1!=0')).toBe(true)
|
||||||
|
expect(check('nl1!=1')).toBe(false)
|
||||||
|
expect(check('nl1!=2')).toBe(false)
|
||||||
|
expect(check('nl1!=3')).toBe(false)
|
||||||
|
})
|
||||||
|
test('in(?)', () => {
|
||||||
|
expect(check('n3?[1,2,3]')).toBe(false)
|
||||||
|
expect(check('n3?[10,11,12]')).toBe(true)
|
||||||
|
expect(check('nl1?[0,1]')).toBe(true)
|
||||||
|
expect(check('nl2?[1,2,3]')).toBe(false)
|
||||||
|
expect(check('nl3?[1,2,3]')).toBe(false)
|
||||||
|
expect(check('nl2?[]')).toBe(false)
|
||||||
|
expect(check('nl3?[]')).toBe(false)
|
||||||
|
})
|
||||||
|
test('notin(!)', () => {
|
||||||
|
expect(check('n3![1,2,3]')).toBe(true)
|
||||||
|
expect(check('n3![10,11,12]')).toBe(false)
|
||||||
|
expect(check('nl1![0,1]')).toBe(false)
|
||||||
|
expect(check('nl2![1,2,3]')).toBe(true)
|
||||||
|
expect(check('nl3![1,2,3]')).toBe(true)
|
||||||
|
expect(check('nl2![]')).toBe(true)
|
||||||
|
expect(check('nl3![]')).toBe(true)
|
||||||
|
})
|
||||||
|
test('and(&)', () => {
|
||||||
|
expect(check('n1>=0&n2<0')).toBe(true)
|
||||||
|
expect(check('n2>0&n3>0')).toBe(false)
|
||||||
|
expect(check('n2<0&n3<0')).toBe(false)
|
||||||
|
expect(check('n2<0&n3>0')).toBe(true)
|
||||||
|
expect(check('n1=0&n2<0&n3>0')).toBe(true)
|
||||||
|
expect(check('n1=0&n2>0&n3>0')).toBe(false)
|
||||||
|
})
|
||||||
|
test('or(|)', () => {
|
||||||
|
expect(check('n1>=0|n2<0')).toBe(true)
|
||||||
|
expect(check('n2>0|n3>0')).toBe(true)
|
||||||
|
expect(check('n2<0|n3<0')).toBe(true)
|
||||||
|
expect(check('n2<0|n3>0')).toBe(true)
|
||||||
|
expect(check('n2>0|n3<0')).toBe(false)
|
||||||
|
expect(check('n1=0|n2<0|n3>0')).toBe(true)
|
||||||
|
expect(check('n1=0|n2>0|n3>0')).toBe(true)
|
||||||
|
expect(check('n1!=0|n2>0|n3<0')).toBe(false)
|
||||||
|
})
|
||||||
|
test('mix', () => {
|
||||||
|
expect(check('(n1=0|n2<0|n3>0)&(n1=0|n2>0|n3>0)')).toBe(true)
|
||||||
|
expect(check('(n1=0|n2<0|n3>0)&(n1!=0|n2>0|n3<0)')).toBe(false)
|
||||||
|
expect(check('n1=0|n2<0|n3>0&n1!=0|n2>0|n3<0')).toBe(true)
|
||||||
|
expect(check('(n1>0|n1?[-10,0])&(n2>0|n3![0,1])')).toBe(true)
|
||||||
|
expect(check('(n1>0&n1?[-10,0])|(n2<0&n3![0,1])')).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
function clone(value) {
|
function clone(value) {
|
||||||
switch(typeof value) {
|
switch(typeof value) {
|
||||||
case 'object':
|
case 'object':
|
||||||
|
if(value === null) return null;
|
||||||
if(Array.isArray(value)) return value.map(v=>clone(v));
|
if(Array.isArray(value)) return value.map(v=>clone(v));
|
||||||
const newObj = {};
|
const newObj = {};
|
||||||
for(const key in value) newObj[key] = clone(value[key]);
|
for(const key in value) newObj[key] = clone(value[key]);
|
||||||
|
|||||||
@@ -27,10 +27,11 @@ export default ({
|
|||||||
|
|
||||||
UI_Title_Remake: 'Remake Simulate',
|
UI_Title_Remake: 'Remake Simulate',
|
||||||
UI_Title_Subsequent: 'The rubbish life doesn\'t want to stay for a second',
|
UI_Title_Subsequent: 'The rubbish life doesn\'t want to stay for a second',
|
||||||
UI_Remake: 'Remake Now',
|
UI_Remake: '↻Remake Now',
|
||||||
UI_Thanks: 'Thx',
|
UI_Thanks: 'Thx',
|
||||||
UI_Achievement: 'Achv',
|
UI_Achievement: 'Achv',
|
||||||
UI_Cyber_Theme_Art_Design: 'UI Design by 晰晰',
|
UI_Cyber_Theme_Art_Design: 'UI Design by 晰晰',
|
||||||
|
UI_Banner: '作者的新作《纸上谈亲》已上线小程序\n微信/抖音搜索“纸上谈亲”即可游玩~',
|
||||||
|
|
||||||
UI_Title_Talent: 'Talent Draw',
|
UI_Title_Talent: 'Talent Draw',
|
||||||
UI_Talent_Draw: '!10 Pulls!',
|
UI_Talent_Draw: '!10 Pulls!',
|
||||||
@@ -125,17 +126,31 @@ export default ({
|
|||||||
UI_Write: 'Paste',
|
UI_Write: 'Paste',
|
||||||
|
|
||||||
UI_CopySuccess: 'Copy to clipboard success',
|
UI_CopySuccess: 'Copy to clipboard success',
|
||||||
UI_CopyFaild: 'Copy to clipboard faild',
|
UI_CopyFailed: 'Copy to clipboard Failed',
|
||||||
|
|
||||||
UI_PasteSuccessDecodeSuccess: 'Load Success!',
|
UI_PasteSuccessDecodeSuccess: 'Load Success!',
|
||||||
UI_PasteSuccessDecodeFaild: 'Paste success, but load faild!',
|
UI_PasteSuccessDecodeFailed: 'Paste success, but load Failed!',
|
||||||
UI_PasteFaildDecodeSuccess: 'Paste faild, use input load success!',
|
UI_PasteFailedDecodeSuccess: 'Paste Failed, use input load success!',
|
||||||
UI_PasteFaildDecodeFaild: 'Paste faild, use input load faild!',
|
UI_PasteFailedDecodeFailed: 'Paste Failed, use input load Failed!',
|
||||||
|
|
||||||
UI_LoadSuccess: 'Load Success!',
|
UI_LoadSuccess: 'Load Success!',
|
||||||
UI_LoadFaild: 'Load Faild!',
|
UI_LoadFailed: 'Load Failed!',
|
||||||
|
|
||||||
|
UI_Title_Celebrity: 'Past life was...',
|
||||||
|
UI_CustomMode: 'Custom',
|
||||||
|
UI_CustomModeDescription: '10 Talent\nCustom property',
|
||||||
|
UI_CelebrityMode: 'Celebrity',
|
||||||
|
UI_CelebrityModeDescription: 'Past life is celebrity\nRebirth to modern',
|
||||||
|
UI_AllNot: '↻All Not',
|
||||||
|
UI_UniqueWaTaShi: 'Unique of mine',
|
||||||
|
UI_UniqueWaTaShiContent: '\nUnique character card different from other 60 million player\nAll property, All talent, All random\nAll has only one chance',
|
||||||
|
UI_GenerateNow: 'Generate Now',
|
||||||
|
|
||||||
|
|
||||||
M_NoRank: 'There is no rank',
|
M_NoRank: 'There is no rank',
|
||||||
|
M_PleaseSelectOne: 'Please Select One',
|
||||||
|
M_UnGenerate: 'Unique Character no generate',
|
||||||
|
M_DisableExtendTalent: 'Celebrity mode can\'t extends talent',
|
||||||
|
|
||||||
F_RemakeTimes: 'Remake {0} Times',
|
F_RemakeTimes: 'Remake {0} Times',
|
||||||
F_AchievementCount: 'Achievement {0}',
|
F_AchievementCount: 'Achievement {0}',
|
||||||
@@ -145,4 +160,5 @@ export default ({
|
|||||||
F_TalentSelectNotComplect: 'Please select {0} talent',
|
F_TalentSelectNotComplect: 'Please select {0} talent',
|
||||||
F_PropertyPointLeft: 'You have left {0} property point',
|
F_PropertyPointLeft: 'You have left {0} property point',
|
||||||
F_TalentReplace: 'Talent replace [{source.name}] -> [{target.name}]',
|
F_TalentReplace: 'Talent replace [{source.name}] -> [{target.name}]',
|
||||||
|
F_PropertyStr: 'CHR{CHR} INT{INT} STR{STR} MNY{MNY}'
|
||||||
});
|
});
|
||||||
@@ -15,6 +15,8 @@ export default ({
|
|||||||
UI_Loading: '加载中...',
|
UI_Loading: '加载中...',
|
||||||
UI_Error: '错误',
|
UI_Error: '错误',
|
||||||
|
|
||||||
|
UI_BackupBtn: '上面没有效果就试试这个吧',
|
||||||
|
|
||||||
UI_Colon: ':',
|
UI_Colon: ':',
|
||||||
UI_Times: '次',
|
UI_Times: '次',
|
||||||
UI_Count: '个',
|
UI_Count: '个',
|
||||||
@@ -27,10 +29,11 @@ export default ({
|
|||||||
|
|
||||||
UI_Title_Remake: '人生重开模拟器',
|
UI_Title_Remake: '人生重开模拟器',
|
||||||
UI_Title_Subsequent: '这垃圾人生一秒也不想待了',
|
UI_Title_Subsequent: '这垃圾人生一秒也不想待了',
|
||||||
UI_Remake: '立即重开',
|
UI_Remake: '↻立即重开',
|
||||||
UI_Thanks: '感谢',
|
UI_Thanks: '感谢',
|
||||||
UI_Achievement: '成就',
|
UI_Achievement: '成就',
|
||||||
UI_Cyber_Theme_Art_Design: 'UI 设计 by 晰晰',
|
UI_Cyber_Theme_Art_Design: 'UI 设计 by 晰晰',
|
||||||
|
UI_Banner: '作者的新作《纸上谈亲》已上线小程序\n微信/抖音搜索“纸上谈亲”即可游玩~',
|
||||||
|
|
||||||
UI_Title_Talent: '天赋抽卡',
|
UI_Title_Talent: '天赋抽卡',
|
||||||
UI_Talent_Draw: '10连抽!',
|
UI_Talent_Draw: '10连抽!',
|
||||||
@@ -125,17 +128,30 @@ export default ({
|
|||||||
UI_Write: '粘贴',
|
UI_Write: '粘贴',
|
||||||
|
|
||||||
UI_LoadSuccess: '读档成功!',
|
UI_LoadSuccess: '读档成功!',
|
||||||
UI_LoadFaild: '读档失败!',
|
UI_LoadFailed: '读档失败!',
|
||||||
|
|
||||||
UI_CopySuccess: '成功复制存档到剪贴板',
|
UI_CopySuccess: '成功复制存档到剪贴板',
|
||||||
UI_CopyFaild: '复制存档到剪贴板失败,请手动复制存档内容',
|
UI_CopyFailed: '复制存档到剪贴板失败,请手动复制存档内容',
|
||||||
|
|
||||||
UI_PasteSuccessDecodeSuccess: '读档成功!',
|
UI_PasteSuccessDecodeSuccess: '读档成功!',
|
||||||
UI_PasteSuccessDecodeFaild: '粘贴剪贴板存档内容成功,但剪贴板内容读档失败',
|
UI_PasteSuccessDecodeFailed: '粘贴剪贴板存档内容成功,但剪贴板内容读档失败',
|
||||||
UI_PasteFaildDecodeSuccess: '粘贴剪贴板存档内容失败,使用输入的内容读档成功',
|
UI_PasteFailedDecodeSuccess: '粘贴剪贴板存档内容失败,使用输入的内容读档成功',
|
||||||
UI_PasteFaildDecodeFaild: '粘贴剪贴板存档内容失败,使用输入的内容读档失败',
|
UI_PasteFailedDecodeFailed: '粘贴剪贴板存档内容失败,使用输入的内容读档失败',
|
||||||
|
|
||||||
|
UI_Title_Celebrity: '你的前世是...',
|
||||||
|
UI_CustomMode: '经典模式',
|
||||||
|
UI_CustomModeDescription: '10连抽天赋\n自由分配属性',
|
||||||
|
UI_CelebrityMode: '名人模式',
|
||||||
|
UI_CelebrityModeDescription: '前世是古代名人\n重开到了现代',
|
||||||
|
UI_AllNot: '↻都不是',
|
||||||
|
UI_UniqueWaTaShi: '独一无二的我',
|
||||||
|
UI_UniqueWaTaShiContent: '\n6000万玩家中独一无二的角色卡\n所有属性 所有天赋 随机生成\n 每人只能生成一次',
|
||||||
|
UI_GenerateNow: '立即生成',
|
||||||
|
|
||||||
M_NoRank: '别卷了,没有排行榜',
|
M_NoRank: '别卷了,没有排行榜',
|
||||||
|
M_PleaseSelectOne: '请选择一个名人',
|
||||||
|
M_UnGenerate: '独一无二的我还没有生成',
|
||||||
|
M_DisableExtendTalent: '名人模式不能继承天赋',
|
||||||
|
|
||||||
F_RemakeTimes: '已重开{0}次',
|
F_RemakeTimes: '已重开{0}次',
|
||||||
F_AchievementCount: '成就达成{0}个',
|
F_AchievementCount: '成就达成{0}个',
|
||||||
@@ -145,4 +161,5 @@ export default ({
|
|||||||
F_TalentSelectNotComplect: '要选满{0}个天赋',
|
F_TalentSelectNotComplect: '要选满{0}个天赋',
|
||||||
F_PropertyPointLeft: '你还有 {0} 属性点没有分配完',
|
F_PropertyPointLeft: '你还有 {0} 属性点没有分配完',
|
||||||
F_TalentReplace: '天赋替换【{source.name}】->【{target.name}】',
|
F_TalentReplace: '天赋替换【{source.name}】->【{target.name}】',
|
||||||
|
F_PropertyStr: '颜值{CHR} 智力{INT} 体质{STR} 家境{MNY}'
|
||||||
});
|
});
|
||||||
24
src/index.js
24
src/index.js
@@ -196,5 +196,29 @@ core.config({
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
characterConfig: { // config for character
|
||||||
|
characterPullCount: 3,
|
||||||
|
rateableKnife: 10,
|
||||||
|
propertyWeight: [
|
||||||
|
[ 0, 1],
|
||||||
|
[ 1, 2],
|
||||||
|
[ 2, 3],
|
||||||
|
[ 3, 4],
|
||||||
|
[ 4, 5],
|
||||||
|
[ 5, 6],
|
||||||
|
[ 6, 5],
|
||||||
|
[ 7, 4],
|
||||||
|
[ 8, 3],
|
||||||
|
[ 9, 2],
|
||||||
|
[10, 1],
|
||||||
|
],
|
||||||
|
talentWeight: [
|
||||||
|
[ 1, 1],
|
||||||
|
[ 2, 2],
|
||||||
|
[ 3, 3],
|
||||||
|
[ 4, 2],
|
||||||
|
[ 5, 1],
|
||||||
|
],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
game.start(query);
|
game.start(query);
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { clone } from '../functions/util.js';
|
|
||||||
import { checkCondition } from '../functions/condition.js';
|
|
||||||
|
|
||||||
class Achievement {
|
class Achievement {
|
||||||
constructor() {}
|
constructor(system) {
|
||||||
|
this.#system = system;
|
||||||
|
}
|
||||||
|
|
||||||
// 时机
|
// 时机
|
||||||
Opportunity = {
|
Opportunity = {
|
||||||
@@ -12,6 +11,7 @@ class Achievement {
|
|||||||
END: "END", // 游戏完成,点击重开 重开次数在这之后才会+1
|
END: "END", // 游戏完成,点击重开 重开次数在这之后才会+1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#system;
|
||||||
#achievements;
|
#achievements;
|
||||||
|
|
||||||
initial({achievements}) {
|
initial({achievements}) {
|
||||||
@@ -23,7 +23,11 @@ class Achievement {
|
|||||||
return Object.keys(this.#achievements).length;
|
return Object.keys(this.#achievements).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
list(property) {
|
get #prop() {
|
||||||
|
return this.#system.request(this.#system.Module.PROPERTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
list() {
|
||||||
return Object
|
return Object
|
||||||
.values(this.#achievements)
|
.values(this.#achievements)
|
||||||
.map(({
|
.map(({
|
||||||
@@ -32,34 +36,34 @@ class Achievement {
|
|||||||
})=>({
|
})=>({
|
||||||
id, name, opportunity,
|
id, name, opportunity,
|
||||||
description, hide, grade,
|
description, hide, grade,
|
||||||
isAchieved: this.isAchieved(id, property),
|
isAchieved: this.isAchieved(id, this.#prop),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
get(achievementId) {
|
get(achievementId) {
|
||||||
const achievement = this.#achievements[achievementId];
|
const achievement = this.#achievements[achievementId];
|
||||||
if(!achievement) throw new Error(`[ERROR] No Achievement[${achievementId}]`);
|
if(!achievement) throw new Error(`[ERROR] No Achievement[${achievementId}]`);
|
||||||
return clone(achievement);
|
return this.#system.clone(achievement);
|
||||||
}
|
}
|
||||||
|
|
||||||
check(achievementId, property) {
|
check(achievementId) {
|
||||||
const { condition } = this.get(achievementId);
|
const { condition } = this.get(achievementId);
|
||||||
return checkCondition(property, condition);
|
return this.#system.check(condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
isAchieved(achievementId, property) {
|
isAchieved(achievementId) {
|
||||||
for(const [achieved] of (property.get(property.TYPES.ACHV)||[]))
|
for(const [achieved] of (this.#prop.get(this.#prop.TYPES.ACHV)||[]))
|
||||||
if(achieved == achievementId) return true;
|
if(achieved == achievementId) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
achieve(opportunity, property) {
|
achieve(opportunity) {
|
||||||
this.list(property)
|
this.list()
|
||||||
.filter(({isAchieved})=>!isAchieved)
|
.filter(({isAchieved})=>!isAchieved)
|
||||||
.filter(({opportunity: o})=>o==opportunity)
|
.filter(({opportunity: o})=>o==opportunity)
|
||||||
.filter(({id})=>this.check(id, property))
|
.filter(({id})=>this.check(id, this.#prop))
|
||||||
.forEach(({id})=>{
|
.forEach(({id})=>{
|
||||||
property.achieve(property.TYPES.ACHV, id)
|
this.#prop.achieve(this.#prop.TYPES.ACHV, id)
|
||||||
$$event('achievement', this.get(id))
|
$$event('achievement', this.get(id))
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
134
src/modules/character.js
Normal file
134
src/modules/character.js
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
class Character {
|
||||||
|
constructor(system) {
|
||||||
|
this.#system = system;
|
||||||
|
}
|
||||||
|
|
||||||
|
#system;
|
||||||
|
#characters;
|
||||||
|
#characterPullCount;
|
||||||
|
#rateableKnife;
|
||||||
|
#rate;
|
||||||
|
#pipe = [];
|
||||||
|
#uniqueWaTaShi;
|
||||||
|
#propertyWeight;
|
||||||
|
#talentWeight
|
||||||
|
|
||||||
|
initial({characters}) {
|
||||||
|
this.#characters = characters;
|
||||||
|
const uniqueWaTaShi = localStorage.getItem('uniqueWaTaShi');
|
||||||
|
if(uniqueWaTaShi != null || uniqueWaTaShi != 'undefined')
|
||||||
|
this.#uniqueWaTaShi = JSON.parse(uniqueWaTaShi);
|
||||||
|
return this.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
get count() {
|
||||||
|
return Object.keys(this.#characters).length;
|
||||||
|
}
|
||||||
|
|
||||||
|
config({
|
||||||
|
characterPullCount = 3,
|
||||||
|
rateableKnife = 10,
|
||||||
|
propertyWeight,
|
||||||
|
talentWeight,
|
||||||
|
} = {}) {
|
||||||
|
this.#characterPullCount = characterPullCount;
|
||||||
|
this.#rateableKnife = rateableKnife;
|
||||||
|
this.#propertyWeight = propertyWeight;
|
||||||
|
this.#talentWeight = talentWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
get #unique() {
|
||||||
|
if(this.#uniqueWaTaShi) {
|
||||||
|
return this.#system.clone(this.#uniqueWaTaShi);
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = Date.now();
|
||||||
|
this.#pipe.push(now);
|
||||||
|
if(this.#pipe.length < 10) return null;
|
||||||
|
const time = this.#pipe.shift();
|
||||||
|
if(now - time > 10000) return null;
|
||||||
|
return {unique: true, generate: false};
|
||||||
|
}
|
||||||
|
|
||||||
|
set #unique(data) {
|
||||||
|
this.#uniqueWaTaShi = this.#system.clone(data);
|
||||||
|
this.#uniqueWaTaShi.unique = true;
|
||||||
|
this.#uniqueWaTaShi.generate = true;
|
||||||
|
localStorage.setItem(
|
||||||
|
'uniqueWaTaShi',
|
||||||
|
JSON.stringify(this.#uniqueWaTaShi)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
get #weightRandom() {
|
||||||
|
return this.#system.function(this.#system.Function.UTIL).weightRandom;
|
||||||
|
}
|
||||||
|
|
||||||
|
generateUnique() {
|
||||||
|
if(this.#uniqueWaTaShi) return this.#unique;
|
||||||
|
const weightRandom = this.#weightRandom;
|
||||||
|
const {CHR, INT, STR, MNY} = this.#system.PropertyTypes;
|
||||||
|
|
||||||
|
this.#unique = {
|
||||||
|
property: {
|
||||||
|
[CHR]: weightRandom(this.#propertyWeight),
|
||||||
|
[INT]: weightRandom(this.#propertyWeight),
|
||||||
|
[STR]: weightRandom(this.#propertyWeight),
|
||||||
|
[MNY]: weightRandom(this.#propertyWeight),
|
||||||
|
},
|
||||||
|
talent: this.#system
|
||||||
|
.request(this.#system.Module.TALENT)
|
||||||
|
.random(weightRandom(this.#talentWeight)),
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.#unique;
|
||||||
|
}
|
||||||
|
|
||||||
|
random() {
|
||||||
|
return {
|
||||||
|
unique: this.#unique,
|
||||||
|
normal: this.#rateable(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#rateable() {
|
||||||
|
if(!this.#rate) {
|
||||||
|
this.#rate = {};
|
||||||
|
for(const id in this.#characters) {
|
||||||
|
this.#rate[id] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const r = [];
|
||||||
|
const weightRandom = this.#weightRandom;
|
||||||
|
new Array(this.#characterPullCount)
|
||||||
|
.fill(0)
|
||||||
|
.forEach(()=>{
|
||||||
|
r.push(
|
||||||
|
weightRandom(Object
|
||||||
|
.keys(this.#rate)
|
||||||
|
.filter(id=>!r.includes(id))
|
||||||
|
.map(id=>([id,this.#rate[id]]))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
let min = Infinity;
|
||||||
|
for(const id in this.#rate) {
|
||||||
|
if(r.includes(id)) {
|
||||||
|
min = Math.min(min, this.#rate[id]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
min = Math.min(min, ++ this.#rate[id]);
|
||||||
|
}
|
||||||
|
if(min > this.#rateableKnife) {
|
||||||
|
for(const id in this.#rate) {
|
||||||
|
this.#rate[id] -= this.#rateableKnife;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r.map(id=>this.#system.clone(this.#characters[id]));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Character;
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import { clone } from '../functions/util.js';
|
|
||||||
import { checkCondition } from '../functions/condition.js';
|
|
||||||
|
|
||||||
class Event {
|
class Event {
|
||||||
constructor() {}
|
constructor(system) {
|
||||||
|
this.#system = system;
|
||||||
|
}
|
||||||
|
|
||||||
|
#system;
|
||||||
#events;
|
#events;
|
||||||
|
|
||||||
initial({events}) {
|
initial({events}) {
|
||||||
@@ -24,18 +24,18 @@ class Event {
|
|||||||
return Object.keys(this.#events).length;
|
return Object.keys(this.#events).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
check(eventId, property) {
|
check(eventId) {
|
||||||
const { include, exclude, NoRandom } = this.get(eventId);
|
const { include, exclude, NoRandom } = this.get(eventId);
|
||||||
if(NoRandom) return false;
|
if(NoRandom) return false;
|
||||||
if(exclude && checkCondition(property, exclude)) return false;
|
if(exclude && this.#system.check(exclude)) return false;
|
||||||
if(include) return checkCondition(property, include);
|
if(include) return this.#system.check(include);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
get(eventId) {
|
get(eventId) {
|
||||||
const event = this.#events[eventId];
|
const event = this.#events[eventId];
|
||||||
if(!event) throw new Error(`[ERROR] No Event[${eventId}]`);
|
if(!event) throw new Error(`[ERROR] No Event[${eventId}]`);
|
||||||
return clone(event);
|
return this.#system.clone(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
information(eventId) {
|
information(eventId) {
|
||||||
@@ -43,11 +43,11 @@ class Event {
|
|||||||
return { description };
|
return { description };
|
||||||
}
|
}
|
||||||
|
|
||||||
do(eventId, property) {
|
do(eventId) {
|
||||||
const { effect, branch, event: description, postEvent, grade } = this.get(eventId);
|
const { effect, branch, event: description, postEvent, grade } = this.get(eventId);
|
||||||
if(branch)
|
if(branch)
|
||||||
for(const [cond, next] of branch)
|
for(const [cond, next] of branch)
|
||||||
if(checkCondition(property, cond))
|
if(this.#system.check(cond))
|
||||||
return { effect, next, description, grade };
|
return { effect, next, description, grade };
|
||||||
return { effect, postEvent, description, grade };
|
return { effect, postEvent, description, grade };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,39 @@
|
|||||||
import { clone, weightRandom, getListValuesMap, getConvertedMap } from '../functions/util.js'
|
import * as util from '../functions/util.js';
|
||||||
|
import * as fCondition from '../functions/condition.js';
|
||||||
|
|
||||||
import Property from './property.js';
|
import Property from './property.js';
|
||||||
import Event from './event.js';
|
import Event from './event.js';
|
||||||
import Talent from './talent.js';
|
import Talent from './talent.js';
|
||||||
import Achievement from './achievement.js';
|
import Achievement from './achievement.js';
|
||||||
|
import Character from './character.js';
|
||||||
|
|
||||||
class Life {
|
class Life {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.#property = new Property();
|
this.#property = new Property(this);
|
||||||
this.#event = new Event();
|
this.#event = new Event(this);
|
||||||
this.#talent = new Talent();
|
this.#talent = new Talent(this);
|
||||||
this.#achievement = new Achievement();
|
this.#achievement = new Achievement(this);
|
||||||
|
this.#character = new Character(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Module = {
|
||||||
|
PROPERTY: 'PROPERTY',
|
||||||
|
TALENT: 'TALENT',
|
||||||
|
EVENT: 'EVENT',
|
||||||
|
ACHIEVEMENT: 'ACHIEVEMENT',
|
||||||
|
CHARACTER: 'CHARACTER',
|
||||||
|
}
|
||||||
|
|
||||||
|
Function = {
|
||||||
|
CONDITION: 'CONDITION',
|
||||||
|
UTIL: 'UTIL',
|
||||||
}
|
}
|
||||||
|
|
||||||
#property;
|
#property;
|
||||||
#event;
|
#event;
|
||||||
#talent;
|
#talent;
|
||||||
#achievement;
|
#achievement;
|
||||||
|
#character;
|
||||||
#triggerTalents;
|
#triggerTalents;
|
||||||
#defaultPropertyPoints;
|
#defaultPropertyPoints;
|
||||||
#talentSelectLimit;
|
#talentSelectLimit;
|
||||||
@@ -25,22 +43,23 @@ class Life {
|
|||||||
#initialData;
|
#initialData;
|
||||||
|
|
||||||
async initial(i18nLoad, commonLoad) {
|
async initial(i18nLoad, commonLoad) {
|
||||||
const [age, talents, events, achievements, specialThanks] = await Promise.all([
|
const [age, talents, events, achievements, characters, specialThanks] = await Promise.all([
|
||||||
i18nLoad('age'),
|
i18nLoad('age'),
|
||||||
i18nLoad('talents'),
|
i18nLoad('talents'),
|
||||||
i18nLoad('events'),
|
i18nLoad('events'),
|
||||||
i18nLoad('achievement'),
|
i18nLoad('achievement'),
|
||||||
|
i18nLoad('character'),
|
||||||
commonLoad('specialthanks'),
|
commonLoad('specialthanks'),
|
||||||
]);
|
]);
|
||||||
this.#specialThanks = specialThanks;
|
this.#specialThanks = specialThanks;
|
||||||
|
|
||||||
const total = {
|
const total = {
|
||||||
[this.PropertyTypes.TACEV]: this.#achievement.initial({achievements}),
|
[this.PropertyTypes.TACHV]: this.#achievement.initial({achievements}),
|
||||||
[this.PropertyTypes.TEVT]: this.#event.initial({events}),
|
[this.PropertyTypes.TEVT]: this.#event.initial({events}),
|
||||||
[this.PropertyTypes.TTLT]: this.#talent.initial({talents}),
|
[this.PropertyTypes.TTLT]: this.#talent.initial({talents}),
|
||||||
};
|
};
|
||||||
|
|
||||||
this.#property.initial({age, total});
|
this.#property.initial({age, total});
|
||||||
|
this.#character.initial({characters});
|
||||||
}
|
}
|
||||||
|
|
||||||
config({
|
config({
|
||||||
@@ -50,6 +69,7 @@ class Life {
|
|||||||
defaultPropertys = {}, // default propertys
|
defaultPropertys = {}, // default propertys
|
||||||
talentConfig, // config for talent
|
talentConfig, // config for talent
|
||||||
propertyConfig, // config for property
|
propertyConfig, // config for property
|
||||||
|
characterConfig, // config for character
|
||||||
} = {}) {
|
} = {}) {
|
||||||
this.#defaultPropertyPoints = defaultPropertyPoints;
|
this.#defaultPropertyPoints = defaultPropertyPoints;
|
||||||
this.#talentSelectLimit = talentSelectLimit;
|
this.#talentSelectLimit = talentSelectLimit;
|
||||||
@@ -57,26 +77,50 @@ class Life {
|
|||||||
this.#defaultPropertys = defaultPropertys;
|
this.#defaultPropertys = defaultPropertys;
|
||||||
this.#talent.config(talentConfig);
|
this.#talent.config(talentConfig);
|
||||||
this.#property.config(propertyConfig);
|
this.#property.config(propertyConfig);
|
||||||
|
this.#character.config(characterConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
request(module) {
|
||||||
|
switch (module) {
|
||||||
|
case this.Module.ACHIEVEMENT: return this.#achievement;
|
||||||
|
case this.Module.CHARACTER: return this.#character;
|
||||||
|
case this.Module.EVENT: return this.#event;
|
||||||
|
case this.Module.PROPERTY: return this.#property;
|
||||||
|
case this.Module.TALENT: return this.#talent;
|
||||||
|
default: return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function(type) {
|
||||||
|
switch (type) {
|
||||||
|
case this.Function.CONDITION: return fCondition;
|
||||||
|
case this.Function.UTIL: return util;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
check(condition) {
|
||||||
|
return fCondition.checkCondition(this.#property,condition);
|
||||||
|
}
|
||||||
|
|
||||||
|
clone(...args) {
|
||||||
|
return util.clone(...args);
|
||||||
}
|
}
|
||||||
|
|
||||||
remake(talents) {
|
remake(talents) {
|
||||||
this.#initialData = clone(this.#defaultPropertys);
|
this.#initialData = util.clone(this.#defaultPropertys);
|
||||||
this.#initialData.TLT = clone(talents);
|
this.#initialData.TLT = util.clone(talents);
|
||||||
this.#triggerTalents = {};
|
this.#triggerTalents = {};
|
||||||
return this.talentReplace(this.#initialData.TLT);
|
return this.talentReplace(this.#initialData.TLT);
|
||||||
}
|
}
|
||||||
|
|
||||||
start(allocation) {
|
start(allocation) {
|
||||||
for(const key in allocation) {
|
for(const key in allocation) {
|
||||||
this.#initialData[key] = clone(allocation[key]);
|
this.#initialData[key] = util.clone(allocation[key]);
|
||||||
}
|
}
|
||||||
this.#property.restart(this.#initialData);
|
this.#property.restart(this.#initialData);
|
||||||
this.doTalent()
|
this.doTalent()
|
||||||
this.#property.restartLastStep();
|
this.#property.restartLastStep();
|
||||||
this.#achievement.achieve(
|
this.#achievement.achieve(this.AchievementOpportunity.START);
|
||||||
this.AchievementOpportunity.START,
|
|
||||||
this.#property
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getPropertyPoints() {
|
getPropertyPoints() {
|
||||||
@@ -96,10 +140,7 @@ class Life {
|
|||||||
const isEnd = this.#property.isEnd();
|
const isEnd = this.#property.isEnd();
|
||||||
|
|
||||||
const content = [talentContent, eventContent].flat();
|
const content = [talentContent, eventContent].flat();
|
||||||
this.#achievement.achieve(
|
this.#achievement.achieve(this.AchievementOpportunity.TRAJECTORY);
|
||||||
this.AchievementOpportunity.TRAJECTORY,
|
|
||||||
this.#property
|
|
||||||
)
|
|
||||||
return { age, content, isEnd };
|
return { age, content, isEnd };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +166,7 @@ class Life {
|
|||||||
|
|
||||||
const contents = [];
|
const contents = [];
|
||||||
for(const talentId of talents) {
|
for(const talentId of talents) {
|
||||||
const result = this.#talent.do(talentId, this.#property);
|
const result = this.#talent.do(talentId);
|
||||||
if(!result) continue;
|
if(!result) continue;
|
||||||
this.#triggerTalents[talentId] = this.getTalentCurrentTriggerCount(talentId) + 1;
|
this.#triggerTalents[talentId] = this.getTalentCurrentTriggerCount(talentId) + 1;
|
||||||
const { effect, name, description, grade } = result;
|
const { effect, name, description, grade } = result;
|
||||||
@@ -133,7 +174,7 @@ class Life {
|
|||||||
type: this.PropertyTypes.TLT,
|
type: this.PropertyTypes.TLT,
|
||||||
name,
|
name,
|
||||||
grade,
|
grade,
|
||||||
description,
|
description: this.format(description),
|
||||||
})
|
})
|
||||||
if(!effect) continue;
|
if(!effect) continue;
|
||||||
this.#property.effect(effect);
|
this.#property.effect(effect);
|
||||||
@@ -142,13 +183,13 @@ class Life {
|
|||||||
}
|
}
|
||||||
|
|
||||||
doEvent(eventId) {
|
doEvent(eventId) {
|
||||||
const { effect, next, description, postEvent, grade } = this.#event.do(eventId, this.#property);
|
const { effect, next, description, postEvent, grade } = this.#event.do(eventId);
|
||||||
this.#property.change(this.PropertyTypes.EVT, eventId);
|
this.#property.change(this.PropertyTypes.EVT, eventId);
|
||||||
this.#property.effect(effect);
|
this.#property.effect(effect);
|
||||||
const content = {
|
const content = {
|
||||||
type: this.PropertyTypes.EVT,
|
type: this.PropertyTypes.EVT,
|
||||||
description,
|
description: this.format(description),
|
||||||
postEvent,
|
postEvent: postEvent && this.format(postEvent),
|
||||||
grade,
|
grade,
|
||||||
}
|
}
|
||||||
if(next) return [content, this.doEvent(next)].flat();
|
if(next) return [content, this.doEvent(next)].flat();
|
||||||
@@ -156,7 +197,7 @@ class Life {
|
|||||||
}
|
}
|
||||||
|
|
||||||
random(events) {
|
random(events) {
|
||||||
return weightRandom(
|
return util.weightRandom(
|
||||||
events.filter(
|
events.filter(
|
||||||
([eventId])=>this.#event.check(eventId, this.#property)
|
([eventId])=>this.#event.check(eventId, this.#property)
|
||||||
)
|
)
|
||||||
@@ -173,20 +214,52 @@ class Life {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
characterRandom() {
|
||||||
|
const characters = this.#character.random();
|
||||||
|
const replaceTalent = v=>v.talent=v.talent.map(
|
||||||
|
id=>this.#talent.get(id)
|
||||||
|
);
|
||||||
|
characters.normal.forEach(replaceTalent);
|
||||||
|
if(characters.unique && characters.unique.talent)
|
||||||
|
replaceTalent(characters.unique);
|
||||||
|
return characters;
|
||||||
|
}
|
||||||
|
|
||||||
talentExtend(talentId) {
|
talentExtend(talentId) {
|
||||||
this.#property.set(this.PropertyTypes.EXT, talentId);
|
this.#property.set(this.PropertyTypes.EXT, talentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
exclusive(talents, exclusive) {
|
exclude(talents, exclusive) {
|
||||||
return this.#talent.exclusive(talents, exclusive);
|
return this.#talent.exclude(talents, exclusive);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateUnique() {
|
||||||
|
this.#character.generateUnique();
|
||||||
}
|
}
|
||||||
|
|
||||||
#getJudges(...types) {
|
#getJudges(...types) {
|
||||||
return getListValuesMap(types.flat(), key => this.#property.judge(key));
|
return util.getListValuesMap(types.flat(), key => this.#property.judge(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
#getPropertys(...types) {
|
#getPropertys(...types) {
|
||||||
return getListValuesMap(types.flat(), key => this.#property.get(key));
|
return util.getListValuesMap(types.flat(), key => this.#property.get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
format(discription) {
|
||||||
|
return discription.replaceAll(/\{\s*[0-9a-zA-Z_-]+\s*?\}/g, (match) => this.#format(match));
|
||||||
|
}
|
||||||
|
|
||||||
|
#format(key) {
|
||||||
|
switch (key.slice(1, -1).trim().toLowerCase()) {
|
||||||
|
case 'currentyear': return new Date().getFullYear()
|
||||||
|
case 'age': return this.#property.get(this.PropertyTypes.AGE)
|
||||||
|
case 'charm': return this.#property.get(this.PropertyTypes.CHR)
|
||||||
|
case 'intelligence': return this.#property.get(this.PropertyTypes.INT)
|
||||||
|
case 'strength': return this.#property.get(this.PropertyTypes.STR)
|
||||||
|
case 'money': return this.#property.get(this.PropertyTypes.MNY)
|
||||||
|
case 'spirit': return this.#property.get(this.PropertyTypes.SPR)
|
||||||
|
default: return key
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get lastExtendTalent() {
|
get lastExtendTalent() {
|
||||||
@@ -194,10 +267,7 @@ class Life {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get summary() {
|
get summary() {
|
||||||
this.#achievement.achieve(
|
this.#achievement.achieve(this.AchievementOpportunity.SUMMARY);
|
||||||
this.AchievementOpportunity.SUMMARY,
|
|
||||||
this.#property
|
|
||||||
)
|
|
||||||
|
|
||||||
const pt = this.PropertyTypes;
|
const pt = this.PropertyTypes;
|
||||||
|
|
||||||
@@ -243,16 +313,13 @@ class Life {
|
|||||||
get PropertyTypes() { return this.#property.TYPES; }
|
get PropertyTypes() { return this.#property.TYPES; }
|
||||||
get AchievementOpportunity() { return this.#achievement.Opportunity; }
|
get AchievementOpportunity() { return this.#achievement.Opportunity; }
|
||||||
get talentSelectLimit() { return this.#talentSelectLimit; }
|
get talentSelectLimit() { return this.#talentSelectLimit; }
|
||||||
get propertyAllocateLimit() { return clone(this.#propertyAllocateLimit); }
|
get propertyAllocateLimit() { return util.clone(this.#propertyAllocateLimit); }
|
||||||
|
|
||||||
get propertys() { return this.#property.getPropertys(); }
|
get propertys() { return this.#property.getPropertys(); }
|
||||||
get times() { return this.#property.get(this.PropertyTypes.TMS) || 0; }
|
get times() { return this.#property.get(this.PropertyTypes.TMS) || 0; }
|
||||||
set times(v) {
|
set times(v) {
|
||||||
this.#property.set(this.PropertyTypes.TMS, v);
|
this.#property.set(this.PropertyTypes.TMS, v);
|
||||||
this.#achievement.achieve(
|
this.#achievement.achieve(this.AchievementOpportunity.END);
|
||||||
this.AchievementOpportunity.END,
|
|
||||||
this.#property
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
get specialThanks() { return this.#specialThanks; }
|
get specialThanks() { return this.#specialThanks; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { max, min, sum, clone, listRandom } from '../functions/util.js';
|
|
||||||
|
|
||||||
class Property {
|
class Property {
|
||||||
constructor() {}
|
constructor(system) {
|
||||||
|
this.#system = system;
|
||||||
|
}
|
||||||
|
|
||||||
TYPES = {
|
TYPES = {
|
||||||
// 本局
|
// 本局
|
||||||
@@ -70,11 +70,16 @@ class Property {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#system;
|
||||||
#ageData;
|
#ageData;
|
||||||
#data = {};
|
#data = {};
|
||||||
#total;
|
#total;
|
||||||
#judge;
|
#judge;
|
||||||
|
|
||||||
|
get #util() {
|
||||||
|
return this.#system.function(this.#system.Function.UTIL);
|
||||||
|
}
|
||||||
|
|
||||||
initial({age, total}) {
|
initial({age, total}) {
|
||||||
this.#ageData = age;
|
this.#ageData = age;
|
||||||
for(const a in age) {
|
for(const a in age) {
|
||||||
@@ -151,6 +156,7 @@ class Property {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get(prop) {
|
get(prop) {
|
||||||
|
const util = this.#util;
|
||||||
switch(prop) {
|
switch(prop) {
|
||||||
case this.TYPES.AGE:
|
case this.TYPES.AGE:
|
||||||
case this.TYPES.CHR:
|
case this.TYPES.CHR:
|
||||||
@@ -161,14 +167,14 @@ class Property {
|
|||||||
case this.TYPES.LIF:
|
case this.TYPES.LIF:
|
||||||
case this.TYPES.TLT:
|
case this.TYPES.TLT:
|
||||||
case this.TYPES.EVT:
|
case this.TYPES.EVT:
|
||||||
return clone(this.#data[prop]);
|
return util.clone(this.#data[prop]);
|
||||||
case this.TYPES.LAGE:
|
case this.TYPES.LAGE:
|
||||||
case this.TYPES.LCHR:
|
case this.TYPES.LCHR:
|
||||||
case this.TYPES.LINT:
|
case this.TYPES.LINT:
|
||||||
case this.TYPES.LSTR:
|
case this.TYPES.LSTR:
|
||||||
case this.TYPES.LMNY:
|
case this.TYPES.LMNY:
|
||||||
case this.TYPES.LSPR:
|
case this.TYPES.LSPR:
|
||||||
return min(
|
return util.min(
|
||||||
this.#data[prop],
|
this.#data[prop],
|
||||||
this.get(this.fallback(prop))
|
this.get(this.fallback(prop))
|
||||||
);
|
);
|
||||||
@@ -178,7 +184,7 @@ class Property {
|
|||||||
case this.TYPES.HSTR:
|
case this.TYPES.HSTR:
|
||||||
case this.TYPES.HMNY:
|
case this.TYPES.HMNY:
|
||||||
case this.TYPES.HSPR:
|
case this.TYPES.HSPR:
|
||||||
return max(
|
return util.max(
|
||||||
this.#data[prop],
|
this.#data[prop],
|
||||||
this.get(this.fallback(prop))
|
this.get(this.fallback(prop))
|
||||||
);
|
);
|
||||||
@@ -189,7 +195,7 @@ class Property {
|
|||||||
const HSTR = this.get(this.TYPES.HSTR);
|
const HSTR = this.get(this.TYPES.HSTR);
|
||||||
const HMNY = this.get(this.TYPES.HMNY);
|
const HMNY = this.get(this.TYPES.HMNY);
|
||||||
const HSPR = this.get(this.TYPES.HSPR);
|
const HSPR = this.get(this.TYPES.HSPR);
|
||||||
return Math.floor(sum(HCHR, HINT, HSTR, HMNY, HSPR)*2 + HAGE/2);
|
return Math.floor(util.sum(HCHR, HINT, HSTR, HMNY, HSPR)*2 + HAGE/2);
|
||||||
case this.TYPES.TMS:
|
case this.TYPES.TMS:
|
||||||
return this.lsget('times') || 0;
|
return this.lsget('times') || 0;
|
||||||
case this.TYPES.EXT:
|
case this.TYPES.EXT:
|
||||||
@@ -253,7 +259,7 @@ class Property {
|
|||||||
case this.TYPES.LIF:
|
case this.TYPES.LIF:
|
||||||
case this.TYPES.TLT:
|
case this.TYPES.TLT:
|
||||||
case this.TYPES.EVT:
|
case this.TYPES.EVT:
|
||||||
this.hl(prop, this.#data[prop] = clone(value));
|
this.hl(prop, this.#data[prop] = this.#system.clone(value));
|
||||||
this.achieve(prop, value);
|
this.achieve(prop, value);
|
||||||
return;
|
return;
|
||||||
case this.TYPES.TMS:
|
case this.TYPES.TMS:
|
||||||
@@ -267,7 +273,7 @@ class Property {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPropertys() {
|
getPropertys() {
|
||||||
return clone({
|
return this.#system.clone({
|
||||||
[this.TYPES.AGE]: this.get(this.TYPES.AGE),
|
[this.TYPES.AGE]: this.get(this.TYPES.AGE),
|
||||||
[this.TYPES.CHR]: this.get(this.TYPES.CHR),
|
[this.TYPES.CHR]: this.get(this.TYPES.CHR),
|
||||||
[this.TYPES.INT]: this.get(this.TYPES.INT),
|
[this.TYPES.INT]: this.get(this.TYPES.INT),
|
||||||
@@ -315,7 +321,8 @@ class Property {
|
|||||||
|
|
||||||
hookSpecial(prop) {
|
hookSpecial(prop) {
|
||||||
switch(prop) {
|
switch(prop) {
|
||||||
case this.TYPES.RDM: return listRandom(this.SPECIAL.RDM);
|
case this.TYPES.RDM:
|
||||||
|
return this.#util.listRandom(this.SPECIAL.RDM);
|
||||||
default: return prop;
|
default: return prop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -334,15 +341,6 @@ class Property {
|
|||||||
const d = this.#judge[prop];
|
const d = this.#judge[prop];
|
||||||
let length = d.length;
|
let length = d.length;
|
||||||
|
|
||||||
// progress judge
|
|
||||||
// const p = 1/length;
|
|
||||||
// const progress = () => {
|
|
||||||
// const min = d[length][0] || 0;
|
|
||||||
// const max = d[length+1]?.[0] || value;
|
|
||||||
// if(max == min) return 1;
|
|
||||||
// return p * (length + (value - min) / (max - min));
|
|
||||||
// }
|
|
||||||
|
|
||||||
const progress = () => Math.max(Math.min(value, 10), 0) / 10;
|
const progress = () => Math.max(Math.min(value, 10), 0) / 10;
|
||||||
|
|
||||||
while(length--) {
|
while(length--) {
|
||||||
@@ -363,7 +361,7 @@ class Property {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getAgeData(age) {
|
getAgeData(age) {
|
||||||
return clone(this.#ageData[age]);
|
return this.#system.clone(this.#ageData[age]);
|
||||||
}
|
}
|
||||||
|
|
||||||
hl(prop, value) {
|
hl(prop, value) {
|
||||||
@@ -378,8 +376,8 @@ class Property {
|
|||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
const [l, h] = keys;
|
const [l, h] = keys;
|
||||||
this.#data[l] = min(this.#data[l], value);
|
this.#data[l] = this.#util.min(this.#data[l], value);
|
||||||
this.#data[h] = max(this.#data[h], value);
|
this.#data[h] = this.#util.max(this.#data[h], value);
|
||||||
}
|
}
|
||||||
|
|
||||||
achieve(prop, newData) {
|
achieve(prop, newData) {
|
||||||
@@ -411,7 +409,7 @@ class Property {
|
|||||||
|
|
||||||
lsget(key) {
|
lsget(key) {
|
||||||
const data = localStorage.getItem(key);
|
const data = localStorage.getItem(key);
|
||||||
if(data === null) return;
|
if(data === null || data === 'undefined') return;
|
||||||
return JSON.parse(data);
|
return JSON.parse(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { clone, weightRandom } from '../functions/util.js';
|
|
||||||
import { checkCondition, extractMaxTriggers } from '../functions/condition.js';
|
|
||||||
|
|
||||||
class Talent {
|
class Talent {
|
||||||
constructor() {}
|
constructor(system) {
|
||||||
|
this.#system = system;
|
||||||
|
}
|
||||||
|
|
||||||
|
#system;
|
||||||
#talents;
|
#talents;
|
||||||
#talentPullCount;
|
#talentPullCount;
|
||||||
#talentRate;
|
#talentRate;
|
||||||
@@ -11,11 +11,12 @@ class Talent {
|
|||||||
|
|
||||||
initial({talents}) {
|
initial({talents}) {
|
||||||
this.#talents = talents;
|
this.#talents = talents;
|
||||||
|
const emt = this.#system.function(this.#system.Function.CONDITION).extractMaxTriggers;
|
||||||
for(const id in talents) {
|
for(const id in talents) {
|
||||||
const talent = talents[id];
|
const talent = talents[id];
|
||||||
talent.id= Number(id);
|
talent.id= Number(id);
|
||||||
talent.grade = Number(talent.grade);
|
talent.grade = Number(talent.grade);
|
||||||
talent.max_triggers = extractMaxTriggers(talent.condition);
|
talent.max_triggers = emt(talent.condition);
|
||||||
if(talent.replacement) {
|
if(talent.replacement) {
|
||||||
for(let key in talent.replacement) {
|
for(let key in talent.replacement) {
|
||||||
const obj = {};
|
const obj = {};
|
||||||
@@ -34,6 +35,10 @@ class Talent {
|
|||||||
return Object.keys(this.#talents).length;
|
return Object.keys(this.#talents).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get #prop() {
|
||||||
|
return this.#system.request(this.#system.Module.PROPERTY);
|
||||||
|
}
|
||||||
|
|
||||||
config({
|
config({
|
||||||
talentPullCount = 10, // number of talents to pull from the talent pool
|
talentPullCount = 10, // number of talents to pull from the talent pool
|
||||||
talentRate = { 1:100, 2:10, 3:1, total: 1000 }, // rate of talent pull
|
talentRate = { 1:100, 2:10, 3:1, total: 1000 }, // rate of talent pull
|
||||||
@@ -45,15 +50,15 @@ class Talent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
check(talentId, property) {
|
check(talentId) {
|
||||||
const { condition } = this.get(talentId);
|
const { condition } = this.get(talentId);
|
||||||
return checkCondition(property, condition);
|
return this.#system.check(this.#prop, condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
get(talentId) {
|
get(talentId) {
|
||||||
const talent = this.#talents[talentId];
|
const talent = this.#talents[talentId];
|
||||||
if(!talent) throw new Error(`[ERROR] No Talent[${talentId}]`);
|
if(!talent) throw new Error(`[ERROR] No Talent[${talentId}]`);
|
||||||
return clone(talent);
|
return this.#system.clone(talent);
|
||||||
}
|
}
|
||||||
|
|
||||||
information(talentId) {
|
information(talentId) {
|
||||||
@@ -61,12 +66,19 @@ class Talent {
|
|||||||
return { grade, name, description };
|
return { grade, name, description };
|
||||||
}
|
}
|
||||||
|
|
||||||
exclusive(talends, exclusiveId) {
|
exclude(talents, excludeId) {
|
||||||
const { exclusive } = this.get(exclusiveId);
|
const { exclude } = this.get(excludeId);
|
||||||
if(!exclusive) return null;
|
for(const talent of talents) {
|
||||||
for(const talent of talends) {
|
if(exclude) {
|
||||||
for(const e of exclusive) {
|
for(const e of exclude) {
|
||||||
if(talent == e) return talent;
|
if(talent == e) return talent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const excludeReverse = this.get(talent).exclude;
|
||||||
|
if(excludeReverse) {
|
||||||
|
for (const e of excludeReverse) {
|
||||||
|
if (excludeId == e) return talent
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -81,7 +93,7 @@ class Talent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getRate(additionValues = {}) {
|
getRate(additionValues = {}) {
|
||||||
const rate = clone(this.#talentRate);
|
const rate = this.#system.clone(this.#talentRate);
|
||||||
const addition = { 1:1, 2:1, 3:1, };
|
const addition = { 1:1, 2:1, 3:1, };
|
||||||
|
|
||||||
Object.keys(additionValues).forEach(key => {
|
Object.keys(additionValues).forEach(key => {
|
||||||
@@ -103,13 +115,14 @@ class Talent {
|
|||||||
let randomNumber = Math.floor(Math.random() * rate.total);
|
let randomNumber = Math.floor(Math.random() * rate.total);
|
||||||
if((randomNumber -= rate[3]) < 0) return 3;
|
if((randomNumber -= rate[3]) < 0) return 3;
|
||||||
if((randomNumber -= rate[2]) < 0) return 2;
|
if((randomNumber -= rate[2]) < 0) return 2;
|
||||||
if((randomNumber -= rate[1]) < 0) return 1;
|
if((randomNumber - rate[1]) < 0) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const talentList = {};
|
const talentList = {};
|
||||||
for(const talentId in this.#talents) {
|
for(const talentId in this.#talents) {
|
||||||
const { id, grade, name, description } = this.#talents[talentId];
|
const { id, grade, name, description, exclusive } = this.#talents[talentId];
|
||||||
|
if(!!exclusive) continue;
|
||||||
if(id == include) {
|
if(id == include) {
|
||||||
include = { grade, name, description, id };
|
include = { grade, name, description, id };
|
||||||
continue;
|
continue;
|
||||||
@@ -130,6 +143,19 @@ class Talent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
random(count) {
|
||||||
|
const talents = Object
|
||||||
|
.keys(this.#talents)
|
||||||
|
.filter(id=>!this.#talents[id].exclusive);
|
||||||
|
return new Array(count)
|
||||||
|
.fill(1)
|
||||||
|
.map(()=>talents.splice(
|
||||||
|
Math.floor(Math.random()*talents.length)%talents.length,
|
||||||
|
1
|
||||||
|
)[0]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
allocationAddition(talents) {
|
allocationAddition(talents) {
|
||||||
if(Array.isArray(talents)) {
|
if(Array.isArray(talents)) {
|
||||||
let addition = 0;
|
let addition = 0;
|
||||||
@@ -140,9 +166,9 @@ class Talent {
|
|||||||
return Number(this.get(talents).status) || 0;
|
return Number(this.get(talents).status) || 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
do(talentId, property) {
|
do(talentId) {
|
||||||
const { effect, condition, grade, name, description } = this.get(talentId);
|
const { effect, condition, grade, name, description } = this.get(talentId);
|
||||||
if(condition && !checkCondition(property, condition))
|
if(condition && !this.#system.check(condition))
|
||||||
return null;
|
return null;
|
||||||
return { effect, grade, name, description };
|
return { effect, grade, name, description };
|
||||||
}
|
}
|
||||||
@@ -153,32 +179,34 @@ class Talent {
|
|||||||
if(!replacement) return null;
|
if(!replacement) return null;
|
||||||
const list = [];
|
const list = [];
|
||||||
if(replacement.grade) {
|
if(replacement.grade) {
|
||||||
this.forEach(({id, grade})=>{
|
this.forEach(({id, grade, exclusive})=>{
|
||||||
|
if(exclusive) return;
|
||||||
if(!replacement.grade[grade]) return;
|
if(!replacement.grade[grade]) return;
|
||||||
if(this.exclusive(talents, id)) return;
|
if(this.exclude(talents, id)) return;
|
||||||
list.push([id, replacement.grade[grade]]);
|
list.push([id, replacement.grade[grade]]);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if(replacement.talent) {
|
if(replacement.talent) {
|
||||||
for(let id in replacement.talent) {
|
for(let id in replacement.talent) {
|
||||||
id = Number(id);
|
id = Number(id);
|
||||||
if(this.exclusive(talents, id)) continue;
|
if(this.exclude(talents, id)) continue;
|
||||||
list.push([id, replacement.talent[id]]);
|
list.push([id, replacement.talent[id]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const wr = this.#system.function(this.#system.Function.UTIL).weightRandom;
|
||||||
const replace = (talent, talents) => {
|
const replace = (talent, talents) => {
|
||||||
const replaceList = getReplaceList(talent, talents);
|
const replaceList = getReplaceList(talent, talents);
|
||||||
if(!replaceList) return talent;
|
if(!replaceList) return talent;
|
||||||
const rand = weightRandom(replaceList);
|
const rand = wr(replaceList);
|
||||||
return replace(
|
return replace(
|
||||||
rand, talents.concat(rand)
|
rand, talents.concat(rand)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const newTalents = clone(talents);
|
const newTalents = this.#system.clone(talents);
|
||||||
const result = {};
|
const result = {};
|
||||||
for(const talent of talents) {
|
for(const talent of talents) {
|
||||||
const replaceId = replace(talent, newTalents);
|
const replaceId = replace(talent, newTalents);
|
||||||
@@ -193,7 +221,7 @@ class Talent {
|
|||||||
forEach(callback) {
|
forEach(callback) {
|
||||||
if(typeof callback != 'function') return;
|
if(typeof callback != 'function') return;
|
||||||
for(const id in this.#talents)
|
for(const id in this.#talents)
|
||||||
callback(clone(this.#talents[id]), id);
|
callback(this.#system.clone(this.#talents[id]), id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
47
src/ui/laya.patch.js
Normal file
47
src/ui/laya.patch.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// 滚动条太灵敏
|
||||||
|
const SCROLL_START_DISTANCE = 30;
|
||||||
|
Laya.ScrollBar.prototype.loop=function(){
|
||||||
|
var mouseY=Laya.stage.mouseY;
|
||||||
|
var mouseX=Laya.stage.mouseX;
|
||||||
|
this._lastOffset=this.isVertical ? (mouseY-this._lastPoint.y):(mouseX-this._lastPoint.x);
|
||||||
|
if (this._clickOnly){
|
||||||
|
if (Math.abs(this._lastOffset *(this.isVertical ? Laya.stage._canvasTransform.getScaleY():Laya.stage._canvasTransform.getScaleX()))> SCROLL_START_DISTANCE){
|
||||||
|
this._clickOnly=false;
|
||||||
|
this._offsets || (this._offsets=[]);
|
||||||
|
this._offsets.length=0;
|
||||||
|
this._target.mouseEnabled=false;
|
||||||
|
if (!this.hide && this.autoHide){
|
||||||
|
this.alpha=1;
|
||||||
|
this.visible=true;
|
||||||
|
}
|
||||||
|
this.event(/*laya.events.Event.START*/"start");
|
||||||
|
}else return;
|
||||||
|
}
|
||||||
|
this._offsets.push(this._lastOffset);
|
||||||
|
this._lastPoint.x=mouseX;
|
||||||
|
this._lastPoint.y=mouseY;
|
||||||
|
if (this._lastOffset===0)return;
|
||||||
|
if (!this._checkElastic){
|
||||||
|
if (this.elasticDistance > 0){
|
||||||
|
if (!this._checkElastic && this._lastOffset !=0){
|
||||||
|
if ((this._lastOffset > 0 && this._value <=this.min)|| (this._lastOffset < 0 && this._value >=this.max)){
|
||||||
|
this._isElastic=true;
|
||||||
|
this._checkElastic=true;
|
||||||
|
}else {
|
||||||
|
this._isElastic=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
this._checkElastic=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this._isElastic){
|
||||||
|
if (this._value <=this.min){
|
||||||
|
this.value-=this._lastOffset *Math.max(0,(1-((this.min-this._value)/ this.elasticDistance)));
|
||||||
|
}else if (this._value >=this.max){
|
||||||
|
this.value-=this._lastOffset *Math.max(0,(1-((this._value-this.max)/ this.elasticDistance)));
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
this.value-=this._lastOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -475,6 +475,12 @@ class ColorfulBox extends Laya.Box {
|
|||||||
label.text = value;
|
label.text = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get cacheAs() {return super.cacheAs;}
|
||||||
|
set cacheAs(value) {
|
||||||
|
if(value=='bitmap') debugger;
|
||||||
|
super.cacheAs = value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
runtime.BlankBox =
|
runtime.BlankBox =
|
||||||
@@ -534,4 +540,32 @@ class BlankBox extends Laya.Box {
|
|||||||
super.height = value;
|
super.height = value;
|
||||||
this.#draw();
|
this.#draw();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
runtime.ColorAgentLabel =
|
||||||
|
class ColorAgentLabel extends Laya.Label {
|
||||||
|
constructor(...args) {
|
||||||
|
super(...args);
|
||||||
|
}
|
||||||
|
|
||||||
|
get #brothers() {
|
||||||
|
const brothers = [];
|
||||||
|
if(!this.parent) return brothers;
|
||||||
|
const deepFind = p => {
|
||||||
|
if(!p._childs) return;
|
||||||
|
for(const c of p._childs) {
|
||||||
|
if(c == this) continue;
|
||||||
|
if(c instanceof Laya.Label) brothers.push(c);
|
||||||
|
deepFind(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deepFind(this.parent);
|
||||||
|
return brothers;
|
||||||
|
}
|
||||||
|
|
||||||
|
get color() {return this.super.color;}
|
||||||
|
set color(c) {
|
||||||
|
super.color = c;
|
||||||
|
this.#brothers.forEach(b=>b.color=c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
136
src/ui/themes/cyber/celebrity.js
Normal file
136
src/ui/themes/cyber/celebrity.js
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
export default class CyberCelebrity extends ui.view.CyberTheme.CelebrityUI {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.btnRetry.on(Laya.Event.CLICK, this, ()=>this.random());
|
||||||
|
this.btnNext.on(Laya.Event.CLICK, this, this.next);
|
||||||
|
this.panelCharacter.vScrollBar.elasticDistance = 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
#selected;
|
||||||
|
static #createComponent = Laya.plugin.extractComponents(CyberCelebrity.uiView, ['boxCharacter','boxTalent','boxUniqueUnGenerate']);
|
||||||
|
#createCharacterItem(dataSource, click) {
|
||||||
|
const {name, property, talent} = dataSource;
|
||||||
|
const item = CyberCelebrity.#createComponent('boxCharacter');
|
||||||
|
const vboxStates = item.getChildByName('vboxStates');
|
||||||
|
const boxName = item.getChildByName('boxName');
|
||||||
|
boxName.getChildByName('label').text = name;
|
||||||
|
|
||||||
|
const p = $_.clone(property);
|
||||||
|
for(const k in p)
|
||||||
|
if(Math.abs(p[k] - Math.PI) < 0.0000001)
|
||||||
|
p[k] = 'π';
|
||||||
|
|
||||||
|
vboxStates.getChildByName('label').text = $_.format($lang.F_PropertyStr, p);
|
||||||
|
for(const t of talent) {
|
||||||
|
const i = CyberCelebrity.#createComponent('boxTalent');
|
||||||
|
i.getChildByName('label').text = $_.format($lang.F_TalentSelection, t);
|
||||||
|
i.y = vboxStates.height+vboxStates.space;
|
||||||
|
let g = i.getChildByName(`grade${t.grade}`);
|
||||||
|
if(g) g.visible = true;
|
||||||
|
vboxStates.addChild(i);
|
||||||
|
}
|
||||||
|
const box = new Laya.Box();
|
||||||
|
box.height = vboxStates.space;
|
||||||
|
box.y = vboxStates.height;
|
||||||
|
vboxStates.addChild(box);
|
||||||
|
vboxStates.scaleY = 0;
|
||||||
|
|
||||||
|
item.dataSource = dataSource;
|
||||||
|
item.switch = showDetails => vboxStates.scaleY = !!showDetails?1:0;
|
||||||
|
item.click = (cb, caller) => {
|
||||||
|
boxName.offAll(Laya.Event.CLICK);
|
||||||
|
boxName.on(Laya.Event.CLICK, caller || this, cb);
|
||||||
|
}
|
||||||
|
if(click) item.click(click);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
#createUniqueUnGenerateItem(generate) {
|
||||||
|
const item = CyberCelebrity.#createComponent('boxUniqueUnGenerate');
|
||||||
|
const boxName = item.getChildByName('boxName');
|
||||||
|
const vboxStates = item.getChildByName('vboxStates');
|
||||||
|
const label = vboxStates.getChildByName('label');
|
||||||
|
const boxBtn = vboxStates.getChildByName('boxBtn');
|
||||||
|
const btn = boxBtn.getChildByName('btn');
|
||||||
|
|
||||||
|
label.event(Laya.Event.RESIZE);
|
||||||
|
vboxStates.scaleY = 0;
|
||||||
|
item.dataSource = false;
|
||||||
|
item.switch = showDetails => vboxStates.scaleY = !!showDetails?1:0;
|
||||||
|
item.click = (cb, caller) => {
|
||||||
|
boxName.offAll(Laya.Event.CLICK);
|
||||||
|
boxName.on(Laya.Event.CLICK, caller || this, cb);
|
||||||
|
}
|
||||||
|
item.generate = (cb, caller) => {
|
||||||
|
btn.offAll(Laya.Event.CLICK);
|
||||||
|
btn.on(Laya.Event.CLICK, caller || this, cb);
|
||||||
|
}
|
||||||
|
if(generate) item.generate(generate);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this.random();
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.#selected = null;
|
||||||
|
this.vboxCharacter.destroyChildren(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
random(g) {
|
||||||
|
this.#selected = null;
|
||||||
|
this.vboxCharacter.destroyChildren(true);
|
||||||
|
const {unique, normal} = core.characterRandom();
|
||||||
|
const items = [];
|
||||||
|
const uniqueItem = this.generateUnique(unique, ()=>{
|
||||||
|
core.generateUnique();
|
||||||
|
this.random(normal);
|
||||||
|
|
||||||
|
});
|
||||||
|
if(uniqueItem) items.push(uniqueItem);
|
||||||
|
(g||normal).forEach(character => items.push(this.#createCharacterItem(character)));
|
||||||
|
|
||||||
|
items.forEach((item, i) => {
|
||||||
|
item.y = i;
|
||||||
|
this.vboxCharacter.addChild(item);
|
||||||
|
item.click(()=>{
|
||||||
|
if(this.#selected) this.#selected.switch(false);
|
||||||
|
this.#selected = item;
|
||||||
|
item.switch(true);
|
||||||
|
item.event(Laya.Event.RESIZE);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if(g&&uniqueItem) {
|
||||||
|
this.#selected = uniqueItem;
|
||||||
|
uniqueItem.switch(true);
|
||||||
|
uniqueItem.event(Laya.Event.RESIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generateUnique(data, generate) {
|
||||||
|
if(!data) return null;
|
||||||
|
if(!data.generate) return this.#createUniqueUnGenerateItem(generate);
|
||||||
|
data.name = $lang.UI_UniqueWaTaShi;
|
||||||
|
return this.#createCharacterItem(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
next() {
|
||||||
|
if(!this.#selected) return $$event('message', ['M_PleaseSelectOne']);
|
||||||
|
if(!this.#selected.dataSource) return $$event('message', ['M_UnGenerate']);
|
||||||
|
|
||||||
|
const {property: propertyAllocate, talent: talents} = this.#selected.dataSource;
|
||||||
|
const replace = core.remake(talents.map(talent => talent.id));
|
||||||
|
if(replace.length > 0) {
|
||||||
|
$$event('message', [replace.map(v => ['F_TalentReplace', v])]);
|
||||||
|
}
|
||||||
|
$ui.switchView(
|
||||||
|
UI.pages.TRAJECTORY,
|
||||||
|
{
|
||||||
|
propertyAllocate, talents,
|
||||||
|
enableExtend: false,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
export default class CyberMain extends ui.view.CyberTheme.CyberMainUI {
|
export default class CyberMain extends ui.view.CyberTheme.CyberMainUI {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.btnRemake.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.TALENT));
|
this.btnRemake.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.MODE));
|
||||||
this.btnAchievement.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.ACHIEVEMENT));
|
this.btnAchievement.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.ACHIEVEMENT));
|
||||||
this.btnThanks.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.THANKS));
|
this.btnThanks.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.THANKS));
|
||||||
this.btnGithub.on(Laya.Event.CLICK, this, goto, ['github']);
|
this.btnGithub.on(Laya.Event.CLICK, this, goto, ['github']);
|
||||||
@@ -30,6 +30,7 @@ export default class CyberMain extends ui.view.CyberTheme.CyberMainUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
|
this.banner.visible =
|
||||||
this.btnDiscord.visible =
|
this.btnDiscord.visible =
|
||||||
this.btnAchievement.visible =
|
this.btnAchievement.visible =
|
||||||
this.btnThanks.visible = !!core.times;
|
this.btnThanks.visible = !!core.times;
|
||||||
|
|||||||
7
src/ui/themes/cyber/mode.js
Normal file
7
src/ui/themes/cyber/mode.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default class CyberMode extends ui.view.CyberTheme.ModeUI {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.btnCustom.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.TALENT));
|
||||||
|
this.btnCelebrity.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.CELEBRITY));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,6 +67,7 @@ export default class CyberProperty extends ui.view.CyberTheme.CyberPropertyUI {
|
|||||||
{
|
{
|
||||||
propertyAllocate: this.#propertyAllocate,
|
propertyAllocate: this.#propertyAllocate,
|
||||||
talents: this.listSelectedTalents.array,
|
talents: this.listSelectedTalents.array,
|
||||||
|
enableExtend: true,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ export default class CyberSummary extends ui.view.CyberTheme.CyberSummaryUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#selectedTalent;
|
#selectedTalent;
|
||||||
|
#enableExtend;
|
||||||
|
|
||||||
onAgain() {
|
onAgain() {
|
||||||
core.talentExtend(this.#selectedTalent);
|
core.talentExtend(this.#selectedTalent);
|
||||||
@@ -13,8 +14,10 @@ export default class CyberSummary extends ui.view.CyberTheme.CyberSummaryUI {
|
|||||||
$ui.switchView(UI.pages.MAIN);
|
$ui.switchView(UI.pages.MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
init({talents}) {
|
init({talents, enableExtend}) {
|
||||||
const {summary, lastExtendTalent} = core;
|
const {summary, lastExtendTalent} = core;
|
||||||
|
this.#enableExtend = enableExtend;
|
||||||
|
|
||||||
const gradeFilters = $ui.common.filter;
|
const gradeFilters = $ui.common.filter;
|
||||||
const gradeColors = $ui.common.grade;
|
const gradeColors = $ui.common.grade;
|
||||||
|
|
||||||
@@ -68,7 +71,11 @@ export default class CyberSummary extends ui.view.CyberTheme.CyberSummaryUI {
|
|||||||
if(b == lastExtendTalent) return 1;
|
if(b == lastExtendTalent) return 1;
|
||||||
return bg - ag;
|
return bg - ag;
|
||||||
});
|
});
|
||||||
this.#selectedTalent = talents[0].id;
|
if(this.#enableExtend) {
|
||||||
|
this.#selectedTalent = talents[0].id;
|
||||||
|
} else {
|
||||||
|
this.#selectedTalent = lastExtendTalent;
|
||||||
|
}
|
||||||
this.listSelectedTalents.array = talents;
|
this.listSelectedTalents.array = talents;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +122,9 @@ export default class CyberSummary extends ui.view.CyberTheme.CyberSummaryUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSelectTalent(talentId) {
|
onSelectTalent(talentId) {
|
||||||
|
if(!this.#enableExtend) {
|
||||||
|
return $$event('message', ['M_DisableExtendTalent']);
|
||||||
|
}
|
||||||
if(talentId == this.#selectedTalent) {
|
if(talentId == this.#selectedTalent) {
|
||||||
this.#selectedTalent = null;
|
this.#selectedTalent = null;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export default class CyberTalent extends ui.view.CyberTheme.CyberTalentUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const talents = [...this.#selected].map(index => this.listTalents.array[index]);
|
const talents = [...this.#selected].map(index => this.listTalents.array[index]);
|
||||||
$ui.switchView(UI.pages.PROPERTY, { talents });
|
$ui.switchView(UI.pages.PROPERTY, { talents, enableExtend: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
renderTalent(box, index) {
|
renderTalent(box, index) {
|
||||||
@@ -99,7 +99,7 @@ export default class CyberTalent extends ui.view.CyberTheme.CyberTalentUI {
|
|||||||
if(this.#selected.size >= core.talentSelectLimit) {
|
if(this.#selected.size >= core.talentSelectLimit) {
|
||||||
return $$event('message', ['F_TalentSelectLimit', core.talentSelectLimit]);
|
return $$event('message', ['F_TalentSelectLimit', core.talentSelectLimit]);
|
||||||
}
|
}
|
||||||
const exclusive = core.exclusive(
|
const exclusive = core.exclude(
|
||||||
[...this.#selected].map(index => this.listTalents.array[index].id),
|
[...this.#selected].map(index => this.listTalents.array[index].id),
|
||||||
this.listTalents.array[index].id
|
this.listTalents.array[index].id
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -66,8 +66,10 @@ export default class CyberTrajectory extends ui.view.CyberTheme.CyberTrajectoryU
|
|||||||
#isEnd;
|
#isEnd;
|
||||||
#trajectoryItems;
|
#trajectoryItems;
|
||||||
#talents;
|
#talents;
|
||||||
|
#enableExtend;
|
||||||
|
|
||||||
init({propertyAllocate, talents}) {
|
init({propertyAllocate, talents, enableExtend}) {
|
||||||
|
this.#enableExtend = enableExtend;
|
||||||
this.boxParticle.visible = false;
|
this.boxParticle.visible = false;
|
||||||
this.boxSpeed.visible = true;
|
this.boxSpeed.visible = true;
|
||||||
this.btnSummary.visible = false;
|
this.btnSummary.visible = false;
|
||||||
@@ -109,16 +111,16 @@ export default class CyberTrajectory extends ui.view.CyberTheme.CyberTrajectoryU
|
|||||||
if(isEnd) {
|
if(isEnd) {
|
||||||
this.boxSpeed.visible = false;
|
this.boxSpeed.visible = false;
|
||||||
this.btnSummary.visible = true;
|
this.btnSummary.visible = true;
|
||||||
|
Laya.timer.frameOnce(1,this,()=>{
|
||||||
|
this.panelTrajectory.scrollTo(0, this.panelTrajectory.contentHeight);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
this.panelTrajectory.scrollTo(0, this.panelTrajectory.contentHeight);
|
||||||
this.renderTrajectory(age, content);
|
this.renderTrajectory(age, content);
|
||||||
|
|
||||||
if(age >= 100) {
|
if(age >= 100) {
|
||||||
this.boxParticle.visible = true;
|
this.boxParticle.visible = true;
|
||||||
}
|
}
|
||||||
Laya.timer.frameOnce(1, this, () => {
|
|
||||||
this.panelTrajectory.scrollTo(0, this.panelTrajectory.contentHeight);
|
|
||||||
});
|
|
||||||
this.updateProperty();
|
this.updateProperty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,12 +143,12 @@ export default class CyberTrajectory extends ui.view.CyberTheme.CyberTrajectoryU
|
|||||||
);
|
);
|
||||||
this.vboxTrajectory.addChild(item);
|
this.vboxTrajectory.addChild(item);
|
||||||
this.#trajectoryItems.push(item);
|
this.#trajectoryItems.push(item);
|
||||||
this.#trajectoryItems.forEach((item, index) => item.y = index);
|
item.y = this.vboxTrajectory.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
onSummary() {
|
onSummary() {
|
||||||
const talents = this.#talents;
|
const talents = this.#talents;
|
||||||
$ui.switchView(UI.pages.SUMMARY, {talents});
|
$ui.switchView(UI.pages.SUMMARY, { talents, enableExtend: this.#enableExtend });
|
||||||
}
|
}
|
||||||
|
|
||||||
get speed() {
|
get speed() {
|
||||||
|
|||||||
143
src/ui/themes/default/celebrity.js
Normal file
143
src/ui/themes/default/celebrity.js
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
export default class Celebrity extends ui.view.DefaultTheme.CelebrityUI {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.btnRetry.on(Laya.Event.CLICK, this, ()=>this.random());
|
||||||
|
this.btnNext.on(Laya.Event.CLICK, this, this.next);
|
||||||
|
this.panelCharacter.vScrollBar.elasticDistance = 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
#selected;
|
||||||
|
static #createComponent = Laya.plugin.extractComponents(Celebrity.uiView, ['boxCharacter','boxTalent','boxUniqueUnGenerate']);
|
||||||
|
#createCharacterItem(dataSource, click) {
|
||||||
|
const {name, property, talent} = dataSource;
|
||||||
|
const style = $ui.common.characterItem;
|
||||||
|
const item = Celebrity.#createComponent('boxCharacter');
|
||||||
|
const vboxStates = item.getChildByName('vboxStates');
|
||||||
|
const boxName = item.getChildByName('boxName');
|
||||||
|
boxName.label = name;
|
||||||
|
|
||||||
|
const p = $_.clone(property);
|
||||||
|
for(const k in p)
|
||||||
|
if(Math.abs(p[k] - Math.PI) < 0.0000001)
|
||||||
|
p[k] = 'π';
|
||||||
|
|
||||||
|
vboxStates.label = $_.format($lang.F_PropertyStr, p);
|
||||||
|
$_.deepMapSet(boxName, style.name);
|
||||||
|
$_.deepMapSet(vboxStates, style.state);
|
||||||
|
for(const t of talent) {
|
||||||
|
const i = Celebrity.#createComponent('boxTalent');
|
||||||
|
i.label = $_.format($lang.F_TalentSelection, t);
|
||||||
|
i.y = vboxStates.height+vboxStates.space;
|
||||||
|
$_.deepMapSet(i, $ui.common.card[t.grade].normal);
|
||||||
|
vboxStates.addChild(i);
|
||||||
|
}
|
||||||
|
const box = new Laya.Box();
|
||||||
|
box.height = vboxStates.space;
|
||||||
|
box.y = vboxStates.height;
|
||||||
|
vboxStates.addChild(box);
|
||||||
|
vboxStates.scaleY = 0;
|
||||||
|
|
||||||
|
item.dataSource = dataSource;
|
||||||
|
item.switch = showDetails => vboxStates.scaleY = !!showDetails?1:0;
|
||||||
|
item.click = (cb, caller) => {
|
||||||
|
boxName.offAll(Laya.Event.CLICK);
|
||||||
|
boxName.on(Laya.Event.CLICK, caller || this, cb);
|
||||||
|
}
|
||||||
|
if(click) item.click(click);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
#createUniqueUnGenerateItem(generate) {
|
||||||
|
const style = $ui.common.characterItem;
|
||||||
|
const item = Celebrity.#createComponent('boxUniqueUnGenerate');
|
||||||
|
const boxName = item.getChildByName('boxName');
|
||||||
|
const vboxStates = item.getChildByName('vboxStates');
|
||||||
|
const label = vboxStates.getChildByName('label');
|
||||||
|
const boxBtn = vboxStates.getChildByName('boxBtn');
|
||||||
|
const btn = boxBtn.getChildByName('btn');
|
||||||
|
|
||||||
|
$_.deepMapSet(boxName, style.name);
|
||||||
|
$_.deepMapSet(vboxStates, style.state);
|
||||||
|
$_.deepMapSet(btn, style.name);
|
||||||
|
|
||||||
|
boxBtn.y = label.height + vboxStates.space;
|
||||||
|
label.event(Laya.Event.RESIZE);
|
||||||
|
vboxStates.scaleY = 0;
|
||||||
|
item.dataSource = false;
|
||||||
|
item.switch = showDetails => vboxStates.scaleY = !!showDetails?1:0;
|
||||||
|
item.click = (cb, caller) => {
|
||||||
|
boxName.offAll(Laya.Event.CLICK);
|
||||||
|
boxName.on(Laya.Event.CLICK, caller || this, cb);
|
||||||
|
}
|
||||||
|
item.generate = (cb, caller) => {
|
||||||
|
btn.offAll(Laya.Event.CLICK);
|
||||||
|
btn.on(Laya.Event.CLICK, caller || this, cb);
|
||||||
|
}
|
||||||
|
if(generate) item.generate(generate);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this.random();
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.#selected = null;
|
||||||
|
this.vboxCharacter.destroyChildren(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
random(g) {
|
||||||
|
this.#selected = null;
|
||||||
|
this.vboxCharacter.destroyChildren(true);
|
||||||
|
const {unique, normal} = core.characterRandom();
|
||||||
|
const items = [];
|
||||||
|
const uniqueItem = this.generateUnique(unique, ()=>{
|
||||||
|
core.generateUnique();
|
||||||
|
this.random(normal);
|
||||||
|
|
||||||
|
});
|
||||||
|
if(uniqueItem) items.push(uniqueItem);
|
||||||
|
(g||normal).forEach(character => items.push(this.#createCharacterItem(character)));
|
||||||
|
|
||||||
|
items.forEach((item, i) => {
|
||||||
|
item.y = i;
|
||||||
|
this.vboxCharacter.addChild(item);
|
||||||
|
item.click(()=>{
|
||||||
|
if(this.#selected) this.#selected.switch(false);
|
||||||
|
this.#selected = item;
|
||||||
|
item.switch(true);
|
||||||
|
item.event(Laya.Event.RESIZE);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if(g&&uniqueItem) {
|
||||||
|
this.#selected = uniqueItem;
|
||||||
|
uniqueItem.switch(true);
|
||||||
|
uniqueItem.event(Laya.Event.RESIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generateUnique(data, generate) {
|
||||||
|
if(!data) return null;
|
||||||
|
if(!data.generate) return this.#createUniqueUnGenerateItem(generate);
|
||||||
|
data.name = $lang.UI_UniqueWaTaShi;
|
||||||
|
return this.#createCharacterItem(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
next() {
|
||||||
|
if(!this.#selected) return $$event('message', ['M_PleaseSelectOne']);
|
||||||
|
if(!this.#selected.dataSource) return $$event('message', ['M_UnGenerate']);
|
||||||
|
|
||||||
|
const {property: propertyAllocate, talent: talents} = this.#selected.dataSource;
|
||||||
|
const replace = core.remake(talents.map(talent => talent.id));
|
||||||
|
if(replace.length > 0) {
|
||||||
|
$$event('message', [replace.map(v => ['F_TalentReplace', v])]);
|
||||||
|
}
|
||||||
|
$ui.switchView(
|
||||||
|
UI.pages.TRAJECTORY,
|
||||||
|
{
|
||||||
|
propertyAllocate, talents,
|
||||||
|
enableExtend: false,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
export default class Main extends ui.view.DefaultTheme.MainUI {
|
export default class Main extends ui.view.DefaultTheme.MainUI {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.btnRemake.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.TALENT));
|
this.btnRemake.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.MODE));
|
||||||
this.btnAchievement.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.ACHIEVEMENT));
|
this.btnAchievement.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.ACHIEVEMENT));
|
||||||
this.btnThanks.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.THANKS));
|
this.btnThanks.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.THANKS));
|
||||||
this.btnGithub.on(Laya.Event.CLICK, this, goto, ['github']);
|
this.btnGithub.on(Laya.Event.CLICK, this, goto, ['github']);
|
||||||
@@ -17,6 +17,7 @@ export default class Main extends ui.view.DefaultTheme.MainUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
|
this.banner.visible =
|
||||||
this.btnDiscord.visible =
|
this.btnDiscord.visible =
|
||||||
this.btnAchievement.visible =
|
this.btnAchievement.visible =
|
||||||
this.btnThanks.visible = !!core.times;
|
this.btnThanks.visible = !!core.times;
|
||||||
|
|||||||
7
src/ui/themes/default/mode.js
Normal file
7
src/ui/themes/default/mode.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default class Mode extends ui.view.DefaultTheme.ModeUI {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.btnCustom.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.TALENT));
|
||||||
|
this.btnCelebrity.on(Laya.Event.CLICK, this, ()=>$ui.switchView(UI.pages.CELEBRITY));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,6 +67,7 @@ export default class Property extends ui.view.DefaultTheme.PropertyUI {
|
|||||||
{
|
{
|
||||||
propertyAllocate: this.#propertyAllocate,
|
propertyAllocate: this.#propertyAllocate,
|
||||||
talents: this.listSelectedTalents.array,
|
talents: this.listSelectedTalents.array,
|
||||||
|
enableExtend: true,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export default class Summary extends ui.view.DefaultTheme.SummaryUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#selectedTalent;
|
#selectedTalent;
|
||||||
|
#enableExtend;
|
||||||
|
|
||||||
onAgain() {
|
onAgain() {
|
||||||
core.talentExtend(this.#selectedTalent);
|
core.talentExtend(this.#selectedTalent);
|
||||||
@@ -14,8 +15,9 @@ export default class Summary extends ui.view.DefaultTheme.SummaryUI {
|
|||||||
$ui.switchView(UI.pages.MAIN);
|
$ui.switchView(UI.pages.MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
init({talents}) {
|
init({talents, enableExtend}) {
|
||||||
const {summary, lastExtendTalent} = core;
|
const {summary, lastExtendTalent} = core;
|
||||||
|
this.#enableExtend = enableExtend;
|
||||||
|
|
||||||
this.listSummary.array = [
|
this.listSummary.array = [
|
||||||
[core.PropertyTypes.HCHR, $lang.UI_Property_Charm],
|
[core.PropertyTypes.HCHR, $lang.UI_Property_Charm],
|
||||||
@@ -38,7 +40,11 @@ export default class Summary extends ui.view.DefaultTheme.SummaryUI {
|
|||||||
if(b == lastExtendTalent) return 1;
|
if(b == lastExtendTalent) return 1;
|
||||||
return bg - ag;
|
return bg - ag;
|
||||||
});
|
});
|
||||||
this.#selectedTalent = talents[0].id;
|
if(this.#enableExtend) {
|
||||||
|
this.#selectedTalent = talents[0].id;
|
||||||
|
} else {
|
||||||
|
this.#selectedTalent = lastExtendTalent;
|
||||||
|
}
|
||||||
this.listSelectedTalents.array = talents;
|
this.listSelectedTalents.array = talents;
|
||||||
}
|
}
|
||||||
renderSummary(box) {
|
renderSummary(box) {
|
||||||
@@ -57,6 +63,9 @@ export default class Summary extends ui.view.DefaultTheme.SummaryUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSelectTalent(talentId) {
|
onSelectTalent(talentId) {
|
||||||
|
if(!this.#enableExtend) {
|
||||||
|
return $$event('message', ['M_DisableExtendTalent']);
|
||||||
|
}
|
||||||
if(talentId == this.#selectedTalent) {
|
if(talentId == this.#selectedTalent) {
|
||||||
this.#selectedTalent = null;
|
this.#selectedTalent = null;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ export default class Talent extends ui.view.DefaultTheme.TalentUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#selected = new Set();
|
#selected = new Set();
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this.pageDrawCard.visible = true;
|
this.pageDrawCard.visible = true;
|
||||||
this.pageResult.visible = false;
|
this.pageResult.visible = false;
|
||||||
@@ -30,7 +29,7 @@ export default class Talent extends ui.view.DefaultTheme.TalentUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const talents = [...this.#selected].map(index => this.listTalents.array[index]);
|
const talents = [...this.#selected].map(index => this.listTalents.array[index]);
|
||||||
$ui.switchView(UI.pages.PROPERTY, { talents });
|
$ui.switchView(UI.pages.PROPERTY, { talents, enableExtend: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
renderTalent(box, index) {
|
renderTalent(box, index) {
|
||||||
@@ -55,7 +54,7 @@ export default class Talent extends ui.view.DefaultTheme.TalentUI {
|
|||||||
if(this.#selected.size >= core.talentSelectLimit) {
|
if(this.#selected.size >= core.talentSelectLimit) {
|
||||||
return $$event('message', ['F_TalentSelectLimit', core.talentSelectLimit]);
|
return $$event('message', ['F_TalentSelectLimit', core.talentSelectLimit]);
|
||||||
}
|
}
|
||||||
const exclusive = core.exclusive(
|
const exclusive = core.exclude(
|
||||||
[...this.#selected].map(index => this.listTalents.array[index].id),
|
[...this.#selected].map(index => this.listTalents.array[index].id),
|
||||||
this.listTalents.array[index].id
|
this.listTalents.array[index].id
|
||||||
);
|
);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user