From 900d186922a4b9c3e078ad5c803b28b107104d34 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 15 Jul 2020 17:06:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0UI=E7=BB=98=E5=88=B6=E7=9B=B8?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _docs/api.md | 75 ++------------- _server/CodeMirror/defs.js | 120 ++++-------------------- libs/actions.js | 184 ++++++++++++++++++------------------- libs/control.js | 20 ++-- libs/events.js | 20 ++-- libs/ui.js | 84 +++++++++-------- project/functions.js | 12 +-- project/plugins.js | 22 ++--- runtime.d.ts | 72 ++------------- 9 files changed, 208 insertions(+), 401 deletions(-) diff --git a/_docs/api.md b/_docs/api.md index f717f0c3..2b5767fb 100644 --- a/_docs/api.md +++ b/_docs/api.md @@ -1732,6 +1732,10 @@ clearTip: fn() clearUI: fn() 清空UI层内容 +clearUIEventSelector: fn(codes?: number|[number]) +清除若干个自绘的选择光标 +codes: 清除的光标编号;可以是单个编号或编号数组;不填则清除所有光标 + closePanel: fn() 结束一切事件和绘制,关闭UI窗口,返回游戏进程 @@ -1749,9 +1753,6 @@ deleteAllCanvas: fn() deleteCanvas: fn(name: string) 删除一个自定义画布 -drawAbout: fn() -绘制“关于”界面 - drawArrow: fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number) 在某个canvas上绘制一个箭头 @@ -1761,12 +1762,6 @@ drawBackground: fn(left: string, top: string, right: string, bottom: string, pos drawBook: fn(index?: ?) 绘制怪物手册 -drawBookDetail: fn(index?: ?) -绘制怪物属性的详细信息 - -drawCenterFly: fn() -绘制中心对称飞行器 - drawChoices: fn(content?: string, choices?: [?]) 绘制一个选项界面 @@ -1777,21 +1772,9 @@ text: 要绘制的内容,支持 ${} 语法 yesCallback: 点击确认后的回调 noCallback: 点击取消后的回调 -drawCursor: fn() -绘制键盘光标 - -drawEquipbox: fn(index?: ?) -绘制装备界面 - drawFly: fn(page?: ?) 绘制楼层传送器 -drawGameInfo: fn() -绘制游戏信息界面 - -drawHelp: fn() -绘制帮助页面 - drawIcon: fn(name: string|CanvasRenderingContext2D, id: string, x: number, y: number, w?: number, h?: number, frame?: number) 在某个canvas上绘制一个图标 @@ -1803,58 +1786,19 @@ image: 要绘制的图片,可以是一个全塔属性中定义的图片名( angle:旋转角度 参考资料:http://www.w3school.com.cn/html5/canvas_drawimage.asp -drawKeyBoard: fn() -绘制虚拟键盘 - drawLine: fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number) 在某个canvas上绘制一条线 参考资料:https://www.w3school.com.cn/tags/canvas_lineto.asp -drawLocalSaveSelect: fn() -绘制单存档界面 - -drawMaps: fn(index?: ?, x?: number, y?: number) -绘制浏览地图界面 - -drawNotes: fn() -绘制存档笔记 - drawPagination: fn(page?: ?, totalPage?: ?, y?: number) 绘制分页 -drawQuickShop: fn() -绘制快捷商店选择栏 - -drawReplay: fn() -绘制回放界面 - -drawSLPanel: fn(index?: ?, refresh?: bool) -绘制存档/读档界面 - drawScrollText: fn(content: string, time: number, lineHeight?: number, callback?: fn()) 绘制滚动字幕 -drawSettings: fn() -绘制系统菜单栏 - -drawStatistics: fn(floorIds?: string) -绘制“数据统计”界面 - drawStatusBar: fn() 绘制状态栏 -drawStorageRemove: fn() -绘制存档删除页面 - -drawSwitchs: fn() -绘制系统设置界面 - -drawSyncSave: fn() -绘制存档同步界面 - -drawSyncSelect: fn() -绘制存档同步选择页面 - drawText: fn(contents: string, callback?: fn()) 地图中间绘制一段文字 @@ -1876,15 +1820,16 @@ text: 要提示的字符串,支持${}语法 id: 要绘制的图标ID frame: 要绘制该图标的第几帧 -drawToolbox: fn(index?: ?) -绘制道具栏 +drawUIEventSelector: fn(code: number, background: string, x: number, y: number, w: number, h: number, z?: number) +自绘一个闪烁的选择光标 +code: 选择光标的编号,必填 +background: 要绘制的光标背景,必须是一个合法的WindowSkin +x, y, w, h: 绘制的坐标和长宽 +z: 可选,光标的的z值 drawWaiting: fn(text: string) 绘制等待界面 -drawWindowSelector: fn(background: ?, x: number, y: number, w: number, h: number) -绘制选择光标 - drawWindowSkin: fn(background: string, ctx: string|CanvasRenderingContext2D, x: number, y: number, w: string, h: string, direction?: string, px?: number, py?: number) 绘制WindowSkin diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js index acde71b0..ca857696 100644 --- a/_server/CodeMirror/defs.js +++ b/_server/CodeMirror/defs.js @@ -3331,19 +3331,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "deleteCanvas": { "!doc": "删除一个自定义画布", "!type": "fn(name: string)" - }, - "drawSLPanel": { - "!doc": "绘制存档/读档界面", - "!type": "fn(index?: ?, refresh?: bool)" - }, - "drawKeyBoard": { - "!doc": "绘制虚拟键盘", - "!type": "fn()" - }, - "drawStorageRemove": { - "!doc": "绘制存档删除页面", - "!type": "fn()" - }, + }, "deleteAllCanvas": { "!doc": "清空所有的自定义画布", "!type": "fn()" @@ -3359,31 +3347,15 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "setOpacity": { "!doc": "设置某个canvas整体的透明度;此函数直接改变画布本身,对已经绘制的内容也生效
如果仅想对接下来的绘制生效请使用setAlpha", "!type": "fn(name: string|CanvasRenderingContext2D, opacity: number)" - }, - "drawAbout": { - "!doc": "绘制“关于”界面", - "!type": "fn()" - }, + }, "getTextContentHeight": { "!doc": "获得某段文字的预计绘制高度;参数说明详见 drawTextContent", "!type": "fn(content: string, config?: ?)" - }, - "drawSwitchs": { - "!doc": "绘制系统设置界面", - "!type": "fn()" - }, - "drawSyncSelect": { - "!doc": "绘制存档同步选择页面", - "!type": "fn()" - }, + }, "drawArrow": { "!doc": "在某个canvas上绘制一个箭头", "!type": "fn(name: string|CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number)" - }, - "drawReplay": { - "!doc": "绘制回放界面", - "!type": "fn()" - }, + }, "strokeEllipse": { "!doc": "在某个canvas上绘制一个椭圆的边框", "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: string, lineWidth?: number)" @@ -3435,14 +3407,18 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "绘制一个确认框
此项会打断事件流,如需不打断版本的请使用core.myconfirm()
text: 要绘制的内容,支持 ${} 语法
yesCallback: 点击确认后的回调
noCallback: 点击取消后的回调", "!type": "fn(text: string, yesCallback?: fn(), noCallback?: fn())" }, + "drawUIEventSelector": { + "!doc": "自绘一个闪烁的选择光标
code: 选择光标的编号,必填
background: 要绘制的光标背景,必须是一个合法的WindowSkin
x, y, w, h: 绘制的坐标和长宽
z: 可选,光标的的z值", + "!type": "fn(code: number, background: string, x: number, y: number, w: number, h: number, z?: number)" + }, + "clearUIEventSelector": { + "!doc": "清除若干个自绘的选择光标
codes: 清除的光标编号;可以是单个编号或编号数组;不填则清除所有光标", + "!type": "fn(codes?: number|[number])" + }, "fillPolygon": { "!doc": "在某个canvas上绘制一个多边形", "!type": "fn(name: string|CanvasRenderingContext2D, nodes?: [[number]], style?: string)" }, - "drawStatistics": { - "!doc": "绘制“数据统计”界面", - "!type": "fn(floorIds?: string)" - }, "fillText": { "!doc": "在某个画布上绘制一段文字
text: 要绘制的文本
style: 绘制的样式
font: 绘制的字体
最大宽度,超过此宽度会自动放缩", "!url": "https://www.w3school.com.cn/tags/canvas_filltext.asp", @@ -3452,11 +3428,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "设置某个canvas的基准线
baseline: 可为alphabetic, top, hanging, middle, ideographic, bottom", "!url": "https://www.w3school.com.cn/tags/canvas_textbaseline.asp", "!type": "fn(name: string|CanvasRenderingContext2D, baseline: string)" - }, - "drawSettings": { - "!doc": "绘制系统菜单栏", - "!type": "fn()" - }, + }, "loadCanvas": { "!doc": "加载某个canvas状态", "!type": "fn(name: string|CanvasRenderingContext2D)" @@ -3474,11 +3446,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "设置某个canvas的线宽度", "!url": "https://www.w3school.com.cn/tags/canvas_linewidth.asp", "!type": "fn(name: string|CanvasRenderingContext2D, lineWidth: number)" - }, - "drawEquipbox": { - "!doc": "绘制装备界面", - "!type": "fn(index?: ?)" - }, + }, "drawTextBox": { "!doc": "绘制一个对话框", "!type": "fn(content: string, showAll?: bool)" @@ -3511,11 +3479,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "drawWindowSkin": { "!doc": "绘制WindowSkin", "!type": "fn(background: string, ctx: string|CanvasRenderingContext2D, x: number, y: number, w: string, h: string, direction?: string, px?: number, py?: number)" - }, - "drawGameInfo": { - "!doc": "绘制游戏信息界面", - "!type": "fn()" - }, + }, "fillRect": { "!doc": "绘制一个矩形。
x,y: 绘制的坐标
width,height: 绘制的长宽
style: 绘制的样式
angle: 旋转的角度,弧度制,如Math.PI/2代表90度", "!url": "https://www.w3school.com.cn/tags/canvas_fillrect.asp", @@ -3533,11 +3497,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "在某个canvas上绘制一个圆的边框", "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp", "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: ?, style?: string, lineWidth?: number)" - }, - "drawLocalSaveSelect": { - "!doc": "绘制单存档界面", - "!type": "fn()" - }, + }, "drawWaiting": { "!doc": "绘制等待界面", "!type": "fn(text: string)" @@ -3573,11 +3533,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "在某个canvas上绘制一个扇形", "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp", "!type": "fn(name: string|CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string)" - }, - "drawWindowSelector": { - "!doc": "绘制选择光标", - "!type": "fn(background: ?, x: number, y: number, w: number, h: number)" - }, + }, "strokeArc": { "!doc": "在某个canvas上绘制一段弧", "!url": "https://www.w3school.com.cn/tags/canvas_arc.asp", @@ -3591,35 +3547,11 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "drawPagination": { "!doc": "绘制分页", "!type": "fn(page?: ?, totalPage?: ?, y?: number)" - }, - "drawBookDetail": { - "!doc": "绘制怪物属性的详细信息", - "!type": "fn(index?: ?)" - }, + }, "getToolboxItems": { "!doc": "获得所有应该在道具栏显示的某个类型道具", "!type": "fn(cls: string) -> [string]" }, - "drawToolbox": { - "!doc": "绘制道具栏", - "!type": "fn(index?: ?)" - }, - "drawHelp": { - "!doc": "绘制帮助页面", - "!type": "fn()" - }, - "drawNotes": { - "!doc": "绘制存档笔记", - "!type": "fn()" - }, - "drawQuickShop": { - "!doc": "绘制快捷商店选择栏", - "!type": "fn()" - }, - "drawCenterFly": { - "!doc": "绘制中心对称飞行器", - "!type": "fn()" - }, "strokeRect": { "!doc": "绘制一个矩形的边框
style: 绘制的样式
lineWidth: 线宽
angle: 旋转角度,弧度制,如Math.PI/2为90度", "!url": "https://www.w3school.com.cn/tags/canvas_strokerect.asp", @@ -3636,18 +3568,10 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "fillBoldText": { "!doc": "在某个画布上绘制一个描边文字
text: 要绘制的文本
style: 绘制的样式
strokeStyle: 要绘制的描边颜色
font: 绘制的字体", "!type": "fn(name: string|CanvasRenderingContext2D, text: string, x: number, y: number, style?: string, strokeStyle?: string, font?: string)" - }, - "drawSyncSave": { - "!doc": "绘制存档同步界面", - "!type": "fn()" - }, + }, "saveCanvas": { "!doc": "保存某个canvas状态", "!type": "fn(name: string|CanvasRenderingContext2D)" - }, - "drawCursor": { - "!doc": "绘制键盘光标", - "!type": "fn()" }, "createCanvas": { "!doc": "动态创建一个画布。
name: 要创建的画布名,如果已存在则会直接取用当前存在的。
x,y: 创建的画布相对窗口左上角的像素坐标
width,height: 创建的长宽。
zIndex: 创建的纵向高度(关系到画布之间的覆盖),z值高的将覆盖z值低的;系统画布的z值可在个性化中查看。
返回创建的画布的context,也可以通过core.dymCanvas[name]调用。", @@ -3657,11 +3581,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [ "!doc": "设置某个canvas的对齐", "!url": "https://www.w3school.com.cn/tags/canvas_textalign.asp", "!type": "fn(name: string|CanvasRenderingContext2D, align: string)" - }, - "drawMaps": { - "!doc": "绘制浏览地图界面", - "!type": "fn(index?: ?, x?: number, y?: number)" - } + }, }, "enemys": { "!doc": "定义了一系列和怪物相关的API函数。", diff --git a/libs/actions.js b/libs/actions.js index e823a25f..0e1d0dcb 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -178,7 +178,7 @@ actions.prototype._sys_onkeyUp_replay = function (e) { else if (e.keyCode == 81) // Q core.equipboxReplay(); else if (e.keyCode == 66) // B - core.drawStatistics(); + core.ui._drawStatistics(); else if (e.keyCode >= 49 && e.keyCode <= 51) // 1-3 core.setReplaySpeed(e.keyCode - 48); else if (e.keyCode == 52) // 4 @@ -712,8 +712,8 @@ actions.prototype._sys_onmousewheel = function (direct) { // 存读档 if (core.status.lockControl && (core.status.event.id == 'save' || core.status.event.id == 'load')) { var index = core.status.event.data.page*10+core.status.event.data.offset; - if (direct == 1) core.ui.drawSLPanel(index - 10); - if (direct == -1) core.ui.drawSLPanel(index + 10); + if (direct == 1) core.ui._drawSLPanel(index - 10); + if (direct == -1) core.ui._drawSLPanel(index + 10); return; } @@ -810,7 +810,7 @@ actions.prototype._sys_longClick = function (x, y, fromEvent) { if (!core.status.lockControl && !fromEvent) { // 虚拟键盘 core.waitHeroToStop(function () { - core.ui.drawKeyBoard(); + core.ui._drawKeyBoard(); }); return true; } @@ -1070,7 +1070,7 @@ actions.prototype._clickBook = function (x, y) { } else if (core.status.event.ui != null) { core.status.boxAnimateObjs = []; - core.ui.drawMaps(core.status.event.ui); + core.ui._drawViewMaps(core.status.event.ui); } else core.ui.closePanel(); return; @@ -1085,7 +1085,7 @@ actions.prototype._clickBook = function (x, y) { if (y >= u*i && y < u*(i+1)) { var index = per_page * page + i; core.ui.drawBook(index); - core.ui.drawBookDetail(index); + core.ui._drawBookDetail(index); break; } } @@ -1113,7 +1113,7 @@ actions.prototype._keyUpBook = function (keycode) { } else if (core.status.event.ui != null) { core.status.boxAnimateObjs = []; - core.ui.drawMaps(core.status.event.ui); + core.ui._drawViewMaps(core.status.event.ui); } else core.ui.closePanel(); return; @@ -1121,7 +1121,7 @@ actions.prototype._keyUpBook = function (keycode) { if (keycode == 13 || keycode == 32 || keycode == 67) { var data = core.status.event.data; if (data != null) { - core.ui.drawBookDetail(data); + core.ui._drawBookDetail(data); } return; } @@ -1185,7 +1185,7 @@ actions.prototype._keyUpFly = function (keycode) { ////// 查看地图界面时的点击操作 ////// actions.prototype._clickViewMaps = function (x, y) { if (core.status.event.data == null) { - core.ui.drawMaps(core.floorIds.indexOf(core.status.floorId)); + core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); return; } var now = core.floorIds.indexOf(core.status.floorId); @@ -1196,35 +1196,35 @@ actions.prototype._clickViewMaps = function (x, y) { if (x <= per - 2 && y <= per - 2) { core.status.event.data.damage = !core.status.event.data.damage; - core.ui.drawMaps(index, cx, cy); + core.ui._drawViewMaps(index, cx, cy); return; } if (x <= per - 2 && y >= this.SIZE + 1 - per) { if (core.markedFloorIds[floorId]) delete core.markedFloorIds[floorId]; else core.markedFloorIds[floorId] = true; - core.ui.drawMaps(index, cx, cy); + core.ui._drawViewMaps(index, cx, cy); return; } if (x >= this.SIZE + 1 - per && y <= per - 2) { core.status.event.data.all = !core.status.event.data.all; - core.ui.drawMaps(index, cx, cy); + core.ui._drawViewMaps(index, cx, cy); return; } if (x >= per && x <= this.LAST - per && y <= per - 1 && (!core.status.event.data.all && mh > this.SIZE)) { - core.ui.drawMaps(index, cx, cy - 1); + core.ui._drawViewMaps(index, cx, cy - 1); return; } if (x >= per && x <= this.LAST - per && y >= this.SIZE - per && (!core.status.event.data.all && mh > this.SIZE)) { - core.ui.drawMaps(index, cx, cy + 1); + core.ui._drawViewMaps(index, cx, cy + 1); return; } if (x <= per - 1 && y >= per && y <= this.LAST - per) { - core.ui.drawMaps(index, cx - 1, cy); + core.ui._drawViewMaps(index, cx - 1, cy); return; } if (x >= this.SIZE - per && y >= per && y <= this.LAST - per) { - core.ui.drawMaps(index, cx + 1, cy); + core.ui._drawViewMaps(index, cx + 1, cy); return; } @@ -1233,7 +1233,7 @@ actions.prototype._clickViewMaps = function (x, y) { while (index < core.floorIds.length && index != now && core.status.maps[core.floorIds[index]].cannotViewMap) index++; if (index < core.floorIds.length) - core.ui.drawMaps(index); + core.ui._drawViewMaps(index); return; } if (y >= this.HSIZE + 2 && (mh == this.SIZE || (x >= per && x <= this.LAST - per))) { @@ -1241,7 +1241,7 @@ actions.prototype._clickViewMaps = function (x, y) { while (index >= 0 && index != now && core.status.maps[core.floorIds[index]].cannotViewMap) index--; if (index >= 0) - core.ui.drawMaps(index); + core.ui._drawViewMaps(index); return; } if (x >= per && x <= this.LAST - per && y >= this.HSIZE - 1 && y <= this.HSIZE + 1) { @@ -1269,7 +1269,7 @@ actions.prototype._keyDownViewMaps = function (keycode) { ////// 查看地图界面时,放开某个键的操作 ////// actions.prototype._keyUpViewMaps = function (keycode) { if (core.status.event.data == null) { - core.ui.drawMaps(core.floorIds.indexOf(core.status.floorId)); + core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); return; } var floorId = core.floorIds[core.status.event.data.index]; @@ -1281,18 +1281,18 @@ actions.prototype._keyUpViewMaps = function (keycode) { } if (keycode == 86) { core.status.event.data.damage = !core.status.event.data.damage; - core.ui.drawMaps(core.status.event.data); + core.ui._drawViewMaps(core.status.event.data); return; } if (keycode == 90) { core.status.event.data.all = !core.status.event.data.all; - core.ui.drawMaps(core.status.event.data); + core.ui._drawViewMaps(core.status.event.data); return; } if (keycode == 66) { if (core.markedFloorIds[floorId]) delete core.markedFloorIds[floorId]; else core.markedFloorIds[floorId] = true; - core.ui.drawMaps(core.status.event.data); + core.ui._drawViewMaps(core.status.event.data); return; } if (keycode == 88 || (core.isReplaying() && keycode == 67)) { @@ -1369,22 +1369,22 @@ actions.prototype._clickToolbox = function (x, y) { if (x == this.HSIZE-2 || x == this.HSIZE-3) { if (y == this.LAST - 5 && toolsPage > 1) { core.status.event.data.toolsPage--; - core.ui.drawToolbox(core.status.event.selection); + core.ui._drawToolbox(core.status.event.selection); } if (y == this.LAST && constantsPage > 1) { core.status.event.data.constantsPage--; - core.ui.drawToolbox(core.status.event.selection); + core.ui._drawToolbox(core.status.event.selection); } } // 下一页 if (x == this.HSIZE+2 || x == this.HSIZE+3) { if (y == this.LAST - 5 && toolsPage < Math.ceil(tools.length / this.LAST)) { core.status.event.data.toolsPage++; - core.ui.drawToolbox(core.status.event.selection); + core.ui._drawToolbox(core.status.event.selection); } if (y == this.LAST && constantsPage < Math.ceil(constants.length / this.LAST)) { core.status.event.data.constantsPage++; - core.ui.drawToolbox(core.status.event.selection); + core.ui._drawToolbox(core.status.event.selection); } } @@ -1421,7 +1421,7 @@ actions.prototype._clickToolboxIndex = function (index) { core.events.tryUseItem(itemId); } else { - core.ui.drawToolbox(index); + core.ui._drawToolbox(index); } } @@ -1559,7 +1559,7 @@ actions.prototype._clickEquipbox = function (x, y) { if ((x == this.HSIZE-2 || x == this.HSIZE-3) && y == this.LAST) { if (core.status.event.data.page > 1) { core.status.event.data.page--; - core.ui.drawEquipbox(core.status.event.selection); + core.ui._drawEquipbox(core.status.event.selection); } return; } @@ -1568,7 +1568,7 @@ actions.prototype._clickEquipbox = function (x, y) { var lastPage = Math.ceil(core.getToolboxItems('equips').length / this.LAST); if (core.status.event.data.page < lastPage) { core.status.event.data.page++; - core.ui.drawEquipbox(core.status.event.selection); + core.ui._drawEquipbox(core.status.event.selection); } return; } @@ -1609,7 +1609,7 @@ actions.prototype._clickEquipboxIndex = function (index) { core.status.route.push("equip:" + equipId); } } - core.ui.drawEquipbox(index); + core.ui._drawEquipbox(index); } ////// 装备栏界面时,按下某个键的操作 ////// @@ -1720,12 +1720,12 @@ actions.prototype._clickSL = function (x, y) { // 上一页 if ((x == this.HSIZE-2 || x == this.HSIZE-3) && y == this.LAST) { - core.ui.drawSLPanel(10 * (page - 1) + offset); + core.ui._drawSLPanel(10 * (page - 1) + offset); return; } // 下一页 if ((x == this.HSIZE+2 || x == this.HSIZE+3) && y == this.LAST) { - core.ui.drawSLPanel(10 * (page + 1) + offset); + core.ui._drawSLPanel(10 * (page + 1) + offset); return; } // 返回 @@ -1742,16 +1742,16 @@ actions.prototype._clickSL = function (x, y) { if (x >= 0 && x <= 2 && y == this.LAST) { if (core.status.event.id == 'save') { core.status.event.selection = !core.status.event.selection; - core.ui.drawSLPanel(index); + core.ui._drawSLPanel(index); } else { // 显示收藏 core.status.event.data.mode = core.status.event.data.mode == 'all'?'fav':'all'; if (core.status.event.data.mode == 'fav') - core.ui.drawSLPanel(1, true); + core.ui._drawSLPanel(1, true); else { page = parseInt((core.saves.saveIndex-1)/5); offset = core.saves.saveIndex-5*page; - core.ui.drawSLPanel(10*page + offset, true); + core.ui._drawSLPanel(10*page + offset, true); } } return; @@ -1786,7 +1786,7 @@ actions.prototype._clickSL = function (x, y) { core.drawTip("无法删除自动存档!"); else { core.removeSave(id, function () { - core.ui.drawSLPanel(index, true); + core.ui._drawSLPanel(index, true); }); } } @@ -1807,7 +1807,7 @@ actions.prototype._clickSL_favorite = function (page, offset) { if(value && value.length <= 5){ core.saves.favoriteName[index] = value; core.control._updateFavoriteSaves(); - core.drawSLPanel(10 * page + offset); + core.ui._drawSLPanel(10 * page + offset); } else if (value) { alert("无效的输入!"); } @@ -1824,7 +1824,7 @@ actions.prototype._clickSL_favorite = function (page, offset) { core.drawTip("收藏成功!"); } core.control._updateFavoriteSaves(); - core.ui.drawSLPanel(10 * page + offset); + core.ui._drawSLPanel(10 * page + offset); } } @@ -1837,46 +1837,46 @@ actions.prototype._keyDownSL = function (keycode) { if (keycode == 37) { // left if (offset == 0) { - core.ui.drawSLPanel(10 * (page - 1) + 5); + core.ui._drawSLPanel(10 * (page - 1) + 5); } else { - core.ui.drawSLPanel(index - 1); + core.ui._drawSLPanel(index - 1); } return; } if (keycode == 38) { // up if (offset < 3) { - core.ui.drawSLPanel(10 * (page - 1) + offset + 3); + core.ui._drawSLPanel(10 * (page - 1) + offset + 3); } else { - core.ui.drawSLPanel(index - 3); + core.ui._drawSLPanel(index - 3); } return; } if (keycode == 39) { // right if (offset == 5) { - core.ui.drawSLPanel(10 * (page + 1) + 1); + core.ui._drawSLPanel(10 * (page + 1) + 1); } else { - core.ui.drawSLPanel(index + 1); + core.ui._drawSLPanel(index + 1); } return; } if (keycode == 40) { // down if (offset >= 3) { - core.ui.drawSLPanel(10 * (page + 1) + offset - 3); + core.ui._drawSLPanel(10 * (page + 1) + offset - 3); } else { - core.ui.drawSLPanel(index + 3); + core.ui._drawSLPanel(index + 3); } return; } if (keycode == 33) { // PAGEUP - core.ui.drawSLPanel(10 * (page - 1) + offset); + core.ui._drawSLPanel(10 * (page - 1) + offset); return; } if (keycode == 34) { // PAGEDOWN - core.ui.drawSLPanel(10 * (page + 1) + offset); + core.ui._drawSLPanel(10 * (page + 1) + offset); return; } } @@ -1893,7 +1893,7 @@ actions.prototype._keyUpSL = function (keycode) { } if (keycode >= 48 && keycode <= 57) { if (keycode == 48) keycode = 58; - core.ui.drawSLPanel((keycode - 49) * 1000 + 1); + core.ui._drawSLPanel((keycode - 49) * 1000 + 1); return; } if (keycode == 13 || keycode == 32 || keycode == 67) { @@ -1918,7 +1918,7 @@ actions.prototype._keyUpSL = function (keycode) { var id = 5 * page + offset; if(core.status.event.data.mode == 'fav') id = core.saves.favorite[id - 1]; core.removeSave(id, function () { - core.ui.drawSLPanel(index, true); + core.ui._drawSLPanel(index, true); }); } } @@ -1970,7 +1970,7 @@ actions.prototype._clickSwitchs = function (x, y) { return this._clickSwitchs_clickMove(); case 9: core.status.event.selection = 0; - core.ui.drawSettings(); + core.ui._drawSettings(); break; } } @@ -1994,7 +1994,7 @@ actions.prototype._clickSwitchs_bgmSound = function () { core.triggerBgm(); core.musicStatus.soundStatus = sound; core.setLocalStorage('soundStatus', core.musicStatus.soundStatus); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_userVolume = function (delta) { @@ -2005,19 +2005,19 @@ actions.prototype._clickSwitchs_userVolume = function (delta) { if (core.musicStatus.gainNode != null) core.musicStatus.gainNode.gain.value = core.musicStatus.userVolume; if (core.musicStatus.playingBgm) core.material.bgms[core.musicStatus.playingBgm].volume = core.musicStatus.userVolume * core.musicStatus.designVolume; core.setLocalStorage('userVolume', core.musicStatus.userVolume); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_moveSpeed = function (delta) { core.values.moveSpeed = core.clamp(core.values.moveSpeed + delta, 50, 200); core.setLocalStorage("moveSpeed", core.values.moveSpeed); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_floorChangeTime = function (delta) { core.values.floorChangeTime = core.clamp(core.values.floorChangeTime + delta, 0, 2000); core.setLocalStorage("floorChangeTime", core.values.floorChangeTime); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_setSize = function (delta) { @@ -2028,14 +2028,14 @@ actions.prototype._clickSwitchs_setSize = function (delta) { core.domStyle.scale = core.domStyle.availableScale[index]; core.setLocalStorage('scale', core.domStyle.scale); core.resize(); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_displayEnemyDamage = function () { core.flags.displayEnemyDamage = !core.flags.displayEnemyDamage; core.updateDamage(); core.setLocalStorage('enemyDamage', core.flags.displayEnemyDamage); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_displayCriticalExtra = function () { @@ -2059,26 +2059,26 @@ actions.prototype._clickSwitchs_displayCriticalExtra = function () { core.updateDamage(); core.setLocalStorage('critical', core.flags.displayCritical); core.setLocalStorage('extraDamage', core.flags.displayExtraDamage); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_potionNoRouting = function () { if (core.hasFlag('__potionNoRouting__')) core.removeFlag('__potionNoRouting__'); else core.setFlag('__potionNoRouting__', true); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } actions.prototype._clickSwitchs_clickMove = function () { if (core.hasFlag('__noClickMove__')) core.removeFlag('__noClickMove__'); else core.setFlag('__noClickMove__', true); - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); } ////// 系统设置界面时,放开某个键的操作 ////// actions.prototype._keyUpSwitchs = function (keycode) { if (keycode == 27 || keycode == 88) { core.status.event.selection = 0; - core.ui.drawSettings(); + core.ui._drawSettings(); return; } if (keycode == 37) { @@ -2110,26 +2110,26 @@ actions.prototype._clickSettings = function (x, y) { switch (selection) { case 0: core.status.event.selection = 0; - core.ui.drawSwitchs(); + core.ui._drawSwitchs(); break; case 1: - core.ui.drawKeyBoard(); + core.ui._drawKeyBoard(); break; case 2: core.clearUI(); - core.ui.drawMaps(); + core.ui._drawViewMaps(); break; case 3: core.status.event.selection = 0; - core.ui.drawNotes(); + core.ui._drawNotes(); break; case 4: core.status.event.selection = 0; - core.ui.drawSyncSave(); + core.ui._drawSyncSave(); break; case 5: core.status.event.selection = 0; - core.ui.drawGameInfo(); + core.ui._drawGameInfo(); break; case 6: return core.confirmRestart(); @@ -2174,7 +2174,7 @@ actions.prototype._clickNotes = function (x, y) { break; case 4: core.status.event.selection = 3; - core.ui.drawSettings(); + core.ui._drawSettings(); break; } } @@ -2276,7 +2276,7 @@ actions.prototype._clickNotes_delete = function () { actions.prototype._keyUpNotes = function (keycode) { if (keycode == 27 || keycode == 88) { core.status.event.selection = 3; - core.ui.drawSettings(); + core.ui._drawSettings(); return; } this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickNotes); @@ -2293,14 +2293,14 @@ actions.prototype._clickSyncSave = function (x, y) { switch (selection) { case 0: core.status.event.selection = 0; - core.ui.drawSyncSelect(); + core.ui._drawSyncSelect(); break; case 1: core.syncLoad(); break; case 2: core.status.event.selection = 0; - core.ui.drawLocalSaveSelect(); + core.ui._drawLocalSaveSelect(); break; case 3: return this._clickSyncSave_readFile(); @@ -2308,11 +2308,11 @@ actions.prototype._clickSyncSave = function (x, y) { return this._clickSyncSave_replay(); case 5: core.status.event.selection = 0; - core.ui.drawStorageRemove(); + core.ui._drawStorageRemove(); break; case 6: core.status.event.selection = 4; - core.ui.drawSettings(); + core.ui._drawSettings(); break; } @@ -2330,14 +2330,14 @@ actions.prototype._clickSyncSave_readFile = function () { } actions.prototype._clickSyncSave_replay = function () { - core.ui.drawReplay(); + core.ui._drawReplay(); } ////// 同步存档界面时,放开某个键的操作 ////// actions.prototype._keyUpSyncSave = function (keycode) { if (keycode == 27 || keycode == 88) { core.status.event.selection = 2; - core.ui.drawSettings(); + core.ui._drawSettings(); return; } this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSyncSave); @@ -2363,7 +2363,7 @@ actions.prototype._clickSyncSelect = function (x, y) { break; case 2: core.status.event.selection = 0; - core.ui.drawSyncSave(); + core.ui._drawSyncSave(); break; } } @@ -2373,7 +2373,7 @@ actions.prototype._clickSyncSelect = function (x, y) { actions.prototype._keyUpSyncSelect = function (keycode) { if (keycode == 27 || keycode == 88) { core.status.event.selection = 0; - core.ui.drawSettings(); + core.ui._drawSettings(); return; } this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickSyncSelect); @@ -2405,7 +2405,7 @@ actions.prototype._clickLocalSaveSelect = function (x, y) { } core.status.event.selection = 2; - core.ui.drawSyncSave(); + core.ui._drawSyncSave(); } } @@ -2413,7 +2413,7 @@ actions.prototype._clickLocalSaveSelect = function (x, y) { actions.prototype._keyUpLocalSaveSelect = function (keycode) { if (keycode == 27 || keycode == 88) { core.status.event.selection = 0; - core.ui.drawSettings(); + core.ui._drawSettings(); return; } this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickLocalSaveSelect); @@ -2436,7 +2436,7 @@ actions.prototype._clickStorageRemove = function (x, y) { return this._clickStorageRemove_current(); case 2: core.status.event.selection = 6; - core.ui.drawSyncSave(); + core.ui._drawSyncSave(); break; } } @@ -2504,7 +2504,7 @@ actions.prototype._clickStorageRemove_current = function () { actions.prototype._keyUpStorageRemove = function (keycode) { if (keycode == 27 || keycode == 88) { core.status.event.selection = 5; - core.ui.drawSyncSave(); + core.ui._drawSyncSave(); return; } this._selectChoices(core.status.event.ui.choices.length, keycode, this._clickStorageRemove); @@ -2542,7 +2542,7 @@ actions.prototype._clickReplay_fromLoad = function () { core.clearUI(); var saveIndex = core.saves.saveIndex; var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui.drawSLPanel(10 * page + offset); + core.ui._drawSLPanel(10 * page + offset); } actions.prototype._clickReplay_replayRemain = function () { @@ -2556,7 +2556,7 @@ actions.prototype._clickReplay_replayRemain = function () { core.lockControl(); var saveIndex = core.saves.saveIndex; var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui.drawSLPanel(10 * page + offset); + core.ui._drawSLPanel(10 * page + offset); }); } @@ -2591,15 +2591,15 @@ actions.prototype._clickGameInfo = function (x, y) { var selection = y - topIndex; core.status.event.selection = selection; switch (selection) { - case 0: return core.ui.drawStatistics(); + case 0: return core.ui._drawStatistics(); case 1: return this._clickGameInfo_openProject(); case 2: return this._clickGameInfo_openComments(); - case 3: return core.ui.drawHelp(); - case 4: return core.ui.drawAbout(); + case 3: return core.ui._drawHelp(); + case 4: return core.ui._drawAbout(); case 5: return this._clickGameInfo_download(); case 6: core.status.event.selection = 5; - core.ui.drawSettings(); + core.ui._drawSettings(); break; } } @@ -2721,29 +2721,29 @@ actions.prototype._clickCursor = function (x, y) { } core.status.automaticRoute.cursorX = x; core.status.automaticRoute.cursorY = y; - core.ui.drawCursor(); + core.ui._drawCursor(); } ////// 光标界面时,按下某个键的操作 ////// actions.prototype._keyDownCursor = function (keycode) { if (keycode == 37) { // left core.status.automaticRoute.cursorX--; - core.ui.drawCursor(); + core.ui._drawCursor(); return; } if (keycode == 38) { // up core.status.automaticRoute.cursorY--; - core.ui.drawCursor(); + core.ui._drawCursor(); return; } if (keycode == 39) { // right core.status.automaticRoute.cursorX++; - core.ui.drawCursor(); + core.ui._drawCursor(); return; } if (keycode == 40) { // down core.status.automaticRoute.cursorY++; - core.ui.drawCursor(); + core.ui._drawCursor(); return; } } diff --git a/libs/control.js b/libs/control.js index 92c5191d..4f72fab5 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1401,7 +1401,7 @@ control.prototype.saveReplay = function () { var saveIndex = core.saves.saveIndex; var page=parseInt((saveIndex-1)/5), offset=saveIndex-5*page; - core.ui.drawSLPanel(10*page+offset); + core.ui._drawSLPanel(10*page+offset); } ////// 回放时查看怪物手册 ////// @@ -1431,7 +1431,7 @@ control.prototype.viewMapReplay = function () { core.lockControl(); core.status.event.id='viewMaps'; - core.ui.drawMaps(); + core.ui._drawViewMaps(); } control.prototype.toolboxReplay = function () { @@ -1442,7 +1442,7 @@ control.prototype.toolboxReplay = function () { core.lockControl(); core.status.event.id='toolbox'; - core.ui.drawToolbox(); + core.ui._drawToolbox(); } control.prototype.equipboxReplay = function () { @@ -1453,7 +1453,7 @@ control.prototype.equipboxReplay = function () { core.lockControl(); core.status.event.id='equipbox'; - core.ui.drawEquipbox(); + core.ui._drawEquipbox(); } ////// 是否正在播放录像 ////// @@ -1592,7 +1592,7 @@ control.prototype._replayAction_item = function (action) { index = index%per+per; } if (index<0) return false; - core.ui.drawToolbox(index); + core.ui._drawToolbox(index); setTimeout(function () { core.ui.closePanel(); core.useItem(itemId, false, core.replay); @@ -1613,7 +1613,7 @@ control.prototype._replayAction_equip = function (action) { } core.status.event.data = {"page":Math.floor(index/per)+1, "selectId":null}; index = index%per+per; - core.ui.drawEquipbox(index); + core.ui._drawEquipbox(index); setTimeout(function () { core.ui.closePanel(); core.loadEquip(equipId, core.replay); @@ -1625,7 +1625,7 @@ control.prototype._replayAction_unEquip = function (action) { if (action.indexOf("unEquip:")!=0) return false; var equipType = parseInt(action.substring(8)); if (!core.isset(equipType)) return false; - core.ui.drawEquipbox(equipType); + core.ui._drawEquipbox(equipType); core.status.route.push(action); if (core.status.replay.speed == 24) { core.unloadEquip(equipType, core.replay); @@ -1911,7 +1911,7 @@ control.prototype._doSL_replayRemain_afterGet = function (id, data) { core.lockControl(); var saveIndex = core.saves.saveIndex; var page = parseInt((saveIndex - 1) / 5), offset = saveIndex - 5 * page; - core.ui.drawSLPanel(10 * page + offset); + core.ui._drawSLPanel(10 * page + offset); }); } @@ -1951,7 +1951,7 @@ control.prototype._syncSave_http = function (type, saves) { ////// 从服务器加载存档 ////// control.prototype.syncLoad = function () { core.myprompt("请输入存档编号+密码", null, function (idpassword) { - if (!idpassword) return core.ui.drawSyncSave(); + if (!idpassword) return core.ui._drawSyncSave(); if (!/^\d{6}\w{4}$/.test(idpassword) && !/^\d{4}\w{3}$/.test(idpassword)) { core.drawText("不合法的存档编号+密码!"); return; @@ -1999,7 +1999,7 @@ control.prototype._syncLoad_write = function (data) { core.drawText("同步成功!\n你的本地所有存档均已被覆盖。"); }, function () { core.status.event.selection=0; - core.ui.drawSyncSave(); + core.ui._drawSyncSave(); }); } else { diff --git a/libs/events.js b/libs/events.js index 9be10d9c..c0bf4b80 100644 --- a/libs/events.js +++ b/libs/events.js @@ -2421,7 +2421,7 @@ events.prototype.openBook = function (fromUserAction) { // 当前是book,且从“浏览地图”打开 if (core.status.event.id == 'book' && core.status.event.ui) { core.status.boxAnimateObjs = []; - core.ui.drawMaps(core.status.event.ui); + core.ui._drawViewMaps(core.status.event.ui); return; } // 从“浏览地图”页面打开 @@ -2463,14 +2463,14 @@ events.prototype.flyTo = function (toId, callback) { events.prototype.openEquipbox = function (fromUserAction) { if (core.isReplaying()) return; if (!this._checkStatus('equipbox', fromUserAction)) return; - core.ui.drawEquipbox(); + core.ui._drawEquipbox(); } ////// 点击工具栏时的打开操作 ////// events.prototype.openToolbox = function (fromUserAction) { if (core.isReplaying()) return; if (!this._checkStatus('toolbox', fromUserAction)) return; - core.ui.drawToolbox(); + core.ui._drawToolbox(); } ////// 点击快捷商店按钮时的打开操作 ////// @@ -2500,13 +2500,13 @@ events.prototype.openQuickShop = function (fromUserAction) { } if (!this._checkStatus('selectShop', fromUserAction)) return; - core.ui.drawQuickShop(); + core.ui._drawQuickShop(); } events.prototype.openKeyBoard = function (fromUserAction) { if (core.isReplaying()) return; if (!this._checkStatus('keyBoard', fromUserAction)) return; - core.ui.drawKeyBoard(); + core.ui._drawKeyBoard(); } ////// 点击保存按钮时的打开操作 ////// @@ -2517,7 +2517,7 @@ events.prototype.save = function (fromUserAction) { if (!this._checkStatus('save', fromUserAction)) return; var saveIndex = core.saves.saveIndex; var page=parseInt((saveIndex-1)/5), offset=saveIndex-5*page; - core.ui.drawSLPanel(10*page+offset); + core.ui._drawSLPanel(10*page+offset); } ////// 点击读取按钮时的打开操作 ////// @@ -2532,13 +2532,13 @@ events.prototype.load = function (fromUserAction) { core.clearMap('all'); core.status.event = {'id': 'load', 'data': null}; core.status.lockControl = true; - core.ui.drawSLPanel(10*page+offset); + core.ui._drawSLPanel(10*page+offset); return; } if (core.status.event.id == 'load' && core.events.recoverEvents(core.status.event.interval)) return; if (!this._checkStatus('load', fromUserAction)) return; - core.ui.drawSLPanel(10*page+offset); + core.ui._drawSLPanel(10*page+offset); } ////// 点击设置按钮时的操作 ////// @@ -2546,7 +2546,7 @@ events.prototype.openSettings = function (fromUserAction) { if (core.isReplaying()) return; if (!this._checkStatus('settings', fromUserAction)) return; - core.ui.drawSettings(); + core.ui._drawSettings(); } // ------ 一些事件的具体执行过程 ------ // @@ -3077,7 +3077,7 @@ events.prototype.tryUseItem = function (itemId) { if (itemId == 'book') return core.openBook(false); if (itemId == 'fly') return core.useFly(false); - if (itemId == 'centerFly') return core.ui.drawCenterFly(); + if (itemId == 'centerFly') return core.ui._drawCenterFly(); if (core.canUseItem(itemId)) core.useItem(itemId); else core.drawTip("当前无法使用" + core.material.items[itemId].name); diff --git a/libs/ui.js b/libs/ui.js index 9c5e480b..7aeb4019 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -831,35 +831,45 @@ ui.prototype._getPosition = function (content) { return {content: content, position: pos, px: px, py: py, noPeak: noPeak}; } -////// 绘制选择光标 -ui.prototype.drawWindowSelector = function(background, x, y, w, h) { +////// 绘制系统选择光标 +ui.prototype._drawWindowSelector = function(background, x, y, w, h) { w = Math.round(w), h = Math.round(h); var ctx = core.ui.createCanvas("_selector", x, y, w, h, 165); this._drawSelector(ctx, background, w, h); } -ui.prototype._uievent_drawSelector = function (data) { - var canvasName = '_uievent_selector_' + (data.code || 0); - if (data.image == null) return core.deleteCanvas(canvasName); - - var background = data.image || core.status.textAttribute.background; +////// 自绘一个选择光标 +ui.prototype.drawUIEventSelector = function (code, background, x, y, w, h, z) { + var canvasName = '_uievent_selector_' + (code || 0); + var background = background || core.status.textAttribute.background; if (typeof background != 'string') return; - var x = core.calValue(data.x), y = core.calValue(data.y), w = core.calValue(data.width), h = core.calValue(data.height); - w = Math.round(w); h = Math.round(h); if (main.mode == 'editor') { this._drawSelector('uievent', background, w, h, x, y); return; } - var z = 136; - if (core.dymCanvas.uievent) z = (parseInt(core.dymCanvas.uievent.canvas.style.zIndex) || 135) + 1; + z = z || (core.dymCanvas.uievent ? (parseInt(core.dymCanvas.uievent.canvas.style.zIndex) || 135) + 1 : 136); var ctx = core.createCanvas(canvasName, x, y, w, h, z); ctx.canvas.classList.add('_uievent_selector'); this._drawSelector(ctx, background, w, h); } -ui.prototype._clearUIEventSelector = function (codes) { +ui.prototype._uievent_drawSelector = function (data) { + if (data.image == null) this.clearUIEventSelector(data.code || 0); + else this.drawUIEventSelector(data.code, data.image, core.calValue(data.x), core.calValue(data.y), core.calValue(data.width), core.calValue(data.height)); +} + +////// 清除自绘的选择光标 +ui.prototype.clearUIEventSelector = function (codes) { + if (codes == null) { + Object.keys(core.dymCanvas).forEach(function (name) { + if (name.startsWith('_uievent_selector_')) { + core.deleteCanvas(name); + } + }); + return; + } if (codes instanceof Array) { - codes.forEach(function (code) { core.ui._clearUIEventSelector(code); }); + codes.forEach(function (code) { core.ui.clearUIEventSelector(code); }); return; } core.deleteCanvas('_uievent_selector_' + (codes || 0)); @@ -1668,7 +1678,7 @@ ui.prototype._drawChoices_drawChoices = function (choices, isWindowSkin, hPos, v while (core.status.event.selection >= choices.length) core.status.event.selection -= choices.length; var len = choices[core.status.event.selection].width; if (isWindowSkin) - this.drawWindowSelector(core.status.textAttribute.background, + this._drawWindowSelector(core.status.textAttribute.background, this.HPIXEL - len/2 - 5, vPos.choice_top + 32 * core.status.event.selection - 20, len + 10, 28); else core.strokeRoundRect('ui', this.HPIXEL - len/2 - 5, vPos.choice_top + 32 * core.status.event.selection - 20, @@ -1709,7 +1719,7 @@ ui.prototype.drawConfirmBox = function (text, yesCallback, noCallback) { var strokeLeft = this.HPIXEL + (76*core.status.event.selection-38) - parseInt(len/2) - 5; if (isWindowSkin) - this.drawWindowSelector(core.status.textAttribute.background, strokeLeft, rect.bottom-35-20, len+10, 28); + this._drawWindowSelector(core.status.textAttribute.background, strokeLeft, rect.bottom-35-20, len+10, 28); else core.strokeRoundRect('ui', strokeLeft, rect.bottom-35-20, len+10, 28, 6, core.status.globalAttribute.selectColor, 2); } @@ -1739,7 +1749,7 @@ ui.prototype.drawWaiting = function(text) { } ////// 绘制系统设置界面 ////// -ui.prototype.drawSwitchs = function() { +ui.prototype._drawSwitchs = function() { core.status.event.id = 'switchs'; var choices = [ "音乐/音效: "+(core.musicStatus.bgmStatus ? "[ON]" : "[OFF]") + " "+(core.musicStatus.soundStatus ? "[ON]" : "[OFF]"), @@ -1759,7 +1769,7 @@ ui.prototype.drawSwitchs = function() { } ////// 绘制系统菜单栏 ////// -ui.prototype.drawSettings = function () { +ui.prototype._drawSettings = function () { core.status.event.id = 'settings'; this.drawChoices(null, [ "系统设置", "虚拟键盘", "浏览地图", "存档笔记", "同步存档", "游戏信息", "返回标题", "返回游戏" @@ -1767,7 +1777,7 @@ ui.prototype.drawSettings = function () { } ////// 绘制存档笔记 ////// -ui.prototype.drawNotes = function () { +ui.prototype._drawNotes = function () { core.status.event.id = 'notes'; core.status.hero.notes = core.status.hero.notes || []; core.lockControl(); @@ -1777,7 +1787,7 @@ ui.prototype.drawNotes = function () { } ////// 绘制快捷商店选择栏 ////// -ui.prototype.drawQuickShop = function () { +ui.prototype._drawQuickShop = function () { core.status.event.id = 'selectShop'; var shopList = core.status.shops, keys = core.listShopIds(); var choices = keys.map(function (shopId) { @@ -1788,7 +1798,7 @@ ui.prototype.drawQuickShop = function () { } ////// 绘制存档同步界面 ////// -ui.prototype.drawSyncSave = function () { +ui.prototype._drawSyncSave = function () { core.status.event.id = 'syncSave'; this.drawChoices(null, [ "同步存档到服务器", "从服务器加载存档", "存档至本地文件", "从本地文件读档", "回放和下载录像", "清空本地存档", "返回主菜单" @@ -1796,7 +1806,7 @@ ui.prototype.drawSyncSave = function () { } ////// 绘制存档同步选择页面 ////// -ui.prototype.drawSyncSelect = function () { +ui.prototype._drawSyncSelect = function () { core.status.event.id = 'syncSelect'; this.drawChoices(null, [ "同步本地所有存档", "只同步当前单存档", "返回上级菜单" @@ -1804,7 +1814,7 @@ ui.prototype.drawSyncSelect = function () { } ////// 绘制单存档界面 ////// -ui.prototype.drawLocalSaveSelect = function () { +ui.prototype._drawLocalSaveSelect = function () { core.status.event.id = 'localSaveSelect'; this.drawChoices(null, [ "下载所有存档", "只下载当前单存档", "返回上级菜单" @@ -1812,14 +1822,14 @@ ui.prototype.drawLocalSaveSelect = function () { } ////// 绘制存档删除页面 ////// -ui.prototype.drawStorageRemove = function () { +ui.prototype._drawStorageRemove = function () { core.status.event.id = 'storageRemove'; this.drawChoices(null, [ "清空全部塔的存档", "只清空当前塔的存档", "返回上级菜单" ]); } -ui.prototype.drawReplay = function () { +ui.prototype._drawReplay = function () { core.lockControl(); core.status.event.id = 'replay'; this.drawChoices(null, [ @@ -1827,7 +1837,7 @@ ui.prototype.drawReplay = function () { ]); } -ui.prototype.drawGameInfo = function () { +ui.prototype._drawGameInfo = function () { core.status.event.id = 'gameInfo'; this.drawChoices(null, [ "数据统计", "查看工程", "游戏主页", "操作帮助", "关于本塔","下载离线版本", "返回主菜单" @@ -1854,7 +1864,7 @@ ui.prototype.drawPagination = function (page, totalPage, y) { } ////// 绘制键盘光标 ////// -ui.prototype.drawCursor = function () { +ui.prototype._drawCursor = function () { var automaticRoute = core.status.automaticRoute; if (automaticRoute.cursorX == null) automaticRoute.cursorX = core.getHeroLoc('x'); @@ -2110,7 +2120,7 @@ ui.prototype._drawBook_drawDamage = function (index, enemy, offset, position) { } ////// 绘制怪物属性的详细信息 ////// -ui.prototype.drawBookDetail = 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"); @@ -2296,7 +2306,7 @@ ui.prototype.drawFly = function(page) { } ////// 绘制中心对称飞行器 -ui.prototype.drawCenterFly = function () { +ui.prototype._drawCenterFly = function () { core.lockControl(); core.status.event.id = 'centerFly'; var fillstyle = 'rgba(255,0,0,0.5)'; @@ -2314,7 +2324,7 @@ ui.prototype.drawCenterFly = function () { } ////// 绘制浏览地图界面 ////// -ui.prototype.drawMaps = function (index, x, y) { +ui.prototype._drawViewMaps = function (index, x, y) { core.lockControl(); core.status.event.id = 'viewMaps'; this.clearUI(); @@ -2397,7 +2407,7 @@ ui.prototype._drawMaps_buildData = function (index, x, y) { } ////// 绘制道具栏 ////// -ui.prototype.drawToolbox = function(index) { +ui.prototype._drawToolbox = function(index) { var info = this._drawToolbox_getInfo(index); this._drawToolbox_drawBackground(); @@ -2535,7 +2545,7 @@ ui.prototype._drawToolbox_drawContent = function (info, line, items, page, drawC } ////// 绘制装备界面 ////// -ui.prototype.drawEquipbox = function(index) { +ui.prototype._drawEquipbox = function(index) { var info = this._drawEquipbox_getInfo(index); this._drawToolbox_drawBackground(); @@ -2697,7 +2707,7 @@ ui.prototype._drawEquipbox_drawEquiped = function (info, line) { } ////// 绘制存档/读档界面 ////// -ui.prototype.drawSLPanel = function(index, refresh) { +ui.prototype._drawSLPanel = function(index, refresh) { core.control._loadFavoriteSaves(); if (index == null) index = 1; if (index < 0) index = 0; @@ -2855,7 +2865,7 @@ ui.prototype._drawSLPanel_drawRecords = function (n) { } }; -ui.prototype.drawKeyBoard = function () { +ui.prototype._drawKeyBoard = function () { core.lockControl(); core.status.event.id = 'keyBoard'; core.clearUI(); @@ -2892,7 +2902,7 @@ ui.prototype.drawKeyBoard = function () { core.fillText("ui", "返回游戏", this.HPIXEL + 128, offset-3, '#FFFFFF', this._buildFont(15, true)); if (isWindowSkin) - this.drawWindowSelector(core.status.textAttribute.background, this.HPIXEL + 92, offset - 22, 72, 27); + this._drawWindowSelector(core.status.textAttribute.background, this.HPIXEL + 92, offset - 22, 72, 27); else core.strokeRoundRect('ui', this.HPIXEL + 92, offset - 22, 72, 27, 6, core.status.globalAttribute.selectColor, 2); } @@ -2903,7 +2913,7 @@ ui.prototype.drawStatusBar = function () { } ////// 绘制“数据统计”界面 ////// -ui.prototype.drawStatistics = function (floorIds) { +ui.prototype._drawStatistics = function (floorIds) { var obj = this._drawStatistics_buildObj(); if (typeof floorIds == 'string') floorIds = [floorIds]; (floorIds || core.floorIds).forEach(function (floorId) { @@ -3072,12 +3082,12 @@ ui.prototype._drawStatistics_generateText = function (obj, type, data) { } ////// 绘制“关于”界面 ////// -ui.prototype.drawAbout = function () { +ui.prototype._drawAbout = function () { return this.uidata.drawAbout(); } ////// 绘制帮助页面 ////// -ui.prototype.drawHelp = function () { +ui.prototype._drawHelp = function () { core.clearUI(); if (core.material.images.keyboard) { core.status.event.id = 'help'; diff --git a/project/functions.js b/project/functions.js index 43c1f1ab..bdf06a2b 100644 --- a/project/functions.js +++ b/project/functions.js @@ -808,7 +808,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.load(true); break; case 69: // E:打开光标 - core.ui.drawCursor(); + core.ui._drawCursor(); break; case 84: // T:打开道具栏 core.openToolbox(true); @@ -826,17 +826,17 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.getNextItem(); break; case 82: // R:回放录像 - core.actions._clickSyncSave_replay(); + core.ui._drawReplay(); break; case 33: case 34: // PgUp/PgDn:浏览地图 - core.ui.drawMaps(); + core.ui._drawViewMaps(); break; case 66: // B:打开数据统计 - core.ui.drawStatistics(); + core.ui._drawStatistics(); break; case 72: // H:打开帮助页面 - core.ui.drawHelp(); + core.ui._drawHelp(); break; case 77: // M:打开存档笔记 core.actions._clickNotes_show(); @@ -864,7 +864,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = break; case 51: // 快捷键3: 飞 if (core.hasItem('centerFly')) { - core.ui.drawCenterFly(); + core.ui._drawCenterFly(); } break; case 52: // 快捷键4:破冰/冰冻/地震/上下楼器/... 其他道具依次判断 diff --git a/project/plugins.js b/project/plugins.js index 80530c87..3ec5b386 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -493,7 +493,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = // Step 1: 背景和固定的几个文字 core.ui._createUIEvent(); core.clearMap('uievent'); - core.ui._clearUIEventSelector([1, 2]); + core.ui.clearUIEventSelector(); core.setTextAlign('uievent', 'left'); core.setTextBaseline('uievent', 'top'); core.fillRect('uievent', 0, 0, 416, 416, 'black'); @@ -511,15 +511,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.setTextAlign("uievent", "right"); core.fillText("uievent", core.formatBigNumber(core.status.hero[use]), 405, 89); core.setTextAlign("uievent", "left"); - core.ui._uievent_drawSelector({ - "type": "drawSelector", - "image": "winskin.png", - "code": 2, - "x": 22 + 100 * type, - "y": 66, - "width": 60, - "height": 33 - }); + core.ui.drawUIEventSelector(1, "winskin.png", 22 + 100 * type, 66, 60, 33); if (selectItem != null) { core.setTextAlign('uievent', 'center'); core.fillText("uievent", type == 0 ? "买入个数" : "卖出个数", 364, 320, null, bigFont); @@ -573,7 +565,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = break; } } - core.ui._uievent_drawSelector({ "type": "drawSelector", "image": "winskin.png", "code": 1, "x": 8, "y": 120 + i * 40, "width": 295, "height": 40 }); + core.ui.drawUIEventSelector(2, "winskin.png", 8, 120 + i * 40, 295, 40); if (type == 0 && item.number != null) { core.fillText("uievent", "存货", 324, 132, null, bigFont); core.setTextAlign("uievent", "right"); @@ -771,7 +763,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }, { "type": "function", - "function": "function () { core.deleteCanvas('uievent'); core.ui._clearUIEventSelector([1, 2]); }" + "function": "function () { core.deleteCanvas('uievent'); core.ui.clearUIEventSelector(); }" } ]); } @@ -1151,9 +1143,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = // 当前选中的道具类别 var currentCategory = null; - // 重写 core.ui.drawToolbox 以绘制分类类别 - var _drawToolbox = core.ui.drawToolbox; - core.ui.drawToolbox = function (index) { + // 重写 core.ui._drawToolbox 以绘制分类类别 + var _drawToolbox = core.ui._drawToolbox; + core.ui._drawToolbox = function (index) { _drawToolbox.call(this, index); core.setTextAlign('ui', 'left'); core.fillText('ui', '类别[E]:' + (currentCategory || "全部"), 15, this.PIXEL - 13); diff --git a/runtime.d.ts b/runtime.d.ts index 9dce52c4..82ef46f9 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -2149,12 +2149,15 @@ declare class ui { /** 地图中间绘制一段文字 */ drawText(contents: string, callback?: () => any): void + /** 自绘选择光标 */ + drawUIEventSelector(code: number, background: string, x: number, y: number, w: number, h: number, z?: number): void + + /** 清除一个或多个选择光标 */ + clearUIEventSelector(code: number|number[]): void + /** 绘制一个确认框 */ drawConfirmBox(text: string, yesCallback?: () => void, noCallback?: () => void): void - /** 绘制选择光标 */ - drawWindowSelector(background: any, x: number, y: number, w: number, h: number): void - /** 绘制WindowSkin */ drawWindowSkin(background: any, ctx: string | CanvasRenderingContext2D, x: number, y: number, w: string, h: string, direction?: any, px?: any, py?: any): void @@ -2190,84 +2193,21 @@ declare class ui { /** 绘制等待界面 */ drawWaiting(text: string): void - /** 绘制系统设置界面 */ - drawSwitchs(): void - - /** 绘制系统菜单栏 */ - drawSettings(): void - - /** 绘制存档笔记 */ - drawNotes(): void - - /** 绘制快捷商店选择栏 */ - drawQuickShop(): void - - /** 绘制存档同步界面 */ - drawSyncSave(): void - - /** 绘制存档同步选择页面 */ - drawSyncSelect(): void - - /** 绘制单存档界面 */ - drawLocalSaveSelect(): void - - /** 绘制存档删除页面 */ - drawStorageRemove(): void - - /** 绘制回放界面 */ - drawReplay(): void - - /** 绘制游戏信息界面 */ - drawGameInfo(): void - /** 绘制分页 */ drawPagination(page?: any, totalPage?: any, y?: number): void - /** 绘制键盘光标 */ - drawCursor(): void - /** 绘制怪物手册 */ drawBook(index?: any): void - /** 绘制怪物属性的详细信息 */ - drawBookDetail(index?: any): void - /** 绘制楼层传送器 */ drawFly(page?: any): void - /** 绘制中心对称飞行器 */ - drawCenterFly(): void - - /** 绘制浏览地图界面 */ - drawMaps(index?: any, x?: number, y?: number): void - - /** 绘制道具栏 */ - drawToolbox(index?: any): void - /** 获得所有应该在道具栏显示的某个类型道具 */ getToolboxItems(cls: string): string[] - /** 绘制装备界面 */ - drawEquipbox(index?: any): void - - /** 绘制存档/读档界面 */ - drawSLPanel(index?: any, refresh?: any): void - - /** 绘制虚拟键盘 */ - drawKeyBoard(): void - /** 绘制状态栏 */ drawStatusBar(): void - /** 绘制“数据统计”界面 */ - drawStatistics(floorIds?: string): void - - /** 绘制“关于”界面 */ - drawAbout(): void - - /** 绘制帮助页面 */ - drawHelp(): void - /** 绘制灯光效果 */ drawLight(name: string | CanvasRenderingContext2D, color?: any, lights?: any, lightDec?: number): void