diff --git a/_server/functions.comment.js b/_server/functions.comment.js index 2120f717..d387de4f 100644 --- a/_server/functions.comment.js +++ b/_server/functions.comment.js @@ -176,6 +176,12 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_type": "textarea", "_lint": true, "_data": "瞬间移动处理" + }, + "parallelDo": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "并行事件处理" } } }, @@ -201,23 +207,6 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_data": "绘制关于界面" } } - }, - "plugins": { - "_type": "object", - "_data": { - "parallelDo": { - "_leaf": true, - "_type": "textarea", - "_lint": true, - "_data": "并行事件处理" - }, - "plugin": { - "_leaf": true, - "_type": "textarea", - "_lint": true, - "_data": "自定义插件编写" - } - } } } } \ No newline at end of file diff --git a/_server/plugins.comment.js b/_server/plugins.comment.js index 20a3f361..e708c576 100644 --- a/_server/plugins.comment.js +++ b/_server/plugins.comment.js @@ -3,17 +3,17 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_type": "object", "_data": function (key) { var obj = { - "test": { + "init": { "_leaf": true, "_type": "textarea", "_range": "typeof(thiseval)=='string'", - "_data": "插件函数执行测试, 这个函数在导入后被直接执行(因此不允许删除)" + "_data": "自定义插件" }, "drawLight": { "_leaf": true, "_type": "textarea", "_range": "typeof(thiseval)=='string' || thiseval==null", - "_data": "绘制灯光/漆黑层效果" + "_data": "绘制灯光效果" }, } if (obj[key]) return obj[key]; diff --git a/libs/control.js b/libs/control.js index 35d52966..06fd679a 100644 --- a/libs/control.js +++ b/libs/control.js @@ -297,7 +297,7 @@ control.prototype._animationFrame_weather_fog = function () { } control.prototype._animationFrame_parallelDo = function (timestamp) { - functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.plugins.parallelDo(timestamp); + core.control.controldata.parallelDo(timestamp); } control.prototype._animationFrame_checkConsoleOpened = function (timestamp) { diff --git a/libs/core.js b/libs/core.js index 61cb7d6d..fd88bdd7 100644 --- a/libs/core.js +++ b/libs/core.js @@ -338,16 +338,23 @@ core.prototype._init_others = function () { core.prototype._afterLoadResources = function (callback) { core.control._setRequestAnimationFrame(); - - core.plugin = new function () {}; - core.plugin.__init__ = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.plugins.plugin; - core.plugin.__init__(); - core._forwardFunc("plugin"); - + core._initPlugins(); core.showStartAnimate(); if (callback) callback(); } +core.prototype._initPlugins = function () { + core.plugin = new function () {}; + + for (var name in plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1) { + if (plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1[name] instanceof Function) { + plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1[name].apply(core.plugin); + } + } + + core._forwardFunc("plugin"); +} + core.prototype._forwardFuncs = function () { for (var i = 0; i < main.loadList.length; ++i) { var name = main.loadList[i]; diff --git a/project/functions.js b/project/functions.js index 93a43c11..ddcf33ef 100644 --- a/project/functions.js +++ b/project/functions.js @@ -797,7 +797,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.actions._clickGameInfo_openProject(); break; case 80: // P:游戏主页 - core.actions._clickGameInfo_openComments(); + core.actions._clickGameInfo_openComments(); break; case 49: // 快捷键1: 破 if (core.hasItem('pickaxe')) { @@ -1265,6 +1265,37 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = return true; } return false; +}, + "parallelDo": function (timestamp) { + // 并行事件处理,可以在这里写任何需要并行处理的脚本或事件 + // 该函数将被系统反复执行,每次执行间隔视浏览器或设备性能而定,一般约为16.6ms一次 + // 参数timestamp为“从游戏资源加载完毕到当前函数执行时”的时间差,以毫秒为单位 + + // 检查当前是否处于游戏开始状态 + if (!core.isPlaying()) return; + + // 执行当前楼层的并行事件处理 + if (core.status.floorId) { + try { + eval(core.floors[core.status.floorId].parallelDo); + } catch (e) { + main.log(e); + } + } + + // 下面是一个并行事件开门的样例 + /* + // 如果某个flag为真 + if (core.hasFlag("xxx")) { + // 千万别忘了将该flag清空!否则下次仍然会执行这段代码。 + core.removeFlag("xxx"); + // 使用insertAction来插入若干自定义事件执行 + core.insertAction([ + {"type":"openDoor", "loc":[0,0], "floorId": "MT0"} + ]) + // 也可以写任意其他的脚本代码 + } + */ } }, "ui": { @@ -1374,59 +1405,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.fillText('ui', "作者: 艾之葵", text_start, top + 112); core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top+112+32); // TODO: 写自己的“关于”页面,每次增加32像素即可 -} - }, - "plugins": { - "parallelDo": function (timestamp) { - // 并行事件处理,可以在这里写任何需要并行处理的脚本或事件 - // 该函数将被系统反复执行,每次执行间隔视浏览器或设备性能而定,一般约为16.6ms一次 - // 参数timestamp为“从游戏资源加载完毕到当前函数执行时”的时间差,以毫秒为单位 - - // 检查当前是否处于游戏开始状态 - if (!core.isPlaying()) return; - - // 执行当前楼层的并行事件处理 - if (core.status.floorId) { - try { - eval(core.floors[core.status.floorId].parallelDo); - } catch (e) { - main.log(e); - } - } - - // 下面是一个并行事件开门的样例 - /* - // 如果某个flag为真 - if (core.hasFlag("xxx")) { - // 千万别忘了将该flag清空!否则下次仍然会执行这段代码。 - core.removeFlag("xxx"); - // 使用insertAction来插入若干自定义事件执行 - core.insertAction([ - {"type":"openDoor", "loc":[0,0], "floorId": "MT0"} - ]) - // 也可以写任意其他的脚本代码 - } - */ - - -}, - "plugin": function () { - ////// 插件编写,此处会导入插件编写中的所有函数 ////// - - // 在这里写的代码,在所有模块加载完毕后,游戏开始前会被执行 - console.log("插件编写测试"); - // 可以写一些其他的被直接执行的代码 - - var pluginsData=plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 - for(var functionName in pluginsData){ - this[functionName]=pluginsData[functionName] - } - - // 可以在任何地方(如afterXXX或自定义脚本事件)调用函数,方法为 core.plugin.xxx(); - - // 可以在此处直接执行插件编写中的函数 - core.plugin.test(); - } } } \ No newline at end of file diff --git a/project/plugins.js b/project/plugins.js index 23cbb414..3f0afa16 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -1,23 +1,36 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { - "test": function(){ + "init": function () { + // 在这里写的代码,在所有模块加载完毕后,游戏开始前会被执行 + console.log("插件编写测试"); + + // 可以写一些其他的被直接执行的代码 + + + this.test = function () { console.log("插件函数执行测试"); - }, - "drawLight": function (name, color, lights, lightDec) { - // 绘制灯光/漆黑层效果。调用方式 core.plugin.drawLight(...) - // 【参数说明】 - // name:必填,要绘制到的画布名;可以是一个系统画布,或者是个自定义画布;如果不存在则创建 - // color:可选,只能是一个0~1之间的数,为不透明度的值。不填则默认为0.9。 - // lights:可选,一个数组,定义了每个独立的灯光。 - // 其中每一项是三元组 [x,y,r] x和y分别为该灯光的横纵坐标,r为该灯光的半径。 - // lightDec:可选,0到1之间,光从多少百分比才开始衰减(在此范围内保持全亮),不设置默认为0。 - // 比如lightDec为0.5代表,每个灯光部分内圈50%的范围全亮,50%以后才开始快速衰减。 - // 【调用样例】 - // core.plugin.drawLight('curtain'); // 在curtain层绘制全图不透明度0.9,等价于更改画面色调为[0,0,0,0.9]。 - // core.plugin.drawLight('ui', 0.95, [[25,11,46]]); // 在ui层绘制全图不透明度0.95,其中在(25,11)点存在一个半径为46的灯光效果。 - // core.plugin.drawLight('test', 0.2, [[25,11,46,0.1]]); // 创建一个test图层,不透明度0.2,其中在(25,11)点存在一个半径为46的灯光效果,灯光中心不透明度0.1。 - // core.plugin.drawLight('test2', 0.9, [[25,11,46],[105,121,88],[301,221,106]]); // 创建test2图层,且存在三个灯光效果,分别是中心(25,11)半径46,中心(105,121)半径88,中心(301,221)半径106。 - // core.plugin.drawLight('xxx', 0.3, [[25,11,46],[105,121,88,0.2]], 0.4); // 存在两个灯光效果,它们在内圈40%范围内保持全亮,且40%后才开始衰减。 + console.log(this); + } + + // 可以在任何地方(如afterXXX或自定义脚本事件)调用函数,方法为 core.plugin.xxx(); +}, + "drawLight": function () { + + // 绘制灯光/漆黑层效果。调用方式 core.plugin.drawLight(...) + // 【参数说明】 + // name:必填,要绘制到的画布名;可以是一个系统画布,或者是个自定义画布;如果不存在则创建 + // color:可选,只能是一个0~1之间的数,为不透明度的值。不填则默认为0.9。 + // lights:可选,一个数组,定义了每个独立的灯光。 + // 其中每一项是三元组 [x,y,r] x和y分别为该灯光的横纵坐标,r为该灯光的半径。 + // lightDec:可选,0到1之间,光从多少百分比才开始衰减(在此范围内保持全亮),不设置默认为0。 + // 比如lightDec为0.5代表,每个灯光部分内圈50%的范围全亮,50%以后才开始快速衰减。 + // 【调用样例】 + // core.plugin.drawLight('curtain'); // 在curtain层绘制全图不透明度0.9,等价于更改画面色调为[0,0,0,0.9]。 + // core.plugin.drawLight('ui', 0.95, [[25,11,46]]); // 在ui层绘制全图不透明度0.95,其中在(25,11)点存在一个半径为46的灯光效果。 + // core.plugin.drawLight('test', 0.2, [[25,11,46,0.1]]); // 创建一个test图层,不透明度0.2,其中在(25,11)点存在一个半径为46的灯光效果,灯光中心不透明度0.1。 + // core.plugin.drawLight('test2', 0.9, [[25,11,46],[105,121,88],[301,221,106]]); // 创建test2图层,且存在三个灯光效果,分别是中心(25,11)半径46,中心(105,121)半径88,中心(301,221)半径106。 + // core.plugin.drawLight('xxx', 0.3, [[25,11,46],[105,121,88,0.2]], 0.4); // 存在两个灯光效果,它们在内圈40%范围内保持全亮,且40%后才开始衰减。 + this.drawLight = function (name, color, lights, lightDec) { // 清空色调层;也可以修改成其它层比如animate/weather层,或者用自己创建的canvas var ctx = core.getContextByName(name); @@ -26,37 +39,40 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ctx = core.createCanvas(name, 0, 0, core.__PIXELS__, core.__PIXELS__, 98); else return; } - + ctx.mozImageSmoothingEnabled = false; ctx.webkitImageSmoothingEnabled = false; ctx.msImageSmoothingEnabled = false; ctx.imageSmoothingEnabled = false; - + core.clearMap(name); // 绘制色调层,默认不透明度 if (color == null) color = 0.9; - ctx.fillStyle = "rgba(0,0,0,"+color+")"; + ctx.fillStyle = "rgba(0,0,0," + color + ")"; ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height); - + lightDec = core.clamp(lightDec, 0, 1); // 绘制每个灯光效果 ctx.globalCompositeOperation = 'destination-out'; lights.forEach(function (light) { // 坐标,半径,中心不透明度 - var x = light[0], y = light[1], r = light[2]; + var x = light[0], + y = light[1], + r = light[2]; // 计算衰减距离 var decDistance = parseInt(r * lightDec); // 正方形区域的直径和左上角坐标 - var grd=ctx.createRadialGradient(x,y,decDistance,x,y,r); + var grd = ctx.createRadialGradient(x, y, decDistance, x, y, r); grd.addColorStop(0, "rgba(0,0,0,1)"); grd.addColorStop(1, "rgba(0,0,0,0)"); ctx.beginPath(); - ctx.fillStyle=grd; - ctx.arc(x,y,r,0,2*Math.PI); + ctx.fillStyle = grd; + ctx.arc(x, y, r, 0, 2 * Math.PI); ctx.fill(); }); ctx.globalCompositeOperation = 'source-over'; // 可以在任何地方(如afterXXX或自定义脚本事件)调用函数,方法为 core.plugin.xxx(); } +} } \ No newline at end of file