21 Commits

Author SHA1 Message Date
Vick Scarlet
eb02d1ee6f change relocation 2021-11-28 21:22:54 +08:00
Vick Scarlet
60503eae47 change ScaleButton -> Laya.runtime.ScaleButton 2021-11-28 19:27:16 +08:00
Vick Scarlet
52ef5909c1 change ScaleButton -> Laya.runtime.ScaleButton 2021-11-28 19:26:31 +08:00
Vick Scarlet
0284f6aa71 config webpack 2021-11-28 19:05:24 +08:00
Vick Scarlet
0e272ffd99 add thanks 2021-11-28 13:17:41 +08:00
Vick Scarlet
e1e2ab4701 add light theme 2021-11-28 11:40:21 +08:00
Vick Scarlet
4f55c00f86 fix bug 2021-11-27 22:27:39 +08:00
Vick Scarlet
1d07bdfc46 daily update 2021-11-27 21:48:47 +08:00
Vick Scarlet
52d6a0ca8f daily update 2021-11-24 23:10:04 +08:00
Vick Scarlet
f8dd720d4d daily update 2021-11-24 19:08:13 +08:00
Vick Scarlet
d088c1a862 remove useless 2021-11-21 21:41:46 +08:00
Vick Scarlet
a711fcf3ed add achievement popup
add page adaptive
add talent extends
2021-11-16 00:53:05 +08:00
Vick Scarlet
05e02de3db add github and discord 2021-11-13 01:24:04 +08:00
Vick Scarlet
bff0109cc5 add trajectory auto mode 2021-11-13 00:30:01 +08:00
Vick Scarlet
54c04f65c2 fix property judge negative number bug 2021-11-12 19:54:31 +08:00
Vick Scarlet
660739530b update achievement 2021-11-12 19:48:58 +08:00
Vick Scarlet
c94e9e7433 update daily 2021-11-11 21:37:45 +08:00
Vick Scarlet
c06cd9ea62 update daily 2021-11-09 00:08:05 +08:00
Vick Scarlet
2666983f89 add uiManager auto scan and load skin resource 2021-11-07 23:00:22 +08:00
Vick Scarlet
22fa5d755a update framework 2021-11-07 22:17:04 +08:00
Vick Scarlet
f40698d63e add laya 2021-10-31 00:13:22 +08:00
133 changed files with 183733 additions and 6596 deletions

View File

@@ -1,2 +0,0 @@
node_modules
npm-debug.log

View File

@@ -1,11 +0,0 @@
# 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"

View File

@@ -1,29 +0,0 @@
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 Normal file
View File

@@ -0,0 +1,31 @@
# 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

3
.gitignore vendored
View File

@@ -108,6 +108,3 @@ utils/xlsxTransform-*
/.idea /.idea
__localStorage.json __localStorage.json
template/public
public/data

3
.jshintrc Normal file
View File

@@ -0,0 +1,3 @@
{
"esversion": 9
}

29
.vscode/launch.json vendored
View File

@@ -4,15 +4,40 @@
// 欲了解更多信息,请访问: 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"
},
] ]
} }

1
CNAME Normal file
View File

@@ -0,0 +1 @@
liferestart.syaro.io

View File

@@ -1,15 +0,0 @@
FROM node:alpine
ENV NPM_CONFIG_LOGLEVEL info
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["yarn", "dev"]

View File

@@ -14,22 +14,38 @@
<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
``` ```
启动完成后打开浏览器访问 [http://localhost:5173](http://localhost:5173) 2. 进入目录安装依赖
```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>

View File

@@ -14,23 +14,38 @@ 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
``` ```
After the startup is complete, open a browser and visit [http://localhost:5173](http://localhost:5173). 2. Installation dependence.
```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>

View File

@@ -2,7 +2,10 @@
<html lang="{{ site.lang | default: "en-US" }}"> <html lang="{{ site.lang | default: "en-US" }}">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<script data-ad-client="ca-pub-9857163863537600" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
{% seo %} {% seo %}
<link rel="preconnect" href="https://fonts.gstatic.com">
<link rel="preload" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap" as="style" type="text/css" crossorigin>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#157878"> <meta name="theme-color" content="#157878">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
@@ -15,7 +18,8 @@
<header class="page-header" role="banner"> <header class="page-header" role="banner">
<h1 class="project-name">{{ page.title | default: site.title | default: site.github.repository_name }}</h1> <h1 class="project-name">{{ page.title | default: site.title | default: site.github.repository_name }}</h1>
<h2 class="project-tagline">{{ page.description | default: site.description | default: site.github.project_tagline }}</h2> <h2 class="project-tagline">{{ page.description | default: site.description | default: site.github.project_tagline }}</h2>
<a href="/public/" class="btn">RESTART</a> <a href="/view/" class="btn">RESTART</a>
<a href="/view/test.html" class="btn">Source Version</a>
{% if site.github.is_project_page %} {% if site.github.is_project_page %}
<a href="{{ site.github.repository_url }}" class="btn">View on GitHub</a> <a href="{{ site.github.repository_url }}" class="btn">View on GitHub</a>
{% endif %} {% endif %}

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,19 @@
{
"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"
}
]
}

View File

