plugins
This commit is contained in:
parent
da07c2dc7d
commit
cc45359ea1
@ -176,6 +176,12 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
|
|||||||
"_type": "textarea",
|
"_type": "textarea",
|
||||||
"_lint": true,
|
"_lint": true,
|
||||||
"_data": "瞬间移动处理"
|
"_data": "瞬间移动处理"
|
||||||
|
},
|
||||||
|
"parallelDo": {
|
||||||
|
"_leaf": true,
|
||||||
|
"_type": "textarea",
|
||||||
|
"_lint": true,
|
||||||
|
"_data": "并行事件处理"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -201,23 +207,6 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
|
|||||||
"_data": "绘制关于界面"
|
"_data": "绘制关于界面"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"plugins": {
|
|
||||||
"_type": "object",
|
|
||||||
"_data": {
|
|
||||||
"parallelDo": {
|
|
||||||
"_leaf": true,
|
|
||||||
"_type": "textarea",
|
|
||||||
"_lint": true,
|
|
||||||
"_data": "并行事件处理"
|
|
||||||
},
|
|
||||||
"plugin": {
|
|
||||||
"_leaf": true,
|
|
||||||
"_type": "textarea",
|
|
||||||
"_lint": true,
|
|
||||||
"_data": "自定义插件编写"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3,17 +3,17 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
|
|||||||
"_type": "object",
|
"_type": "object",
|
||||||
"_data": function (key) {
|
"_data": function (key) {
|
||||||
var obj = {
|
var obj = {
|
||||||
"test": {
|
"init": {
|
||||||
"_leaf": true,
|
"_leaf": true,
|
||||||
"_type": "textarea",
|
"_type": "textarea",
|
||||||
"_range": "typeof(thiseval)=='string'",
|
"_range": "typeof(thiseval)=='string'",
|
||||||
"_data": "插件函数执行测试, 这个函数在导入后被直接执行(因此不允许删除)"
|
"_data": "自定义插件"
|
||||||
},
|
},
|
||||||
"drawLight": {
|
"drawLight": {
|
||||||
"_leaf": true,
|
"_leaf": true,
|
||||||
"_type": "textarea",
|
"_type": "textarea",
|
||||||
"_range": "typeof(thiseval)=='string' || thiseval==null",
|
"_range": "typeof(thiseval)=='string' || thiseval==null",
|
||||||
"_data": "绘制灯光/漆黑层效果"
|
"_data": "绘制灯光效果"
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if (obj[key]) return obj[key];
|
if (obj[key]) return obj[key];
|
||||||
|
|||||||
@ -297,7 +297,7 @@ control.prototype._animationFrame_weather_fog = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
control.prototype._animationFrame_parallelDo = function (timestamp) {
|
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) {
|
control.prototype._animationFrame_checkConsoleOpened = function (timestamp) {
|
||||||
|
|||||||
19
libs/core.js
19
libs/core.js
@ -338,16 +338,23 @@ core.prototype._init_others = function () {
|
|||||||
|
|
||||||
core.prototype._afterLoadResources = function (callback) {
|
core.prototype._afterLoadResources = function (callback) {
|
||||||
core.control._setRequestAnimationFrame();
|
core.control._setRequestAnimationFrame();
|
||||||
|
core._initPlugins();
|
||||||
core.plugin = new function () {};
|
|
||||||
core.plugin.__init__ = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.plugins.plugin;
|
|
||||||
core.plugin.__init__();
|
|
||||||
core._forwardFunc("plugin");
|
|
||||||
|
|
||||||
core.showStartAnimate();
|
core.showStartAnimate();
|
||||||
if (callback) callback();
|
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 () {
|
core.prototype._forwardFuncs = function () {
|
||||||
for (var i = 0; i < main.loadList.length; ++i) {
|
for (var i = 0; i < main.loadList.length; ++i) {
|
||||||
var name = main.loadList[i];
|
var name = main.loadList[i];
|
||||||
|
|||||||
@ -797,7 +797,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
core.actions._clickGameInfo_openProject();
|
core.actions._clickGameInfo_openProject();
|
||||||
break;
|
break;
|
||||||
case 80: // P:游戏主页
|
case 80: // P:游戏主页
|
||||||
core.actions._clickGameInfo_openComments();
|
core.actions._clickGameInfo_openComments();
|
||||||
break;
|
break;
|
||||||
case 49: // 快捷键1: 破
|
case 49: // 快捷键1: 破
|
||||||
if (core.hasItem('pickaxe')) {
|
if (core.hasItem('pickaxe')) {
|
||||||
@ -1265,6 +1265,37 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
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": {
|
"ui": {
|
||||||
@ -1374,59 +1405,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
core.fillText('ui', "作者: 艾之葵", text_start, top + 112);
|
core.fillText('ui', "作者: 艾之葵", text_start, top + 112);
|
||||||
core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top+112+32);
|
core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top+112+32);
|
||||||
// TODO: 写自己的“关于”页面,每次增加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();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,23 +1,36 @@
|
|||||||
var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
||||||
{
|
{
|
||||||
"test": function(){
|
"init": function () {
|
||||||
|
// 在这里写的代码,在所有模块加载完毕后,游戏开始前会被执行
|
||||||
|
console.log("插件编写测试");
|
||||||
|
|
||||||
|
// 可以写一些其他的被直接执行的代码
|
||||||
|
|
||||||
|
|
||||||
|
this.test = function () {
|
||||||
console.log("插件函数执行测试");
|
console.log("插件函数执行测试");
|
||||||
},
|
console.log(this);
|
||||||
"drawLight": function (name, color, lights, lightDec) {
|
}
|
||||||
// 绘制灯光/漆黑层效果。调用方式 core.plugin.drawLight(...)
|
|
||||||
// 【参数说明】
|
// 可以在任何地方(如afterXXX或自定义脚本事件)调用函数,方法为 core.plugin.xxx();
|
||||||
// name:必填,要绘制到的画布名;可以是一个系统画布,或者是个自定义画布;如果不存在则创建
|
},
|
||||||
// color:可选,只能是一个0~1之间的数,为不透明度的值。不填则默认为0.9。
|
"drawLight": function () {
|
||||||
// lights:可选,一个数组,定义了每个独立的灯光。
|
|
||||||
// 其中每一项是三元组 [x,y,r] x和y分别为该灯光的横纵坐标,r为该灯光的半径。
|
// 绘制灯光/漆黑层效果。调用方式 core.plugin.drawLight(...)
|
||||||
// lightDec:可选,0到1之间,光从多少百分比才开始衰减(在此范围内保持全亮),不设置默认为0。
|
// 【参数说明】
|
||||||
// 比如lightDec为0.5代表,每个灯光部分内圈50%的范围全亮,50%以后才开始快速衰减。
|
// name:必填,要绘制到的画布名;可以是一个系统画布,或者是个自定义画布;如果不存在则创建
|
||||||
// 【调用样例】
|
// color:可选,只能是一个0~1之间的数,为不透明度的值。不填则默认为0.9。
|
||||||
// core.plugin.drawLight('curtain'); // 在curtain层绘制全图不透明度0.9,等价于更改画面色调为[0,0,0,0.9]。
|
// lights:可选,一个数组,定义了每个独立的灯光。
|
||||||
// core.plugin.drawLight('ui', 0.95, [[25,11,46]]); // 在ui层绘制全图不透明度0.95,其中在(25,11)点存在一个半径为46的灯光效果。
|
// 其中每一项是三元组 [x,y,r] x和y分别为该灯光的横纵坐标,r为该灯光的半径。
|
||||||
// core.plugin.drawLight('test', 0.2, [[25,11,46,0.1]]); // 创建一个test图层,不透明度0.2,其中在(25,11)点存在一个半径为46的灯光效果,灯光中心不透明度0.1。
|
// lightDec:可选,0到1之间,光从多少百分比才开始衰减(在此范围内保持全亮),不设置默认为0。
|
||||||
// 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。
|
// 比如lightDec为0.5代表,每个灯光部分内圈50%的范围全亮,50%以后才开始快速衰减。
|
||||||
// core.plugin.drawLight('xxx', 0.3, [[25,11,46],[105,121,88,0.2]], 0.4); // 存在两个灯光效果,它们在内圈40%范围内保持全亮,且40%后才开始衰减。
|
// 【调用样例】
|
||||||
|
// 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
|
// 清空色调层;也可以修改成其它层比如animate/weather层,或者用自己创建的canvas
|
||||||
var ctx = core.getContextByName(name);
|
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);
|
ctx = core.createCanvas(name, 0, 0, core.__PIXELS__, core.__PIXELS__, 98);
|
||||||
else return;
|
else return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.mozImageSmoothingEnabled = false;
|
ctx.mozImageSmoothingEnabled = false;
|
||||||
ctx.webkitImageSmoothingEnabled = false;
|
ctx.webkitImageSmoothingEnabled = false;
|
||||||
ctx.msImageSmoothingEnabled = false;
|
ctx.msImageSmoothingEnabled = false;
|
||||||
ctx.imageSmoothingEnabled = false;
|
ctx.imageSmoothingEnabled = false;
|
||||||
|
|
||||||
core.clearMap(name);
|
core.clearMap(name);
|
||||||
// 绘制色调层,默认不透明度
|
// 绘制色调层,默认不透明度
|
||||||
if (color == null) color = 0.9;
|
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);
|
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
||||||
|
|
||||||
lightDec = core.clamp(lightDec, 0, 1);
|
lightDec = core.clamp(lightDec, 0, 1);
|
||||||
|
|
||||||
// 绘制每个灯光效果
|
// 绘制每个灯光效果
|
||||||
ctx.globalCompositeOperation = 'destination-out';
|
ctx.globalCompositeOperation = 'destination-out';
|
||||||
lights.forEach(function (light) {
|
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 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(0, "rgba(0,0,0,1)");
|
||||||
grd.addColorStop(1, "rgba(0,0,0,0)");
|
grd.addColorStop(1, "rgba(0,0,0,0)");
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.fillStyle=grd;
|
ctx.fillStyle = grd;
|
||||||
ctx.arc(x,y,r,0,2*Math.PI);
|
ctx.arc(x, y, r, 0, 2 * Math.PI);
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
});
|
});
|
||||||
ctx.globalCompositeOperation = 'source-over';
|
ctx.globalCompositeOperation = 'source-over';
|
||||||
// 可以在任何地方(如afterXXX或自定义脚本事件)调用函数,方法为 core.plugin.xxx();
|
// 可以在任何地方(如afterXXX或自定义脚本事件)调用函数,方法为 core.plugin.xxx();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user