mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-19 04:19:30 +08:00
道具栏
This commit is contained in:
parent
c29a958689
commit
9b2c56f829
260
index.html
260
index.html
@ -46,140 +46,142 @@
|
|||||||
startImageLogo.src = "logo.png";
|
startImageLogo.src = "logo.png";
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<!-- injection -->
|
<div id="game">
|
||||||
<div id='gameGroup'>
|
<!-- injection -->
|
||||||
<p id='mainTips'>请稍候...</p>
|
<div id='gameGroup'>
|
||||||
<img id='musicBtn'>
|
<p id='mainTips'>请稍候...</p>
|
||||||
<div id='startPanel'>
|
<img id='musicBtn'>
|
||||||
<div id='startTop'>
|
<div id='startPanel'>
|
||||||
<div id='startTopProgressBar'>
|
<div id='startTop'>
|
||||||
<div id='startTopProgress'></div>
|
<div id='startTopProgressBar'>
|
||||||
|
<div id='startTopProgress'></div>
|
||||||
|
</div>
|
||||||
|
<p id='startTopLoadTips'>资源即将开始加载</p>
|
||||||
|
<p id='startTopHint'>HTML5魔塔游戏平台,享受更多魔塔游戏:<br />https://h5mota.com/</p>
|
||||||
</div>
|
</div>
|
||||||
<p id='startTopLoadTips'>资源即将开始加载</p>
|
<img id='startBackground'>
|
||||||
<p id='startTopHint'>HTML5魔塔游戏平台,享受更多魔塔游戏:<br />https://h5mota.com/</p>
|
<p id='startLogo'></p>
|
||||||
</div>
|
<div id='startButtonGroup'>
|
||||||
<img id='startBackground'>
|
<div id='startButtons'>
|
||||||
<p id='startLogo'></p>
|
<span class='startButton' id='playGame'>开始游戏</span>
|
||||||
<div id='startButtonGroup'>
|
<span class='startButton' id='loadGame'>载入游戏</span>
|
||||||
<div id='startButtons'>
|
<span class='startButton' id='replayGame'>录像回放</span>
|
||||||
<span class='startButton' id='playGame'>开始游戏</span>
|
</div>
|
||||||
<span class='startButton' id='loadGame'>载入游戏</span>
|
<div id='levelChooseButtons'></div>
|
||||||
<span class='startButton' id='replayGame'>录像回放</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div id='levelChooseButtons'></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id='floorMsgGroup'>
|
||||||
<div id='floorMsgGroup'>
|
<p id='logoLabel'></p>
|
||||||
<p id='logoLabel'></p>
|
<p id='versionLabel'></p>
|
||||||
<p id='versionLabel'></p>
|
<p id='floorNameLabel'></p>
|
||||||
<p id='floorNameLabel'></p>
|
|
||||||
</div>
|
|
||||||
<div id='statusBar' class="clearfix">
|
|
||||||
<div class="status" id="floorCol">
|
|
||||||
<img id="img-floor">
|
|
||||||
<p class='statusLabel statusText' id='floor'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="nameCol">
|
|
||||||
<img id="img-name">
|
|
||||||
<p class='statusLabel statusText' id='name'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="lvCol">
|
|
||||||
<img id="img-lv">
|
|
||||||
<p class='statusLabel statusText' id='lv'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='hpmaxCol'>
|
|
||||||
<img id="img-hpmax">
|
|
||||||
<p class='statusLabel statusText' id='hpmax'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='hpCol'>
|
|
||||||
<img id="img-hp">
|
|
||||||
<p class='statusLabel statusText' id='hp'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='manaCol'>
|
|
||||||
<img id="img-mana">
|
|
||||||
<p class='statusLabel statusText' id='mana'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='atkCol'>
|
|
||||||
<img id="img-atk">
|
|
||||||
<p class='statusLabel statusText' id='atk'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='defCol'>
|
|
||||||
<img id="img-def">
|
|
||||||
<p class='statusLabel statusText' id='def'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="mdefCol">
|
|
||||||
<img id="img-mdef">
|
|
||||||
<p class='statusLabel statusText' id='mdef'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="moneyCol">
|
|
||||||
<img id="img-money">
|
|
||||||
<p class='statusLabel statusText' id='money'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="expCol">
|
|
||||||
<img id="img-exp">
|
|
||||||
<p class='statusLabel statusText' id='exp'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="upCol">
|
|
||||||
<img id="img-up">
|
|
||||||
<p class='statusLabel statusText' id='up'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="skillCol">
|
|
||||||
<img id="img-skill">
|
|
||||||
<p class='statusLabel statusText' id='skill' style='font-style: normal'></p>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='keyCol'>
|
|
||||||
<span class='statusLabel' id='yellowKey' style="color:#FFCCAA"></span>
|
|
||||||
<span class='statusLabel' id='blueKey' style="color:#AAAADD"></span>
|
|
||||||
<span class='statusLabel' id='redKey' style="color:#FF8888"></span>
|
|
||||||
<span class='statusLabel' id='greenKey' style="color:#88FF88"></span>
|
|
||||||
</div>
|
|
||||||
<div class="status" id='pzfCol'>
|
|
||||||
<span class='statusLabel' id='pickaxe' style="color: #BC6E27"></span>
|
|
||||||
<span class='statusLabel' id='bomb' style="color: #FA14B9"></span>
|
|
||||||
<span class='statusLabel' id='fly' style="color: #8DB600"></span>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="debuffCol">
|
|
||||||
<span class='statusLabel' id='poison' style="color: #AFFCA8;"></span>
|
|
||||||
<span class='statusLabel' id='weak' style="color: #FECCD0;"></span>
|
|
||||||
<span class='statusLabel' id='curse' style="color: #C2F4E7;"></span>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div id='statusBar' class="clearfix">
|
||||||
|
<div class="status" id="floorCol">
|
||||||
|
<img id="img-floor">
|
||||||
|
<p class='statusLabel statusText' id='floor'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="nameCol">
|
||||||
|
<img id="img-name">
|
||||||
|
<p class='statusLabel statusText' id='name'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="lvCol">
|
||||||
|
<img id="img-lv">
|
||||||
|
<p class='statusLabel statusText' id='lv'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='hpmaxCol'>
|
||||||
|
<img id="img-hpmax">
|
||||||
|
<p class='statusLabel statusText' id='hpmax'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='hpCol'>
|
||||||
|
<img id="img-hp">
|
||||||
|
<p class='statusLabel statusText' id='hp'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='manaCol'>
|
||||||
|
<img id="img-mana">
|
||||||
|
<p class='statusLabel statusText' id='mana'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='atkCol'>
|
||||||
|
<img id="img-atk">
|
||||||
|
<p class='statusLabel statusText' id='atk'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='defCol'>
|
||||||
|
<img id="img-def">
|
||||||
|
<p class='statusLabel statusText' id='def'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="mdefCol">
|
||||||
|
<img id="img-mdef">
|
||||||
|
<p class='statusLabel statusText' id='mdef'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="moneyCol">
|
||||||
|
<img id="img-money">
|
||||||
|
<p class='statusLabel statusText' id='money'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="expCol">
|
||||||
|
<img id="img-exp">
|
||||||
|
<p class='statusLabel statusText' id='exp'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="upCol">
|
||||||
|
<img id="img-up">
|
||||||
|
<p class='statusLabel statusText' id='up'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="skillCol">
|
||||||
|
<img id="img-skill">
|
||||||
|
<p class='statusLabel statusText' id='skill' style='font-style: normal'></p>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='keyCol'>
|
||||||
|
<span class='statusLabel' id='yellowKey' style="color:#FFCCAA"></span>
|
||||||
|
<span class='statusLabel' id='blueKey' style="color:#AAAADD"></span>
|
||||||
|
<span class='statusLabel' id='redKey' style="color:#FF8888"></span>
|
||||||
|
<span class='statusLabel' id='greenKey' style="color:#88FF88"></span>
|
||||||
|
</div>
|
||||||
|
<div class="status" id='pzfCol'>
|
||||||
|
<span class='statusLabel' id='pickaxe' style="color: #BC6E27"></span>
|
||||||
|
<span class='statusLabel' id='bomb' style="color: #FA14B9"></span>
|
||||||
|
<span class='statusLabel' id='fly' style="color: #8DB600"></span>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="debuffCol">
|
||||||
|
<span class='statusLabel' id='poison' style="color: #AFFCA8;"></span>
|
||||||
|
<span class='statusLabel' id='weak' style="color: #FECCD0;"></span>
|
||||||
|
<span class='statusLabel' id='curse' style="color: #C2F4E7;"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- 状态栏canvas化 -->
|
<!-- 状态栏canvas化 -->
|
||||||
<canvas id="statusCanvas" style="position: absolute; left: 0; top: 0;"></canvas>
|
<canvas id="statusCanvas" style="position: absolute; left: 0; top: 0;"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div id="toolBar" class="clearfix">
|
<div id="toolBar" class="clearfix">
|
||||||
<img class="tools" id='img-book'>
|
<img class="tools" id='img-book'>
|
||||||
<img class="tools" id='img-fly'>
|
<img class="tools" id='img-fly'>
|
||||||
<img class="tools" id='img-toolbox'>
|
<img class="tools" id='img-toolbox'>
|
||||||
<img class="tools" id='img-keyboard'>
|
<img class="tools" id='img-keyboard'>
|
||||||
<img class="tools" id='img-shop'>
|
<img class="tools" id='img-shop'>
|
||||||
<img class="tools" id='img-save'>
|
<img class="tools" id='img-save'>
|
||||||
<img class="tools" id='img-load'>
|
<img class="tools" id='img-load'>
|
||||||
<img class="tools" id='img-settings'>
|
<img class="tools" id='img-settings'>
|
||||||
<img class="tools" id='img-btn1' style='display:none'>
|
<img class="tools" id='img-btn1' style='display:none'>
|
||||||
<img class="tools" id='img-btn2' style='display:none'>
|
<img class="tools" id='img-btn2' style='display:none'>
|
||||||
<img class="tools" id='img-btn3' style='display:none'>
|
<img class="tools" id='img-btn3' style='display:none'>
|
||||||
<img class="tools" id='img-btn4' style='display:none'>
|
<img class="tools" id='img-btn4' style='display:none'>
|
||||||
<img class="tools" id='img-btn5' style='display:none'>
|
<img class="tools" id='img-btn5' style='display:none'>
|
||||||
<img class="tools" id='img-btn6' style='display:none'>
|
<img class="tools" id='img-btn6' style='display:none'>
|
||||||
<img class="tools" id='img-btn7' style='display:none'>
|
<img class="tools" id='img-btn7' style='display:none'>
|
||||||
<img class="tools" id='img-btn8' style='display:none'>
|
<img class="tools" id='img-btn8' style='display:none'>
|
||||||
<p class="statusLabel tools" id="hard"></p>
|
<p class="statusLabel tools" id="hard"></p>
|
||||||
</div>
|
</div>
|
||||||
<div id="gameDraw">
|
<div id="gameDraw">
|
||||||
<div id="gif"></div>
|
<div id="gif"></div>
|
||||||
<div id="gif2"></div>
|
<div id="gif2"></div>
|
||||||
<canvas class='gameCanvas' id='bg'></canvas>
|
<canvas class='gameCanvas' id='bg'></canvas>
|
||||||
<canvas class='gameCanvas' id='event'></canvas>
|
<canvas class='gameCanvas' id='event'></canvas>
|
||||||
<canvas class='gameCanvas' id='hero'></canvas>
|
<canvas class='gameCanvas' id='hero'></canvas>
|
||||||
<canvas class='gameCanvas' id='event2'></canvas>
|
<canvas class='gameCanvas' id='event2'></canvas>
|
||||||
<canvas class='gameCanvas' id='fg'></canvas>
|
<canvas class='gameCanvas' id='fg'></canvas>
|
||||||
<canvas class='gameCanvas' id='damage'></canvas>
|
<canvas class='gameCanvas' id='damage'></canvas>
|
||||||
<canvas class='gameCanvas' id='animate'></canvas>
|
<canvas class='gameCanvas' id='animate'></canvas>
|
||||||
<canvas class='gameCanvas' id='curtain'></canvas>
|
<canvas class='gameCanvas' id='curtain'></canvas>
|
||||||
<canvas class='gameCanvas' id='ui'></canvas>
|
<canvas class='gameCanvas' id='ui'></canvas>
|
||||||
<canvas class='gameCanvas' id='data'>此浏览器不支持HTML5</canvas>
|
<canvas class='gameCanvas' id='data'>此浏览器不支持HTML5</canvas>
|
||||||
<div id="next"></div>
|
<div id="next"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id='inputDiv'>
|
<div id='inputDiv'>
|
||||||
|
214
pnpm-lock.yaml
214
pnpm-lock.yaml
@ -42,23 +42,23 @@ dependencies:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@types/fontmin': 0.9.0
|
'@types/fontmin': 0.9.0
|
||||||
'@types/fs-extra': 9.0.13
|
'@types/fs-extra': 9.0.13
|
||||||
'@types/lodash': 4.14.188
|
'@types/lodash': 4.14.189
|
||||||
'@types/lz-string': 1.3.34
|
'@types/lz-string': 1.3.34
|
||||||
'@types/node': 18.11.9
|
'@types/node': 18.11.9
|
||||||
'@vitejs/plugin-legacy': 2.3.1_terser@5.15.1+vite@3.2.3
|
'@vitejs/plugin-legacy': 2.3.1_terser@5.15.1+vite@3.2.4
|
||||||
'@vitejs/plugin-vue': 3.2.0_vite@3.2.3+vue@3.2.45
|
'@vitejs/plugin-vue': 3.2.0_vite@3.2.4+vue@3.2.45
|
||||||
'@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.3+vue@3.2.45
|
'@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.4+vue@3.2.45
|
||||||
compressing: 1.6.2
|
compressing: 1.6.2
|
||||||
fontmin: 0.9.9
|
fontmin: 0.9.9
|
||||||
form-data: 4.0.0
|
form-data: 4.0.0
|
||||||
fs-extra: 10.1.0
|
fs-extra: 10.1.0
|
||||||
less: 4.1.3
|
less: 4.1.3
|
||||||
terser: 5.15.1
|
terser: 5.15.1
|
||||||
ts-node: 10.9.1_cbe7ovvae6zqfnmtgctpgpys54
|
ts-node: 10.9.1_wup25etrarvlqkprac7h35hj7u
|
||||||
typescript: 4.8.4
|
typescript: 4.9.3
|
||||||
unplugin-vue-components: 0.22.9_vue@3.2.45
|
unplugin-vue-components: 0.22.9_vue@3.2.45
|
||||||
vite: 3.2.3_sjdpriiyqai3ghwmd5e3ldppum
|
vite: 3.2.4_sjdpriiyqai3ghwmd5e3ldppum
|
||||||
vue-tsc: 1.0.9_typescript@4.8.4
|
vue-tsc: 1.0.9_typescript@4.9.3
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@ -343,7 +343,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==}
|
resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime: 0.13.10
|
regenerator-runtime: 0.13.11
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@babel/standalone/7.20.4:
|
/@babel/standalone/7.20.4:
|
||||||
@ -398,8 +398,8 @@ packages:
|
|||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@esbuild/android-arm/0.15.13:
|
/@esbuild/android-arm/0.15.14:
|
||||||
resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==}
|
resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [android]
|
os: [android]
|
||||||
@ -407,8 +407,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-loong64/0.15.13:
|
/@esbuild/linux-loong64/0.15.14:
|
||||||
resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==}
|
resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [loong64]
|
cpu: [loong64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -527,7 +527,7 @@ packages:
|
|||||||
/@simonwep/pickr/1.8.2:
|
/@simonwep/pickr/1.8.2:
|
||||||
resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
|
resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
core-js: 3.26.0
|
core-js: 3.26.1
|
||||||
nanopop: 2.2.0
|
nanopop: 2.2.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
@ -568,8 +568,8 @@ packages:
|
|||||||
'@types/node': 18.11.9
|
'@types/node': 18.11.9
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/lodash/4.14.188:
|
/@types/lodash/4.14.189:
|
||||||
resolution: {integrity: sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w==}
|
resolution: {integrity: sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/lz-string/1.3.34:
|
/@types/lz-string/1.3.34:
|
||||||
@ -588,7 +588,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@vitejs/plugin-legacy/2.3.1_terser@5.15.1+vite@3.2.3:
|
/@vitejs/plugin-legacy/2.3.1_terser@5.15.1+vite@3.2.4:
|
||||||
resolution: {integrity: sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==}
|
resolution: {integrity: sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^14.18.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -596,15 +596,15 @@ packages:
|
|||||||
vite: ^3.0.0
|
vite: ^3.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/standalone': 7.20.4
|
'@babel/standalone': 7.20.4
|
||||||
core-js: 3.26.0
|
core-js: 3.26.1
|
||||||
magic-string: 0.26.7
|
magic-string: 0.26.7
|
||||||
regenerator-runtime: 0.13.10
|
regenerator-runtime: 0.13.11
|
||||||
systemjs: 6.13.0
|
systemjs: 6.13.0
|
||||||
terser: 5.15.1
|
terser: 5.15.1
|
||||||
vite: 3.2.3_sjdpriiyqai3ghwmd5e3ldppum
|
vite: 3.2.4_sjdpriiyqai3ghwmd5e3ldppum
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@vitejs/plugin-vue-jsx/2.1.1_vite@3.2.3+vue@3.2.45:
|
/@vitejs/plugin-vue-jsx/2.1.1_vite@3.2.4+vue@3.2.45:
|
||||||
resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==}
|
resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^14.18.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -614,20 +614,20 @@ packages:
|
|||||||
'@babel/core': 7.20.2
|
'@babel/core': 7.20.2
|
||||||
'@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2
|
'@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2
|
||||||
'@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.2
|
'@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.2
|
||||||
vite: 3.2.3_sjdpriiyqai3ghwmd5e3ldppum
|
vite: 3.2.4_sjdpriiyqai3ghwmd5e3ldppum
|
||||||
vue: 3.2.45
|
vue: 3.2.45
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@vitejs/plugin-vue/3.2.0_vite@3.2.3+vue@3.2.45:
|
/@vitejs/plugin-vue/3.2.0_vite@3.2.4+vue@3.2.45:
|
||||||
resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==}
|
resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^14.18.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
vite: ^3.0.0
|
vite: ^3.0.0
|
||||||
vue: ^3.2.25
|
vue: ^3.2.25
|
||||||
dependencies:
|
dependencies:
|
||||||
vite: 3.2.3_sjdpriiyqai3ghwmd5e3ldppum
|
vite: 3.2.4_sjdpriiyqai3ghwmd5e3ldppum
|
||||||
vue: 3.2.45
|
vue: 3.2.45
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@ -839,7 +839,7 @@ packages:
|
|||||||
array-tree-filter: 2.1.0
|
array-tree-filter: 2.1.0
|
||||||
async-validator: 4.2.5
|
async-validator: 4.2.5
|
||||||
dayjs: 1.11.6
|
dayjs: 1.11.6
|
||||||
dom-align: 1.12.3
|
dom-align: 1.12.4
|
||||||
dom-scroll-into-view: 2.0.1
|
dom-scroll-into-view: 2.0.1
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
lodash-es: 4.17.21
|
lodash-es: 4.17.21
|
||||||
@ -1214,8 +1214,8 @@ packages:
|
|||||||
is-what: 3.14.1
|
is-what: 3.14.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/core-js/3.26.0:
|
/core-js/3.26.1:
|
||||||
resolution: {integrity: sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==}
|
resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==}
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
|
||||||
/core-util-is/1.0.3:
|
/core-util-is/1.0.3:
|
||||||
@ -1305,8 +1305,8 @@ packages:
|
|||||||
engines: {node: '>=0.3.1'}
|
engines: {node: '>=0.3.1'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/dom-align/1.12.3:
|
/dom-align/1.12.4:
|
||||||
resolution: {integrity: sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==}
|
resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/dom-scroll-into-view/2.0.1:
|
/dom-scroll-into-view/2.0.1:
|
||||||
@ -1372,8 +1372,8 @@ packages:
|
|||||||
is-arrayish: 0.2.1
|
is-arrayish: 0.2.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/esbuild-android-64/0.15.13:
|
/esbuild-android-64/0.15.14:
|
||||||
resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==}
|
resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [android]
|
os: [android]
|
||||||
@ -1381,8 +1381,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-android-arm64/0.15.13:
|
/esbuild-android-arm64/0.15.14:
|
||||||
resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==}
|
resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
@ -1390,8 +1390,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-darwin-64/0.15.13:
|
/esbuild-darwin-64/0.15.14:
|
||||||
resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==}
|
resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
@ -1399,8 +1399,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-darwin-arm64/0.15.13:
|
/esbuild-darwin-arm64/0.15.14:
|
||||||
resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==}
|
resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
@ -1408,8 +1408,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-freebsd-64/0.15.13:
|
/esbuild-freebsd-64/0.15.14:
|
||||||
resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==}
|
resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
@ -1417,8 +1417,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-freebsd-arm64/0.15.13:
|
/esbuild-freebsd-arm64/0.15.14:
|
||||||
resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==}
|
resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
@ -1426,8 +1426,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-32/0.15.13:
|
/esbuild-linux-32/0.15.14:
|
||||||
resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==}
|
resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1435,8 +1435,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-64/0.15.13:
|
/esbuild-linux-64/0.15.14:
|
||||||
resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==}
|
resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1444,8 +1444,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-arm/0.15.13:
|
/esbuild-linux-arm/0.15.14:
|
||||||
resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==}
|
resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1453,8 +1453,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-arm64/0.15.13:
|
/esbuild-linux-arm64/0.15.14:
|
||||||
resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==}
|
resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1462,8 +1462,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-mips64le/0.15.13:
|
/esbuild-linux-mips64le/0.15.14:
|
||||||
resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==}
|
resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [mips64el]
|
cpu: [mips64el]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1471,8 +1471,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-ppc64le/0.15.13:
|
/esbuild-linux-ppc64le/0.15.14:
|
||||||
resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==}
|
resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1480,8 +1480,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-riscv64/0.15.13:
|
/esbuild-linux-riscv64/0.15.14:
|
||||||
resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==}
|
resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1489,8 +1489,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-linux-s390x/0.15.13:
|
/esbuild-linux-s390x/0.15.14:
|
||||||
resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==}
|
resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -1498,8 +1498,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-netbsd-64/0.15.13:
|
/esbuild-netbsd-64/0.15.14:
|
||||||
resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==}
|
resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [netbsd]
|
os: [netbsd]
|
||||||
@ -1507,8 +1507,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-openbsd-64/0.15.13:
|
/esbuild-openbsd-64/0.15.14:
|
||||||
resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==}
|
resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [openbsd]
|
os: [openbsd]
|
||||||
@ -1516,8 +1516,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-sunos-64/0.15.13:
|
/esbuild-sunos-64/0.15.14:
|
||||||
resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==}
|
resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [sunos]
|
os: [sunos]
|
||||||
@ -1525,8 +1525,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-windows-32/0.15.13:
|
/esbuild-windows-32/0.15.14:
|
||||||
resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==}
|
resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -1534,8 +1534,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-windows-64/0.15.13:
|
/esbuild-windows-64/0.15.14:
|
||||||
resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==}
|
resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -1543,8 +1543,8 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild-windows-arm64/0.15.13:
|
/esbuild-windows-arm64/0.15.14:
|
||||||
resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==}
|
resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -1552,34 +1552,34 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/esbuild/0.15.13:
|
/esbuild/0.15.14:
|
||||||
resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==}
|
resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@esbuild/android-arm': 0.15.13
|
'@esbuild/android-arm': 0.15.14
|
||||||
'@esbuild/linux-loong64': 0.15.13
|
'@esbuild/linux-loong64': 0.15.14
|
||||||
esbuild-android-64: 0.15.13
|
esbuild-android-64: 0.15.14
|
||||||
esbuild-android-arm64: 0.15.13
|
esbuild-android-arm64: 0.15.14
|
||||||
esbuild-darwin-64: 0.15.13
|
esbuild-darwin-64: 0.15.14
|
||||||
esbuild-darwin-arm64: 0.15.13
|
esbuild-darwin-arm64: 0.15.14
|
||||||
esbuild-freebsd-64: 0.15.13
|
esbuild-freebsd-64: 0.15.14
|
||||||
esbuild-freebsd-arm64: 0.15.13
|
esbuild-freebsd-arm64: 0.15.14
|
||||||
esbuild-linux-32: 0.15.13
|
esbuild-linux-32: 0.15.14
|
||||||
esbuild-linux-64: 0.15.13
|
esbuild-linux-64: 0.15.14
|
||||||
esbuild-linux-arm: 0.15.13
|
esbuild-linux-arm: 0.15.14
|
||||||
esbuild-linux-arm64: 0.15.13
|
esbuild-linux-arm64: 0.15.14
|
||||||
esbuild-linux-mips64le: 0.15.13
|
esbuild-linux-mips64le: 0.15.14
|
||||||
esbuild-linux-ppc64le: 0.15.13
|
esbuild-linux-ppc64le: 0.15.14
|
||||||
esbuild-linux-riscv64: 0.15.13
|
esbuild-linux-riscv64: 0.15.14
|
||||||
esbuild-linux-s390x: 0.15.13
|
esbuild-linux-s390x: 0.15.14
|
||||||
esbuild-netbsd-64: 0.15.13
|
esbuild-netbsd-64: 0.15.14
|
||||||
esbuild-openbsd-64: 0.15.13
|
esbuild-openbsd-64: 0.15.14
|
||||||
esbuild-sunos-64: 0.15.13
|
esbuild-sunos-64: 0.15.14
|
||||||
esbuild-windows-32: 0.15.13
|
esbuild-windows-32: 0.15.14
|
||||||
esbuild-windows-64: 0.15.13
|
esbuild-windows-64: 0.15.14
|
||||||
esbuild-windows-arm64: 0.15.13
|
esbuild-windows-arm64: 0.15.14
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/escalade/3.1.1:
|
/escalade/3.1.1:
|
||||||
@ -2195,7 +2195,7 @@ packages:
|
|||||||
image-size: 0.5.5
|
image-size: 0.5.5
|
||||||
make-dir: 2.1.0
|
make-dir: 2.1.0
|
||||||
mime: 1.6.0
|
mime: 1.6.0
|
||||||
needle: 3.1.0
|
needle: 3.2.0
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -2485,8 +2485,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-E9JaHcxh3ere8/BEZHAcnuD10RluTSPyTToBvoFWS9/7DcCx6gyKjbn7M7Bx7E1veCxCuY1iO6h4+gdAf1j73Q==}
|
resolution: {integrity: sha512-E9JaHcxh3ere8/BEZHAcnuD10RluTSPyTToBvoFWS9/7DcCx6gyKjbn7M7Bx7E1veCxCuY1iO6h4+gdAf1j73Q==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/needle/3.1.0:
|
/needle/3.2.0:
|
||||||
resolution: {integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==}
|
resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==}
|
||||||
engines: {node: '>= 4.4.x'}
|
engines: {node: '>= 4.4.x'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
@ -2802,8 +2802,8 @@ packages:
|
|||||||
strip-indent: 4.0.0
|
strip-indent: 4.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/regenerator-runtime/0.13.10:
|
/regenerator-runtime/0.13.11:
|
||||||
resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==}
|
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
|
||||||
|
|
||||||
/remove-bom-buffer/3.0.0:
|
/remove-bom-buffer/3.0.0:
|
||||||
resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
|
resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==}
|
||||||
@ -3187,7 +3187,7 @@ packages:
|
|||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/ts-node/10.9.1_cbe7ovvae6zqfnmtgctpgpys54:
|
/ts-node/10.9.1_wup25etrarvlqkprac7h35hj7u:
|
||||||
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -3213,7 +3213,7 @@ packages:
|
|||||||
create-require: 1.1.1
|
create-require: 1.1.1
|
||||||
diff: 4.0.2
|
diff: 4.0.2
|
||||||
make-error: 1.3.6
|
make-error: 1.3.6
|
||||||
typescript: 4.8.4
|
typescript: 4.9.3
|
||||||
v8-compile-cache-lib: 3.0.1
|
v8-compile-cache-lib: 3.0.1
|
||||||
yn: 3.1.1
|
yn: 3.1.1
|
||||||
dev: true
|
dev: true
|
||||||
@ -3246,8 +3246,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
|
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typescript/4.8.4:
|
/typescript/4.9.3:
|
||||||
resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
|
resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
|
||||||
engines: {node: '>=4.2.0'}
|
engines: {node: '>=4.2.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
@ -3411,8 +3411,8 @@ packages:
|
|||||||
replace-ext: 1.0.1
|
replace-ext: 1.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vite/3.2.3_sjdpriiyqai3ghwmd5e3ldppum:
|
/vite/3.2.4_sjdpriiyqai3ghwmd5e3ldppum:
|
||||||
resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==}
|
resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^14.18.0 || >=16.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -3437,7 +3437,7 @@ packages:
|
|||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 18.11.9
|
'@types/node': 18.11.9
|
||||||
esbuild: 0.15.13
|
esbuild: 0.15.14
|
||||||
less: 4.1.3
|
less: 4.1.3
|
||||||
postcss: 8.4.19
|
postcss: 8.4.19
|
||||||
resolve: 1.22.1
|
resolve: 1.22.1
|
||||||
@ -3454,7 +3454,7 @@ packages:
|
|||||||
he: 1.2.0
|
he: 1.2.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vue-tsc/1.0.9_typescript@4.8.4:
|
/vue-tsc/1.0.9_typescript@4.9.3:
|
||||||
resolution: {integrity: sha512-vRmHD1K6DmBymNhoHjQy/aYKTRQNLGOu2/ESasChG9Vy113K6CdP0NlhR0bzgFJfv2eFB9Ez/9L5kIciUajBxQ==}
|
resolution: {integrity: sha512-vRmHD1K6DmBymNhoHjQy/aYKTRQNLGOu2/ESasChG9Vy113K6CdP0NlhR0bzgFJfv2eFB9Ez/9L5kIciUajBxQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -3462,7 +3462,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@volar/vue-language-core': 1.0.9
|
'@volar/vue-language-core': 1.0.9
|
||||||
'@volar/vue-typescript': 1.0.9
|
'@volar/vue-typescript': 1.0.9
|
||||||
typescript: 4.8.4
|
typescript: 4.9.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vue-types/3.0.2_vue@3.2.45:
|
/vue-types/3.0.2_vue@3.2.45:
|
||||||
|
@ -307,7 +307,7 @@ actions.prototype._sys_onkeyUp_replay = function (e) {
|
|||||||
// T
|
// T
|
||||||
core.control._replay_toolbox();
|
core.control._replay_toolbox();
|
||||||
else if (e.keyCode == 81)
|
else if (e.keyCode == 81)
|
||||||
// Q
|
// Q_sys_onkeyUp
|
||||||
core.control._replay_equipbox();
|
core.control._replay_equipbox();
|
||||||
else if (e.keyCode == 66)
|
else if (e.keyCode == 66)
|
||||||
// B
|
// B
|
||||||
@ -490,9 +490,6 @@ actions.prototype._sys_keyUp_lockControl = function (keyCode, altKey) {
|
|||||||
case 'selectShop':
|
case 'selectShop':
|
||||||
this._keyUpQuickShop(keyCode);
|
this._keyUpQuickShop(keyCode);
|
||||||
break;
|
break;
|
||||||
case 'toolbox':
|
|
||||||
this._keyUpToolbox(keyCode);
|
|
||||||
break;
|
|
||||||
case 'equipbox':
|
case 'equipbox':
|
||||||
this._keyUpEquipbox(keyCode, altKey);
|
this._keyUpEquipbox(keyCode, altKey);
|
||||||
break;
|
break;
|
||||||
@ -2016,33 +2013,6 @@ actions.prototype._keyDownToolbox = function (keycode) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
////// 工具栏界面时,放开某个键的操作 //////
|
|
||||||
actions.prototype._keyUpToolbox = function (keycode) {
|
|
||||||
if (keycode == 81) {
|
|
||||||
core.playSound('确定');
|
|
||||||
core.ui.closePanel();
|
|
||||||
if (core.isReplaying()) core.control._replay_equipbox();
|
|
||||||
else core.openEquipbox();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (keycode == 84 || keycode == 27 || keycode == 88) {
|
|
||||||
core.playSound('取消');
|
|
||||||
core.ui.closePanel();
|
|
||||||
var last = core.status.route[core.status.route.length - 1] || '';
|
|
||||||
if (last.startsWith('equip:') || last.startsWith('unEquip:')) {
|
|
||||||
core.status.route.push('no');
|
|
||||||
}
|
|
||||||
core.checkAutoEvents();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (core.status.event.data == null) return;
|
|
||||||
|
|
||||||
if (keycode == 13 || keycode == 32 || keycode == 67) {
|
|
||||||
this._clickToolboxIndex(core.status.event.selection);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
////// 装备栏界面时的点击操作 //////
|
////// 装备栏界面时的点击操作 //////
|
||||||
actions.prototype._clickEquipbox = function (x, y, px, py) {
|
actions.prototype._clickEquipbox = function (x, y, px, py) {
|
||||||
if (x >= this.LAST - 2 && y == 0) {
|
if (x >= this.LAST - 2 && y == 0) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -3223,242 +3223,6 @@ ui.prototype._drawCursor = function () {
|
|||||||
////// 绘制怪物手册 //////
|
////// 绘制怪物手册 //////
|
||||||
ui.prototype.drawBook = function (index) {};
|
ui.prototype.drawBook = function (index) {};
|
||||||
|
|
||||||
////// 绘制怪物属性的详细信息 //////
|
|
||||||
ui.prototype._drawBookDetail = function (index) {
|
|
||||||
var info = this._drawBookDetail_getInfo(index),
|
|
||||||
enemy = info[0];
|
|
||||||
if (!enemy) return;
|
|
||||||
var content = info[1].join('\n');
|
|
||||||
core.status.event.id = 'book-detail';
|
|
||||||
core.animateFrame.tip = null;
|
|
||||||
core.clearMap('data');
|
|
||||||
|
|
||||||
var left = 10,
|
|
||||||
width = core._PX_ - 2 * left,
|
|
||||||
right = left + width;
|
|
||||||
var content_left = left + 25,
|
|
||||||
validWidth = right - content_left - 13;
|
|
||||||
var height = Math.max(
|
|
||||||
this.getTextContentHeight(content, {
|
|
||||||
fontSize: 16,
|
|
||||||
lineHeight: 24,
|
|
||||||
maxWidth: validWidth
|
|
||||||
}) + 58,
|
|
||||||
80
|
|
||||||
),
|
|
||||||
top = (core._PY_ - height) / 2,
|
|
||||||
bottom = top + height;
|
|
||||||
|
|
||||||
core.setAlpha('data', 0.9);
|
|
||||||
core.fillRect('data', left, top, width, height, '#000000');
|
|
||||||
core.setAlpha('data', 1);
|
|
||||||
core.strokeRect(
|
|
||||||
'data',
|
|
||||||
left - 1,
|
|
||||||
top - 1,
|
|
||||||
width + 1,
|
|
||||||
height + 1,
|
|
||||||
core.arrayToRGBA(core.status.globalAttribute.borderColor),
|
|
||||||
2
|
|
||||||
);
|
|
||||||
core.playSound('确定');
|
|
||||||
this._drawBookDetail_drawContent(enemy, content, {
|
|
||||||
top: top,
|
|
||||||
content_left: content_left,
|
|
||||||
bottom: bottom,
|
|
||||||
validWidth: validWidth
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_getInfo = function (index) {
|
|
||||||
var floorId =
|
|
||||||
core.floorIds[(core.status.event.ui || {}).index] ||
|
|
||||||
core.status.floorId;
|
|
||||||
// 清除浏览地图时的光环缓存
|
|
||||||
if (floorId != core.status.floorId && core.status.checkBlock) {
|
|
||||||
core.status.checkBlock.cache = {};
|
|
||||||
}
|
|
||||||
var enemys = core.enemys.getCurrentEnemys(floorId);
|
|
||||||
if (enemys.length == 0) return [];
|
|
||||||
index = core.clamp(index, 0, enemys.length - 1);
|
|
||||||
var enemy = enemys[index],
|
|
||||||
enemyId = enemy.id;
|
|
||||||
var texts = core.enemys.getSpecialHint(enemyId);
|
|
||||||
if (texts.length == 0) texts.push('该怪物无特殊属性。');
|
|
||||||
if (enemy.description) texts.push(enemy.description + '\r');
|
|
||||||
texts.push('');
|
|
||||||
this._drawBookDetail_getTexts(enemy, floorId, texts);
|
|
||||||
return [enemy, texts];
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_getTexts = function (enemy, floorId, texts) {
|
|
||||||
// --- 原始数值
|
|
||||||
this._drawBookDetail_origin(enemy, texts);
|
|
||||||
// --- 模仿临界计算器
|
|
||||||
this._drawBookDetail_mofang(enemy, texts);
|
|
||||||
// --- 吸血怪最低生命值
|
|
||||||
this._drawBookDetail_vampire(enemy, floorId, texts);
|
|
||||||
// --- 仇恨伤害
|
|
||||||
this._drawBookDetail_hatred(enemy, texts);
|
|
||||||
// --- 战斗回合数,临界表
|
|
||||||
this._drawBookDetail_turnAndCriticals(enemy, floorId, texts);
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_origin = function (enemy, texts) {
|
|
||||||
// 怪物数值和原始值不一样时,在详细信息页显示原始数值
|
|
||||||
var originEnemy = core.enemys._getCurrentEnemys_getEnemy(enemy.id);
|
|
||||||
var content = [];
|
|
||||||
if (enemy.locs != null && enemy.locs.length >= 0) {
|
|
||||||
texts.push(
|
|
||||||
'\r[#FF6A6A]\\d怪物坐标:\\d\r[]' + JSON.stringify(enemy.locs)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
['hp', 'atk', 'def', 'point', 'money', 'exp'].forEach(function (one) {
|
|
||||||
if (enemy[one] == null || originEnemy[one] == null) return;
|
|
||||||
if (enemy[one] != originEnemy[one]) {
|
|
||||||
content.push(core.getStatusLabel(one) + ' ' + originEnemy[one]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (content.length > 0) {
|
|
||||||
texts.push('\r[#FF6A6A]\\d原始数值:\\d\r[]' + content.join(';'));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_mofang = function (enemy, texts) {
|
|
||||||
// 模仿临界计算器
|
|
||||||
if (core.enemys.hasSpecial(enemy.special, 10)) {
|
|
||||||
var hp = enemy.hp;
|
|
||||||
var delta = core.status.hero.atk - core.status.hero.def;
|
|
||||||
if (delta < hp && hp <= 10000 && hp > 0) {
|
|
||||||
texts.push(
|
|
||||||
'\r[#FF6A6A]\\d模仿临界计算器:\\d\r[](当前攻防差' +
|
|
||||||
core.formatBigNumber(delta) +
|
|
||||||
')'
|
|
||||||
);
|
|
||||||
var u = [];
|
|
||||||
this._drawBookDetail_mofang_getArray(hp).forEach(function (t) {
|
|
||||||
if (u.length < 20) u.push(t);
|
|
||||||
else if (Math.abs(t[0] - delta) < Math.abs(u[0][0] - delta)) {
|
|
||||||
u.shift();
|
|
||||||
u.push(t);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
texts.push(
|
|
||||||
JSON.stringify(
|
|
||||||
u.map(function (v) {
|
|
||||||
return core.formatBigNumber(v[0]) + ':' + v[1];
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_mofang_getArray = function (hp) {
|
|
||||||
var arr = [];
|
|
||||||
var last = 0,
|
|
||||||
start = 0;
|
|
||||||
for (var i = 1; i < hp; i++) {
|
|
||||||
var now = parseInt((hp - 1) / i);
|
|
||||||
if (now != last) {
|
|
||||||
if (last != 0) {
|
|
||||||
arr.push([start, last + 'x']);
|
|
||||||
}
|
|
||||||
last = now;
|
|
||||||
start = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (last != 0) {
|
|
||||||
arr.push([start, '1x']);
|
|
||||||
arr.push([hp, '0']);
|
|
||||||
}
|
|
||||||
return arr;
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_vampire = function (enemy, floorId, texts) {
|
|
||||||
if (core.enemys.hasSpecial(enemy.special, 11)) {
|
|
||||||
var damage = core.getDamage(enemy.id);
|
|
||||||
if (damage != null) {
|
|
||||||
// 二分HP
|
|
||||||
var start = 1,
|
|
||||||
end = 100 * damage;
|
|
||||||
var nowHp = core.status.hero.hp;
|
|
||||||
while (start < end) {
|
|
||||||
var mid = Math.floor((start + end) / 2);
|
|
||||||
core.status.hero.hp = mid;
|
|
||||||
if (core.canBattle(enemy.id, enemy.x, enemy.y, floorId))
|
|
||||||
end = mid;
|
|
||||||
else start = mid + 1;
|
|
||||||
}
|
|
||||||
core.status.hero.hp = start;
|
|
||||||
if (core.canBattle(enemy.id)) {
|
|
||||||
texts.push(
|
|
||||||
'\r[#FF6A6A]\\d打死该怪物最低需要生命值:\\d\r[]' +
|
|
||||||
core.formatBigNumber(start)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
core.status.hero.hp = nowHp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_hatred = function (enemy, texts) {
|
|
||||||
if (core.enemys.hasSpecial(enemy.special, 17)) {
|
|
||||||
texts.push(
|
|
||||||
'\r[#FF6A6A]\\d当前仇恨伤害值:\\d\r[]' + core.getFlag('hatred', 0)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_turnAndCriticals = function (
|
|
||||||
enemy,
|
|
||||||
floorId,
|
|
||||||
texts
|
|
||||||
) {
|
|
||||||
var damageInfo = core.getDamageInfo(
|
|
||||||
enemy.id,
|
|
||||||
null,
|
|
||||||
enemy.x,
|
|
||||||
enemy.y,
|
|
||||||
floorId
|
|
||||||
);
|
|
||||||
texts.push(
|
|
||||||
'\r[#FF6A6A]\\d战斗回合数:\\d\r[]' + ((damageInfo || {}).turn || 0)
|
|
||||||
);
|
|
||||||
// 临界表
|
|
||||||
var criticals = core.enemys
|
|
||||||
.nextCriticals(enemy.id, 8, enemy.x, enemy.y, floorId)
|
|
||||||
.map(function (v) {
|
|
||||||
return (
|
|
||||||
core.formatBigNumber(v[0]) + ':' + core.formatBigNumber(v[1])
|
|
||||||
);
|
|
||||||
});
|
|
||||||
while (criticals[0] == '0:0') criticals.shift();
|
|
||||||
texts.push('\r[#FF6A6A]\\d临界表:\\d\r[]' + JSON.stringify(criticals));
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawBookDetail_drawContent = function (enemy, content, pos) {
|
|
||||||
// 名称
|
|
||||||
core.setTextAlign('data', 'left');
|
|
||||||
core.fillText(
|
|
||||||
'data',
|
|
||||||
enemy.name,
|
|
||||||
pos.content_left,
|
|
||||||
pos.top + 30,
|
|
||||||
core.status.globalAttribute.selectColor,
|
|
||||||
this._buildFont(22, true)
|
|
||||||
);
|
|
||||||
var content_top = pos.top + 44;
|
|
||||||
|
|
||||||
this.drawTextContent('data', content, {
|
|
||||||
left: pos.content_left,
|
|
||||||
top: content_top,
|
|
||||||
maxWidth: pos.validWidth,
|
|
||||||
fontSize: 16,
|
|
||||||
lineHeight: 24
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
////// 绘制楼层传送器 //////
|
////// 绘制楼层传送器 //////
|
||||||
ui.prototype.drawFly = function (page) {
|
ui.prototype.drawFly = function (page) {
|
||||||
core.status.event.data = page;
|
core.status.event.data = page;
|
||||||
@ -3762,236 +3526,7 @@ ui.prototype._drawViewMaps_buildData = function (index, x, y) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
////// 绘制道具栏 //////
|
////// 绘制道具栏 //////
|
||||||
ui.prototype._drawToolbox = function (index) {
|
ui.prototype._drawToolbox = function (index) {};
|
||||||
var info = this._drawToolbox_getInfo(index);
|
|
||||||
this._drawToolbox_drawBackground();
|
|
||||||
|
|
||||||
// 绘制线
|
|
||||||
core.setAlpha('ui', 1);
|
|
||||||
core.setStrokeStyle('ui', '#DDDDDD');
|
|
||||||
core.canvas.ui.lineWidth = 2;
|
|
||||||
core.canvas.ui.strokeWidth = 2;
|
|
||||||
core.setTextAlign('ui', 'right');
|
|
||||||
var line1 = core._PY_ - 306;
|
|
||||||
this._drawToolbox_drawLine(line1, '消耗道具');
|
|
||||||
var line2 = core._PY_ - 146;
|
|
||||||
this._drawToolbox_drawLine(line2, '永久道具');
|
|
||||||
|
|
||||||
this._drawToolbox_drawDescription(info, line1);
|
|
||||||
|
|
||||||
this._drawToolbox_drawContent(
|
|
||||||
info,
|
|
||||||
line1,
|
|
||||||
info.tools,
|
|
||||||
info.toolsPage,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
this.drawPagination(info.toolsPage, info.toolsTotalPage, core._HEIGHT_ - 6);
|
|
||||||
this._drawToolbox_drawContent(
|
|
||||||
info,
|
|
||||||
line2,
|
|
||||||
info.constants,
|
|
||||||
info.constantsPage
|
|
||||||
);
|
|
||||||
this.drawPagination(info.constantsPage, info.constantsTotalPage);
|
|
||||||
|
|
||||||
core.setTextAlign('ui', 'center');
|
|
||||||
core.fillText(
|
|
||||||
'ui',
|
|
||||||
'[装备栏]',
|
|
||||||
core._PX_ - 46,
|
|
||||||
25,
|
|
||||||
'#DDDDDD',
|
|
||||||
this._buildFont(15, true)
|
|
||||||
);
|
|
||||||
core.fillText('ui', '返回游戏', core._PX_ - 46, core._PY_ - 13);
|
|
||||||
};
|
|
||||||
|
|
||||||
////// 获得所有应该在道具栏显示的某个类型道具 //////
|
|
||||||
ui.prototype.getToolboxItems = function (cls) {
|
|
||||||
if (this.uidata.getToolboxItems) {
|
|
||||||
return this.uidata.getToolboxItems(cls);
|
|
||||||
}
|
|
||||||
return Object.keys(core.status.hero.items[cls] || {})
|
|
||||||
.filter(function (id) {
|
|
||||||
return !core.material.items[id].hideInToolbox;
|
|
||||||
})
|
|
||||||
.sort();
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawToolbox_getInfo = function (index) {
|
|
||||||
// 设定eventdata
|
|
||||||
if (!core.status.event.data || core.status.event.data.toolsPage == null)
|
|
||||||
core.status.event.data = {
|
|
||||||
toolsPage: 1,
|
|
||||||
constantsPage: 1,
|
|
||||||
selectId: null
|
|
||||||
};
|
|
||||||
// 获取物品列表
|
|
||||||
var tools = core.getToolboxItems('tools'),
|
|
||||||
constants = core.getToolboxItems('constants');
|
|
||||||
// 处理页数
|
|
||||||
var n = core._WIDTH_ - 1;
|
|
||||||
var toolsPage = core.status.event.data.toolsPage;
|
|
||||||
var constantsPage = core.status.event.data.constantsPage;
|
|
||||||
var toolsTotalPage = Math.ceil(tools.length / n);
|
|
||||||
var constantsTotalPage = Math.ceil(constants.length / n);
|
|
||||||
// 处理index
|
|
||||||
if (index == null)
|
|
||||||
index = tools.length == 0 && constants.length > 0 ? n : 0;
|
|
||||||
core.status.event.selection = index;
|
|
||||||
// 确认选择对象
|
|
||||||
var select, selectId;
|
|
||||||
if (index < n) {
|
|
||||||
select = index + (toolsPage - 1) * n;
|
|
||||||
if (select >= tools.length) select = Math.max(0, tools.length - 1);
|
|
||||||
selectId = tools[select];
|
|
||||||
} else {
|
|
||||||
select = (index % n) + (constantsPage - 1) * n;
|
|
||||||
if (select >= constants.length)
|
|
||||||
select = Math.max(0, constants.length - 1);
|
|
||||||
selectId = constants[select];
|
|
||||||
}
|
|
||||||
if (!core.hasItem(selectId)) selectId = null;
|
|
||||||
core.status.event.data.selectId = selectId;
|
|
||||||
return {
|
|
||||||
index: index,
|
|
||||||
tools: tools,
|
|
||||||
constants: constants,
|
|
||||||
toolsPage: toolsPage,
|
|
||||||
constantsPage: constantsPage,
|
|
||||||
toolsTotalPage: toolsTotalPage,
|
|
||||||
constantsTotalPage: constantsTotalPage,
|
|
||||||
selectId: selectId
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawToolbox_drawBackground = function () {
|
|
||||||
// 绘制
|
|
||||||
core.clearMap('ui');
|
|
||||||
core.setAlpha('ui', 0.85);
|
|
||||||
core.fillRect('ui', 0, 0, core._PX_, core._PY_, '#000000');
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawToolbox_drawLine = function (yoffset, text) {
|
|
||||||
core.setFillStyle('ui', '#DDDDDD');
|
|
||||||
core.canvas.ui.beginPath();
|
|
||||||
core.canvas.ui.moveTo(0, yoffset);
|
|
||||||
core.canvas.ui.lineTo(core._PX_, yoffset);
|
|
||||||
core.canvas.ui.stroke();
|
|
||||||
core.canvas.ui.beginPath();
|
|
||||||
core.canvas.ui.moveTo(core._PX_, yoffset - 1);
|
|
||||||
core.canvas.ui.lineTo(core._PX_, yoffset - 25);
|
|
||||||
core.canvas.ui.lineTo(core._PX_ - 72, yoffset - 25);
|
|
||||||
core.canvas.ui.lineTo(core._PX_ - 102, yoffset - 1);
|
|
||||||
core.canvas.ui.fill();
|
|
||||||
core.fillText(
|
|
||||||
'ui',
|
|
||||||
text,
|
|
||||||
core._PX_ - 5,
|
|
||||||
yoffset - 6,
|
|
||||||
'#333333',
|
|
||||||
this._buildFont(16, true)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawToolbox_drawDescription = function (info, max_height) {
|
|
||||||
core.setTextAlign('ui', 'left');
|
|
||||||
if (!info.selectId) return;
|
|
||||||
var item = core.material.items[info.selectId];
|
|
||||||
var name = item.name || '未知道具';
|
|
||||||
try {
|
|
||||||
name = core.replaceText(name);
|
|
||||||
} catch (e) {}
|
|
||||||
core.fillText(
|
|
||||||
'ui',
|
|
||||||
name,
|
|
||||||
10,
|
|
||||||
32,
|
|
||||||
core.status.globalAttribute.selectColor,
|
|
||||||
this._buildFont(20, true)
|
|
||||||
);
|
|
||||||
var text = item.text || '该道具暂无描述。';
|
|
||||||
try {
|
|
||||||
text = core.replaceText(text);
|
|
||||||
} catch (e) {}
|
|
||||||
|
|
||||||
var height = null;
|
|
||||||
for (var fontSize = 17; fontSize >= 9; fontSize -= 2) {
|
|
||||||
var config = {
|
|
||||||
left: 10,
|
|
||||||
top: 46,
|
|
||||||
fontSize: fontSize,
|
|
||||||
maxWidth: core._PX_ - 15,
|
|
||||||
bold: false,
|
|
||||||
color: 'white'
|
|
||||||
};
|
|
||||||
height = 42 + core.getTextContentHeight(text, config);
|
|
||||||
if (height < max_height || fontSize == 9) {
|
|
||||||
core.drawTextContent('ui', text, config);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (height < max_height - 33) {
|
|
||||||
core.fillText(
|
|
||||||
'ui',
|
|
||||||
'<继续点击该道具即可进行使用>',
|
|
||||||
10,
|
|
||||||
max_height - 15,
|
|
||||||
'#CCCCCC',
|
|
||||||
this._buildFont(14, false)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ui.prototype._drawToolbox_drawContent = function (
|
|
||||||
info,
|
|
||||||
line,
|
|
||||||
items,
|
|
||||||
page,
|
|
||||||
drawCount
|
|
||||||
) {
|
|
||||||
var n = core._HALF_WIDTH_;
|
|
||||||
core.setTextAlign('ui', 'right');
|
|
||||||
for (var i = 0; i < core._WIDTH_ - 1; i++) {
|
|
||||||
var item = items[(core._WIDTH_ - 1) * (page - 1) + i];
|
|
||||||
if (!item) continue;
|
|
||||||
var yoffset = line + 54 * Math.floor(i / n) + 19;
|
|
||||||
var icon = core.material.icons.items[item],
|
|
||||||
image = core.material.images.items;
|
|
||||||
core.drawImage(
|
|
||||||
'ui',
|
|
||||||
image,
|
|
||||||
0,
|
|
||||||
32 * icon,
|
|
||||||
32,
|
|
||||||
32,
|
|
||||||
64 * (i % n) + 21,
|
|
||||||
yoffset,
|
|
||||||
32,
|
|
||||||
32
|
|
||||||
);
|
|
||||||
if (drawCount)
|
|
||||||
core.fillText(
|
|
||||||
'ui',
|
|
||||||
core.itemCount(item),
|
|
||||||
64 * (i % n) + 56,
|
|
||||||
yoffset + 33,
|
|
||||||
'#FFFFFF',
|
|
||||||
this._buildFont(14, true)
|
|
||||||
);
|
|
||||||
if (info.selectId == item)
|
|
||||||
core.strokeRoundRect(
|
|
||||||
'ui',
|
|
||||||
64 * (i % n) + 17,
|
|
||||||
yoffset - 4,
|
|
||||||
40,
|
|
||||||
40,
|
|
||||||
6,
|
|
||||||
core.status.globalAttribute.selectColor
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
////// 绘制装备界面 //////
|
////// 绘制装备界面 //////
|
||||||
ui.prototype._drawEquipbox = function (index) {
|
ui.prototype._drawEquipbox = function (index) {
|
||||||
|
@ -79,7 +79,7 @@ main.floors.MT1=
|
|||||||
[20042, 0, 0,201, 0, 0,141, 0,141,202, 17, 0, 0, 0,20040],
|
[20042, 0, 0,201, 0, 0,141, 0,141,202, 17, 0, 0, 0,20040],
|
||||||
[20042,202, 17, 17, 0, 0,205, 31, 0, 28, 17, 28, 0, 32,20040],
|
[20042,202, 17, 17, 0, 0,205, 31, 0, 28, 17, 28, 0, 32,20040],
|
||||||
[20042, 0, 27, 17, 31,141,141,141,141,201, 17, 17, 17, 17,20040],
|
[20042, 0, 27, 17, 31,141,141,141,141,201, 17, 17, 17, 17,20040],
|
||||||
[20042, 32, 0, 17, 0,201, 0, 0,201, 31,202, 0, 32, 0,20040],
|
[20042, 32, 0, 17, 0,201, 47, 0,201, 31,202, 0, 32, 0,20040],
|
||||||
[20036,20033,20033,20033,20033,20033,20034, 93,20032,20033,20033,20033,20033,20033,20035]
|
[20036,20033,20033,20033,20033,20033,20034, 93,20032,20033,20033,20033,20033,20033,20035]
|
||||||
],
|
],
|
||||||
"bgmap": [
|
"bgmap": [
|
||||||
|
@ -1128,6 +1128,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
|
|||||||
// altKey:Alt键是否被按下,为true代表同时按下了Alt键
|
// altKey:Alt键是否被按下,为true代表同时按下了Alt键
|
||||||
// 可以在这里任意增加或编辑每个按键的行为
|
// 可以在这里任意增加或编辑每个按键的行为
|
||||||
|
|
||||||
|
if (core.status.lockControl) return;
|
||||||
|
|
||||||
// 如果处于正在行走状态,则不处理
|
// 如果处于正在行走状态,则不处理
|
||||||
if (core.isMoving()) return;
|
if (core.isMoving()) return;
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
|||||||
html, body {
|
html,
|
||||||
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -7,6 +8,15 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#game {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
#gameGroup {
|
#gameGroup {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
@ -80,7 +90,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#startTopHint {
|
#startTopHint {
|
||||||
color: #66CCFF;
|
color: #66ccff;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 5%;
|
left: 5%;
|
||||||
@ -89,12 +99,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#startBackground {
|
#startBackground {
|
||||||
position:absolute;
|
position: absolute;
|
||||||
top:50%;
|
top: 50%;
|
||||||
left:50%;
|
left: 50%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: auto;
|
width: auto;
|
||||||
transform:translate(-50%,-50%);
|
transform: translate(-50%, -50%);
|
||||||
z-index: 260;
|
z-index: 260;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,11 +142,11 @@
|
|||||||
padding: 15px 25px;
|
padding: 15px 25px;
|
||||||
min-width: 20%;
|
min-width: 20%;
|
||||||
/* default value */
|
/* default value */
|
||||||
background-color: #32369F;
|
background-color: #32369f;
|
||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
border: #FFFFFF 2px solid;
|
border: #ffffff 2px solid;
|
||||||
caret-color: #FFD700;
|
caret-color: #ffd700;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,20 +217,20 @@
|
|||||||
left: 0;
|
left: 0;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
#statusBar .status{
|
#statusBar .status {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
display: block;
|
display: block;
|
||||||
float: left;
|
float: left;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.status img{
|
.status img {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
width: auto;
|
width: auto;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
max-height: 1.6em;
|
max-height: 1.6em;
|
||||||
}
|
}
|
||||||
#statusBar span{
|
#statusBar span {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
font: bold italic 1.1em Verdana;
|
font: bold italic 1.1em Verdana;
|
||||||
display: inline;
|
display: inline;
|
||||||
@ -245,7 +255,7 @@
|
|||||||
display: none;
|
display: none;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
#toolBar .tools{
|
#toolBar .tools {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: block;
|
display: block;
|
||||||
float: left;
|
float: left;
|
||||||
@ -257,13 +267,18 @@ p#hard {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: red;
|
color: red;
|
||||||
font: bold normal 1.1em "Arial Black";
|
font: bold normal 1.1em 'Arial Black';
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 0 6px 6px 0;
|
margin: 0 6px 6px 0;
|
||||||
word-break: keep-all;
|
word-break: keep-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
span#poison, span#weak, span#curse, span#pickaxe, span#bomb, span#fly {
|
span#poison,
|
||||||
|
span#weak,
|
||||||
|
span#curse,
|
||||||
|
span#pickaxe,
|
||||||
|
span#bomb,
|
||||||
|
span#fly {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
@ -346,8 +361,8 @@ p#name {
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
background: rgba(127,127,127,0.6);
|
background: rgba(127, 127, 127, 0.6);
|
||||||
z-index: 2000
|
z-index: 2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
#inputDialog {
|
#inputDialog {
|
||||||
@ -373,7 +388,7 @@ p#name {
|
|||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
padding: 5px 3px;
|
padding: 5px 3px;
|
||||||
border: 1px solid;
|
border: 1px solid;
|
||||||
background: #F0F0F0;
|
background: #f0f0f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#inputYes {
|
#inputYes {
|
||||||
@ -382,24 +397,37 @@ p#name {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#inputNo {
|
#inputNo {
|
||||||
float:right;
|
float: right;
|
||||||
margin-right: 10%;
|
margin-right: 10%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#_selector, ._uievent_selector {
|
#_selector,
|
||||||
|
._uievent_selector {
|
||||||
animation: selector 2s ease-in-out 0s infinite normal none running;
|
animation: selector 2s ease-in-out 0s infinite normal none running;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes selector {
|
@-webkit-keyframes selector {
|
||||||
0% { opacity: 0.95; }
|
0% {
|
||||||
50% { opacity: 0.55; }
|
opacity: 0.95;
|
||||||
100% { opacity: 0.95; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0.95;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes selector {
|
@keyframes selector {
|
||||||
0% { opacity: 0.95; }
|
0% {
|
||||||
50% { opacity: 0.55; }
|
opacity: 0.95;
|
||||||
100% { opacity: 0.95; }
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0.95;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#next {
|
#next {
|
||||||
@ -412,8 +440,8 @@ p#name {
|
|||||||
border-bottom-style: solid;
|
border-bottom-style: solid;
|
||||||
border-right-width: 4px;
|
border-right-width: 4px;
|
||||||
border-right-style: solid;
|
border-right-style: solid;
|
||||||
-webkit-animation: next .5s ease-in-out alternate infinite;
|
-webkit-animation: next 0.5s ease-in-out alternate infinite;
|
||||||
animation: next .5s ease-in-out alternate infinite;
|
animation: next 0.5s ease-in-out alternate infinite;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
@ -463,15 +491,27 @@ p#name {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes startImage {
|
@-webkit-keyframes startImage {
|
||||||
0% { opacity: 0; }
|
0% {
|
||||||
60% { opacity: 1; }
|
opacity: 0;
|
||||||
100% { opacity: 0; }
|
}
|
||||||
|
60% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes startImage {
|
@keyframes startImage {
|
||||||
0% { opacity: 0; }
|
0% {
|
||||||
60% { opacity: 1; }
|
opacity: 0;
|
||||||
100% { opacity: 0; }
|
}
|
||||||
|
60% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.startImageDivAnimation {
|
.startImageDivAnimation {
|
||||||
@ -480,13 +520,21 @@ p#name {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes startImageDivDisappear {
|
@-webkit-keyframes startImageDivDisappear {
|
||||||
0% { opacity: 1 }
|
0% {
|
||||||
100% { opacity: 0 }
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes startImageDivDisappear {
|
@keyframes startImageDivDisappear {
|
||||||
0% { opacity: 1 }
|
0% {
|
||||||
100% { opacity: 0 }
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ui-editor {
|
#ui-editor {
|
||||||
@ -499,4 +547,4 @@ p#name {
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: Fira Code;
|
font-family: Fira Code;
|
||||||
src: url(../src/fonts/FiraCode-Regular.ttf);
|
src: url(../src/fonts/FiraCode-Regular.ttf);
|
||||||
}
|
}
|
||||||
|
@ -1,56 +1,78 @@
|
|||||||
<template>
|
<template>
|
||||||
<canvas
|
<canvas
|
||||||
ref="canvas"
|
|
||||||
:width="width ?? 32"
|
:width="width ?? 32"
|
||||||
:height="height ?? 32"
|
:height="height ?? 32"
|
||||||
id="canvas"
|
:id="`box-animate-${id}`"
|
||||||
></canvas>
|
></canvas>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="tsx" setup>
|
<script lang="tsx" setup>
|
||||||
import { onMounted, onUnmounted, ref } from 'vue';
|
import { onMounted, onUnmounted, onUpdated, ref } from 'vue';
|
||||||
import { addAnimate, removeAnimate } from '../plugin/animateController';
|
import { addAnimate, removeAnimate } from '../plugin/animateController';
|
||||||
|
import { has } from '../plugin/utils';
|
||||||
|
|
||||||
|
const id = (Math.random() * 1e8).toFixed(0);
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
id: string;
|
id: string;
|
||||||
|
noborder?: boolean;
|
||||||
width?: number;
|
width?: number;
|
||||||
height?: number;
|
height?: number;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const canvas = ref<HTMLCanvasElement>();
|
let c: HTMLCanvasElement;
|
||||||
|
let ctx: CanvasRenderingContext2D;
|
||||||
|
|
||||||
|
let drawFn: () => void;
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
if (has(drawFn)) removeAnimate(drawFn);
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const c = canvas.value!;
|
|
||||||
const ctx = c.getContext('2d')!;
|
|
||||||
const cls = core.getClsFromId(props.id);
|
const cls = core.getClsFromId(props.id);
|
||||||
const frames = core.getAnimateFrames(cls);
|
const frames = core.getAnimateFrames(cls);
|
||||||
|
const w = props.width ?? 32;
|
||||||
|
const h = props.height ?? 32;
|
||||||
|
|
||||||
|
if (!props.noborder) {
|
||||||
|
c.style.border = '1.5px solid #ddd';
|
||||||
|
c.style.backgroundColor = '#222';
|
||||||
|
}
|
||||||
|
|
||||||
const scale = window.devicePixelRatio;
|
const scale = window.devicePixelRatio;
|
||||||
|
|
||||||
c.style.width = `${c.width}px`;
|
c.style.width = `${w}px`;
|
||||||
c.style.height = `${c.height}px`;
|
c.style.height = `${h}px`;
|
||||||
c.width *= scale;
|
c.width = scale * w;
|
||||||
c.height *= scale;
|
c.height = scale * h;
|
||||||
ctx.scale(scale, scale);
|
ctx.scale(scale, scale);
|
||||||
|
|
||||||
const fn = () => {
|
if (frames === 1) {
|
||||||
core.clearMap(ctx);
|
core.drawIcon(ctx, props.id, 0, 0, props.width, props.height);
|
||||||
const frame = core.status.globalAnimateStatus % frames;
|
} else {
|
||||||
core.drawIcon(ctx, props.id, 0, 0, props.width, props.height, frame);
|
drawFn = () => {
|
||||||
};
|
core.clearMap(ctx);
|
||||||
|
const frame = core.status.globalAnimateStatus % frames;
|
||||||
|
core.drawIcon(ctx, props.id, 0, 0, w, h, frame);
|
||||||
|
};
|
||||||
|
|
||||||
fn();
|
drawFn();
|
||||||
addAnimate(fn);
|
addAnimate(drawFn);
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
removeAnimate(fn);
|
removeAnimate(drawFn);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
c = document.getElementById(`box-animate-${id}`) as HTMLCanvasElement;
|
||||||
|
ctx = c.getContext('2d')!;
|
||||||
|
draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
onUpdated(() => {
|
||||||
|
draw();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped></style>
|
||||||
#canvas {
|
|
||||||
border: 1.5px solid #ddd;
|
|
||||||
background-color: #222;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
@ -11,12 +11,13 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, onUnmounted, onUpdated } from 'vue';
|
import { onMounted, onUnmounted, onUpdated } from 'vue';
|
||||||
import { cancelGlobalDrag, isMobile, useDrag, useWheel } from '../plugin/use';
|
import { cancelGlobalDrag, useDrag, useWheel } from '../plugin/use';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
now?: number;
|
now?: number;
|
||||||
type?: 'vertical' | 'horizontal';
|
type?: 'vertical' | 'horizontal';
|
||||||
drag?: boolean;
|
drag?: boolean;
|
||||||
|
width?: number;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const emits = defineEmits<{
|
const emits = defineEmits<{
|
||||||
@ -29,6 +30,7 @@ let total = 0;
|
|||||||
|
|
||||||
const id = (1e8 * Math.random()).toFixed(0);
|
const id = (1e8 * Math.random()).toFixed(0);
|
||||||
const scale = window.devicePixelRatio;
|
const scale = window.devicePixelRatio;
|
||||||
|
const width = props.width ?? 20;
|
||||||
|
|
||||||
const cssTarget = props.type === 'horizontal' ? 'left' : 'top';
|
const cssTarget = props.type === 'horizontal' ? 'left' : 'top';
|
||||||
const canvasAttr = props.type === 'horizontal' ? 'width' : 'height';
|
const canvasAttr = props.type === 'horizontal' ? 'width' : 'height';
|
||||||
@ -52,6 +54,8 @@ function draw() {
|
|||||||
} else if (now < 0) {
|
} else if (now < 0) {
|
||||||
now = 0;
|
now = 0;
|
||||||
}
|
}
|
||||||
|
const w = ctx.canvas.width;
|
||||||
|
const h = ctx.canvas.height;
|
||||||
emits('update:now', now);
|
emits('update:now', now);
|
||||||
const length =
|
const length =
|
||||||
Math.min(ctx.canvas[canvasAttr] / total / scale, 1) *
|
Math.min(ctx.canvas[canvasAttr] / total / scale, 1) *
|
||||||
@ -61,14 +65,11 @@ function draw() {
|
|||||||
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
if (props.type === 'horizontal') {
|
if (props.type === 'horizontal') {
|
||||||
ctx.moveTo(Math.max(py + 5, 5), 10 * scale);
|
ctx.moveTo(Math.max(py + 5, 5), h / 2);
|
||||||
ctx.lineTo(Math.min(py + length - 5, ctx.canvas.width - 5), 10 * scale);
|
ctx.lineTo(Math.min(py + length - 5, ctx.canvas.width - 5), h / 2);
|
||||||
} else {
|
} else {
|
||||||
ctx.moveTo(10 * scale, Math.max(py + 5, 5));
|
ctx.moveTo(w / 2, Math.max(py + 5, 5));
|
||||||
ctx.lineTo(
|
ctx.lineTo(w / 2, Math.min(py + length - 5, ctx.canvas.height - 5));
|
||||||
10 * scale,
|
|
||||||
Math.min(py + length - 5, ctx.canvas.height - 5)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
ctx.lineCap = 'round';
|
ctx.lineCap = 'round';
|
||||||
ctx.lineWidth = 6;
|
ctx.lineWidth = 6;
|
||||||
@ -130,16 +131,17 @@ onMounted(() => {
|
|||||||
content.addEventListener('resize', resize);
|
content.addEventListener('resize', resize);
|
||||||
|
|
||||||
const style = getComputedStyle(canvas);
|
const style = getComputedStyle(canvas);
|
||||||
canvas.width = 20 * scale;
|
canvas.style.width = `${width}px`;
|
||||||
|
canvas.width = width * scale;
|
||||||
canvas.height = parseFloat(style.height) * scale;
|
canvas.height = parseFloat(style.height) * scale;
|
||||||
|
|
||||||
if (props.type === 'horizontal') {
|
if (props.type === 'horizontal') {
|
||||||
div.style.flexDirection = 'column';
|
div.style.flexDirection = 'column';
|
||||||
canvas.style.height = '40px';
|
canvas.style.height = `${width}px`;
|
||||||
canvas.style.width = '98%';
|
canvas.style.width = '98%';
|
||||||
canvas.style.margin = '0 1% 0 1%';
|
canvas.style.margin = '0 1% 0 1%';
|
||||||
canvas.width = parseFloat(style.width) * scale;
|
canvas.width = parseFloat(style.width) * scale;
|
||||||
canvas.height = 20 * scale;
|
canvas.height = width * scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
draw();
|
draw();
|
||||||
@ -200,7 +202,6 @@ onUnmounted(() => {
|
|||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.scroll {
|
.scroll {
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
width: 20px;
|
|
||||||
transition: opacity 0.2s linear;
|
transition: opacity 0.2s linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, onMounted, ref, watch } from 'vue';
|
import { computed, onMounted, ref, watch } from 'vue';
|
||||||
import { getCriticalDamage, getDefDamage } from '../plugin/book';
|
import { getCriticalDamage, getDefDamage } from '../plugin/ui/book';
|
||||||
import Chart, { ChartConfiguration } from 'chart.js/auto';
|
import Chart, { ChartConfiguration } from 'chart.js/auto';
|
||||||
import { has, setCanvasSize } from '../plugin/utils';
|
import { has, setCanvasSize } from '../plugin/utils';
|
||||||
import { debounce } from 'lodash';
|
import { debounce } from 'lodash';
|
||||||
@ -147,11 +147,12 @@ function generateChart(ele: HTMLCanvasElement, data: [number, number][]) {
|
|||||||
* 生成图表数据
|
* 生成图表数据
|
||||||
* @param data 数据
|
* @param data 数据
|
||||||
*/
|
*/
|
||||||
function generateData(data: [number, number][]) {
|
function generateData(data: [number, number][]): ChartConfiguration['data'] {
|
||||||
return {
|
return {
|
||||||
datasets: [
|
datasets: [
|
||||||
{
|
{
|
||||||
data: data.map(v => v[1])
|
data: data.map(v => v[1]),
|
||||||
|
label: '怪物伤害'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
labels: data.map(v => Math.round(v[0] / ratio))
|
labels: data.map(v => Math.round(v[0] / ratio))
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { isMobile } from '../plugin/use';
|
import { isMobile } from '../plugin/use';
|
||||||
import { getSpecialHint } from '../plugin/book';
|
import { getSpecialHint } from '../plugin/ui/book';
|
||||||
|
|
||||||
const enemy = core.plugin.bookDetailEnemy;
|
const enemy = core.plugin.bookDetailEnemy;
|
||||||
|
|
||||||
|
@ -27,6 +27,6 @@ export function addAnimate(fn: (time: number) => void) {
|
|||||||
*/
|
*/
|
||||||
export function removeAnimate(fn: (time: number) => void) {
|
export function removeAnimate(fn: (time: number) => void) {
|
||||||
const index = animation.findIndex(v => v === fn);
|
const index = animation.findIndex(v => v === fn);
|
||||||
if (index === -1)
|
if (index === -1) return;
|
||||||
throw new ReferenceError('No such function in animation.');
|
animation.splice(index, 1);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { has } from './utils';
|
import { has } from '../utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取怪物的特殊技能描述
|
* 获取怪物的特殊技能描述
|
||||||
@ -64,10 +64,10 @@ export function getDefDamage(
|
|||||||
atk: core.status.hero.atk + addAtk
|
atk: core.status.hero.atk + addAtk
|
||||||
});
|
});
|
||||||
|
|
||||||
if (i === 0) {
|
if (res.length === 0) {
|
||||||
origin = dam?.damage;
|
origin = dam?.damage;
|
||||||
if (has(origin)) {
|
if (has(origin)) {
|
||||||
res.push([addDef, origin]);
|
res.push([addDef + i * ratio, origin]);
|
||||||
last = origin;
|
last = origin;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
45
src/plugin/ui/toolbox.tsx
Normal file
45
src/plugin/ui/toolbox.tsx
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import { has } from '../utils';
|
||||||
|
|
||||||
|
interface ClsMap {
|
||||||
|
tools: '消耗道具';
|
||||||
|
constants: '永久道具';
|
||||||
|
all: '全部道具';
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AllItem {
|
||||||
|
tools: [string, number][];
|
||||||
|
constants: [string, number][];
|
||||||
|
}
|
||||||
|
|
||||||
|
const clsMap: ClsMap = {
|
||||||
|
tools: '消耗道具',
|
||||||
|
constants: '永久道具',
|
||||||
|
all: '全部道具'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据道具的cls获取中文类型
|
||||||
|
* @param cls 道具的cls
|
||||||
|
*/
|
||||||
|
export function getClsName<T extends keyof ClsMap | 'all'>(cls: T): ClsMap[T] {
|
||||||
|
return clsMap[cls];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取某个类型的所有道具
|
||||||
|
* @param cls 道具类型
|
||||||
|
*/
|
||||||
|
export function getItems(cls: 'all'): AllItem;
|
||||||
|
export function getItems(cls: keyof ClsMap): [string, number][];
|
||||||
|
export function getItems(cls: keyof ClsMap | 'all') {
|
||||||
|
const i = core.status.hero.items;
|
||||||
|
if (cls === 'all') {
|
||||||
|
return {
|
||||||
|
tools: Object.entries(i.tools),
|
||||||
|
constants: Object.entries(i.constants)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const items = i[cls];
|
||||||
|
const data = Object.entries(items);
|
||||||
|
return data;
|
||||||
|
}
|
@ -1,13 +1,20 @@
|
|||||||
import { sleep } from 'mutate-animate';
|
import { sleep } from 'mutate-animate';
|
||||||
import { Component, markRaw, ref, Ref, watch } from 'vue';
|
import { Component, markRaw, ref, Ref, watch } from 'vue';
|
||||||
import Book from '../ui/book.vue';
|
import Book from '../ui/book.vue';
|
||||||
|
import Toolbox from '../ui/toolbox.vue';
|
||||||
|
|
||||||
export const bookOpened = ref(false);
|
export const bookOpened = ref(false);
|
||||||
|
export const toolOpened = ref(false);
|
||||||
|
|
||||||
|
export const transition = ref(true);
|
||||||
|
|
||||||
let app: HTMLDivElement;
|
let app: HTMLDivElement;
|
||||||
|
|
||||||
/** ui声明列表 */
|
/** ui声明列表 */
|
||||||
const UI_LIST: [Ref<boolean>, Component][] = [[bookOpened, Book]];
|
const UI_LIST: [Ref<boolean>, Component][] = [
|
||||||
|
[bookOpened, Book],
|
||||||
|
[toolOpened, Toolbox]
|
||||||
|
];
|
||||||
|
|
||||||
/** ui栈 */
|
/** ui栈 */
|
||||||
export const uiStack = ref<Component[]>([]);
|
export const uiStack = ref<Component[]>([]);
|
||||||
@ -23,24 +30,40 @@ export default function init() {
|
|||||||
const index = uiStack.value.findIndex(v => v === com);
|
const index = uiStack.value.findIndex(v => v === com);
|
||||||
if (uiStack.value.length === 1) {
|
if (uiStack.value.length === 1) {
|
||||||
hideApp(index);
|
hideApp(index);
|
||||||
|
} else {
|
||||||
|
uiStack.value.splice(index, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return { uiStack, bookOpened };
|
return { uiStack, bookOpened, toolOpened, transition };
|
||||||
}
|
}
|
||||||
|
|
||||||
async function showApp() {
|
async function showApp() {
|
||||||
|
core.lockControl();
|
||||||
|
if (transition.value) {
|
||||||
|
app.style.transition = 'all 0.6s linear';
|
||||||
|
} else {
|
||||||
|
app.style.transition = '';
|
||||||
|
}
|
||||||
app.style.display = 'flex';
|
app.style.display = 'flex';
|
||||||
await sleep(50);
|
await sleep(50);
|
||||||
app.style.opacity = '1';
|
app.style.opacity = '1';
|
||||||
core.lockControl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function hideApp(index: number) {
|
async function hideApp(index: number) {
|
||||||
app.style.opacity = '0';
|
if (transition.value) {
|
||||||
await sleep(600);
|
app.style.transition = 'all 0.6s linear';
|
||||||
uiStack.value.splice(index, 1);
|
app.style.opacity = '0';
|
||||||
app.style.display = 'none';
|
await sleep(600);
|
||||||
core.unlockControl();
|
uiStack.value.splice(index, 1);
|
||||||
|
app.style.display = 'none';
|
||||||
|
core.closePanel();
|
||||||
|
} else {
|
||||||
|
app.style.transition = '';
|
||||||
|
app.style.opacity = '0';
|
||||||
|
uiStack.value.splice(index, 1);
|
||||||
|
app.style.display = 'none';
|
||||||
|
core.closePanel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,18 @@
|
|||||||
import { isNil } from 'lodash';
|
import { isNil } from 'lodash';
|
||||||
|
import { Animation, TimingFn } from 'mutate-animate';
|
||||||
|
import { ComputedRef, ref } from 'vue';
|
||||||
import { EVENT_KEY_CODE_MAP } from './keyCodes';
|
import { EVENT_KEY_CODE_MAP } from './keyCodes';
|
||||||
|
|
||||||
|
type CanParseCss = keyof {
|
||||||
|
[P in keyof CSSStyleDeclaration as CSSStyleDeclaration[P] extends string
|
||||||
|
? P extends string
|
||||||
|
? P
|
||||||
|
: never
|
||||||
|
: never]: CSSStyleDeclaration[P];
|
||||||
|
};
|
||||||
|
|
||||||
export default function init() {
|
export default function init() {
|
||||||
return { has, getDamageColor };
|
return { has, getDamageColor, parseCss };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,3 +61,55 @@ export function setCanvasSize(
|
|||||||
export function keycode(key: number) {
|
export function keycode(key: number) {
|
||||||
return EVENT_KEY_CODE_MAP[key];
|
return EVENT_KEY_CODE_MAP[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析css字符串为CSSStyleDeclaration对象
|
||||||
|
* @param css 要解析的css字符串
|
||||||
|
*/
|
||||||
|
export function parseCss(css: string): Partial<Record<CanParseCss, string>> {
|
||||||
|
const str = css.replace(/[\n\s\t]*/g, '').replace(/[;,]*/g, ';');
|
||||||
|
const styles = str.split(';');
|
||||||
|
const res: Partial<Record<CanParseCss, string>> = {};
|
||||||
|
|
||||||
|
for (const one of styles) {
|
||||||
|
const [key, data] = one.split(':');
|
||||||
|
const cssKey = key.replace(/\-([a-z])/g, $1 =>
|
||||||
|
$1.toUpperCase()
|
||||||
|
) as CanParseCss;
|
||||||
|
res[cssKey] = data;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用打字机效果显示一段文字
|
||||||
|
* @param str 要打出的字符串
|
||||||
|
* @param time 打出总用时,默认1秒
|
||||||
|
* @param timing 打出时的速率曲线,默认为线性变化
|
||||||
|
* @returns 文字的响应式变量
|
||||||
|
*/
|
||||||
|
export function type(
|
||||||
|
str: string,
|
||||||
|
time: number = 1000,
|
||||||
|
timing: TimingFn = n => n
|
||||||
|
): Ref<string> {
|
||||||
|
const toShow = eval('`' + str + '`') as string;
|
||||||
|
const ani = new Animation();
|
||||||
|
const content = ref('');
|
||||||
|
const all = toShow.length;
|
||||||
|
|
||||||
|
const fn = (time: number) => {
|
||||||
|
if (!has(time)) return;
|
||||||
|
const now = ani.x;
|
||||||
|
content.value = toShow.slice(0, Math.floor(now));
|
||||||
|
if (Math.floor(now) === all) {
|
||||||
|
ani.ticker.destroy();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ani.ticker.add(fn);
|
||||||
|
|
||||||
|
ani.mode(timing).time(time).move(all, 0);
|
||||||
|
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
display: none;
|
display: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
z-index: 9999;
|
z-index: 1000;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@ -11,3 +11,8 @@
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
background-color: #000d;
|
background-color: #000d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.antdv-message {
|
||||||
|
font-family: 'normal';
|
||||||
|
font-size: 1.6em;
|
||||||
|
}
|
||||||
|
2
src/types/core.d.ts
vendored
2
src/types/core.d.ts
vendored
@ -330,7 +330,7 @@ declare class Sprite {
|
|||||||
removeEventListenr: HTMLCanvasElement['addEventListener'];
|
removeEventListenr: HTMLCanvasElement['addEventListener'];
|
||||||
}
|
}
|
||||||
|
|
||||||
declare const main: main;
|
declare const main: Main;
|
||||||
declare const core: Core;
|
declare const core: Core;
|
||||||
declare const flags: { [x: string]: any };
|
declare const flags: { [x: string]: any };
|
||||||
declare const hero: HeroStatus;
|
declare const hero: HeroStatus;
|
||||||
|
5
src/types/map.d.ts
vendored
5
src/types/map.d.ts
vendored
@ -479,7 +479,10 @@ declare class maps {
|
|||||||
resizeMap(floorId?: string): void;
|
resizeMap(floorId?: string): void;
|
||||||
|
|
||||||
/** 以x,y的形式返回每个点的事件 */
|
/** 以x,y的形式返回每个点的事件 */
|
||||||
getMapBlocksObj(floorId?: string, noCache?: boolean): object;
|
getMapBlocksObj(
|
||||||
|
floorId?: string,
|
||||||
|
noCache?: boolean
|
||||||
|
): Record<`${number},${number}`, Block>;
|
||||||
|
|
||||||
/** 获得某些点可否通行的信息 */
|
/** 获得某些点可否通行的信息 */
|
||||||
canMoveDirectlyArray(locs?: any): object;
|
canMoveDirectlyArray(locs?: any): object;
|
||||||
|
20
src/types/plugin.d.ts
vendored
20
src/types/plugin.d.ts
vendored
@ -6,6 +6,14 @@ type Ref<T> = {
|
|||||||
|
|
||||||
type DragFn = (x: number, y: number, e: MouseEvent | TouchEvent) => void;
|
type DragFn = (x: number, y: number, e: MouseEvent | TouchEvent) => void;
|
||||||
|
|
||||||
|
type CanParseCss = keyof {
|
||||||
|
[P in keyof CSSStyleDeclaration as CSSStyleDeclaration[P] extends string
|
||||||
|
? P extends string
|
||||||
|
? P
|
||||||
|
: never
|
||||||
|
: never]: CSSStyleDeclaration[P];
|
||||||
|
};
|
||||||
|
|
||||||
interface PluginDeclaration extends PluginUtils {
|
interface PluginDeclaration extends PluginUtils {
|
||||||
/**
|
/**
|
||||||
* 添加函数 例:添加弹出文字,像这个就可以使用core.addPop或core.plugin.addPop调用
|
* 添加函数 例:添加弹出文字,像这个就可以使用core.addPop或core.plugin.addPop调用
|
||||||
@ -24,9 +32,15 @@ interface PluginDeclaration extends PluginUtils {
|
|||||||
/** 怪物手册详细信息展示的怪物 */
|
/** 怪物手册详细信息展示的怪物 */
|
||||||
bookDetailEnemy: Enemy & DetailedEnemy;
|
bookDetailEnemy: Enemy & DetailedEnemy;
|
||||||
|
|
||||||
|
/** ui是否使用渐变 */
|
||||||
|
readonly transition: Ref<boolean>;
|
||||||
|
|
||||||
/** 手册是否打开 */
|
/** 手册是否打开 */
|
||||||
readonly bookOpened: Ref<boolean>;
|
readonly bookOpened: Ref<boolean>;
|
||||||
|
|
||||||
|
/** 道具栏是否打开 */
|
||||||
|
readonly toolOpened: Ref<boolean>;
|
||||||
|
|
||||||
/** ui栈 */
|
/** ui栈 */
|
||||||
readonly uiStack: Ref<Component[]>;
|
readonly uiStack: Ref<Component[]>;
|
||||||
|
|
||||||
@ -96,6 +110,12 @@ interface PluginUtils {
|
|||||||
* @param damage 伤害大小
|
* @param damage 伤害大小
|
||||||
*/
|
*/
|
||||||
getDamageColor(damage: number): string;
|
getDamageColor(damage: number): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析css字符串为CSSStyleDeclaration对象
|
||||||
|
* @param css 要解析的css字符串
|
||||||
|
*/
|
||||||
|
parseCss(css: string): Partial<Record<CanParseCss, string>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
type Forward<T> = {
|
type Forward<T> = {
|
||||||
|
7
src/types/util.d.ts
vendored
7
src/types/util.d.ts
vendored
@ -553,7 +553,12 @@ type DetailedEnemy = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type Item = {
|
type Item = {
|
||||||
cls: string;
|
name: string;
|
||||||
|
cls: 'items' | 'constants' | 'tools' | 'equips';
|
||||||
|
text: string;
|
||||||
|
hideInToolbox?: boolean;
|
||||||
|
color?: string;
|
||||||
|
css?: string;
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -116,7 +116,6 @@ async function show() {
|
|||||||
* 退出怪物手册
|
* 退出怪物手册
|
||||||
*/
|
*/
|
||||||
function exit() {
|
function exit() {
|
||||||
core.closePanel();
|
|
||||||
core.plugin.bookOpened.value = false;
|
core.plugin.bookOpened.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,7 +189,7 @@ onMounted(async () => {
|
|||||||
document.addEventListener('keydown', keydown);
|
document.addEventListener('keydown', keydown);
|
||||||
});
|
});
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(async () => {
|
||||||
document.removeEventListener('keyup', keyup);
|
document.removeEventListener('keyup', keyup);
|
||||||
document.removeEventListener('keydown', keydown);
|
document.removeEventListener('keydown', keydown);
|
||||||
});
|
});
|
||||||
|
405
src/ui/toolbox.vue
Normal file
405
src/ui/toolbox.vue
Normal file
@ -0,0 +1,405 @@
|
|||||||
|
<template>
|
||||||
|
<span id="back" class="item-type-mobile" @click="exit"
|
||||||
|
><left-outlined />返回游戏</span
|
||||||
|
>
|
||||||
|
<div id="toolbox">
|
||||||
|
<div v-for="cls of toShow" class="item-main">
|
||||||
|
<div class="item-info">
|
||||||
|
<div class="item-type" v-if="!isMobile">
|
||||||
|
{{ getClsName(cls) }}
|
||||||
|
</div>
|
||||||
|
<div v-else id="item-type-mobile">
|
||||||
|
<span
|
||||||
|
class="item-type-mobile"
|
||||||
|
@click="mode = 'tools'"
|
||||||
|
:selected="mode === 'tools'"
|
||||||
|
>消耗道具</span
|
||||||
|
>
|
||||||
|
<a-divider
|
||||||
|
dashed
|
||||||
|
style="border-color: #ddd4; height: 100%"
|
||||||
|
type="vertical"
|
||||||
|
></a-divider>
|
||||||
|
<span
|
||||||
|
class="item-type-mobile"
|
||||||
|
@click="mode = 'constants'"
|
||||||
|
:selected="mode === 'constants'"
|
||||||
|
>永久道具</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<a-divider
|
||||||
|
dashed
|
||||||
|
style="margin: 1vh 0 1vh 0; border-color: #ddd4"
|
||||||
|
></a-divider>
|
||||||
|
<Scroll class="item-list" :width="10">
|
||||||
|
<div
|
||||||
|
class="item"
|
||||||
|
v-for="[id, num] of items[cls]"
|
||||||
|
:selected="selected === id"
|
||||||
|
@click="
|
||||||
|
mode = cls;
|
||||||
|
select(id);
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div class="item-icon">
|
||||||
|
<BoxAnimate
|
||||||
|
:id="id"
|
||||||
|
:width="32"
|
||||||
|
:height="32"
|
||||||
|
:noborder="true"
|
||||||
|
></BoxAnimate>
|
||||||
|
<span class="item-name">{{ all[id].name }}</span>
|
||||||
|
</div>
|
||||||
|
<span>× {{ num }}</span>
|
||||||
|
</div>
|
||||||
|
</Scroll>
|
||||||
|
</div>
|
||||||
|
<a-divider
|
||||||
|
dashed
|
||||||
|
:type="isMobile ? 'horizontal' : 'vertical'"
|
||||||
|
class="divider"
|
||||||
|
style="border-color: #ddd4; margin: 1%"
|
||||||
|
></a-divider>
|
||||||
|
</div>
|
||||||
|
<div id="detail">
|
||||||
|
<div id="info">
|
||||||
|
<BoxAnimate
|
||||||
|
:id="selected"
|
||||||
|
:width="32"
|
||||||
|
:height="32"
|
||||||
|
></BoxAnimate>
|
||||||
|
<div id="basic-info">
|
||||||
|
<span style="border-bottom: 1px solid #ddd4">{{
|
||||||
|
all[selected]?.name ?? '没有道具'
|
||||||
|
}}</span>
|
||||||
|
<span>{{
|
||||||
|
getClsName(all[selected]?.cls as ItemMode) ?? '永久道具'
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span style="margin-top: 2vh">点击该物品以使用</span>
|
||||||
|
<a-divider dashed style="border-color: #ddd4"></a-divider>
|
||||||
|
<div id="desc">
|
||||||
|
<span style="border-bottom: 1px solid #ddd4">道具描述</span>
|
||||||
|
<Scroll id="desc-text">
|
||||||
|
<div v-if="!descText.value.startsWith('!!html')">
|
||||||
|
{{ descText.value }}
|
||||||
|
</div>
|
||||||
|
<div v-else v-html="descText.value.slice(6)"></div>
|
||||||
|
</Scroll>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { LeftOutlined } from '@ant-design/icons-vue';
|
||||||
|
import { computed, onMounted, onUnmounted, ref, watch } from 'vue';
|
||||||
|
import Scroll from '../components/scroll.vue';
|
||||||
|
import BoxAnimate from '../components/boxAnimate.vue';
|
||||||
|
import { getClsName, getItems } from '../plugin/ui/toolbox';
|
||||||
|
import { isMobile } from '../plugin/use';
|
||||||
|
import { type, keycode, has } from '../plugin/utils';
|
||||||
|
import { hyper, sleep } from 'mutate-animate';
|
||||||
|
import { message } from 'ant-design-vue';
|
||||||
|
import { KeyCode } from '../plugin/keyCodes';
|
||||||
|
|
||||||
|
type ItemMode = 'tools' | 'constants';
|
||||||
|
|
||||||
|
const mode = ref<ItemMode>('tools');
|
||||||
|
|
||||||
|
const items = getItems('all');
|
||||||
|
|
||||||
|
const toShow = computed<ItemMode[]>(() => {
|
||||||
|
return isMobile ? [mode.value] : ['tools', 'constants'];
|
||||||
|
});
|
||||||
|
|
||||||
|
const all = core.material.items;
|
||||||
|
|
||||||
|
const selected = ref(items[toShow.value[0]][0]?.[0] ?? 'none');
|
||||||
|
const index = ref(0);
|
||||||
|
|
||||||
|
watch(index, n => {
|
||||||
|
select(items[mode.value][n][0], true);
|
||||||
|
});
|
||||||
|
|
||||||
|
watch(mode, n => {
|
||||||
|
if (!has(items[n][index.value])) {
|
||||||
|
selected.value = 'none';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
select(items[n][index.value][0], true);
|
||||||
|
});
|
||||||
|
|
||||||
|
const descText = computed(() => {
|
||||||
|
const s = selected.value;
|
||||||
|
if (s === 'none') return ref('没有选择道具');
|
||||||
|
if (all[s].text.startsWith('!!html')) return ref(all[s].text);
|
||||||
|
return type(all[s].text, 600, hyper('sin', 'out'));
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 选择一个道具时
|
||||||
|
* @param id 道具id
|
||||||
|
*/
|
||||||
|
async function select(id: string, nouse: boolean = false) {
|
||||||
|
if (selected.value === id && !nouse) {
|
||||||
|
use(id);
|
||||||
|
}
|
||||||
|
index.value = items[mode.value].findIndex(v => v[0] === id);
|
||||||
|
selected.value = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function exit() {
|
||||||
|
core.plugin.toolOpened.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function use(id: string) {
|
||||||
|
if (core.canUseItem(id)) {
|
||||||
|
// 应该暂时把动画去掉
|
||||||
|
core.plugin.transition.value = false;
|
||||||
|
exit();
|
||||||
|
await sleep(50);
|
||||||
|
core.useItem(id);
|
||||||
|
core.plugin.transition.value = true;
|
||||||
|
} else {
|
||||||
|
message.warn({
|
||||||
|
content: '当前无法使用该道具!',
|
||||||
|
class: 'antdv-message'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyup(e: KeyboardEvent) {
|
||||||
|
const c = keycode(e.keyCode);
|
||||||
|
if (c === KeyCode.Escape || c === KeyCode.KeyX) {
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
if (c === KeyCode.Enter || c === KeyCode.KeyC) {
|
||||||
|
use(selected.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function keydown(e: KeyboardEvent) {
|
||||||
|
const c = keycode(e.keyCode);
|
||||||
|
const total = items[mode.value].length;
|
||||||
|
if (c === KeyCode.DownArrow) {
|
||||||
|
if (index.value < total - 1) {
|
||||||
|
index.value++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c === KeyCode.UpArrow) {
|
||||||
|
if (index.value > 0) {
|
||||||
|
index.value--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c === KeyCode.RightArrow) {
|
||||||
|
const constants = items.constants.length;
|
||||||
|
if (mode.value === 'tools') {
|
||||||
|
if (index.value >= constants) {
|
||||||
|
index.value = constants - 1;
|
||||||
|
}
|
||||||
|
mode.value = 'constants';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c === KeyCode.LeftArrow) {
|
||||||
|
const constants = items.tools.length;
|
||||||
|
if (mode.value === 'constants') {
|
||||||
|
if (index.value >= constants) {
|
||||||
|
index.value = constants - 1;
|
||||||
|
}
|
||||||
|
mode.value = 'tools';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
await sleep(600);
|
||||||
|
document.addEventListener('keyup', keyup);
|
||||||
|
document.addEventListener('keydown', keydown);
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
document.removeEventListener('keyup', keyup);
|
||||||
|
document.removeEventListener('keydown', keydown);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
#toolbox {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-family: 'normal';
|
||||||
|
font-size: 2.5vh;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#back {
|
||||||
|
position: absolute;
|
||||||
|
left: 2%;
|
||||||
|
font-size: 2em;
|
||||||
|
font-family: 'normal';
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.item-info {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-list {
|
||||||
|
width: 100%;
|
||||||
|
height: 88vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-type {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item-type-mobile {
|
||||||
|
width: 80%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-type-mobile {
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.2s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-type-mobile:hover,
|
||||||
|
.item-type-mobile[selected='true'] {
|
||||||
|
color: aqua;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-type-mobile:active {
|
||||||
|
color: aquamarine;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin: 1vh 1vw 0 0.5vw;
|
||||||
|
padding: 0.5vh 0.5vw 0.5vh 0.5vw;
|
||||||
|
border: #0000 0.5px solid;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.item-icon {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.item-name {
|
||||||
|
margin-left: 5%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item[selected='true'] {
|
||||||
|
animation: selected alternate 5s infinite ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#detail {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
#info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
|
||||||
|
#basic-info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
border-left: 1px solid #ddd4;
|
||||||
|
padding-left: 5%;
|
||||||
|
margin-left: 10%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#desc {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
#desc-text {
|
||||||
|
margin-top: 2vh;
|
||||||
|
margin-left: 0.5vw;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes selected {
|
||||||
|
0% {
|
||||||
|
border: #0ff7 0.5px solid;
|
||||||
|
background-color: rgba(39, 251, 209, 0.143);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
border: #0ffa 0.5px solid;
|
||||||
|
background-color: rgba(39, 251, 209, 0.284);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
border: #0ff7 0.5px solid;
|
||||||
|
background-color: rgba(39, 251, 209, 0.143);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 600px) {
|
||||||
|
#toolbox {
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
padding: 5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-list {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
height: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#back {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user