From 943e34af72f31c833f5bca55925bddb0d66e7fdc Mon Sep 17 00:00:00 2001 From: strawberry42271 <2806566736@qq.com> Date: Sun, 9 Feb 2025 17:20:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=B9=E6=AE=8A=E6=88=98=E5=85=A5=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/data.js | 1 + project/images/tati_310101.webp | Bin 0 -> 33708 bytes project/plugins.js | 3569 ++++++++++++++++++++----------- 3 files changed, 2266 insertions(+), 1304 deletions(-) create mode 100644 project/images/tati_310101.webp diff --git a/project/data.js b/project/data.js index d049221..ac06e54 100644 --- a/project/data.js +++ b/project/data.js @@ -784,6 +784,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "tati_120128.webp", "tati_120131.webp", "tati_120132.webp", + "tati_310101.webp", "tati_340101.webp", "tati_340101a.webp", "tati_340101y.webp", diff --git a/project/images/tati_310101.webp b/project/images/tati_310101.webp new file mode 100644 index 0000000000000000000000000000000000000000..e5a5dcebb768aea73fce6f2cbb3827fcd5896fb1 GIT binary patch literal 33708 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 1000 / 60) { - now = timestamp; - globalAlphafloor += globalAlphafloorStatus; - if (globalAlphafloor === 100) globalAlphafloorStatus = -2; - if (globalAlphafloor === 0) globalAlphafloorStatus = 2; - if (core.domStyle.isVertical) { - core.clearMap( - uictx, - MAP_BLOCK_LEFT_VERTICAL, - MAP_BLOCK_TOP_VERTICAL, - 340, - 360 - ); - if (core.status.event.id === "viewMaps") { - core.ui.statusBar._update_map(core.status.event.data.floorId); - } else { - core.ui.statusBar._update_map(); - } + main.dom.boss2.style.width = obj.totalWidth + 3 + "px"; + main.dom.boss2.style.height = obj.totalHeight + 3 + "px"; - uictx.globalAlpha = globalAlphafloor / 100; - core.drawImage( - uictx, - "green.webp", - MAP_BLOCK_LEFT_VERTICAL + 135, - MAP_BLOCK_TOP_VERTICAL + 170 - ); - uictx.globalAlpha = 1; - } else { - core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360); - if (core.status.event.id === "viewMaps") { - core.ui.statusBar._update_map(core.status.event.data.floorId); - } else { - core.ui.statusBar._update_map(); - } - uictx.globalAlpha = globalAlphafloor / 100; - core.drawImage( - uictx, - "green.webp", - MAP_BLOCK_LEFT + 150, - MAP_BLOCK_TOP + 180 - ); - uictx.globalAlpha = 1; - } - } - }); - core.control.resize = function () { - //自适应,可实现横竖屏切换 - if (main.mode == "editor") return; + main.dom.boss3.style.width = obj.totalWidth + 3 + "px"; + main.dom.boss3.style.height = obj.totalHeight + 3 + "px"; - const clientWidth = main.dom.body.clientWidth, - clientHeight = main.dom.body.clientHeight; - const canvasWidth = core.__PIXELS__; - const isVertical = clientHeight > clientWidth; - core.domStyle.isVertical = isVertical; + main.dom.boss4.style.width = obj.totalWidth + 3 + "px"; + main.dom.boss4.style.height = obj.totalHeight + 3 + "px"; - const totalWidth = isVertical - ? GAMEVIEW_WIDTH_VERTICAL / 3 - : GAMEVIEW_WIDTH / 3, - totalHeight = isVertical - ? GAMEVIEW_HEIGHT_VERTICAL / 3 - : GAMEVIEW_HEIGHT / 3; - const maxRatio = Math.min( - clientWidth / totalWidth, - clientHeight / totalHeight - ); - core.domStyle.availableScale = []; - [1, 1.25, 1.5, 1.75, 2].forEach(function (v) { - if (maxRatio >= v) { - core.domStyle.availableScale.push(v); - } - }); + main.dom.boss.style.width = obj.totalWidth + 3 + "px"; + main.dom.boss.style.height = obj.totalHeight + 3 + "px"; - if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) { - core.domStyle.scale = Math.min(1, maxRatio); - } else if ( - core.getLocalStorage("scale") == null && - core.domStyle.availableScale.length >= 2 - ) { - core.domStyle.scale = - core.domStyle.availableScale[core.domStyle.availableScale.length - 2]; - core.setLocalStorage("scale", core.domStyle.scale); - } + const innerSize = obj.canvasWidth * core.domStyle.scale + "px"; + for (let i = 0; i < core.dom.gameCanvas.length; ++i) + core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[ + i + ].style.height = innerSize; + core.dom.gif.style.width = core.dom.gif.style.height = innerSize; + core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize; - const totalWidthScaled = totalWidth * core.domStyle.scale, - totalHeightScaled = totalHeight * core.domStyle.scale; + core.dom.gameDraw.style.width = core.dom.gameDraw.style.height = + innerSize; + core.dom.gameDraw.style.top = + obj.gameDrawBox.top * core.domStyle.scale + "px"; + core.dom.gameDraw.style.left = + obj.gameDrawBox.left * core.domStyle.scale + "px"; + // resize bigmap + core.bigmap.canvas.forEach(function (cn) { + const ratio = core.canvas[cn].canvas.hasAttribute("isHD") ? + core.domStyle.ratio : + 1; + core.canvas[cn].canvas.style.width = + (innerSize / ratio) * core.domStyle.scale + "px"; + core.canvas[cn].canvas.style.height = + (innerSize / ratio) * core.domStyle.scale + "px"; + }); + // resize dynamic canvas + for (const name in core.dymCanvas) { + const ctx = core.dymCanvas[name], + canvas = ctx.canvas; + const ratio = canvas.hasAttribute("isHD") ? core.domStyle.ratio : 1; + canvas.style.width = (innerSize / ratio) * core.domStyle.scale + "px"; + canvas.style.height = (innerSize / ratio) * core.domStyle.scale + "px"; + canvas.style.left = + parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px"; + canvas.style.top = + parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px"; + } + // resize next + main.dom.next.style.width = main.dom.next.style.height = + 5 * core.domStyle.scale + "px"; + main.dom.next.style.borderBottomWidth = + main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px"; + }; + const bgctx = main.dom.outerBackground.getContext("2d"); + const uictx = main.dom.outerUI.getContext("2d"); + let now = 0; + core.registerAnimationFrame("lightFloor", true, function (timestamp) { + if (timestamp - now > 1000 / 60) { + now = timestamp; + globalAlphafloor += globalAlphafloorStatus; + if (globalAlphafloor === 100) globalAlphafloorStatus = -2; + if (globalAlphafloor === 0) globalAlphafloorStatus = 2; - const gameDrawBox = isVertical - ? { - left: BORDER_WIDTH / 3, - top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3, - } - : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 }; + if (core.domStyle.isVertical) { + core.clearMap( + uictx, + MAP_BLOCK_LEFT_VERTICAL, + MAP_BLOCK_TOP_VERTICAL, + 340, + 360 + ); + if (core.status.event.id === "viewMaps") { + core.ui.statusBar._update_map(core.status.event.data.floorId); + } else { + core.ui.statusBar._update_map(); + } - const obj = { - clientWidth: clientWidth, - clientHeight: clientHeight, - canvasWidth: canvasWidth, - totalWidth: totalWidthScaled, - totalHeight: totalHeightScaled, - gameDrawBox: gameDrawBox, - globalAttribute: - core.status.globalAttribute || core.initStatus.globalAttribute, - }; + uictx.globalAlpha = globalAlphafloor / 100; + core.drawImage( + uictx, + "green.webp", + MAP_BLOCK_LEFT_VERTICAL + 135, + MAP_BLOCK_TOP_VERTICAL + 170 + ); + uictx.globalAlpha = 1; + } else { + core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360); + if (core.status.event.id === "viewMaps") { + core.ui.statusBar._update_map(core.status.event.data.floorId); + } else { + core.ui.statusBar._update_map(); + } + uictx.globalAlpha = globalAlphafloor / 100; + core.drawImage( + uictx, + "green.webp", + MAP_BLOCK_LEFT + 150, + MAP_BLOCK_TOP + 180 + ); + uictx.globalAlpha = 1; + } + } + }); - _resize_gameGroup(obj); - _resize_canvas(obj); + core.control.resize = function () { + //自适应,可实现横竖屏切换 + if (main.mode == "editor") return; - if (core.status.automaticRoute == null) core.status.automaticRoute = {}; - core.updateStatusBar(); - if (main.dom.CGUI && main.dom.CGUI.style.display === "block") - core.ui.CG.update(); - if (main.dom.music && main.dom.music.style.display === "block") - core.ui.music.update(); - if (main.dom.cgText && main.dom.cgText.style.display === "block") - core.ui.cgText.update(); - if (main.dom.logcanvas && main.dom.logcanvas.style.display === "block") - core.ui.cgText.update(); - }; + const clientWidth = main.dom.body.clientWidth, + clientHeight = main.dom.body.clientHeight; + const canvasWidth = core.__PIXELS__; - class StatusBar { - constructor() { - //道具栏列表 - this.itemMx = [ - //空位用‘none’填充,当前ui至多4列6行 - ["book", "wand", "none", "fly"], - ["cross", "superPotion", "pickaxe"], - ["bomb", "centerFly", "upFly"], - ["none", "none", "none"], - ["downFly", "knife", "snow"], - ["bigKey", "earthquake", "coin"], - ]; - } - //初始化内容(工具栏/录像操作执行函数) - init() { - this.toolbarAction = [ - [ - main.core.openKeyBoard, - main.core.openQuickShop, - core.openToolbox, - core.doSL, - ], - [main.core.openSettings, main.core.save, main.core.load, core.doSL], - ]; - this.replayAction = [ - [core.triggerReplay, core.stopReplay, core.rewindReplay], - [core.speedDownReplay, core.speedUpReplay, core.saveReplay], - ]; - } - //更新 - update() { - this._update_background(); //更新背景 - this._update_props(); //更新属性 - //this._update_items(); //更新道具 - //this._update_equips(); //更新装备 - //this._update_keys(); //更新钥匙 - //this._update_infoWindow(); //更新道具说明 - this._update_toolBox(); //更新工具栏 - this._redrawMap(); - } - _redrawMap() { - if (core.domStyle.isVertical) { - core.clearMap( - uictx, - MAP_BLOCK_LEFT_VERTICAL, - MAP_BLOCK_TOP_VERTICAL, - 340, - 360 - ); - this._update_map(); - uictx.globalAlpha = globalAlphafloor / 100; - core.drawImage( - uictx, - "green.webp", - MAP_BLOCK_LEFT_VERTICAL + 125, - MAP_BLOCK_TOP_VERTICAL + 170 - ); - uictx.globalAlpha = 1; - } else { - core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360); - this._update_map(); - uictx.globalAlpha = globalAlphafloor / 100; - core.drawImage( - uictx, - "green.webp", - MAP_BLOCK_LEFT + 150, - MAP_BLOCK_TOP + 170 - ); - uictx.globalAlpha = 1; - } - } - //更新背景 - _update_background() { - if (core.domStyle.isVertical) { - bgctx.canvas.width = GAMEVIEW_WIDTH_VERTICAL; - bgctx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL; - uictx.canvas.width = GAMEVIEW_WIDTH_VERTICAL; - uictx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL; + const isVertical = clientHeight > clientWidth; + core.domStyle.isVertical = isVertical; - const bg = core.material.images.images["status.webp"]; //竖屏背景(上) - bgctx.drawImage( - bg, - 0, - 0, - GAMEVIEW_WIDTH_VERTICAL, - BAR_HEIGHT_VERTICAL - ); - const bg2 = core.material.images.images["status.webp"]; //竖屏背景(下) - bgctx.drawImage( - bg2, - 0, - BAR_HEIGHT_VERTICAL + GAMEVIEW_WIDTH_VERTICAL, - GAMEVIEW_WIDTH_VERTICAL, - BAR_HEIGHT_VERTICAL - ); - bgctx.globalAlpha = globalAlpha; - bgctx.globalAlpha = 1; - core.setTextAlign("outerUI", "center"); - } else { - bgctx.canvas.width = GAMEVIEW_WIDTH; - bgctx.canvas.height = GAMEVIEW_HEIGHT; - uictx.canvas.width = GAMEVIEW_WIDTH; - uictx.canvas.height = GAMEVIEW_HEIGHT; + const totalWidth = isVertical ? + GAMEVIEW_WIDTH_VERTICAL / 3 : + GAMEVIEW_WIDTH / 3, + totalHeight = isVertical ? + GAMEVIEW_HEIGHT_VERTICAL / 3 : + GAMEVIEW_HEIGHT / 3; - const bg = core.material.images.images["status.webp"]; //横屏背景(左) - bgctx.drawImage(bg, 0, 0, BAR_WIDTH, GAMEVIEW_HEIGHT); - const bg2 = core.material.images.images["status.webp"]; //横屏背景(右) - bgctx.drawImage( - bg2, - BAR_WIDTH + GAMEVIEW_HEIGHT, - 0, - BAR_WIDTH, - GAMEVIEW_HEIGHT - ); - bgctx.globalAlpha = globalAlpha; + const maxRatio = Math.min( + clientWidth / totalWidth, + clientHeight / totalHeight + ); - bgctx.globalAlpha = 1; - core.setTextAlign("outerUI", "center"); - } - } - // 更新属性 - _update_props(updatedFloorTitle) { - if (!updatedFloorTitle && core.status.floorId) { - updatedFloorTitle = core.status.maps[core.status.floorId].title; - } - const statusList = ["hp", "atk", "def", "money"]; //属性列表,图标在函数复写core.statusBar.icons中声明,数字为project\materials\icons.png中的图标序号(可使用便捷ps追加,第一个序号为0) - const drawStatusList = (baseX, baseY) => { - let curh = baseY; - core.setTextAlign("outerUI", "right"); - statusList.forEach((item) => { - // 绘制图标 - core.drawIcon( - "outerUI", - item, - baseX - 95 * 3, - curh - 18 * 3, - 22 * 3, - 22 * 3 - ); + core.domStyle.availableScale = []; + [1, 1.25, 1.5, 1.75, 2].forEach(function (v) { + if (maxRatio >= v) { + core.domStyle.availableScale.push(v); + } + }); - // 四舍五入 - core.status.hero[item] = Math.round(core.status.hero[item]); - // 大数据格式化 - core.fillBoldText1( - "outerUI", - core.getRealStatus(item), - baseX, - curh, - TEXT_COLOR, - "#000000", - 6 - ); - curh += 24 * 3; - if (curh > 130 * 3 && core.domStyle.isVertical) { - curh = 24 * 3; - baseX += 105 * 3; - } - }); - core.setTextAlign("outerUI", "center"); - }; - if (core.domStyle.isVertical) { - core.clearMap("outerUI", 10 * 3, 0, 210 * 3, 120 * 3); - core.setFont("outerUI", "bold 42px Verdana"); - if (updatedFloorTitle) { - core.fillBoldText1( - "outerUI", - updatedFloorTitle, - 60 * 3, - 22 * 3, - TEXT_COLOR, - "#000000", - 6 - ); - } - //drawStatusList(96 * 3, 46 * 3); - //core.drawImage("outerUI", "lane1.png", 0, 0) - core.drawImage("outerUI", "cao.webp", 0, 0); - } else { - core.clearMap("outerUI", 10 * 3, 40 * 3, 105 * 3, 250 * 3); - core.setFont("outerUI", "bold 48px Verdana"); - if (updatedFloorTitle) { - core.fillBoldText1( - "outerUI", - updatedFloorTitle, - 62 * 3, - 41 * 3, - TEXT_COLOR, - "#000000", - 6 - ); - } - //drawStatusList(110 * 3, 93 * 3); - //core.drawImage("outerUI", "lane1.png", 0, 30) - core.drawImage( - "outerUI", - "cao.webp", - 0, - 0, - 400, - 350, - 0, - 30, - 360, - 315 - ); - } - } - _update_items() { - //更新道具栏 - const drawItemMx = (drawFn) => { - for (let i = 0; i < this.itemMx.length; i++) { - for (let j = 0; j < this.itemMx[i].length; j++) { - var item = this.itemMx[i][j]; - drawFn(i, j, item); - } - } - }; - const drawItem = (item, posx, posy) => { - const icon = core.material.icons.items[item], - image = core.material.images.items; - core.drawImage( - "outerUI", - image, - 0, - 32 * icon, - 32, - 32, - posx, - posy, - 30 * 3, - 30 * 3 - ); - const cnt = core.itemCount(item); - if ( - (core.items.items[item].cls === "tools" && cnt > 1) || - FORCE_COUNTABLE_ITEMS.includes(item) - ) { - core.fillText( - "outerUI", - cnt, - posx + 25 * 3, - posy + 28 * 3, - "#FFFFFF", - "bold 36px Verdana" - ); - } - }; - if (core.domStyle.isVertical) { - core.clearMap( - "outerUI", - ITEM_BOX_LEFT_VERTICAL, - ITEM_BOX_TOP_VERTICAL, - 185 * 3, - 125 * 3 - ); + if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) { + core.domStyle.scale = Math.min(1, maxRatio); + } else if ( + core.getLocalStorage("scale") == null && + core.domStyle.availableScale.length >= 2 + ) { + core.domStyle.scale = + core.domStyle.availableScale[core.domStyle.availableScale.length - 2]; + core.setLocalStorage("scale", core.domStyle.scale); + } - drawItemMx((i, j, item) => { - if (core.hasItem(item)) { - const posx = ITEM_BOX_LEFT_VERTICAL + i * 30 * 3, - posy = ITEM_BOX_TOP_VERTICAL + j * 31 * 3; - drawItem(item, posx, posy); - } - }); - } else { - core.clearMap( - "outerUI", - ITEM_BOX_LEFT, - ITEM_BOX_TOP, - 125 * 3, - 185 * 3 - ); + const totalWidthScaled = totalWidth * core.domStyle.scale, + totalHeightScaled = totalHeight * core.domStyle.scale; - drawItemMx((i, j, item) => { - if (core.hasItem(item)) { - const posx = ITEM_BOX_LEFT + j * 30 * 3, - posy = ITEM_BOX_TOP + i * 31 * 3; - drawItem(item, posx, posy); - } - }); - } - } + const gameDrawBox = isVertical ? { + left: BORDER_WIDTH / 3, + top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3, + } : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 }; - _update_map(floorId = core.status.floorId) { - const x = core.domStyle.isVertical - ? MAP_BLOCK_LEFT_VERTICAL - : MAP_BLOCK_LEFT; - const y = core.domStyle.isVertical - ? MAP_BLOCK_TOP_VERTICAL - : MAP_BLOCK_TOP; + const obj = { + clientWidth: clientWidth, + clientHeight: clientHeight, + canvasWidth: canvasWidth, + totalWidth: totalWidthScaled, + totalHeight: totalHeightScaled, + gameDrawBox: gameDrawBox, + globalAttribute: core.status.globalAttribute || core.initStatus.globalAttribute, + }; - if (!floorId) return; - const info = core.plugin.getMapDrawInfo(floorId, Infinity, true); - core.setTextAlign("outerUI", "center"); + _resize_gameGroup(obj); + _resize_canvas(obj); - core.plugin.drawSmallMap(uictx, info, floorId, x, y, 300, 300); - } + if (core.status.automaticRoute == null) core.status.automaticRoute = {}; + core.updateStatusBar(); + if (main.dom.CGUI && main.dom.CGUI.style.display === "block") + core.ui.CG.update(); + if (main.dom.music && main.dom.music.style.display === "block") + core.ui.music.update(); + if (main.dom.cgText && main.dom.cgText.style.display === "block") + core.ui.cgText.update(); + if (main.dom.logcanvas && main.dom.logcanvas.style.display === "block") + core.ui.cgText.update(); + if (main.dom.boss1 && main.dom.boss1.style.display === "block") + core.ui.boss.update(); + }; - _update_equips() { - return; - core.setFont("outerUI", "bold 48px Verdana"); - const drawEquip = (baseX, baseY, id, color, back) => { - if (!id) - core.fillText( - "outerUI", - back, - baseX + 20 * 3, - baseY + 22 * 3, - color - ); - else { - var icon = core.material.icons.items[id]; - core.drawImage( - "outerUI", - core.material.images.items, - 0, - 32 * icon, - 32, - 32, - baseX + 5 * 3, - baseY, - 32 * 3, - 32 * 3 - ); - } - }; - if (core.domStyle.isVertical) { - core.clearMap( - "outerUI", - EQUIP_BLOCK_LEFT_VERTICAL, - EQUIP_BLOCK_TOP_VERTICAL, - 90 * 3, - 130 * 3 - ); - drawEquip( - EQUIP_BLOCK_LEFT_VERTICAL, - EQUIP_BLOCK_TOP_VERTICAL, - core.getEquip(0), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3, - EQUIP_BLOCK_TOP_VERTICAL, - core.getEquip(1), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT_VERTICAL, - EQUIP_BLOCK_TOP_VERTICAL + 45 * 3, - core.getEquip(2), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3, - EQUIP_BLOCK_TOP_VERTICAL + 45 * 3, - core.getEquip(3), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT_VERTICAL, - EQUIP_BLOCK_TOP_VERTICAL + 90 * 3, - core.getEquip(4), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3, - EQUIP_BLOCK_TOP_VERTICAL + 90 * 3, - core.getEquip(5), - "#D1CEFF", - "无" - ); - } else { - core.clearMap( - "outerUI", - EQUIP_BLOCK_LEFT, - EQUIP_BLOCK_TOP, - 130 * 3, - 95 * 3 - ); - drawEquip( - EQUIP_BLOCK_LEFT, - EQUIP_BLOCK_TOP, - core.getEquip(0), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT + 42 * 3, - EQUIP_BLOCK_TOP, - core.getEquip(1), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT + 85 * 3, - EQUIP_BLOCK_TOP, - core.getEquip(2), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT, - EQUIP_BLOCK_TOP + 45 * 3, - core.getEquip(3), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT + 42 * 3, - EQUIP_BLOCK_TOP + 45 * 3, - core.getEquip(4), - "#D1CEFF", - "无" - ); - drawEquip( - EQUIP_BLOCK_LEFT + 85 * 3, - EQUIP_BLOCK_TOP + 45 * 3, - core.getEquip(5), - "#D1CEFF", - "无" - ); - } - } - _update_keys() { - const drawKeyList = (baseX, baseY) => { - const todraw = [], - keyList = ["yellowKey", "blueKey", "redKey", "greenKey"]; - let total = 0; - keyList.forEach(function (key, i) { - todraw[i] = core.itemCount(key); - total += todraw[i]; - }); - let dn = 3; - for (let i = 0; i <= dn; i++) { - let delta = i * 32 * 3; + class StatusBar { + constructor() { + //道具栏列表 + this.itemMx = [ + //空位用‘none’填充,当前ui至多4列6行 + ["book", "wand", "none", "fly"], + ["cross", "superPotion", "pickaxe"], + ["bomb", "centerFly", "upFly"], + ["none", "none", "none"], + ["downFly", "knife", "snow"], + ["bigKey", "earthquake", "coin"], + ]; + } + //初始化内容(工具栏/录像操作执行函数) + init() { + this.toolbarAction = [ + [ + main.core.openKeyBoard, + main.core.openQuickShop, + core.openToolbox, + core.doSL, + ], + [main.core.openSettings, main.core.save, main.core.load, core.doSL], + ]; + this.replayAction = [ + [core.triggerReplay, core.stopReplay, core.rewindReplay], + [core.speedDownReplay, core.speedUpReplay, core.saveReplay], + ]; + } + //更新 + update() { + this._update_background(); //更新背景 + this._update_props(); //更新属性 + //this._update_items(); //更新道具 + //this._update_equips(); //更新装备 + //this._update_keys(); //更新钥匙 + //this._update_infoWindow(); //更新道具说明 + this._update_toolBox(); //更新工具栏 + this._redrawMap(); + } + _redrawMap() { + if (core.domStyle.isVertical) { + core.clearMap( + uictx, + MAP_BLOCK_LEFT_VERTICAL, + MAP_BLOCK_TOP_VERTICAL, + 340, + 360 + ); + this._update_map(); + uictx.globalAlpha = globalAlphafloor / 100; + core.drawImage( + uictx, + "green.webp", + MAP_BLOCK_LEFT_VERTICAL + 125, + MAP_BLOCK_TOP_VERTICAL + 170 + ); + uictx.globalAlpha = 1; + } else { + core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360); + this._update_map(); + uictx.globalAlpha = globalAlphafloor / 100; + core.drawImage( + uictx, + "green.webp", + MAP_BLOCK_LEFT + 150, + MAP_BLOCK_TOP + 170 + ); + uictx.globalAlpha = 1; + } + } + //更新背景 + _update_background() { + if (core.domStyle.isVertical) { + bgctx.canvas.width = GAMEVIEW_WIDTH_VERTICAL; + bgctx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL; + uictx.canvas.width = GAMEVIEW_WIDTH_VERTICAL; + uictx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL; - if (core.domStyle.isVertical) { - this.drawKey(keyList[i], baseX, baseY + delta); - } else { - this.drawKey(keyList[i], baseX + delta, baseY); - } + const bg = core.material.images.images["status.webp"]; //竖屏背景(上) + bgctx.drawImage( + bg, + 0, + 0, + GAMEVIEW_WIDTH_VERTICAL, + BAR_HEIGHT_VERTICAL + ); + const bg2 = core.material.images.images["status.webp"]; //竖屏背景(下) + bgctx.drawImage( + bg2, + 0, + BAR_HEIGHT_VERTICAL + GAMEVIEW_WIDTH_VERTICAL, + GAMEVIEW_WIDTH_VERTICAL, + BAR_HEIGHT_VERTICAL + ); + bgctx.globalAlpha = globalAlpha; + bgctx.globalAlpha = 1; + core.setTextAlign("outerUI", "center"); + } else { + bgctx.canvas.width = GAMEVIEW_WIDTH; + bgctx.canvas.height = GAMEVIEW_HEIGHT; + uictx.canvas.width = GAMEVIEW_WIDTH; + uictx.canvas.height = GAMEVIEW_HEIGHT; - core.setFont("outerUI", "bold 48px Verdana"); - core.setTextAlign("outerUI", "left"); - if (core.domStyle.isVertical) { - core.fillText( - "outerUI", - todraw[i], - baseX + 20 * 3, - baseY + 14 * 3 + delta, - TEXT_COLOR - ); - } else { - core.fillText( - "outerUI", - todraw[i], - baseX + delta, - baseY + 32 * 3, - TEXT_COLOR - ); - } - } - }; - if (core.domStyle.isVertical) { - core.clearMap( - "outerUI", - KEY_BLOCK_LEFT_VERTICAL, - KEY_BLOCK_TOP_VERTICAL, - 45 * 3, - 130 * 3 - ); - drawKeyList( - KEY_BLOCK_LEFT_VERTICAL + 3 * 3, - KEY_BLOCK_TOP_VERTICAL + 5 * 3 - ); - } else { - core.clearMap( - "outerUI", - KEY_BLOCK_LEFT, - KEY_BLOCK_TOP, - 130 * 3, - 45 * 3 - ); - drawKeyList(KEY_BLOCK_LEFT + 10 * 3, KEY_BLOCK_TOP); - } - } - drawKey(key, x, y) { - let sx = 0, - sy = 0; + const bg = core.material.images.images["status.webp"]; //横屏背景(左) + bgctx.drawImage(bg, 0, 0, BAR_WIDTH, GAMEVIEW_HEIGHT); + const bg2 = core.material.images.images["status.webp"]; //横屏背景(右) + bgctx.drawImage( + bg2, + BAR_WIDTH + GAMEVIEW_HEIGHT, + 0, + BAR_WIDTH, + GAMEVIEW_HEIGHT + ); + bgctx.globalAlpha = globalAlpha; - if (key == "yellowKey") sx += 13; - else if (key == "blueKey") sx += 26; - else if (key == "greenKey") sx += 39; + bgctx.globalAlpha = 1; + core.setTextAlign("outerUI", "center"); + } + } + // 更新属性 + _update_props(updatedFloorTitle) { + if (!updatedFloorTitle && core.status.floorId) { + updatedFloorTitle = core.status.maps[core.status.floorId].title; + } + const statusList = ["hp", "atk", "def", "money"]; //属性列表,图标在函数复写core.statusBar.icons中声明,数字为project\materials\icons.png中的图标序号(可使用便捷ps追加,第一个序号为0) + const drawStatusList = (baseX, baseY) => { + let curh = baseY; + core.setTextAlign("outerUI", "right"); + statusList.forEach((item) => { + // 绘制图标 + core.drawIcon( + "outerUI", + item, + baseX - 95 * 3, + curh - 18 * 3, + 22 * 3, + 22 * 3 + ); - core.drawImage( - "outerUI", - "maba.webp", - sx, - sy, - 13, - 26, - x, - y, - 13 * 3, - 26 * 3 - ); - } - _update_infoWindow() { - const itemId = this.selectedItem; - let text = ""; - if (this.selectedItem) { - text = core.replaceText(core.material.items[itemId]?.text); - if (text[0] == "," || text[0] == ",") text = text.substring(1); - } - if (core.domStyle.isVertical) { - core.clearMap( - "outerUI", - INFO_BLOCK_LEFT_VERTICAL, - INFO_BLOCK_TOP_VERTICAL, - 300 * 3, - 120 * 3 - ); + // 四舍五入 + core.status.hero[item] = Math.round(core.status.hero[item]); + // 大数据格式化 + core.fillBoldText1( + "outerUI", + core.getRealStatus(item), + baseX, + curh, + TEXT_COLOR, + "#000000", + 6 + ); + curh += 24 * 3; + if (curh > 130 * 3 && core.domStyle.isVertical) { + curh = 24 * 3; + baseX += 105 * 3; + } + }); + core.setTextAlign("outerUI", "center"); + }; + if (core.domStyle.isVertical) { + core.clearMap("outerUI", 10 * 3, 0, 210 * 3, 120 * 3); + core.setFont("outerUI", "bold 42px Verdana"); + if (updatedFloorTitle) { + core.fillBoldText1( + "outerUI", + updatedFloorTitle, + 60 * 3, + 22 * 3, + TEXT_COLOR, + "#000000", + 6 + ); + } + //drawStatusList(96 * 3, 46 * 3); + //core.drawImage("outerUI", "lane1.png", 0, 0) + core.drawImage("outerUI", "cao.webp", 0, 0); + } else { + core.clearMap("outerUI", 10 * 3, 40 * 3, 105 * 3, 250 * 3); + core.setFont("outerUI", "bold 48px Verdana"); + if (updatedFloorTitle) { + core.fillBoldText1( + "outerUI", + updatedFloorTitle, + 62 * 3, + 41 * 3, + TEXT_COLOR, + "#000000", + 6 + ); + } + //drawStatusList(110 * 3, 93 * 3); + //core.drawImage("outerUI", "lane1.png", 0, 30) + core.drawImage( + "outerUI", + "cao.webp", + 0, + 0, + 400, + 350, + 0, + 30, + 360, + 315 + ); + } + } + _update_items() { + //更新道具栏 + const drawItemMx = (drawFn) => { + for (let i = 0; i < this.itemMx.length; i++) { + for (let j = 0; j < this.itemMx[i].length; j++) { + var item = this.itemMx[i][j]; + drawFn(i, j, item); + } + } + }; + const drawItem = (item, posx, posy) => { + const icon = core.material.icons.items[item], + image = core.material.images.items; + core.drawImage( + "outerUI", + image, + 0, + 32 * icon, + 32, + 32, + posx, + posy, + 30 * 3, + 30 * 3 + ); + const cnt = core.itemCount(item); + if ( + (core.items.items[item].cls === "tools" && cnt > 1) || + FORCE_COUNTABLE_ITEMS.includes(item) + ) { + core.fillText( + "outerUI", + cnt, + posx + 25 * 3, + posy + 28 * 3, + "#FFFFFF", + "bold 36px Verdana" + ); + } + }; + if (core.domStyle.isVertical) { + core.clearMap( + "outerUI", + ITEM_BOX_LEFT_VERTICAL, + ITEM_BOX_TOP_VERTICAL, + 185 * 3, + 125 * 3 + ); - if (this.selectedItem) { - const icon = core.material.icons.items[itemId]; - core.setTextAlign("outerUI", "left"); - core.fillText( - "outerUI", - core.material.items[itemId].name, - INFO_BLOCK_LEFT_VERTICAL + 50 * 3, - INFO_BLOCK_TOP_VERTICAL + 27 * 3, - "#D1CEFF" - ); - core.drawImage( - "outerUI", - core.material.images.items, - 0, - 32 * icon, - 32, - 32, - INFO_BLOCK_LEFT_VERTICAL + 10 * 3, - INFO_BLOCK_TOP_VERTICAL + 8 * 3, - 32 * 3, - 32 * 3 - ); - core.ui.drawTextContent("outerUI", text, { - left: INFO_BLOCK_LEFT_VERTICAL + 10 * 3, - top: INFO_BLOCK_TOP_VERTICAL + 40 * 3, - maxWidth: 275 * 3, - color: "#D1CEFF", - fontSize: 36, - }); - } - } else { - core.clearMap( - "outerUI", - INFO_BLOCK_LEFT, - INFO_BLOCK_TOP, - 115 * 3, - 230 * 3 - ); + drawItemMx((i, j, item) => { + if (core.hasItem(item)) { + const posx = ITEM_BOX_LEFT_VERTICAL + i * 30 * 3, + posy = ITEM_BOX_TOP_VERTICAL + j * 31 * 3; + drawItem(item, posx, posy); + } + }); + } else { + core.clearMap( + "outerUI", + ITEM_BOX_LEFT, + ITEM_BOX_TOP, + 125 * 3, + 185 * 3 + ); - if (this.selectedItem) { - const icon = core.material.icons.items[itemId]; - core.setTextAlign("outerUI", "center"); - core.fillText( - "outerUI", - core.material.items[itemId].name, - INFO_BLOCK_LEFT + 60 * 3, - INFO_BLOCK_TOP + 25 * 3, - "#D1CEFF" - ); - core.drawImage( - "outerUI", - core.material.images.items, - 0, - 32 * icon, - 32, - 32, - INFO_BLOCK_LEFT + 45 * 3, - INFO_BLOCK_TOP + 30 * 3, - 32 * 3, - 32 * 3 - ); - core.ui.drawTextContent("outerUI", text, { - left: INFO_BLOCK_LEFT + 10 * 3, - top: INFO_BLOCK_TOP + 60 * 3, - maxWidth: 105 * 3, - color: "#D1CEFF", - fontSize: 36, - }); - } - } - } - showItemInfo(itemId) { - //展示道具说明 - this.selectedItem = itemId; - this._update_infoWindow(); - } - clearItemInfo() { - //清除道具说明 - this.selectedItem = null; - this._update_infoWindow(); - } - _update_toolBox() { - const tools = core.isReplaying() - ? [ - [core.status.replay.pausing ? "play" : "pause", "stop", "rewind"], - ["speedDown", "speedUp", "save"], - ] - : [ - ["keyboard", "shop", "pack", "T332"], - ["settings", "save", "load", "T331"], - ]; - if (core.domStyle.isVertical) { - core.clearMap( - "outerUI", - TOOL_BOX_LEFT_VERTICAL, - TOOL_BOX_TOP_VERTICAL, - 115, - 130 - ); + drawItemMx((i, j, item) => { + if (core.hasItem(item)) { + const posx = ITEM_BOX_LEFT + j * 30 * 3, + posy = ITEM_BOX_TOP + i * 31 * 3; + drawItem(item, posx, posy); + } + }); + } + } - for (let i = 0; i < tools.length; i++) { - for (let j = 0; j < tools[i].length; j++) { - core.drawIcon( - "outerUI", - tools[i][j], - TOOL_BOX_LEFT_VERTICAL + i * 31 * 3, - TOOL_BOX_TOP_VERTICAL + j * 31 * 3, - 30 * 3, - 30 * 3 - ); - } - } - } else { - core.clearMap( - "outerUI", - TOOL_BOX_LEFT, - TOOL_BOX_TOP, - 130 * 3, - 80 * 3 - ); + _update_map(floorId = core.status.floorId) { + const x = core.domStyle.isVertical ? + MAP_BLOCK_LEFT_VERTICAL : + MAP_BLOCK_LEFT; + const y = core.domStyle.isVertical ? + MAP_BLOCK_TOP_VERTICAL : + MAP_BLOCK_TOP; - for (let i = 0; i < tools.length; i++) { - for (let j = 0; j < tools[i].length; j++) { - core.drawIcon( - "outerUI", - tools[i][j], - TOOL_BOX_LEFT + j * 31 * 3, - TOOL_BOX_TOP + i * 31 * 3, - 30 * 3, - 30 * 3 - ); - } - } - } - } - onclick(x, y) { - const makeBox = ([x, y], [w, h]) => { - return [ - [x, y], - [x + w, y + h], - ]; - }; - const gridify = ([x, y], [gw, gh]) => { - return [Math.floor(x / gw), Math.floor(y / gh)]; - }; - const useItem = (itemId) => { - if (!core.hasItem(itemId)) return; + if (!floorId) return; + const info = core.plugin.getMapDrawInfo(floorId, Infinity, true); + core.setTextAlign("outerUI", "center"); - if (itemId != this.selectedItem) { - this.showItemInfo(itemId); - } else { - switch (itemId) { - case "centerFly": - core.ui._drawCenterFly(); - break; - case "book": - core.openBook(true); - break; - case "wand": - core.insertAction({ - type: "useItem", - id: itemId, - }); - break; - case "fly": - core.useItem(itemId); - break; - default: - core.useItem(itemId); - } - } - }; - const inRect = ([x, y], [[sx, sy], [dx, dy]]) => { - return sx <= x && x <= dx && sy <= y && y <= dy; - }; - const relativeTo = ([x, y], [ax, ay]) => { - return [x - ax, y - ay]; - }; - const pos = [x, y]; - if (core.domStyle.isVertical) { - const itemBox = makeBox( - [ITEM_BOX_LEFT_VERTICAL, ITEM_BOX_TOP_VERTICAL], - [30 * 6 * 3, 31 * 4 * 3] - ); - if (inRect(pos, itemBox)) { - const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [ - 30 * 3, - 31 * 3, - ]); - const itemId = this.itemMx[gx][gy]; - if ( - (core.status.event.id == "viewMaps" || - core.status.event.id == "fly") && - itemId === "book" - ) - core.openBook(true); - if ( - core.isReplaying() || - core.status.lockControl || - core.isMoving() - ) - return; - useItem(itemId); - return; - } - const toolBox = makeBox( - [TOOL_BOX_LEFT_VERTICAL, TOOL_BOX_TOP_VERTICAL], - [31 * 2 * 3, 31 * 4 * 3] - ); - if (inRect(pos, toolBox)) { - const [col, row] = gridify(relativeTo(pos, toolBox[0]), [ - 31 * 3, - 31 * 3, - ]); - if (core.status.lockControl || core.isMoving()) return; - if (core.isReplaying()) { - this.replayAction[col][row].call(core); - } else if (core.isPlaying()) { - if (col === 0 && row === 3) { - core.doSL("autoSave", "load"); - } else if (col === 1 && row === 3) { - core.doSL("autoSave", "reload"); - } else { - this.toolbarAction[col][row].call(core, true); - } - } - return; - } - const mapBox = makeBox( - [MAP_BLOCK_LEFT_VERTICAL, MAP_BLOCK_TOP_VERTICAL], - [350, 350] - ); - if (inRect(pos, mapBox)) { - if ( - core.isReplaying() || - core.status.lockControl || - core.isMoving() - ) - return; - core.useItem("fly"); - return; - } - /*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3]) + core.plugin.drawSmallMap(uictx, info, floorId, x, y, 300, 300); + } + + _update_equips() { + return; + core.setFont("outerUI", "bold 48px Verdana"); + const drawEquip = (baseX, baseY, id, color, back) => { + if (!id) + core.fillText( + "outerUI", + back, + baseX + 20 * 3, + baseY + 22 * 3, + color + ); + else { + var icon = core.material.icons.items[id]; + core.drawImage( + "outerUI", + core.material.images.items, + 0, + 32 * icon, + 32, + 32, + baseX + 5 * 3, + baseY, + 32 * 3, + 32 * 3 + ); + } + }; + if (core.domStyle.isVertical) { + core.clearMap( + "outerUI", + EQUIP_BLOCK_LEFT_VERTICAL, + EQUIP_BLOCK_TOP_VERTICAL, + 90 * 3, + 130 * 3 + ); + drawEquip( + EQUIP_BLOCK_LEFT_VERTICAL, + EQUIP_BLOCK_TOP_VERTICAL, + core.getEquip(0), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3, + EQUIP_BLOCK_TOP_VERTICAL, + core.getEquip(1), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT_VERTICAL, + EQUIP_BLOCK_TOP_VERTICAL + 45 * 3, + core.getEquip(2), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3, + EQUIP_BLOCK_TOP_VERTICAL + 45 * 3, + core.getEquip(3), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT_VERTICAL, + EQUIP_BLOCK_TOP_VERTICAL + 90 * 3, + core.getEquip(4), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3, + EQUIP_BLOCK_TOP_VERTICAL + 90 * 3, + core.getEquip(5), + "#D1CEFF", + "无" + ); + } else { + core.clearMap( + "outerUI", + EQUIP_BLOCK_LEFT, + EQUIP_BLOCK_TOP, + 130 * 3, + 95 * 3 + ); + drawEquip( + EQUIP_BLOCK_LEFT, + EQUIP_BLOCK_TOP, + core.getEquip(0), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT + 42 * 3, + EQUIP_BLOCK_TOP, + core.getEquip(1), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT + 85 * 3, + EQUIP_BLOCK_TOP, + core.getEquip(2), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT, + EQUIP_BLOCK_TOP + 45 * 3, + core.getEquip(3), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT + 42 * 3, + EQUIP_BLOCK_TOP + 45 * 3, + core.getEquip(4), + "#D1CEFF", + "无" + ); + drawEquip( + EQUIP_BLOCK_LEFT + 85 * 3, + EQUIP_BLOCK_TOP + 45 * 3, + core.getEquip(5), + "#D1CEFF", + "无" + ); + } + } + _update_keys() { + const drawKeyList = (baseX, baseY) => { + const todraw = [], + keyList = ["yellowKey", "blueKey", "redKey", "greenKey"]; + let total = 0; + keyList.forEach(function (key, i) { + todraw[i] = core.itemCount(key); + total += todraw[i]; + }); + + let dn = 3; + for (let i = 0; i <= dn; i++) { + let delta = i * 32 * 3; + + if (core.domStyle.isVertical) { + this.drawKey(keyList[i], baseX, baseY + delta); + } else { + this.drawKey(keyList[i], baseX + delta, baseY); + } + + core.setFont("outerUI", "bold 48px Verdana"); + core.setTextAlign("outerUI", "left"); + if (core.domStyle.isVertical) { + core.fillText( + "outerUI", + todraw[i], + baseX + 20 * 3, + baseY + 14 * 3 + delta, + TEXT_COLOR + ); + } else { + core.fillText( + "outerUI", + todraw[i], + baseX + delta, + baseY + 32 * 3, + TEXT_COLOR + ); + } + } + }; + if (core.domStyle.isVertical) { + core.clearMap( + "outerUI", + KEY_BLOCK_LEFT_VERTICAL, + KEY_BLOCK_TOP_VERTICAL, + 45 * 3, + 130 * 3 + ); + drawKeyList( + KEY_BLOCK_LEFT_VERTICAL + 3 * 3, + KEY_BLOCK_TOP_VERTICAL + 5 * 3 + ); + } else { + core.clearMap( + "outerUI", + KEY_BLOCK_LEFT, + KEY_BLOCK_TOP, + 130 * 3, + 45 * 3 + ); + drawKeyList(KEY_BLOCK_LEFT + 10 * 3, KEY_BLOCK_TOP); + } + } + drawKey(key, x, y) { + let sx = 0, + sy = 0; + + if (key == "yellowKey") sx += 13; + else if (key == "blueKey") sx += 26; + else if (key == "greenKey") sx += 39; + + core.drawImage( + "outerUI", + "maba.webp", + sx, + sy, + 13, + 26, + x, + y, + 13 * 3, + 26 * 3 + ); + } + _update_infoWindow() { + const itemId = this.selectedItem; + let text = ""; + if (this.selectedItem) { + text = core.replaceText(core.material.items[itemId]?.text); + if (text[0] == "," || text[0] == ",") text = text.substring(1); + } + if (core.domStyle.isVertical) { + core.clearMap( + "outerUI", + INFO_BLOCK_LEFT_VERTICAL, + INFO_BLOCK_TOP_VERTICAL, + 300 * 3, + 120 * 3 + ); + + if (this.selectedItem) { + const icon = core.material.icons.items[itemId]; + core.setTextAlign("outerUI", "left"); + core.fillText( + "outerUI", + core.material.items[itemId].name, + INFO_BLOCK_LEFT_VERTICAL + 50 * 3, + INFO_BLOCK_TOP_VERTICAL + 27 * 3, + "#D1CEFF" + ); + core.drawImage( + "outerUI", + core.material.images.items, + 0, + 32 * icon, + 32, + 32, + INFO_BLOCK_LEFT_VERTICAL + 10 * 3, + INFO_BLOCK_TOP_VERTICAL + 8 * 3, + 32 * 3, + 32 * 3 + ); + core.ui.drawTextContent("outerUI", text, { + left: INFO_BLOCK_LEFT_VERTICAL + 10 * 3, + top: INFO_BLOCK_TOP_VERTICAL + 40 * 3, + maxWidth: 275 * 3, + color: "#D1CEFF", + fontSize: 36, + }); + } + } else { + core.clearMap( + "outerUI", + INFO_BLOCK_LEFT, + INFO_BLOCK_TOP, + 115 * 3, + 230 * 3 + ); + + if (this.selectedItem) { + const icon = core.material.icons.items[itemId]; + core.setTextAlign("outerUI", "center"); + core.fillText( + "outerUI", + core.material.items[itemId].name, + INFO_BLOCK_LEFT + 60 * 3, + INFO_BLOCK_TOP + 25 * 3, + "#D1CEFF" + ); + core.drawImage( + "outerUI", + core.material.images.items, + 0, + 32 * icon, + 32, + 32, + INFO_BLOCK_LEFT + 45 * 3, + INFO_BLOCK_TOP + 30 * 3, + 32 * 3, + 32 * 3 + ); + core.ui.drawTextContent("outerUI", text, { + left: INFO_BLOCK_LEFT + 10 * 3, + top: INFO_BLOCK_TOP + 60 * 3, + maxWidth: 105 * 3, + color: "#D1CEFF", + fontSize: 36, + }); + } + } + } + showItemInfo(itemId) { + //展示道具说明 + this.selectedItem = itemId; + this._update_infoWindow(); + } + clearItemInfo() { + //清除道具说明 + this.selectedItem = null; + this._update_infoWindow(); + } + _update_toolBox() { + const tools = core.isReplaying() ? [ + [core.status.replay.pausing ? "play" : "pause", "stop", "rewind"], + ["speedDown", "speedUp", "save"], + ] : [ + ["keyboard", "shop", "pack", "T332"], + ["settings", "save", "load", "T331"], + ]; + if (core.domStyle.isVertical) { + core.clearMap( + "outerUI", + TOOL_BOX_LEFT_VERTICAL, + TOOL_BOX_TOP_VERTICAL, + 115, + 130 + ); + + for (let i = 0; i < tools.length; i++) { + for (let j = 0; j < tools[i].length; j++) { + core.drawIcon( + "outerUI", + tools[i][j], + TOOL_BOX_LEFT_VERTICAL + i * 31 * 3, + TOOL_BOX_TOP_VERTICAL + j * 31 * 3, + 30 * 3, + 30 * 3 + ); + } + } + } else { + core.clearMap( + "outerUI", + TOOL_BOX_LEFT, + TOOL_BOX_TOP, + 130 * 3, + 80 * 3 + ); + + for (let i = 0; i < tools.length; i++) { + for (let j = 0; j < tools[i].length; j++) { + core.drawIcon( + "outerUI", + tools[i][j], + TOOL_BOX_LEFT + j * 31 * 3, + TOOL_BOX_TOP + i * 31 * 3, + 30 * 3, + 30 * 3 + ); + } + } + } + } + onclick(x, y) { + const makeBox = ([x, y], [w, h]) => { + return [ + [x, y], + [x + w, y + h], + ]; + }; + const gridify = ([x, y], [gw, gh]) => { + return [Math.floor(x / gw), Math.floor(y / gh)]; + }; + const useItem = (itemId) => { + if (!core.hasItem(itemId)) return; + + if (itemId != this.selectedItem) { + this.showItemInfo(itemId); + } else { + switch (itemId) { + case "centerFly": + core.ui._drawCenterFly(); + break; + case "book": + core.openBook(true); + break; + case "wand": + core.insertAction({ + type: "useItem", + id: itemId, + }); + break; + case "fly": + core.useItem(itemId); + break; + default: + core.useItem(itemId); + } + } + }; + const inRect = ([x, y], [ + [sx, sy], + [dx, dy] + ]) => { + return sx <= x && x <= dx && sy <= y && y <= dy; + }; + const relativeTo = ([x, y], [ax, ay]) => { + return [x - ax, y - ay]; + }; + const pos = [x, y]; + if (core.domStyle.isVertical) { + const itemBox = makeBox( + [ITEM_BOX_LEFT_VERTICAL, ITEM_BOX_TOP_VERTICAL], + [30 * 6 * 3, 31 * 4 * 3] + ); + if (inRect(pos, itemBox)) { + const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [ + 30 * 3, + 31 * 3, + ]); + const itemId = this.itemMx[gx][gy]; + if ( + (core.status.event.id == "viewMaps" || + core.status.event.id == "fly") && + itemId === "book" + ) + core.openBook(true); + if ( + core.isReplaying() || + core.status.lockControl || + core.isMoving() + ) + return; + useItem(itemId); + return; + } + const toolBox = makeBox( + [TOOL_BOX_LEFT_VERTICAL, TOOL_BOX_TOP_VERTICAL], + [31 * 2 * 3, 31 * 4 * 3] + ); + if (inRect(pos, toolBox)) { + const [col, row] = gridify(relativeTo(pos, toolBox[0]), [ + 31 * 3, + 31 * 3, + ]); + if (core.status.lockControl || core.isMoving()) return; + if (core.isReplaying()) { + this.replayAction[col][row].call(core); + } else if (core.isPlaying()) { + if (col === 0 && row === 3) { + core.doSL("autoSave", "load"); + } else if (col === 1 && row === 3) { + core.doSL("autoSave", "reload"); + } else { + this.toolbarAction[col][row].call(core, true); + } + } + return; + } + const mapBox = makeBox( + [MAP_BLOCK_LEFT_VERTICAL, MAP_BLOCK_TOP_VERTICAL], + [350, 350] + ); + if (inRect(pos, mapBox)) { + if ( + core.isReplaying() || + core.status.lockControl || + core.isMoving() + ) + return; + core.useItem("fly"); + return; + } + /*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3]) if (inRect(pos, equipBox)) { if (core.isReplaying() || core.status.lockControl || core.isMoving()) return; core.openEquipbox(true) return; }*/ - } else { - const mapBox = makeBox([MAP_BLOCK_LEFT, MAP_BLOCK_TOP], [350, 350]); - if (inRect(pos, mapBox)) { - if ( - core.isReplaying() || - core.status.lockControl || - core.isMoving() - ) - return; - core.useItem("fly"); - return; - } - /* + } else { + const mapBox = makeBox([MAP_BLOCK_LEFT, MAP_BLOCK_TOP], [350, 350]); + if (inRect(pos, mapBox)) { + if ( + core.isReplaying() || + core.status.lockControl || + core.isMoving() + ) + return; + core.useItem("fly"); + return; + } + /* const equipBox = makeBox([EQUIP_BLOCK_LEFT, EQUIP_BLOCK_TOP], [130, 95]) if (inRect(pos, equipBox)) { if (core.isReplaying() || core.status.lockControl || core.isMoving()) return; core.openEquipbox(true) return; }*/ - const itemBox = makeBox( - [ITEM_BOX_LEFT, ITEM_BOX_TOP], - [31 * 4 * 3, 30 * 6 * 3] - ); - if (inRect(pos, itemBox)) { - const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [ - 31 * 3, - 30 * 3, - ]); - const itemId = this.itemMx[gy][gx]; - if ( - (core.status.event.id == "viewMaps" || - core.status.event.id == "fly") && - itemId === "book" - ) - core.openBook(true); - if ( - core.isReplaying() || - core.status.lockControl || - core.isMoving() - ) - return; - useItem(itemId); - return; - } - const toolBox = makeBox( - [TOOL_BOX_LEFT, TOOL_BOX_TOP], - [31 * 4 * 3, 31 * 2 * 3] - ); - if (inRect(pos, toolBox)) { - const [row, col] = gridify(relativeTo(pos, toolBox[0]), [ - 31 * 3, - 31 * 3, - ]); - if (core.status.lockControl || core.isMoving()) return; - if (core.isReplaying()) { - this.replayAction[col][row].call(core); - } else if (core.isPlaying()) { - if (col === 0 && row === 3) { - core.doSL("autoSave", "load"); - } else if (col === 1 && row === 3) { - core.doSL("autoSave", "reload"); - } else { - this.toolbarAction[col][row].call(core, true); - } - } - return; - } - } - } - } + const itemBox = makeBox( + [ITEM_BOX_LEFT, ITEM_BOX_TOP], + [31 * 4 * 3, 30 * 6 * 3] + ); + if (inRect(pos, itemBox)) { + const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [ + 31 * 3, + 30 * 3, + ]); + const itemId = this.itemMx[gy][gx]; + if ( + (core.status.event.id == "viewMaps" || + core.status.event.id == "fly") && + itemId === "book" + ) + core.openBook(true); + if ( + core.isReplaying() || + core.status.lockControl || + core.isMoving() + ) + return; + useItem(itemId); + return; + } + const toolBox = makeBox( + [TOOL_BOX_LEFT, TOOL_BOX_TOP], + [31 * 4 * 3, 31 * 2 * 3] + ); + if (inRect(pos, toolBox)) { + const [row, col] = gridify(relativeTo(pos, toolBox[0]), [ + 31 * 3, + 31 * 3, + ]); + if (core.status.lockControl || core.isMoving()) return; + if (core.isReplaying()) { + this.replayAction[col][row].call(core); + } else if (core.isPlaying()) { + if (col === 0 && row === 3) { + core.doSL("autoSave", "load"); + } else if (col === 1 && row === 3) { + core.doSL("autoSave", "reload"); + } else { + this.toolbarAction[col][row].call(core, true); + } + } + return; + } + } + } + } - core.ui.statusBar = new StatusBar(); + core.ui.statusBar = new StatusBar(); - core.control.clearStatusBar = function () { - core.clearMap("outerUI"); - }; - // init() called in `afterLoadResources`. - }, + core.control.clearStatusBar = function () { + core.clearMap("outerUI"); + }; + // init() called in `afterLoadResources`. +}, "override": function () { core.statusBar.icons = { floor: 0, @@ -16389,53 +16410,993 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }; }, "回合制boss战": function () { - // 在此增加新插件 - const boss = document.createElement("canvas"); //boss战画布设置 - boss.style.position = "absolute"; - boss.style.zIndex = 300; - boss.style.display = "none"; - boss.id = "boss"; - main.dom.gameGroup.insertAdjacentElement("afterend", boss); - boss.style.top = "50%"; - boss.style.left = "50%"; - boss.style.transform = "translate(-50%,-50%)"; - const ctx = boss.getContext("2d"); - main.dom.boss = boss; - boss.onclick = function (e) { - try { - e.preventDefault(); - if (core.isPlaying()) return false; - const left = core.dom.gameGroup.offsetLeft; - const top = core.dom.gameGroup.offsetTop; - const px = Math.floor((e.clientX - left) / core.domStyle.scale), - py = Math.floor((e.clientY - top) / core.domStyle.scale); - core.ui.boss.onclick(px * 3, py * 3); - } catch (ee) { - main.log(ee); - } - }; - class boss1 { - constructor() { - this.bg = ""; - } - cavans() { - if (core.domStyle.isVertical) { - ctx.canvas.width = 1248; - ctx.canvas.height = 2028; + // 在此增加新插件 + const boss = document.createElement("canvas"); //boss战画布设置 + boss.style.position = "absolute"; + boss.style.zIndex = 310; + boss.style.display = "none"; + boss.id = "boss"; + main.dom.gameGroup.insertAdjacentElement("afterend", boss); + boss.style.top = "50%"; + boss.style.left = "50%"; + boss.style.transform = "translate(-50%,-50%)"; + const ctx = boss.getContext("2d"); + main.dom.boss = boss; + const boss1 = document.createElement("canvas"); //boss战画布设置 + boss1.style.position = "absolute"; + boss1.style.zIndex = 300; + boss1.style.display = "none"; + boss1.id = "boss1"; + main.dom.gameGroup.insertAdjacentElement("afterend", boss1); + boss1.style.top = "50%"; + boss1.style.left = "50%"; + boss1.style.transform = "translate(-50%,-50%)"; + const ctx1 = boss1.getContext("2d"); + main.dom.boss1 = boss1; + const boss2 = document.createElement("canvas"); //boss战画布设置 + boss2.style.position = "absolute"; + boss2.style.zIndex = 301; + boss2.style.display = "none"; + boss2.id = "boss2"; + main.dom.gameGroup.insertAdjacentElement("afterend", boss2); + boss2.style.top = "50%"; + boss2.style.left = "50%"; + boss2.style.transform = "translate(-50%,-50%)"; + main.dom.boss2 = boss2; + const ctx2 = boss2.getContext("2d"); + const boss3 = document.createElement("canvas"); //boss战画布设置 + boss3.style.position = "absolute"; + boss3.style.zIndex = 302; + boss3.style.display = "none"; + boss3.id = "boss3"; + main.dom.gameGroup.insertAdjacentElement("afterend", boss3); + boss3.style.top = "50%"; + boss3.style.left = "50%"; + boss3.style.transform = "translate(-50%,-50%)"; + main.dom.boss3 = boss3; + const ctx3 = boss3.getContext("2d"); + const boss4 = document.createElement("canvas"); //boss战画布设置 + boss4.style.position = "absolute"; + boss4.style.zIndex = 303; + boss4.style.display = "none"; + boss4.id = "boss4"; + main.dom.gameGroup.insertAdjacentElement("afterend", boss4); + boss4.style.top = "50%"; + boss4.style.left = "50%"; + boss4.style.transform = "translate(-50%,-50%)"; + const ctx4 = boss4.getContext("2d"); + main.dom.boss4 = boss4; + boss.onclick = function (e) { + try { + e.preventDefault(); + if (core.isPlaying()) return false; + const left = core.dom.gameGroup.offsetLeft; + const top = core.dom.gameGroup.offsetTop; + const px = Math.floor((e.clientX - left) / core.domStyle.scale), + py = Math.floor((e.clientY - top) / core.domStyle.scale); + click(px * 3, py * 3); + } catch (ee) { + main.log(ee); + } + }; - core.setTextAlign(ctx, "center"); - } else { - ctx.canvas.width = 2028; - ctx.canvas.height = 1248; + function click(px, py) { + //点击效果 + const makeBox = ([x, y], [w, h]) => { + return [ + [x, y], + [x + w, y + h], + ]; + }; + const inRect = ([x, y], [ + [sx, sy], + [dx, dy] + ]) => { + return sx <= x && x <= dx && sy <= y && y <= dy; + }; + const pos = [px, py]; + } + class Boss { + constructor() { + //绘制需要的变量 + this.bg = ""; + this.heroImage = "tati_310101.webp" + this.hero = { hp: 1000, atk: 100, def: 100, spell: 100, speed: 10, mdef: 10 } + this.boss = { name: "菲奥奈", id: "feiaonai", image: "tati_050143.webp", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 } + this.enemy = [ + { name: "小蝙蝠", id: "bat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }, + { name: "红蝙蝠", id: "redBat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }, + { name: "大蝙蝠", id: "bigBat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }, + { name: "绿色史莱姆", id: "greenSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }, + { name: "红色史莱姆", id: "redSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }, + { name: "黑色史莱姆", id: "blackSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }, + ] + this.bossImage = "tati_050143.webp" + this.selection = "boss" + this.herobuff = ["sword1:1", "fly:30"] + this.bossbuff = ["fly:2", "book:12"] + this.enemybuff = [ + [], + [], + [], + [], + [], + [] + ] + } - core.setTextAlign(ctx, "center"); - } - } - start() {} - onclick(px, py) {} - } - core.ui.boss = new boss1(); - }, + async bossStart() { + core.lockControl() + await this.blackBg() + this.moveboss() + await this.movehero() + await this.moveStatus() + + + } + async bossEnd() { + await this.close() + + } + drawhero() { + core.clearMap(ctx2) + if (core.domStyle.isVertical) { + ctx2.canvas.width = 1248; + ctx2.canvas.height = 2028; + ctx2.save(); //保存设置 + ctx2.translate(1248, 0); //重新定位右上角为基准 + ctx2.rotate(Math.PI / 2); //旋转90度 + } else { + ctx2.canvas.width = 2028; + ctx2.canvas.height = 1248; + } + core.drawImage(ctx2, this.heroImage, 0, 168, 750, 1080) + ctx2.restore(); + } + movehero() { + boss2.style.display = "block" + core.clearMap(ctx2) + let time = 0, + px = -200; + return new Promise((resolve) => { + core.registerAnimationFrame("moveheroImage", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx2) + if (core.domStyle.isVertical) { + ctx2.canvas.width = 1248; + ctx2.canvas.height = 2028; + ctx2.save(); //保存设置 + ctx2.translate(1248, 0); //重新定位右上角为基准 + ctx2.rotate(Math.PI / 2); //旋转90度 + } else { + ctx2.canvas.width = 2028; + ctx2.canvas.height = 1248; + } + core.drawImage(ctx2, this.heroImage, px, 168, 750, 1080) + px += 10 + ctx2.restore(); + if (px >= 0) { + core.unregisterAnimationFrame("moveheroImage") + this.drawhero() + resolve() + + } + } + }) + }) + } + update() { + core.drawImage(ctx1, this.bg, 0, 0, 2028, 1248) + this.drawboss() + this.drawhero() + this.drawStatus() + } + drawboss() { + core.clearMap(ctx3) + if (core.domStyle.isVertical) { + ctx3.canvas.width = 1248; + ctx3.canvas.height = 2028; + ctx3.save(); //保存设置 + ctx3.translate(1248, 0); //重新定位右上角为基准 + ctx3.rotate(Math.PI / 2); //旋转90度 + } else { + ctx3.canvas.width = 2028; + ctx3.canvas.height = 1248; + } + core.drawImage(ctx3, this.bossImage, 1400, 168, 750, 1080) + + ctx3.restore(); + } + moveboss() { + boss3.style.display = "block" + core.clearMap(ctx3) + let time = 0, + px = 1600; + return new Promise((resolve) => { + core.registerAnimationFrame("movebossImage", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx3) + if (core.domStyle.isVertical) { + ctx3.canvas.width = 1248; + ctx3.canvas.height = 2028; + ctx3.save(); //保存设置 + ctx3.translate(1248, 0); //重新定位右上角为基准 + ctx3.rotate(Math.PI / 2); //旋转90度 + } else { + ctx3.canvas.width = 2028; + ctx3.canvas.height = 1248; + } + core.drawImage(ctx3, this.bossImage, px, 168, 750, 1080) + px -= 10 + ctx3.restore(); + if (px <= 1400) { + core.unregisterAnimationFrame("movebossImage") + this.drawboss() + resolve() + + } + } + }) + }) + } + drawStatus() { + + core.clearMap(ctx4) + if (core.domStyle.isVertical) { + ctx4.canvas.width = 1248; + ctx4.canvas.height = 2028; + ctx4.save(); //保存设置 + ctx4.translate(1248, 0); //重新定位右上角为基准 + ctx4.rotate(Math.PI / 2); //旋转90度 + } else { + ctx4.canvas.width = 2028; + ctx4.canvas.height = 1248; + } + core.drawWindowSkin("winskin.webp", ctx4, 600, 900, 900, 300, null, null, null, 3) + core.fillBoldText1( + ctx4, + hero.name, + 630, + 980, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "状态", + 880, + 980, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '生命 ' + this.hero.hp, + 630, + 1050, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '攻击 ' + this.hero.atk, + 630, + 1100, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '防御 ' + this.hero.def, + 630, + 1150, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '法强 ' + this.hero.spell, + 1080, + 1050, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '法抗 ' + this.hero.mdef + "%", + 1080, + 1100, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '速度 ' + this.hero.speed, + 1080, + 1150, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + let posx = 980 + this.herobuff.forEach(v => { + if (v) { + const a = v.split(":") + core.drawIcon(ctx4, a[0], posx, 930, 64, 64) + core.setTextAlign(ctx4, "right") + core.fillBoldText1( + ctx4, + a[1], + posx + 50, + 980, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(24, true) + ); + core.setTextAlign(ctx4, "left") + posx += 80 + } + }) + if (this.selection === "boss") { + core.drawWindowSkin("winskin.webp", ctx4, 50, 50, 1900, 200, null, null, null, 3) + core.fillBoldText1( + ctx4, + this.boss.name, + 100, + 120, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "状态", + 500, + 120, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "生命 " + this.boss.hp, + 100, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "攻击 " + this.boss.atk, + 500, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "防御 " + this.boss.def, + 900, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "法抗 " + this.boss.mdef + "%", + 1300, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "速度 " + this.boss.speed, + 1700, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + + ); + let posx = 600 + this.bossbuff.forEach(v => { + if (v) { + const a = v.split(":") + core.drawIcon(ctx4, a[0], posx, 80, 64, 64) + core.setTextAlign(ctx4, "right") + core.fillBoldText1( + ctx4, + a[1], + posx + 50, + 130, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(24, true) + ); + core.setTextAlign(ctx4, "left") + posx += 80 + } + }) + } else if (this.selection === "") {} else { + core.drawWindowSkin("winskin.webp", ctx4, 50, 50, 1900, 200, null, null, null, 3) + core.fillBoldText1( + ctx4, + this.enemy[this.selection].name, + 100, + 120, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "状态", + 500, + 120, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "生命 " + this.enemy[this.selection].hp, + 100, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "攻击 " + this.enemy[this.selection].atk, + 500, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "防御 " + this.enemy[this.selection].def, + 900, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "法抗 " + this.enemy[this.selection].mdef + "%", + 1300, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "速度 " + this.enemy[this.selection].speed, + 1700, + 220, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + + ); + let posx = 600 + this.enemybuff[this.selection].forEach(v => { + if (v) { + const a = v.split(":") + core.drawIcon(ctx4, a[0], posx, 80, 64, 64) + core.setTextAlign(ctx4, "right") + core.fillBoldText1( + ctx4, + a[1], + posx + 50, + 130, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(24, true) + ); + core.setTextAlign(ctx4, "left") + posx += 80 + } + }) + } + ctx4.restore(); + } + moveStatus() { + boss4.style.display = "block" + let time = 0, + posy = 400; + return new Promise((resolve) => { + core.registerAnimationFrame("moveStatus", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx4) + if (core.domStyle.isVertical) { + ctx4.canvas.width = 1248; + ctx4.canvas.height = 2028; + ctx4.save(); //保存设置 + ctx4.translate(1248, 0); //重新定位右上角为基准 + ctx4.rotate(Math.PI / 2); //旋转90度 + } else { + ctx4.canvas.width = 2028; + ctx4.canvas.height = 1248; + } + core.drawWindowSkin("winskin.webp", ctx4, 600, 900 + posy, 900, 300, null, null, null, 3) + core.fillBoldText1( + ctx4, + hero.name, + 630, + 980 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "状态", + 880, + 980 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '生命 ' + this.hero.hp, + 630, + 1050 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '攻击 ' + this.hero.atk, + 630, + 1100 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '防御 ' + this.hero.def, + 630, + 1150 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '法强 ' + this.hero.spell, + 1080, + 1050 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '法抗 ' + this.hero.mdef + "%", + 1080, + 1100 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + '速度 ' + this.hero.speed, + 1080, + 1150 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + let posx = 980 + this.herobuff.forEach(v => { + if (v) { + const a = v.split(":") + core.drawIcon(ctx4, a[0], posx, 930 + posy, 64, 64) + core.setTextAlign(ctx4, "right") + core.fillBoldText1( + ctx4, + a[1], + posx + 50, + 980 + posy, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(24, true) + ); + core.setTextAlign(ctx4, "left") + posx += 80 + } + }) + if (this.selection === "boss") { + core.drawWindowSkin("winskin.webp", ctx4, 50, 50 - posy / 2, 1900, 200, null, null, null, 3) + core.fillBoldText1( + ctx4, + this.boss.name, + 100, + 120 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "状态", + 500, + 120 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "生命 " + this.boss.hp, + 100, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "攻击 " + this.boss.atk, + 500, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "防御 " + this.boss.def, + 900, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "法抗 " + this.boss.mdef + "%", + 1300, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "速度 " + this.boss.speed, + 1700, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + + ); + let posx = 600 + this.bossbuff.forEach(v => { + if (v) { + const a = v.split(":") + core.drawIcon(ctx4, a[0], posx, 80 - posy / 2, 64, 64) + core.setTextAlign(ctx4, "right") + core.fillBoldText1( + ctx4, + a[1], + posx + 50, + 130 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(24, true) + ); + core.setTextAlign(ctx4, "left") + posx += 80 + } + }) + } else if (this.selection === "") {} else { + core.drawWindowSkin("winskin.webp", ctx4, 50, 50 - posy / 2, 1900, 200, null, null, null, 3) + core.fillBoldText1( + ctx4, + this.enemy[this.selection].name, + 100, + 120 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "状态", + 500, + 120 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "生命 " + this.enemy[this.selection].hp, + 100, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "攻击 " + this.enemy[this.selection].atk, + 500, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "防御 " + this.enemy[this.selection].def, + 900, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "法抗 " + this.enemy[this.selection].mdef + "%", + 1300, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + ); + core.fillBoldText1( + ctx4, + "速度 " + this.enemy[this.selection].speed, + 1700, + 220 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(44, true) + + ); + let posx = 600 + this.enemybuff[this.selection].forEach(v => { + if (v) { + const a = v.split(":") + core.drawIcon(ctx4, a[0], posx, 80 - posy / 2, 64, 64) + core.setTextAlign(ctx4, "right") + core.fillBoldText1( + ctx4, + a[1], + posx + 50, + 130 - posy / 2, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(24, true) + ); + core.setTextAlign(ctx4, "left") + posx += 80 + } + }) + } + ctx4.restore(); + posy -= 10 + if (posy <= 0) { + core.unregisterAnimationFrame("moveStatus") + this.drawStatus() + resolve() + } + } + }) + }) + } + close() { + let globalAlpha = 0, + time = 0 + boss.style.display = 'block' + return new Promise((resolve) => { + core.registerAnimationFrame("closeblack", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx) + if (core.domStyle.isVertical) { + ctx.canvas.width = 1248; + ctx.canvas.height = 2028; + ctx.save(); //保存设置 + ctx.translate(1248, 0); //重新定位右上角为基准 + ctx.rotate(Math.PI / 2); //旋转90度 + } else { + ctx.canvas.width = 2028; + ctx.canvas.height = 1248; + } + + + ctx.globalAlpha = globalAlpha; + + core.fillRect(ctx, 0, 0, 2028, 1248); + globalAlpha += 1 / 30 + ctx.restore(); + if (globalAlpha > 1) { + time = 0 + globalAlpha = 1 + core.unregisterAnimationFrame("closeblack") + boss1.style.display = 'none' + boss2.style.display = 'none' + boss3.style.display = 'none' + boss4.style.display = 'none' + core.registerAnimationFrame("closeblack2", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx) + if (core.domStyle.isVertical) { + ctx.canvas.width = 1248; + ctx.canvas.height = 2028; + ctx.save(); //保存设置 + ctx.translate(1248, 0); //重新定位右上角为基准 + ctx.rotate(Math.PI / 2); //旋转90度 + } else { + ctx.canvas.width = 2028; + ctx.canvas.height = 1248; + } + ctx.globalAlpha = globalAlpha + core.fillRect(ctx1, 0, 0, 2028, 1248, "#000000"); + ctx.restore(); + globalAlpha -= 1 / 30 + if (globalAlpha < 0) { + core.unregisterAnimationFrame("closeblack2") + boss.style.display = 'none' + core.unlockControl() + resolve() + } + } + }) + } + } + }) + }) + } + + blackBg() { + let globalAlpha = 0, + time = 0, + img = core.material.images.images[this.bg]; + boss1.style.display = 'block' + return new Promise((resolve) => { + core.registerAnimationFrame("bossblack", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx1) + if (core.domStyle.isVertical) { + ctx1.canvas.width = 1248; + ctx1.canvas.height = 2028; + ctx1.save(); //保存设置 + ctx1.translate(1248, 0); //重新定位右上角为基准 + ctx1.rotate(Math.PI / 2); //旋转90度 + } else { + ctx1.canvas.width = 2028; + ctx1.canvas.height = 1248; + } + + + ctx1.globalAlpha = globalAlpha; + + core.fillRect(ctx1, 0, 0, 2028, 1248); + globalAlpha += 1 / 30 + ctx1.restore(); + if (globalAlpha > 1) { + time = 0 + globalAlpha = 0 + core.unregisterAnimationFrame("bossblack") + core.registerAnimationFrame("bossBg", true, (temptime) => { + if (temptime - time > 1000 / 60) { + time = temptime + core.clearMap(ctx1) + if (core.domStyle.isVertical) { + ctx1.canvas.width = 1248; + ctx1.canvas.height = 2028; + ctx1.save(); //保存设置 + ctx1.translate(1248, 0); //重新定位右上角为基准 + ctx1.rotate(Math.PI / 2); //旋转90度 + } else { + ctx1.canvas.width = 2028; + ctx1.canvas.height = 1248; + } + + ctx1.globalAlpha = 1 + core.fillRect(ctx1, 0, 0, 2028, 1248); + ctx1.globalAlpha = globalAlpha + if (img) ctx1.drawImage(img, 0, 0, 2028, 1248); + ctx1.restore(); + globalAlpha += 1 / 30 + if (globalAlpha > 1) { + core.unregisterAnimationFrame("bossBg") + resolve() + } + } + }) + } + } + }) + }) + } + } + core.ui.boss = new Boss() + + + +}, "剧情视频引用": function () { // 在此增加新插件 let a; @@ -16620,127 +17581,127 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }; }, "帧动画/图片叠拼": function () { - // 在此增加新插件 - this.animationDrawable = function ( - allFarme, - color, - globalAlpha, - imageList, - soundList - ) { - if (!core.isPlaying()) { - return core.doAction(); - } - const over = main.dom.over; - const ctx = over.getContext("2d"); - over.style.display = "block"; + // 在此增加新插件 + this.animationDrawable = function ( + allFarme, + color, + globalAlpha, + imageList, + soundList + ) { + if (!core.isPlaying()) { + return core.doAction(); + } + const over = main.dom.over; + const ctx = over.getContext("2d"); + over.style.display = "block"; - let farme = 0; - let now = 0; - core.registerAnimationFrame( - "animationDrawable", - true, - function (timestamp) { - if (timestamp - now > 1000 / 60) { - now = timestamp; - if (core.domStyle.isVertical) { - over.width = 1248; - over.height = 2028; - ctx.save(); //保存设置 - ctx.translate(1248, 0); //重新定位右上角为基准 - ctx.rotate(Math.PI / 2); //旋转90度 - } else { - over.width = 2028; - over.height = 1248; - } + let farme = 0; + let now = 0; + core.registerAnimationFrame( + "animationDrawable", + true, + function (timestamp) { + if (timestamp - now > 1000 / 60) { + now = timestamp; + if (core.domStyle.isVertical) { + over.width = 1248; + over.height = 2028; + ctx.save(); //保存设置 + ctx.translate(1248, 0); //重新定位右上角为基准 + ctx.rotate(Math.PI / 2); //旋转90度 + } else { + over.width = 2028; + over.height = 1248; + } - ctx.globalAlpha = (globalAlpha ?? 100) / 100; - core.fillRect(ctx, 0, 0, 2028, 1248, color); + ctx.globalAlpha = (globalAlpha ?? 100) / 100; + core.fillRect(ctx, 0, 0, 2028, 1248, color); - imageList.forEach(function (one) { - if ( - farme >= (one.beforefarme ?? 0) && - farme <= (one.afterfarme ?? allFarme) - ) { - const img = core.material.images.images?.[one.image]; - if (img) { - const gla = one.globalAlpha ?? 100; - const agla = one.aglobalAlpha ?? gla, - beforefarme = one.beforefarme ?? 0; - const afterfarme = one.afterfarme ?? allFarme; + imageList.forEach(function (one) { + if ( + farme >= (one.beforefarme ?? 0) && + farme <= (one.afterfarme ?? allFarme) + ) { + const img = core.material.images.images?.[one.image]; + if (img) { + const gla = one.globalAlpha ?? 100; + const agla = one.aglobalAlpha ?? gla, + beforefarme = one.beforefarme ?? 0; + const afterfarme = one.afterfarme ?? allFarme; - ctx.globalAlpha = - (gla + - ((agla - gla) * (farme - beforefarme)) / - (afterfarme - beforefarme || 1)) / - 100; + ctx.globalAlpha = + (gla + + ((agla - gla) * (farme - beforefarme)) / + (afterfarme - beforefarme || 1)) / + 100; - const cx = - (one.cx ?? 0) + - (((one.acx ?? 0) - (one.cx ?? 0)) * - (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - cy = - (one.cy ?? 0) + - (((one.acy ?? 0) - (one.cy ?? 0)) * - (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - cw = - (one.cw ?? img.width) + - (((one.acw ?? img.width) - (one.cw ?? img.width)) * - (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - ch = - (one.ch ?? img.height) + - (((one.acw ?? img.height) - (one.cw ?? img.height)) * - (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - x = - (one.x ?? 0) + - (((one.ax ?? 0) - (one.x ?? 0)) * (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - y = - (one.y ?? 0) + - (((one.ay ?? 0) - (one.y ?? 0)) * (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - w = - (one.w ?? 2028) + - (((one.aw ?? 2028) - (one.w ?? 2028)) * - (farme - beforefarme)) / - (afterfarme - beforefarme || 1), - h = - (one.h ?? 1248) + - (((one.aw ?? 1248) - (one.w ?? 1248)) * - (farme - beforefarme)) / - (afterfarme - beforefarme || 1); - ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h); - } - } - }); - soundList.forEach(function (one) { - const lisen = - one.sound && - core.sounds[one.sound] && - core.musicStatus.soundStatus; - if (farme == one.startfarme && lisen) { - if (one.stopbefore) core.stopSound(); - core.playSound(one.sound); - } - }); - farme++; - ctx.globalAlpha = 1; - ctx.restore(); + const cx = + (one.cx ?? 0) + + (((one.acx ?? 0) - (one.cx ?? 0)) * + (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + cy = + (one.cy ?? 0) + + (((one.acy ?? 0) - (one.cy ?? 0)) * + (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + cw = + (one.cw ?? img.width) + + (((one.acw ?? img.width) - (one.cw ?? img.width)) * + (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + ch = + (one.ch ?? img.height) + + (((one.acw ?? img.height) - (one.cw ?? img.height)) * + (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + x = + (one.x ?? 0) + + (((one.ax ?? 0) - (one.x ?? 0)) * (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + y = + (one.y ?? 0) + + (((one.ay ?? 0) - (one.y ?? 0)) * (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + w = + (one.w ?? 2028) + + (((one.aw ?? 2028) - (one.w ?? 2028)) * + (farme - beforefarme)) / + (afterfarme - beforefarme || 1), + h = + (one.h ?? 1248) + + (((one.aw ?? 1248) - (one.w ?? 1248)) * + (farme - beforefarme)) / + (afterfarme - beforefarme || 1); + ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h); + } + } + }); + soundList.forEach(function (one) { + const lisen = + one.sound && + core.sounds[one.sound] && + core.musicStatus.soundStatus; + if (farme == one.startfarme && lisen) { + if (one.stopbefore) core.stopSound(); + core.playSound(one.sound); + } + }); + farme++; + ctx.globalAlpha = 1; + ctx.restore(); - if (farme > allFarme) { - core.unregisterAnimationFrame("animationDrawable"); - over.style.display = "none"; - core.doAction(); - } - } - } - ); - }; - }, + if (farme > allFarme) { + core.unregisterAnimationFrame("animationDrawable"); + over.style.display = "none"; + core.doAction(); + } + } + } + ); + }; +}, "musicMode": function () { // 在此增加新插件 const music = document.createElement("canvas");