@@ -2,9 +2,11 @@
// 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": {
"module": "esnext", "target": "es5"
"target": "es6",
}, },
"include":["src", "repl", "vite.config.js"], "exclude": [
"exclude": ["node_modules", "public", "view"] "node_modules",
"public",
"view"
]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -1 +0,0 @@
{"textureName":"images/texture/texture_1.png","positionVariance":{"0":0,"1":0,"2":0},"minVerticalVelocity":-100,"minVerticalEndRadian":0,"minStartSize":0,"minStartRadius":0,"minRotateSpeed":0,"minHorizontalVelocity":100,"minHorizontalEndRadian":0,"minEndSize":18.55,"minEndRadius":218.75,"minColor":{"0":0.15,"1":0.92,"2":0.91,"3":0.6000000238418579},"maxVerticalVelocity":100,"maxVerticalEndRadian":0,"maxStartSize":2.04,"maxStartRadius":0,"maxRotateSpeed":0,"maxPartices":400,"maxHorizontalVelocity":100,"maxHorizontalEndRadian":0,"maxEndSize":24.35,"maxEndRadius":84.82,"maxColor":{"0":0.57,"1":1,"2":0,"3":1},"gravity":{"0":0,"1":0,"2":0},"endVelocity":2,"emitterVelocitySensitivity":56.89,"duration":9.52,"colorComponentInter":true,"blendState":0,"ageAddScale":10,"backColor":"#ffffff","textureFileName":"comp\\clip_num.png","textureCount":1,"minHorizontalStartRadian":0,"maxHorizontalStartRadian":0,"minVerticalStartRadian":0,"maxVerticalStartRadian":0,"emitterType":"null","emissionRate":0,"sphereEmitterRadius":1,"sphereEmitterVelocity":0,"sphereEmitterVelocityAddVariance":0,"ringEmitterRadius":30,"ringEmitterVelocity":0,"ringEmitterVelocityAddVariance":0,"ringEmitterUp":2,"minStartColor":{"0":0.5,"1":0.5,"2":0.5,"3":0.2},"maxStartColor":{"0":1,"1":1,"2":1,"3":1},"minEndColor":{"0":0,"1":0,"2":0,"3":0.08},"maxEndColor":{"0":1,"1":1,"2":1,"3":1},"pointEmitterPosition":{"0":0,"1":0,"2":0},"pointEmitterPositionVariance":{"0":0,"1":0,"2":0},"pointEmitterVelocity":{"0":0,"1":0,"2":0},"pointEmitterVelocityAddVariance":{"0":0,"1":0,"2":0},"boxEmitterCenterPosition":{"0":0,"1":0,"2":0},"boxEmitterSize":{"0":0,"1":0,"2":0},"boxEmitterVelocity":{"0":0,"1":0,"2":0},"boxEmitterVelocityAddVariance":{"0":0,"1":0,"2":0},"sphereEmitterCenterPosition":{"0":0,"1":0,"2":0},"ringEmitterCenterPosition":{"0":0,"1":0,"2":0},"useEndRadian":true,"disableColor":false}

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
{ {
"x":0, "x":0,
"type":"View", "type":"View",
"selectedBox":93, "selectedBox":1,
"selecteID":94, "selecteID":83,
"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",
@@ -18,13 +18,14 @@
"props":{"var":"imgBg","skin":"images/background/background_1@3x.png","name":"imgBg","centerY":0,"centerX":0}, "props":{"var":"imgBg","skin":"images/background/background_1@3x.png","name":"imgBg","centerY":0,"centerX":0},
"nodeParent":1, "nodeParent":1,
"label":"Image(imgBg)", "label":"Image(imgBg)",
"isOpen":false, "isOpen":true,
"isDirectory":true, "isDirectory":true,
"isAniNode":true, "isAniNode":true,
"hasChild":true, "hasChild":true,
"compId":67, "compId":67,
"child":[ "child":[
{ {
"x":30,
"type":"Animation", "type":"Animation",
"props":{"y":0,"x":0,"width":1125,"source":"view/CyberTheme/animation/jumpBackground.ani","interval":80,"height":2436,"blendMode":"lighter","autoPlay":true,"alpha":0.3}, "props":{"y":0,"x":0,"width":1125,"source":"view/CyberTheme/animation/jumpBackground.ani","interval":80,"height":2436,"blendMode":"lighter","autoPlay":true,"alpha":0.3},
"nodeParent":67, "nodeParent":67,
@@ -130,7 +131,7 @@
{ {
"x":15, "x":15,
"type":"Label", "type":"Label",
"props":{"text":"UI_Cyber_Theme_Art_Design","right":50,"fontSize":48,"font":"方正像素12","color":"#00fffd","bottom":30,"anchorY":0.5,"anchorX":0.5}, "props":{"text":"UI_Cyber_Theme_Art_Design","right":50,"fontSize":48,"font":"方正像素12","color":"#00fffd","centerY":1165,"anchorY":0.5,"anchorX":0.5},
"nodeParent":1, "nodeParent":1,
"label":"Label", "label":"Label",
"isDirectory":false, "isDirectory":false,
@@ -473,13 +474,14 @@
"props":{"y":0,"x":1100,"width":1,"top":0,"right":0,"height":1}, "props":{"y":0,"x":1100,"width":1,"top":0,"right":0,"height":1},
"nodeParent":1, "nodeParent":1,
"label":"Box", "label":"Box",
"isOpen":false, "isOpen":true,
"isDirectory":true, "isDirectory":true,
"isAniNode":true, "isAniNode":true,
"hasChild":true, "hasChild":true,
"compId":84, "compId":84,
"child":[ "child":[
{ {
"x":30,
"type":"Box", "type":"Box",
"props":{"y":200,"x":-200,"width":225,"var":"btnAchievement","runtime":"Laya.runtime.ScaleButton","name":"btnAchievement","height":90,"anchorY":0.5,"anchorX":0.5}, "props":{"y":200,"x":-200,"width":225,"var":"btnAchievement","runtime":"Laya.runtime.ScaleButton","name":"btnAchievement","height":90,"anchorY":0.5,"anchorX":0.5},
"nodeParent":84, "nodeParent":84,
@@ -548,13 +550,14 @@
"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":false, "isOpen":true,
"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,
@@ -579,6 +582,7 @@
}] }]
}, },
{ {
"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,
@@ -602,117 +606,6 @@
] ]
}] }]
}] }]
},
{
"x":15,
"type":"Box",
"props":{"right":0,"bottom":0},
"nodeParent":1,
"label":"Box",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":88,
"child":[
{
"type":"Box",
"props":{"y":-300,"x":-100,"width":110,"runtime":"Laya.runtime.ScaleButton","height":110,"anchorY":0.5,"anchorX":0.5},
"nodeParent":88,
"label":"Box",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":90,
"child":[
{
"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},
"nodeParent":90,
"label":"Box(btnSaveLoad)",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":91,
"child":[
{
"type":"Image",
"props":{"width":80,"skin":"images/icons/icon_save.png","height":80,"centerY":0,"centerX":0},
"nodeParent":91,
"label":"Image",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":92,
"child":[
]
}]
}]
},
{
"type":"Box",
"props":{"y":-175,"x":-100,"width":110,"runtime":"Laya.runtime.ScaleButton","height":110,"anchorY":0.5,"anchorX":0.5},
"nodeParent":88,
"label":"Box",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":89,
"child":[
{
"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},
"nodeParent":89,
"label":"Box(btnThemes)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":86,
"child":[
{
"type":"Image",
"props":{"width":90,"skin":"images/icons/icon_themes.png","height":90,"centerY":0,"centerX":0},
"nodeParent":86,
"label":"Image",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":87,
"child":[
]
}]
}]
}]
},
{
"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":[
{ {

View File

@@ -1,8 +1,8 @@
{ {
"x":0, "x":0,
"type":"View", "type":"View",
"selectedBox":88, "selectedBox":14,
"selecteID":153, "selecteID":13,
"props":{"width":1125,"sceneColor":"#000000","sceneBg":"laya/views/view/CyberTheme/CyberTrajectory.png","runtime":"Laya.runtime.ViewBase","height":2436}, "props":{"width":1125,"sceneColor":"#000000","sceneBg":"laya/views/view/CyberTheme/CyberTrajectory.png","runtime":"Laya.runtime.ViewBase","height":2436},
"nodeParent":-1, "nodeParent":-1,
"label":"View", "label":"View",
@@ -550,13 +550,14 @@
"props":{"right":0,"left":0,"height":1,"bottom":-1}, "props":{"right":0,"left":0,"height":1,"bottom":-1},
"nodeParent":1, "nodeParent":1,
"label":"Box", "label":"Box",
"isOpen":false, "isOpen":true,
"isDirectory":true, "isDirectory":true,
"isAniNode":true, "isAniNode":true,
"hasChild":true, "hasChild":true,
"compId":14, "compId":14,
"child":[ "child":[
{ {
"x":30,
"type":"Button", "type":"Button",
"props":{"y":-155,"width":500,"var":"btnSummary","skin":"images/button/button_main@3x.png","name":"btnSummary","label":"UI_Goto_Summary","centerX":0}, "props":{"y":-155,"width":500,"var":"btnSummary","skin":"images/button/button_main@3x.png","name":"btnSummary","label":"UI_Goto_Summary","centerX":0},
"nodeParent":14, "nodeParent":14,
@@ -568,6 +569,7 @@
"compId":13, "compId":13,
"child":[ "child":[
{ {
"x":45,
"type":"Box", "type":"Box",
"props":{}, "props":{},
"nodeParent":13, "nodeParent":13,
@@ -748,6 +750,7 @@
}] }]
}, },
{ {
"x":45,
"type":"Box", "type":"Box",
"props":{}, "props":{},
"nodeParent":13, "nodeParent":13,
@@ -821,6 +824,7 @@
"$HIDDEN":false "$HIDDEN":false
}, },
{ {
"x":30,
"type":"Box", "type":"Box",
"props":{"y":-155,"var":"boxSpeed","right":100,"name":"boxSpeed","left":100,"height":150,"anchorY":0.5,"anchorX":0.5}, "props":{"y":-155,"var":"boxSpeed","right":100,"name":"boxSpeed","left":100,"height":150,"anchorY":0.5,"anchorX":0.5},
"nodeParent":14, "nodeParent":14,
@@ -832,6 +836,7 @@
"compId":104, "compId":104,
"child":[ "child":[
{ {
"x":45,
"type":"ProgressBar", "type":"ProgressBar",
"props":{"var":"prgSpeed","skin":"images/progress/progress_s.png","right":0,"name":"prgSpeed","left":0,"bottom":0}, "props":{"var":"prgSpeed","skin":"images/progress/progress_s.png","right":0,"name":"prgSpeed","left":0,"bottom":0},
"nodeParent":104, "nodeParent":104,
@@ -844,6 +849,7 @@
] ]
}, },
{ {
"x":45,
"type":"HScrollBar", "type":"HScrollBar",
"props":{"var":"scbSpeed","skin":"images/slider/hslider_s.png","right":0,"name":"scbSpeed","min":0,"max":1000,"left":0,"height":60,"bottom":0}, "props":{"var":"scbSpeed","skin":"images/slider/hslider_s.png","right":0,"name":"scbSpeed","min":0,"max":1000,"left":0,"height":60,"bottom":0},
"nodeParent":104, "nodeParent":104,
@@ -856,6 +862,7 @@
] ]
}, },
{ {
"x":45,
"type":"Label", "type":"Label",
"props":{"text":"UI_Manual","fontSize":50,"font":"方正像素12","color":"#55fffe","bottom":70}, "props":{"text":"UI_Manual","fontSize":50,"font":"方正像素12","color":"#55fffe","bottom":70},
"nodeParent":104, "nodeParent":104,
@@ -868,6 +875,7 @@
] ]
}, },
{ {
"x":45,
"type":"Label", "type":"Label",
"props":{"text":"UI_Auto","right":0,"fontSize":50,"font":"方正像素12","color":"#55fffe","bottom":70}, "props":{"text":"UI_Auto","right":0,"fontSize":50,"font":"方正像素12","color":"#55fffe","bottom":70},
"nodeParent":104, "nodeParent":104,
@@ -926,14 +934,13 @@
"props":{"var":"vboxTrajectory","top":0,"right":40,"name":"vboxTrajectory","left":20}, "props":{"var":"vboxTrajectory","top":0,"right":40,"name":"vboxTrajectory","left":20},
"nodeParent":18, "nodeParent":18,
"label":"VBox(vboxTrajectory)", "label":"VBox(vboxTrajectory)",
"isOpen":true, "isOpen":false,
"isDirectory":true, "isDirectory":true,
"isAniNode":true, "isAniNode":true,
"hasChild":true, "hasChild":true,
"compId":17, "compId":17,
"child":[ "child":[
{ {
"x":60,
"type":"Box", "type":"Box",
"props":{"right":0,"name":"boxTrajectoryItem","left":0}, "props":{"right":0,"name":"boxTrajectoryItem","left":0},
"nodeParent":17, "nodeParent":17,
@@ -945,25 +952,11 @@
"compId":88, "compId":88,
"child":[ "child":[
{ {
"x":75,
"type":"Box",
"props":{"y":0,"width":10,"top":0,"runtime":"Laya.runtime.ColorfulBox","name":"boxGrade","left":0,"height":50},
"nodeParent":88,
"label":"Box(boxGrade)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":153,
"child":[
]
},
{
"x":75,
"type":"HBox", "type":"HBox",
"props":{"y":0,"x":220,"name":"hboxAge","anchorX":1,"align":"middle"}, "props":{"y":0,"x":200,"name":"hboxAge","anchorX":1,"align":"middle"},
"nodeParent":88, "nodeParent":88,
"label":"HBox(hboxAge)", "label":"HBox(hboxAge)",
"isOpen":false, "isOpen":true,
"isDirectory":true, "isDirectory":true,
"isAniNode":true, "isAniNode":true,
"hasChild":true, "hasChild":true,
@@ -1007,9 +1000,8 @@
}] }]
}, },
{ {
"x":75,
"type":"Label", "type":"Label",
"props":{"wordWrap":true,"text":"你的父母开始辅导你数学和英语,智力+1","right":0,"name":"labContent","left":240,"leading":44,"fontSize":50,"font":"方正像素12","color":"#ffffff"}, "props":{"wordWrap":true,"text":"你的父母开始辅导你数学和英语,智力+1","right":0,"name":"labContent","left":220,"leading":44,"fontSize":50,"font":"方正像素12","color":"#ffffff"},
"nodeParent":88, "nodeParent":88,
"label":"Label(labContent)", "label":"Label(labContent)",
"isDirectory":false, "isDirectory":false,
@@ -1121,32 +1113,6 @@
}] }]
}] }]
}] }]
},
{
"x":15,
"type":"Box",
"props":{"width":10,"var":"boxParticle","name":"boxParticle","height":10,"centerY":0,"centerX":0},
"nodeParent":1,
"label":"Box(boxParticle)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":152,
"child":[
{
"type":"Particle2D",
"source":"particle/fly.part",
"props":{"y":5,"x":5,"url":"particle/fly.part","autoPlay":true},
"nodeParent":152,
"label":"Particle2D",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":151,
"child":[
]
}]
}], }],
"animations":[ "animations":[
{ {

View File

@@ -1,128 +0,0 @@
{
"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
}]
}

View File

@@ -1,306 +0,0 @@
{
"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
}]
}

