From dede46666f2810f672bbabd189e7f9c2114cca92 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sun, 1 Jan 2023 11:31:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=9D=E7=9F=B3=E8=A1=80?= =?UTF-8?q?=E7=93=B6=E6=98=BE=E4=BC=A4=EF=BC=8C=E4=BF=AE=E5=A4=8Dresize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/libs/control.js | 23 ++++++++---- public/project/plugins.js | 77 +++++++++++++++++++-------------------- public/styles.css | 2 +- src/data/desc.json | 16 +++++--- src/plugin/settings.ts | 11 +++--- src/plugin/ui/fly.ts | 9 +++-- src/types/core.d.ts | 2 +- 7 files changed, 76 insertions(+), 64 deletions(-) diff --git a/public/libs/control.js b/public/libs/control.js index 9ca2ed3..f5503f9 100644 --- a/public/libs/control.js +++ b/public/libs/control.js @@ -4312,12 +4312,12 @@ control.prototype._resize_canvas = function (obj) { core.dom.gameCanvas[i].style.height = innerHeight; } } else { - requestAnimationFrame(function () { - for (var i = 0; i < core.dom.gameCanvas.length; ++i) { - core.dom.gameCanvas[i].style.width = innerWidth; - core.dom.gameCanvas[i].style.height = innerHeight; - } - }); + // requestAnimationFrame(function () { + for (var i = 0; i < core.dom.gameCanvas.length; ++i) { + core.dom.gameCanvas[i].style.width = innerWidth; + core.dom.gameCanvas[i].style.height = innerHeight; + } + // }); } core.dom.gif.style.width = innerWidth; core.dom.gif.style.height = innerHeight; @@ -4335,9 +4335,16 @@ control.prototype._resize_canvas = function (obj) { ? core.domStyle.ratio : 1; core.canvas[cn].canvas.style.width = - (core.canvas[cn].canvas.width / ratio) * core.domStyle.scale + 'px'; + (core.canvas[cn].canvas.width / + devicePixelRatio / + core.domStyle.ratio) * + core.domStyle.scale + + 'px'; core.canvas[cn].canvas.style.height = - (core.canvas[cn].canvas.height / ratio) * core.domStyle.scale + + (core.canvas[cn].canvas.height / + devicePixelRatio / + core.domStyle.ratio) * + core.domStyle.scale + 'px'; }); // resize dynamic canvas diff --git a/public/project/plugins.js b/public/project/plugins.js index c920c64..467ed86 100644 --- a/public/project/plugins.js +++ b/public/project/plugins.js @@ -1378,19 +1378,19 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { * 如有bug在大群或造塔群@古祠 */ - core.bigmap.threshold = 256; + // core.bigmap.threshold = 256; core.control.updateDamage = function (floorId, ctx) { floorId = floorId || core.status.floorId; if (!floorId || core.status.gameOver || main.mode != 'play') return; - var onMap = ctx == null; + const onMap = ctx == null; // 没有怪物手册 if (!core.hasItem('book')) return; core.status.damage.posX = core.bigmap.posX; core.status.damage.posY = core.bigmap.posY; if (!onMap) { - var width = core.floors[floorId].width, + const width = core.floors[floorId].width, height = core.floors[floorId].height; // 地图过大的缩略图不绘制显伤 if (width * height > core.bigmap.threshold) return; @@ -1400,10 +1400,22 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { core.getItemDetail(floorId); // 宝石血瓶详细信息 this.drawDamage(ctx); }; + // 获取宝石信息 并绘制 this.getItemDetail = function (floorId) { if (!core.getFlag('itemDetail')) return; - floorId = floorId || core.status.thisMap.floorId; + floorId = floorId ?? core.status.thisMap.floorId; + let diff = {}; + const before = core.status.hero; + const hero = core.clone(core.status.hero); + const handler = { + set(target, key, v) { + diff[key] = v - (target[key] || 0); + if (!diff[key]) diff[key] = void 0; + return true; + } + }; + core.status.hero = new Proxy(hero, handler); core.status.maps[floorId].blocks.forEach(function (block) { if ( block.event.cls !== 'items' || @@ -1411,72 +1423,57 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { block.disable ) return; - var x = block.x, + const x = block.x, y = block.y; // v2优化,只绘制范围内的部分 if (core.bigmap.v2) { if ( x < core.bigmap.posX - core.bigmap.extend || - x > - core.bigmap.posX + - core.__SIZE__ + - core.bigmap.extend || + x > core.bigmap.posX + core._PX_ + core.bigmap.extend || y < core.bigmap.posY - core.bigmap.extend || - y > - core.bigmap.posY + - core.__SIZE__ + - core.bigmap.extend + y > core.bigmap.posY + core._PY_ + core.bigmap.extend ) { return; } } - var id = block.event.id; - var item = core.material.items[id]; + diff = {}; + const id = block.event.id; + const item = core.material.items[id]; if (item.cls === 'equips') { // 装备也显示 - var diff = core.clone(item.equip.value || {}); - var per = item.equip.percentage; - for (var name in per) { + const diff = item.equip.value ?? {}; + const per = item.equip.percentage ?? {}; + for (const name in per) { diff[name + 'per'] = per[name].toString() + '%'; } drawItemDetail(diff, x, y); return; } - var before = core.clone(core.status.hero); // 跟数据统计原理一样 执行效果 前后比较 core.setFlag('__statistics__', true); try { eval(item.itemEffect); } catch (error) {} - var diff = compareObject(before, core.status.hero); - core.status.hero = hero = before; - flags = core.status.hero.flags; drawItemDetail(diff, x, y); }); + core.status.hero = before; + window.hero = before; + window.flags = before.flags; }; - // 比较两个对象之间每一项的数值差异(弱等于) 返回数值差异 - function compareObject(a, b) { - a = a || {}; - b = b || {}; - var diff = {}; // 差异 - for (var name in a) { - diff[name] = b[name] - (a[name] || 0); - if (!diff[name]) diff[name] = void 0; - } - return diff; - } + // 绘制 function drawItemDetail(diff, x, y) { - var px = 32 * x + 2, + const px = 32 * x + 2, py = 32 * y + 30; - var content = ''; + let content = ''; // 获得数据和颜色 - var i = 0; - for (var name in diff) { + let i = 0; + for (const name in diff) { if (!diff[name]) continue; - var color = '#ffffff'; + let color = '#fff'; + if (typeof diff[name] === 'number') - diff[name] = core.formatBigNumber(diff[name], true); + content = core.formatBigNumber(diff[name], true); switch (name) { case 'atk': case 'atkper': @@ -1498,7 +1495,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { color = '#F9FF00'; break; case 'mana': - color = '#cc6666'; + color = '#c66'; break; } content = diff[name]; diff --git a/public/styles.css b/public/styles.css index 278e7e7..7826d23 100644 --- a/public/styles.css +++ b/public/styles.css @@ -241,7 +241,7 @@ span#hard { border-width: 2px; border-style: solid; border-radius: 6px; - transition: box-shadow 0.3s linear, transform 0.3s linear; + transition: box-shadow 0.3s linear, transform 0.2s ease-out; box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.4); transform: scale(1); } diff --git a/src/data/desc.json b/src/data/desc.json index b7fb3ea..9c7f780 100644 --- a/src/data/desc.json +++ b/src/data/desc.json @@ -22,7 +22,11 @@ "
", "
", "4. 对于手机端,可以点击右下角的难度文字来切换工具栏至数字键。", - "这样,你可以更加方便地进行使用技能等操作。" + "这样,你可以更加方便地进行使用技能等操作。", + "
", + "
", + "5. 本塔中几乎所有 ui 在打开时都会有一个0.6s的动画,如果不想要,可以在开头捡的系统设置里面关闭(默认关闭)。", + "同时,几乎所有 ui 的退出按钮都在左上角。" ] }, "statusBar": { @@ -105,7 +109,10 @@ "被关闭后可以通过重新标记来打开。这个盒子会显示标记的怪物的临界与伤害信息等,与状态栏一样,可以纵向滚动。", "
", "
", - "这个功能可以用于标记boss或者较强的挡路怪,当这些怪能够攻击时你可以直接收到信息,不需要再时刻费心注意怪物的伤害。" + "这个功能可以用于标记boss或者较强的挡路怪,当这些怪能够攻击时你可以直接收到信息,不需要再时刻费心注意怪物的伤害。", + "
", + "
", + "注意,标记的怪物是不计入存档的,同时标记的怪物只在本次游戏中有效,刷新页面后便会消失。" ] }, "book": { @@ -115,8 +122,7 @@ "本塔的怪物手册功能很多,下面一一介绍。", "
", "
", - "怪物手册打开的时候有一个0.6秒的动画,如果不想要可以在开头捡的系统设置里面关闭。注意,本塔中几乎所有ui的关闭按钮", - "都在左上角", + "怪物手册打开的时候有一个0.6秒的动画,如果不想要可以在开头捡的系统设置里面关闭(默认关闭)。", "
", "
", "打开怪物手册后,怪物手册的布局与样板自带的类似。与样板不同的是,这里的怪物手册不再是翻页式结构。", @@ -152,7 +158,7 @@ "text": "道具栏与装备栏", "condition": "true", "desc": [ - "道具栏与装备栏打开时会有一个0.6秒的动画,如果不想要可以在开头捡的系统设置里面关闭。", + "道具栏与装备栏打开时会有一个0.6秒的动画,如果不想要可以在开头捡的系统设置里面关闭。(默认关闭)", "
", "
", "本塔的道具栏没有特别之处,这里不需要说明。主要是装备栏。", diff --git a/src/plugin/settings.ts b/src/plugin/settings.ts index a029256..814fc34 100644 --- a/src/plugin/settings.ts +++ b/src/plugin/settings.ts @@ -3,7 +3,7 @@ import { ref, watch } from 'vue'; /** * 打开和关闭ui时是否展示动画 */ -export const transition = ref(true); +export const transition = ref(false); /** * 道具详细信息 @@ -44,13 +44,14 @@ watch(autoScale, n => { * 重置设置信息,从localStorage读取即可 */ function reset() { - transition.value = core.getLocalStorage('transition'); - autoScale.value = core.getLocalStorage('autoScale'); + transition.value = core.getLocalStorage('transition') ? true : false; + core.plugin.transition.value = transition.value; + autoScale.value = core.getLocalStorage('autoScale') ? true : false; } function resetFlag() { - itemDetail.value = flags.itemDetail; - autoSkill.value = flags.autoSkill; + itemDetail.value = flags.itemDetail ? true : false; + autoSkill.value = flags.autoSkill ? true : false; } export default function init() { diff --git a/src/plugin/ui/fly.ts b/src/plugin/ui/fly.ts index dd20e5b..22beec7 100644 --- a/src/plugin/ui/fly.ts +++ b/src/plugin/ui/fly.ts @@ -1,7 +1,7 @@ import { has } from '../utils'; export default function init() { - return { splitArea }; + return { splitArea, getMapData }; } type BFSFromString = `${FloorIds},${number},${number},${Dir}`; @@ -23,8 +23,6 @@ const arrow: Partial> = { export function splitArea() {} -export function getMapData(floorId: FloorIds) {} - export function getMapDrawData(floorId: FloorIds) {} /** @@ -32,7 +30,10 @@ export function getMapDrawData(floorId: FloorIds) {} * @param floorId 中心楼层id * @param noCache 是否不使用缓存 */ -function bfs(floorId: FloorIds, noCache: boolean = false): MapBFSResult { +export function getMapData( + floorId: FloorIds, + noCache: boolean = false +): MapBFSResult { if (has(bfsCache[floorId]) && !noCache) return bfsCache[floorId]!; const queue = [floorId]; diff --git a/src/types/core.d.ts b/src/types/core.d.ts index 3d0e16f..9c60acc 100644 --- a/src/types/core.d.ts +++ b/src/types/core.d.ts @@ -616,7 +616,7 @@ interface CoreBigmap { threshold: 1024; /** - * v2优化下,显示超出的格子数,例如样板是10,那么13*13的样板就是33*33,还用于判断是否进行更新等 + * v2优化下,显示超出的格子数,例如样板是10,那么13\*13的样板就是33\*33,还用于判断是否进行更新等 */ extend: 10;