View File

@@ -1,8 +1,8 @@
{ {
"x":0, "x":0,
"type":"View", "type":"View",
"selectedBox":101, "selectedBox":1,
"selecteID":102, "selecteID":83,
"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",
@@ -15,9 +15,9 @@
{ {
"x":15, "x":15,
"type":"Label", "type":"Label",
"props":{"text":"UI_Title_Remake","name":"title","fontSize":130,"font":"SimHei","color":"#ffffff","centerY":-260,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5}, "props":{"var":"labTitle","text":"UI_Title_Remake","name":"labTitle","fontSize":130,"font":"SimHei","color":"#ffffff","centerY":-260,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":1, "nodeParent":1,
"label":"Label(title)", "label":"Label(labTitle)",
"isDirectory":false, "isDirectory":false,
"isAniNode":true, "isAniNode":true,
"hasChild":false, "hasChild":false,
@@ -28,7 +28,7 @@
{ {
"x":15, "x":15,
"type":"Label", "type":"Label",
"props":{"wordWrap":true,"var":"labSubTitle","text":"UI_Title_Subsequent","right":0,"name":"title","left":0,"fontSize":70,"font":"SimHei","color":"#999999","centerY":-120,"anchorY":0.5,"anchorX":0.5,"align":"center"}, "props":{"wordWrap":true,"var":"labSubTitle","text":"UI_Title_Subsequent","right":0,"name":"labSubTitle","left":0,"fontSize":70,"font":"SimHei","color":"#999999","centerY":-120,"anchorY":0.5,"anchorX":0.5,"align":"center"},
"nodeParent":1, "nodeParent":1,
"label":"Label(labSubTitle)", "label":"Label(labSubTitle)",
"isDirectory":false, "isDirectory":false,
@@ -195,13 +195,14 @@
"props":{"width":160,"left":50,"height":160,"bottom":50}, "props":{"width":160,"left":50,"height":160,"bottom":50},
"nodeParent":1, "nodeParent":1,
"label":"Box", "label":"Box",
"isOpen":false, "isOpen":true,
"isDirectory":true, "isDirectory":true,
"isAniNode":true, "isAniNode":true,
"hasChild":true, "hasChild":true,
"compId":92, "compId":92,
"child":[ "child":[
{ {
"x":30,
"type":"Box", "type":"Box",
"props":{"width":160,"var":"btnDiscord","runtime":"Laya.runtime.ScaleButton","name":"btnDiscord","height":160,"centerY":0,"centerX":0,"anchorY":0.5,"anchorX":0.5}, "props":{"width":160,"var":"btnDiscord","runtime":"Laya.runtime.ScaleButton","name":"btnDiscord","height":160,"centerY":0,"centerX":0,"anchorY":0.5,"anchorX":0.5},
"nodeParent":92, "nodeParent":92,
@@ -225,83 +226,6 @@
] ]
}] }]
}] }]
},
{
"x":15,
"type":"Box",
"props":{"y":2201,"x":1020,"width":110,"var":"btnSaveLoad","runtime":"Laya.runtime.ColorfulBox","right":50,"name":"btnSmall","height":110,"bottom":180,"anchorY":0.5,"anchorX":0.5},
"nodeParent":1,
"label":"Box(btnSaveLoad)",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":99,
"child":[
{
"x":30,
"type":"Image",
"props":{"width":80,"skin":"images/icons/icon_save.png","height":80,"centerY":0,"centerX":0},
"nodeParent":99,
"label":"Image",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":100,
"child":[
]
}]
},
{
"x":15,
"type":"Box",
"props":{"width":110,"var":"btnThemes","runtime":"Laya.runtime.ColorfulBox","right":50,"name":"btnThemes","height":110,"bottom":50,"anchorY":0.5,"anchorX":0.5},
"nodeParent":1,
"label":"Box(btnThemes)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":96,
"child":[
{
"type":"Image",
"props":{"width":90,"skin":"images/icons/icon_themes.png","height":90,"centerY":0,"centerX":0},
"nodeParent":96,
"label":"Image",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":98,
"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":[
{ {

View File

@@ -1,128 +0,0 @@
{
"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
}]
}

View File

@@ -2,7 +2,7 @@
"x":0, "x":0,
"type":"View", "type":"View",
"selectedBox":1, "selectedBox":1,
"selecteID":95, "selecteID":102,
"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",
@@ -501,32 +501,6 @@
}], }],
"$LOCKED":true, "$LOCKED":true,
"$HIDDEN":false "$HIDDEN":false
},
{
"x":15,
"type":"Box",
"props":{"width":10,"var":"boxParticle","name":"boxParticle","height":10,"centerY":0,"centerX":0},
"nodeParent":1,
"label":"Box(boxParticle)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":153,
"child":[
{
"type":"Particle2D",
"source":"particle/fly.part",
"props":{"y":5,"x":5,"url":"particle/fly.part","autoPlay":true},
"nodeParent":153,
"label":"Particle2D",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":154,
"child":[
]
}]
}], }],
"animations":[ "animations":[
{ {

View File

@@ -1,50 +0,0 @@
{
"x":0,
"type":"View",
"selectedBox":1,
"selecteID":2,
"props":{"width":1100,"sceneColor":"#000000","mouseThrough":true,"mouseEnabled":false,"height":230},
"nodeParent":-1,
"label":"View",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":1,
"child":[
{
"x":15,
"type":"Box",
"props":{"var":"boxBg","top":10,"runtime":"Laya.runtime.ColorfulBox","right":10,"name":"boxBg","left":10,"bottom":10,"alpha":0.75},
"nodeParent":1,
"label":"Box(boxBg)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":3,
"child":[
]
},
{
"x":15,
"type":"Label",
"props":{"wordWrap":true,"var":"message","text":"消息","right":50,"name":"message","left":50,"fontSize":60,"font":"SimHei","color":"#ffffff","centerY":0,"align":"center"},
"nodeParent":1,
"label":"Label(message)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":2,
"child":[
]
}],
"animations":[
{
"nodes":[
],
"name":"ani1",
"id":1,
"frameRate":24,
"action":0
}]
}

View File

@@ -1,273 +0,0 @@
{
"x":0,
"type":"Dialog",
"selectedBox":1,
"selecteID":25,
"props":{"width":645,"sceneColor":"#000000","height":400},
"nodeParent":-1,
"label":"Dialog",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":1,
"child":[
{
"x":15,
"type":"Box",
"props":{"top":0,"right":0,"left":0,"bottom":300},
"nodeParent":1,
"label":"Box",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":15,
"child":[
{
"type":"Box",
"props":{"y":0,"x":0,"width":645,"height":2},
"nodeParent":15,
"label":"Box",
"isOpen":null,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":19,
"child":[
{
"type":"Rect",
"props":{"width":645,"lineWidth":1,"height":2,"fillColor":"#97ffe6"},
"nodeParent":19,
"label":"Rect",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":17,
"child":[
]
}]
},
{
"type":"Box",
"props":{"width":645,"height":2,"centerX":0,"bottom":0},
"nodeParent":15,
"label":"Box",
"isOpen":null,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":20,
"child":[
{
"type":"Rect",
"props":{"width":645,"lineWidth":1,"height":2,"fillColor":"#97ffe6"},
"nodeParent":20,
"label":"Rect",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":21,
"child":[
]
}]
},
{
"type":"Box",
"props":{"width":645,"height":100,"centerY":0,"centerX":0,"alpha":0.2},
"nodeParent":15,
"label":"Box",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":22,
"child":[
{
"type":"Rect",
"props":{"width":645,"lineWidth":1,"height":100,"fillColor":"#000000"},
"nodeParent":22,
"label":"Rect",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":23,
"child":[
]
}]
}]
},
{
"x":15,
"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":300},
"nodeParent":1,
"label":"TextInput(input)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":4,
"child":[
]
},
{
"x":15,
"type":"Box",
"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,
"label":"Box(btnSave)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":5,
"child":[
{
"type":"Label",
"props":{"text":"UI_Save","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":5,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":7,
"child":[
]
}]
},
{
"x":15,
"type":"Box",
"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,
"label":"Box(btnLoad)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":6,
"child":[
{
"type":"Label",
"props":{"text":"UI_Load","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":6,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":8,
"child":[
]
}]
},
{
"x":15,
"type":"Box",
"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,
"label":"Box(btnRead)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":13,
"child":[
{
"type":"Label",
"props":{"text":"UI_Read","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":13,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":14,
"child":[
]
}]
},
{
"x":15,
"type":"Box",
"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,
"label":"Box(btnWrite)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":11,
"child":[
{
"type":"Label",
"props":{"text":"UI_Write","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":11,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":12,
"child":[
]
}]
},
{
"x":15,
"type":"Box",
"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,
"label":"Box(btnClose)",
"isOpen":false,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":9,
"child":[
{
"type":"Label",
"props":{"text":"×","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":9,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":10,
"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":[
{
"nodes":[
],
"name":"ani1",
"id":1,
"frameRate":24,
"action":0
}]
}

View File

@@ -1,141 +0,0 @@
{
"x":0,
"type":"Dialog",
"selectedBox":1,
"selecteID":13,
"props":{"width":350,"sceneColor":"#000000","height":550},
"nodeParent":-1,
"label":"Dialog",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":1,
"child":[
{
"x":15,
"type":"Box",
"props":{"top":20,"right":20,"left":20,"bottom":130},
"nodeParent":1,
"label":"Box",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":6,
"child":[
{
"x":30,
"type":"RadioGroup",
"props":{"var":"radioTheme","name":"radioTheme","height":380,"centerY":0,"centerX":0},
"nodeParent":6,
"label":"RadioGroup(radioTheme)",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":13,
"child":[
{
"x":45,
"type":"Radio",
"props":{"width":300,"top":0,"skin":"images/radio/radio_cyber.png","name":"item0","height":100},
"nodeParent":13,
"label":"Radio(item0)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":10,
"child":[
]
},
{
"x":45,
"type":"Radio",
"props":{"width":300,"skin":"images/radio/radio_dark.png","name":"item1","height":100,"centerY":0},
"nodeParent":13,
"label":"Radio(item1)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":11,
"child":[
]
},
{
"x":45,
"type":"Radio",
"props":{"width":300,"skin":"images/radio/radio_light.png","name":"item2","height":100,"bottom":0},
"nodeParent":13,
"label":"Radio(item2)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":12,
"child":[
]
}]
}]
},
{
"x":15,
"type":"Box",
"props":{"width":90,"var":"btnOK","runtime":"Laya.runtime.ColorfulBox","name":"btnSmall","left":20,"height":90,"bottom":20,"anchorY":0.5,"anchorX":0.5},
"nodeParent":1,
"label":"Box(btnOK)",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":2,
"child":[
{
"x":30,
"type":"Label",
"props":{"text":"√","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":2,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":3,
"child":[
]
}]
},
{
"x":15,
"type":"Box",
"props":{"width":90,"var":"btnClose","runtime":"Laya.runtime.ColorfulBox","right":20,"name":"btnSmall","height":90,"bottom":20,"anchorY":0.5,"anchorX":0.5},
"nodeParent":1,
"label":"Box(btnClose)",
"isOpen":true,
"isDirectory":true,
"isAniNode":true,
"hasChild":true,
"compId":14,
"child":[
{
"x":30,
"type":"Label",
"props":{"text":"×","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"bold":true,"anchorY":0.5,"anchorX":0.5},
"nodeParent":14,
"label":"Label(label)",
"isDirectory":false,
"isAniNode":true,
"hasChild":false,
"compId":15,
"child":[
]
}]
}],
"animations":[
{
"nodes":[
],
"name":"ani1",
"id":1,
"frameRate":24,
"action":0
}]
}

View File

@@ -1,19 +1,24 @@
{ {
"name": "life_restart", "name": "life_restart",
"type": "module", "type": "module",
"main": "repl/index.js", "bin": "repl/index.js",
"version": "2.1.0", "version": "2.0.0",
"author": "Vick Scarlet <vick@syaro.io>",
"scripts": { "scripts": {
"xlsx2json": "vt transform -d public \"data/**/*.xlsx\"", "test": "node test",
"dev": "vite", "xlsxTransform": "vt transform data",
"build": "vite build", "xlsx2json": "vt transform jobs/xlsx2json/config.json",
"start": "vite preview", "dev": "webpack serve --open /view/index.html",
"test": "vitest" "build": "webpack --mode production"
}, },
"devDependencies": { "devDependencies": {
"v-transform": "^2.2.1", "@babel/core": "^7.15.4",
"vite": "^8.0.3", "@babel/preset-env": "^7.15.4",
"vitest": "^4.1.2" "babel-loader": "^8.2.2",
"core-js": "^3.17.2",
"html-webpack-plugin": "^5.5.0",
"v-transform": "^1.0.1",
"webpack": "^5.64.4",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^4.1.0"
} }
} }

1111
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

1
public/bundle.js Normal file

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

1
public/chunk/33.6867d.js Normal file

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

1
public/chunk/85.466c4.js Normal file

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

71808
public/data/en-us/age.json Normal file

File diff suppressed because it is too large Load Diff

12652
public/data/en-us/events.json Normal file

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

71808
public/data/zh-cn/age.json Normal file

File diff suppressed because it is too large Load Diff

12652
public/data/zh-cn/events.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

74
public/dev.html Normal file
View File

@@ -0,0 +1,74 @@
<!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>

View File

@@ -35,11 +35,9 @@ P 3FA91C13 icon_github.png
P AB934AEA icon_int@3x.png P AB934AEA icon_int@3x.png
P F1A0724B icon_mny@3x.png P F1A0724B icon_mny@3x.png
P D5AADAC9 icon_rank@3x.png P D5AADAC9 icon_rank@3x.png
P 0806E5F3 icon_save.png
P 2DB0325D icon_spr@3x.png P 2DB0325D icon_spr@3x.png
P 2EFA541B icon_str@3x.png P 2EFA541B icon_str@3x.png
P 804842C9 icon_thanks@3x.png P 804842C9 icon_thanks@3x.png
P 96DD5D94 icon_themes.png
P 6ECB5FEC icon_up@3x.png P 6ECB5FEC icon_up@3x.png
D images/progress D images/progress
P E2BF0C93 progress_1@3x$bar.png P E2BF0C93 progress_1@3x$bar.png
@@ -48,10 +46,6 @@ P E7F15BA7 progress_2$bar.png
P 641A22BF progress_2.png P 641A22BF progress_2.png
P AF80A9AF progress_s$bar.png P AF80A9AF progress_s$bar.png
P 41417E8D progress_s.png P 41417E8D progress_s.png
D images/radio
P CCF63014 radio_cyber.png
P 040DE73C radio_dark.png
P BA975F5A radio_light.png
D images/resource D images/resource
P F3659301 bottombreath.png P F3659301 bottombreath.png
P 496D6FB9 circle.png P 496D6FB9 circle.png
@@ -65,5 +59,3 @@ R 8B95E6D3 vslider_1@3x$bar.png
P 6581FBA8 vslider_1@3x$down.png P 6581FBA8 vslider_1@3x$down.png
P 6581FBA8 vslider_1@3x$up.png P 6581FBA8 vslider_1@3x$up.png
R C9587878 vslider_1@3x.png R C9587878 vslider_1@3x.png
D images/texture
P FD231754 texture_1.png

View File

@@ -1 +1 @@
{"frames":{"icon_achievement@3x.png":{"frame":{"h":69,"idx":0,"w":65,"x":188,"y":385},"sourceSize":{"h":69,"w":65},"spriteSourceSize":{"x":0,"y":0}},"icon_chr@3x.png":{"frame":{"h":61,"idx":0,"w":57,"x":320,"y":448},"sourceSize":{"h":61,"w":57},"spriteSourceSize":{"x":0,"y":0}},"icon_discord.png":{"frame":{"h":384,"idx":0,"w":384,"x":0,"y":0},"sourceSize":{"h":384,"w":384},"spriteSourceSize":{"x":0,"y":0}},"icon_github.png":{"frame":{"h":384,"idx":0,"w":384,"x":385,"y":0},"sourceSize":{"h":384,"w":384},"spriteSourceSize":{"x":0,"y":0}},"icon_int@3x.png":{"frame":{"h":57,"idx":0,"w":54,"x":188,"y":455},"sourceSize":{"h":57,"w":54},"spriteSourceSize":{"x":0,"y":0}},"icon_mny@3x.png":{"frame":{"h":57,"idx":0,"w":54,"x":243,"y":455},"sourceSize":{"h":57,"w":54},"spriteSourceSize":{"x":0,"y":0}},"icon_rank@3x.png":{"frame":{"h":62,"idx":0,"w":72,"x":320,"y":385},"sourceSize":{"h":62,"w":72},"spriteSourceSize":{"x":0,"y":0}},"icon_save.png":{"frame":{"h":90,"idx":0,"w":90,"x":97,"y":385},"sourceSize":{"h":90,"w":90},"spriteSourceSize":{"x":0,"y":0}},"icon_spr@3x.png":{"frame":{"h":60,"idx":0,"w":57,"x":378,"y":448},"sourceSize":{"h":60,"w":57},"spriteSourceSize":{"x":0,"y":0}},"icon_str@3x.png":{"frame":{"h":57,"idx":0,"w":54,"x":393,"y":385},"sourceSize":{"h":57,"w":54},"spriteSourceSize":{"x":0,"y":0}},"icon_thanks@3x.png":{"frame":{"h":69,"idx":0,"w":65,"x":254,"y":385},"sourceSize":{"h":69,"w":65},"spriteSourceSize":{"x":0,"y":0}},"icon_themes.png":{"frame":{"h":96,"idx":0,"w":96,"x":0,"y":385},"sourceSize":{"h":96,"w":96},"spriteSourceSize":{"x":0,"y":0}},"icon_up@3x.png":{"frame":{"h":18,"idx":0,"w":33,"x":97,"y":476},"sourceSize":{"h":18,"w":33},"spriteSourceSize":{"x":0,"y":0}}},"meta":{"image":"icons.png","prefix":"images/icons/"}} {"frames":{"icon_achievement@3x.png":{"frame":{"h":69,"idx":0,"w":65,"x":0,"y":385},"sourceSize":{"h":69,"w":65},"spriteSourceSize":{"x":0,"y":0}},"icon_chr@3x.png":{"frame":{"h":61,"idx":0,"w":57,"x":132,"y":448},"sourceSize":{"h":61,"w":57},"spriteSourceSize":{"x":0,"y":0}},"icon_discord.png":{"frame":{"h":384,"idx":0,"w":384,"x":0,"y":0},"sourceSize":{"h":384,"w":384},"spriteSourceSize":{"x":0,"y":0}},"icon_github.png":{"frame":{"h":384,"idx":0,"w":384,"x":385,"y":0},"sourceSize":{"h":384,"w":384},"spriteSourceSize":{"x":0,"y":0}},"icon_int@3x.png":{"frame":{"h":57,"idx":0,"w":54,"x":0,"y":455},"sourceSize":{"h":57,"w":54},"spriteSourceSize":{"x":0,"y":0}},"icon_mny@3x.png":{"frame":{"h":57,"idx":0,"w":54,"x":55,"y":455},"sourceSize":{"h":57,"w":54},"spriteSourceSize":{"x":0,"y":0}},"icon_rank@3x.png":{"frame":{"h":62,"idx":0,"w":72,"x":132,"y":385},"sourceSize":{"h":62,"w":72},"spriteSourceSize":{"x":0,"y":0}},"icon_spr@3x.png":{"frame":{"h":60,"idx":0,"w":57,"x":190,"y":448},"sourceSize":{"h":60,"w":57},"spriteSourceSize":{"x":0,"y":0}},"icon_str@3x.png":{"frame":{"h":57,"idx":0,"w":54,"x":205,"y":385},"sourceSize":{"h":57,"w":54},"spriteSourceSize":{"x":0,"y":0}},"icon_thanks@3x.png":{"frame":{"h":69,"idx":0,"w":65,"x":66,"y":385},"sourceSize":{"h":69,"w":65},"spriteSourceSize":{"x":0,"y":0}},"icon_up@3x.png":{"frame":{"h":18,"idx":0,"w":33,"x":248,"y":443},"sourceSize":{"h":18,"w":33},"spriteSourceSize":{"x":0,"y":0}}},"meta":{"image":"icons.png","prefix":"images/icons/"}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -1 +0,0 @@
{"frames":{"radio_cyber.png":{"frame":{"h":300,"idx":0,"w":300,"x":0,"y":0},"sourceSize":{"h":300,"w":300},"spriteSourceSize":{"x":0,"y":0}},"radio_dark.png":{"frame":{"h":300,"idx":0,"w":300,"x":0,"y":301},"sourceSize":{"h":300,"w":300},"spriteSourceSize":{"x":0,"y":0}},"radio_light.png":{"frame":{"h":300,"idx":0,"w":300,"x":301,"y":0},"sourceSize":{"h":300,"w":300},"spriteSourceSize":{"x":0,"y":0}}},"meta":{"image":"radio.png","prefix":"images/radio/"}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -1 +0,0 @@
{"frames":{"texture_1.png":{"frame":{"h":400,"idx":0,"w":400,"x":0,"y":0},"sourceSize":{"h":400,"w":400},"spriteSourceSize":{"x":0,"y":0}}},"meta":{"image":"texture.png","prefix":"images/texture/"}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

1
public/index.html Normal file
View File

@@ -0,0 +1 @@
<!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.883b9.js"></script></head><body style="background:black"></body></html>

View File

@@ -1 +0,0 @@
{"textureName":"images/texture/texture_1.png","positionVariance":{"0":0,"1":0,"2":0},"minVerticalVelocity":-100,"minVerticalEndRadian":0,"minStartSize":0,"minStartRadius":0,"minRotateSpeed":0,"minHorizontalVelocity":100,"minHorizontalEndRadian":0,"minEndSize":18.55,"minEndRadius":218.75,"minColor":{"0":0.15,"1":0.92,"2":0.91,"3":0.6000000238418579},"maxVerticalVelocity":100,"maxVerticalEndRadian":0,"maxStartSize":2.04,"maxStartRadius":0,"maxRotateSpeed":0,"maxPartices":400,"maxHorizontalVelocity":100,"maxHorizontalEndRadian":0,"maxEndSize":24.35,"maxEndRadius":84.82,"maxColor":{"0":0.57,"1":1,"2":0,"3":1},"gravity":{"0":0,"1":0,"2":0},"endVelocity":2,"emitterVelocitySensitivity":56.89,"duration":9.52,"colorComponentInter":true,"blendState":0,"ageAddScale":10,"backColor":"#ffffff","textureFileName":"comp\\clip_num.png","textureCount":1,"minHorizontalStartRadian":0,"maxHorizontalStartRadian":0,"minVerticalStartRadian":0,"maxVerticalStartRadian":0,"emitterType":"null","emissionRate":0,"sphereEmitterRadius":1,"sphereEmitterVelocity":0,"sphereEmitterVelocityAddVariance":0,"ringEmitterRadius":30,"ringEmitterVelocity":0,"ringEmitterVelocityAddVariance":0,"ringEmitterUp":2,"minStartColor":{"0":0.5,"1":0.5,"2":0.5,"3":0.2},"maxStartColor":{"0":1,"1":1,"2":1,"3":1},"minEndColor":{"0":0,"1":0,"2":0,"3":0.08},"maxEndColor":{"0":1,"1":1,"2":1,"3":1},"pointEmitterPosition":{"0":0,"1":0,"2":0},"pointEmitterPositionVariance":{"0":0,"1":0,"2":0},"pointEmitterVelocity":{"0":0,"1":0,"2":0},"pointEmitterVelocityAddVariance":{"0":0,"1":0,"2":0},"boxEmitterCenterPosition":{"0":0,"1":0,"2":0},"boxEmitterSize":{"0":0,"1":0,"2":0},"boxEmitterVelocity":{"0":0,"1":0,"2":0},"boxEmitterVelocityAddVariance":{"0":0,"1":0,"2":0},"sphereEmitterCenterPosition":{"0":0,"1":0,"2":0},"ringEmitterCenterPosition":{"0":0,"1":0,"2":0},"useEndRadian":true,"disableColor":false}

File diff suppressed because it is too large Load Diff

View File

@@ -1,40 +1,28 @@
import { fileURLToPath } from 'url' import App from './app.js';
import { dirname } from 'path' import { readFile, writeFile } from 'fs/promises';
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( globalThis.localStorage = JSON.parse(await readFile('__localStorage.json'));
await readFile(__dirname + '/__localStorage.json')
)
} catch (e) { } catch (e) {
globalThis.localStorage = {} globalThis.localStorage = {};
} }
localStorage.getItem = key => localStorage.getItem = key => localStorage[key]===void 0? null: localStorage[key];
localStorage[key] === void 0 ? null : localStorage[key] localStorage.setItem = (key, value) => (localStorage[key] = value);
localStorage.setItem = (key, value) => (localStorage[key] = value)
globalThis.dumpLocalStorage = async () => globalThis.dumpLocalStorage = async ()=>await writeFile('__localStorage.json', JSON.stringify( global.localStorage))
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);

View File

@@ -1,4 +1,3 @@
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'
@@ -7,31 +6,12 @@ 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;
class App{
globalThis.goto = async tag => { constructor(){
let url;
switch (tag) {
case 'github': url = 'https://github.com/VickScarlet/lifeRestart'; break;
case 'discord': url = 'https://discord.gg/U3qrf49NMQ'; break;
case 'sponsor_afd': url = 'https://afdian.com/a/LifeRestart'; break;
case 'sponsor_ddf': url = 'https://dun.mianbaoduo.com/@vickscarlet'; break;
}
try {
if (Laya.Browser.onIOS) {
window.location.href = url;
} else {
window.open(url, '_blank');
}
} catch (error) {
console.error(error);
}
}
class App {
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}`);
@@ -50,10 +30,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 = [];
@@ -67,18 +47,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);
@@ -103,15 +83,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)
] ]
} }
} }
@@ -121,7 +101,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;
@@ -137,17 +117,7 @@ class App {
resigterEvent() { resigterEvent() {
$$on('achievement', achievement => { $$on('achievement', achievement => {
$ui.popup(UI.popups.ACHIEVEMENT, { achievement }); $ui.popup(UI.popups.ACHIEVEMENT, {achievement});
})
$$on('message', ([message, ...args]) => {
if (Array.isArray(message)) {
message = message.map(([m, ...a]) => $_.format($lang[m], ...a)).join('\n');
} else {
message = $_.format(
$lang[message], ...args
);
}
$ui.popup(UI.popups.MESSAGE, { message });
}) })
} }
@@ -158,21 +128,15 @@ class App {
this.resigterEvent(); this.resigterEvent();
this.#initLaya(); this.#initLaya();
globalThis.$ui = UIManager.getInstance(); globalThis.$ui = UIManager.getInstance();
if (theme == 'default') {
theme = localStorage.getItem('theme') || 'default';
}
$ui.theme = theme; $ui.theme = theme;
await this.#setLanguage(language); await this.#setLanguage(language);
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);
} }
} }

View File

@@ -43,7 +43,7 @@ function parseCondition(condition) {
return conditions; return conditions;
} }
export function checkCondition(property, condition) { 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) {
} }
} }
export function extractMaxTriggers(condition) { 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);
@@ -125,3 +125,5 @@ export 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 };

View File

@@ -1,103 +0,0 @@
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)
})
})

View File

@@ -1,7 +1,6 @@
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]);
@@ -84,17 +83,10 @@ function deepMapSet(target, source) {
return target; return target;
} }
function deepGet(obj, path) {
for(const key of path.split('.')) {
if(!(key in obj)) return undefined;
obj = obj[key];
}
return obj;
}
function format(str, ...args) { function format(str, ...args) {
const replace = set => (match, key) => { const replace = set => (match, key) => {
const value = deepGet(set, key); const value = set[key];
switch(typeof value) { switch(typeof value) {
case 'object': return JSON.stringify(value); case 'object': return JSON.stringify(value);
case 'boolean': case 'boolean':

View File

@@ -27,11 +27,10 @@ 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!',
@@ -120,45 +119,7 @@ export default ({
UI_Support_Programmer: 'Programmer', UI_Support_Programmer: 'Programmer',
UI_Support_Designer: 'Designer', UI_Support_Designer: 'Designer',
UI_Save: 'Save',
UI_Load: 'Load',
UI_Read: 'Copy',
UI_Write: 'Paste',
UI_CopySuccess: 'Copy to clipboard success',
UI_CopyFailed: 'Copy to clipboard Failed',
UI_PasteSuccessDecodeSuccess: 'Load Success!',
UI_PasteSuccessDecodeFailed: 'Paste success, but load Failed!',
UI_PasteFailedDecodeSuccess: 'Paste Failed, use input load success!',
UI_PasteFailedDecodeFailed: 'Paste Failed, use input load Failed!',
UI_LoadSuccess: 'Load Success!',
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_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}',
F_TalentSelection: '{name} ({description})', F_TalentSelection: '{name} ({description})',
F_TalentConflict: 'Conflict with talent ({0})',
F_TalentSelectLimit: 'Talent select limit {0}',
F_TalentSelectNotComplect: 'Please select {0} talent',
F_PropertyPointLeft: 'You have left {0} property point',
F_TalentReplace: 'Talent replace [{source.name}] -> [{target.name}]',
F_PropertyStr: 'CHR{CHR} INT{INT} STR{STR} MNY{MNY}'
}); });

View File

@@ -15,8 +15,6 @@ export default ({
UI_Loading: '加载中...', UI_Loading: '加载中...',
UI_Error: '错误', UI_Error: '错误',
UI_BackupBtn: '上面没有效果就试试这个吧',
UI_Colon: '', UI_Colon: '',
UI_Times: '次', UI_Times: '次',
UI_Count: '个', UI_Count: '个',
@@ -29,11 +27,10 @@ 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连抽',
@@ -122,44 +119,7 @@ export default ({
UI_Support_Programmer: '打赏程序(顿顿饭)', UI_Support_Programmer: '打赏程序(顿顿饭)',
UI_Support_Designer: '打赏策划(爱发电)', UI_Support_Designer: '打赏策划(爱发电)',
UI_Save: '存档',
UI_Load: '读档',
UI_Read: '复制',
UI_Write: '粘贴',
UI_LoadSuccess: '读档成功!',
UI_LoadFailed: '读档失败!',
UI_CopySuccess: '成功复制存档到剪贴板',
UI_CopyFailed: '复制存档到剪贴板失败,请手动复制存档内容',
UI_PasteSuccessDecodeSuccess: '读档成功!',
UI_PasteSuccessDecodeFailed: '粘贴剪贴板存档内容成功,但剪贴板内容读档失败',
UI_PasteFailedDecodeSuccess: '粘贴剪贴板存档内容失败,使用输入的内容读档成功',
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_PleaseSelectOne: '请选择一个名人',
M_UnGenerate: '独一无二的我还没有生成',
M_DisableExtendTalent: '名人模式不能继承天赋',
F_RemakeTimes: '已重开{0}次', F_RemakeTimes: '已重开{0}次',
F_AchievementCount: '成就达成{0}个', F_AchievementCount: '成就达成{0}个',
F_TalentSelection: '{name}{description}', F_TalentSelection: '{name}{description}',
F_TalentConflict: '与已选的「{0}」天赋冲突',
F_TalentSelectLimit: '只能选 {0} 个天赋',
F_TalentSelectNotComplect: '要选满{0}个天赋',
F_PropertyPointLeft: '你还有 {0} 属性点没有分配完',
F_TalentReplace: '天赋替换【{source.name}】->【{target.name}】',
F_PropertyStr: '颜值{CHR} 智力{INT} 体质{STR} 家境{MNY}'
}); });

View File

@@ -1,6 +1,21 @@
import App from './app.js'; import App from './app.js';
import Life from './modules/life.js'; import Life from './modules/life.js';
globalThis.goto = async tag => {
let url;
switch(tag) {
case 'github': url = 'https://github.com/VickScarlet/lifeRestart'; break;
case 'discord': url = 'https://discord.gg/U3qrf49NMQ'; break;
case 'sponsor_afd': url = 'https://afdian.net/@LifeRestart'; break;
case 'sponsor_ddf': url = 'https://dun.mianbaoduo.com/@vickscarlet'; break;
}
try {
window.open(url, '_blank');
} catch (error) {
console.error(error);
}
}
globalThis.$$eventMap = new Map(); globalThis.$$eventMap = new Map();
globalThis.$$event = (tag, data) => { globalThis.$$event = (tag, data) => {
const listener = $$eventMap.get(tag); const listener = $$eventMap.get(tag);
@@ -19,37 +34,6 @@ globalThis.$$off = (tag, fn) => {
if(listener) listener.delete(fn); if(listener) listener.delete(fn);
} }
globalThis.$$copy = async text => {
const result = await navigator.permissions.query({ name: "clipboard-write" })
if (result.state == "granted" || result.state == "prompt") {
navigator.clipboard.writeText(text)
return true;
}
const input = document.createElement('input');
input.setAttribute('style', 'opacity: 0;');
document.body.appendChild(input);
input.value = text;
input.select();
const r = document.execCommand("copy");
document.body.removeChild(input);
return r;
}
globalThis.$$read = async ()=>{
const result = await navigator.permissions.query({ name: "clipboard-read" })
if (result.state == "granted" || result.state == "prompt") {
return await navigator.clipboard.readText();
}
const input = document.createElement('input');
input.setAttribute('style', 'opacity: 0;');
document.body.appendChild(input);
input.focus();
const r = document.execCommand("paste");
const text = input.value;
document.body.removeChild(input);
return r?text:r;
};
const core = new Life(); const core = new Life();
const game = new App(); const game = new App();
globalThis.core = core; globalThis.core = core;
@@ -196,29 +180,5 @@ 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);

View File

@@ -1,7 +1,8 @@
import { clone } from '../functions/util.js';
import { checkCondition } from '../functions/condition.js';
class Achievement { class Achievement {
constructor(system) { constructor() {}
this.#system = system;
}
// 时机 // 时机
Opportunity = { Opportunity = {
@@ -11,7 +12,6 @@ class Achievement {
END: "END", // 游戏完成,点击重开 重开次数在这之后才会+1 END: "END", // 游戏完成,点击重开 重开次数在这之后才会+1
}; };
#system;
#achievements; #achievements;
initial({achievements}) { initial({achievements}) {
@@ -23,11 +23,7 @@ class Achievement {
return Object.keys(this.#achievements).length; return Object.keys(this.#achievements).length;
} }
get #prop() { list(property) {
return this.#system.request(this.#system.Module.PROPERTY);
}
list() {
return Object return Object
.values(this.#achievements) .values(this.#achievements)
.map(({ .map(({
@@ -36,34 +32,34 @@ class Achievement {
})=>({ })=>({
id, name, opportunity, id, name, opportunity,
description, hide, grade, description, hide, grade,
isAchieved: this.isAchieved(id, this.#prop), isAchieved: this.isAchieved(id, property),
})); }));
} }
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 this.#system.clone(achievement); return clone(achievement);
} }
check(achievementId) { check(achievementId, property) {
const { condition } = this.get(achievementId); const { condition } = this.get(achievementId);
return this.#system.check(condition); return checkCondition(property, condition);
} }
isAchieved(achievementId) { isAchieved(achievementId, property) {
for(const [achieved] of (this.#prop.get(this.#prop.TYPES.ACHV)||[])) for(const [achieved] of (property.get(property.TYPES.ACHV)||[]))
if(achieved == achievementId) return true; if(achieved == achievementId) return true;
return false; return false;
} }
achieve(opportunity) { achieve(opportunity, property) {
this.list() this.list(property)
.filter(({isAchieved})=>!isAchieved) .filter(({isAchieved})=>!isAchieved)
.filter(({opportunity: o})=>o==opportunity) .filter(({opportunity: o})=>o==opportunity)
.filter(({id})=>this.check(id, this.#prop)) .filter(({id})=>this.check(id, property))
.forEach(({id})=>{ .forEach(({id})=>{
this.#prop.achieve(this.#prop.TYPES.ACHV, id) property.achieve(property.TYPES.ACHV, id)
$$event('achievement', this.get(id)) $$event('achievement', this.get(id))
}); });
} }

View File

@@ -1,134 +0,0 @@
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;

View File

@@ -1,9 +1,9 @@
class Event { import { clone } from '../functions/util.js';
constructor(system) { import { checkCondition } from '../functions/condition.js';
this.#system = system;
} class Event {
constructor() {}
#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) { check(eventId, property) {
const { include, exclude, NoRandom } = this.get(eventId); const { include, exclude, NoRandom } = this.get(eventId);
if(NoRandom) return false; if(NoRandom) return false;
if(exclude && this.#system.check(exclude)) return false; if(exclude && checkCondition(property, exclude)) return false;
if(include) return this.#system.check(include); if(include) return checkCondition(property, 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 this.#system.clone(event); return clone(event);
} }
information(eventId) { information(eventId) {
@@ -43,13 +43,13 @@ class Event {
return { description }; return { description };
} }
do(eventId) { do(eventId, property) {
const { effect, branch, event: description, postEvent, grade } = this.get(eventId); const { effect, branch, event: description, postEvent } = this.get(eventId);
if(branch) if(branch)
for(const [cond, next] of branch) for(const [cond, next] of branch)
if(this.#system.check(cond)) if(checkCondition(property, cond))
return { effect, next, description, grade }; return { effect, next, description };
return { effect, postEvent, description, grade }; return { effect, postEvent, description };
} }
} }

Some files were not shown because too many files have changed in this diff Show More