可通行度显示
This commit is contained in:
parent
2868d5557c
commit
6740f54f5a
@ -54,7 +54,7 @@ function editor() {
|
|||||||
lastUsedDiv: document.getElementById('lastUsedDiv'),
|
lastUsedDiv: document.getElementById('lastUsedDiv'),
|
||||||
lastUsed: document.getElementById('lastUsed'),
|
lastUsed: document.getElementById('lastUsed'),
|
||||||
lastUsedCtx: document.getElementById('lastUsed').getContext('2d'),
|
lastUsedCtx: document.getElementById('lastUsed').getContext('2d'),
|
||||||
lockMode: document.getElementById('lockMode'),
|
showMovable: document.getElementById('showMovable'),
|
||||||
gameInject: document.getElementById('gameInject'),
|
gameInject: document.getElementById('gameInject'),
|
||||||
undoFloor: document.getElementById('undoFloor'),
|
undoFloor: document.getElementById('undoFloor'),
|
||||||
editorTheme: document.getElementById('editorTheme'),
|
editorTheme: document.getElementById('editorTheme'),
|
||||||
@ -119,6 +119,8 @@ function editor() {
|
|||||||
// tile
|
// tile
|
||||||
lockMode: false,
|
lockMode: false,
|
||||||
|
|
||||||
|
showMovable: false,
|
||||||
|
|
||||||
// 最近使用的图块
|
// 最近使用的图块
|
||||||
lastUsedType: null,
|
lastUsedType: null,
|
||||||
lastUsed: [],
|
lastUsed: [],
|
||||||
@ -375,9 +377,17 @@ editor.prototype.drawEventBlock = function () {
|
|||||||
if (editor.uivalues.bigmap) return this._drawEventBlock_bigmap();
|
if (editor.uivalues.bigmap) return this._drawEventBlock_bigmap();
|
||||||
|
|
||||||
var firstData = editor.game.getFirstData();
|
var firstData = editor.game.getFirstData();
|
||||||
|
// 不可通行性
|
||||||
|
var movableArray = {};
|
||||||
|
if (editor.uivalues.showMovable) {
|
||||||
|
movableArray = core.generateMovableArray() || {};
|
||||||
|
fg.fillStyle = "rgba(0,0,0,0.4)";
|
||||||
|
fg.fillRect(0, 0, core.__PIXELS__, core.__PIXELS__);
|
||||||
|
}
|
||||||
for (var i=0;i<core.__SIZE__;i++) {
|
for (var i=0;i<core.__SIZE__;i++) {
|
||||||
for (var j=0;j<core.__SIZE__;j++) {
|
for (var j=0;j<core.__SIZE__;j++) {
|
||||||
var loc=(i+core.bigmap.offsetX/32)+","+(j+core.bigmap.offsetY/32);
|
var x = i+core.bigmap.offsetX/32, y = j+core.bigmap.offsetY/32;
|
||||||
|
var loc= x + ',' + y;
|
||||||
if (editor.currentFloorId == firstData.floorId
|
if (editor.currentFloorId == firstData.floorId
|
||||||
&& loc == firstData.hero.loc.x + "," + firstData.hero.loc.y) {
|
&& loc == firstData.hero.loc.x + "," + firstData.hero.loc.y) {
|
||||||
fg.textAlign = 'center';
|
fg.textAlign = 'center';
|
||||||
@ -411,6 +421,29 @@ editor.prototype.drawEventBlock = function () {
|
|||||||
editor.game.doCoreFunc("fillText", fg, "🔃", 32 * i + offset, 32 * j + 8, null, "8px Verdana");
|
editor.game.doCoreFunc("fillText", fg, "🔃", 32 * i + offset, 32 * j + 8, null, "8px Verdana");
|
||||||
offset += 8;
|
offset += 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var directions = (movableArray[x]||{})[y];
|
||||||
|
if (directions == null) continue;
|
||||||
|
if (!directions.includes('left') && x != 0) {
|
||||||
|
core.drawLine(fg, 32 * i + 1, 32 * j + 10, 32 * i + 1, 32 * j + 22, '#FF0000', 2);
|
||||||
|
core.drawLine(fg, 32 * i + 6, 32 * j + 13, 32 * i + 2, 32 * j + 16);
|
||||||
|
core.drawLine(fg, 32 * i + 6, 32 * j + 19, 32 * i + 2, 32 * j + 16);
|
||||||
|
}
|
||||||
|
if (!directions.includes('right') && x != editor.currentFloorData.width - 1) {
|
||||||
|
core.drawLine(fg, 32 * i + 31, 32 * j + 10, 32 * i + 31, 32 * j + 22, '#FF0000', 2);
|
||||||
|
core.drawLine(fg, 32 * i + 26, 32 * j + 13, 32 * i + 30, 32 * j + 16);
|
||||||
|
core.drawLine(fg, 32 * i + 26, 32 * j + 19, 32 * i + 30, 32 * j + 16);
|
||||||
|
}
|
||||||
|
if (!directions.includes('up') && y != 0) {
|
||||||
|
core.drawLine(fg, 32 * i + 10, 32 * j + 1, 32 * i + 22, 32 * j + 1, '#FF0000', 2);
|
||||||
|
core.drawLine(fg, 32 * i + 13, 32 * j + 6, 32 * i + 16, 32 * j + 2);
|
||||||
|
core.drawLine(fg, 32 * i + 19, 32 * j + 6, 32 * i + 16, 32 * j + 2);
|
||||||
|
}
|
||||||
|
if (!directions.includes('down') && y != editor.currentFloorData.height - 1) {
|
||||||
|
core.drawLine(fg, 32 * i + 10, 32 * j + 31, 32 * i + 22, 32 * j + 31, '#FF0000', 2);
|
||||||
|
core.drawLine(fg, 32 * i + 13, 32 * j + 26, 32 * i + 16, 32 * j + 30);
|
||||||
|
core.drawLine(fg, 32 * i + 19, 32 * j + 26, 32 * i + 16, 32 * j + 30);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -419,6 +452,14 @@ editor.prototype._drawEventBlock_bigmap = function () {
|
|||||||
var fg=editor.dom.efgCtx;
|
var fg=editor.dom.efgCtx;
|
||||||
var info = editor.uivalues.bigmapInfo, size = info.size, psize = size / 4;
|
var info = editor.uivalues.bigmapInfo, size = info.size, psize = size / 4;
|
||||||
|
|
||||||
|
// 不可通行性
|
||||||
|
var movableArray = {};
|
||||||
|
if (editor.uivalues.showMovable) {
|
||||||
|
movableArray = core.generateMovableArray() || {};
|
||||||
|
fg.fillStyle = "rgba(0,0,0,0.4)";
|
||||||
|
fg.fillRect(0, 0, core.__PIXELS__, core.__PIXELS__);
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < editor.currentFloorData.width; ++i) {
|
for (var i = 0; i < editor.currentFloorData.width; ++i) {
|
||||||
for (var j = 0; j < editor.currentFloorData.height; ++j) {
|
for (var j = 0; j < editor.currentFloorData.height; ++j) {
|
||||||
var color = this._drawEventBlock_getColor(i+","+j);
|
var color = this._drawEventBlock_getColor(i+","+j);
|
||||||
@ -426,6 +467,22 @@ editor.prototype._drawEventBlock_bigmap = function () {
|
|||||||
fg.fillStyle = cc;
|
fg.fillStyle = cc;
|
||||||
fg.fillRect(info.left + size * i + psize * kk, info.top + size * (j + 1) - psize, psize, psize);
|
fg.fillRect(info.left + size * i + psize * kk, info.top + size * (j + 1) - psize, psize, psize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var directions = (movableArray[i]||{})[j];
|
||||||
|
if (directions == null) continue;
|
||||||
|
if (!directions.includes('left') && i != 0) {
|
||||||
|
core.drawLine(fg, info.left + size * i + 1, info.top + size * j + size / 3, info.left + size * i + 1, info.top + size * j + size * 2 / 3, '#FF0000', 2);
|
||||||
|
}
|
||||||
|
if (!directions.includes('right') && i != editor.currentFloorData.width - 1) {
|
||||||
|
core.drawLine(fg, info.left + size * i + size - 1, info.top + size * j + size / 3, info.left + size * i + size - 1, info.top + size * j + size * 2 / 3, '#FF0000', 2);
|
||||||
|
}
|
||||||
|
if (!directions.includes('up') && j != 0) {
|
||||||
|
core.drawLine(fg, info.left + size * i + size / 3, info.top + size * j + 1, info.left + size * i + size * 2 / 3, info.top + size * j + 1, '#FF0000', 2);
|
||||||
|
}
|
||||||
|
if (!directions.includes('down') && j != editor.currentFloorData.height - 1) {
|
||||||
|
core.drawLine(fg, info.left + size * i + size / 3, info.top + size * j + size - 1, info.left + size * i + size * 2 / 3, info.top + size * j + size - 1, '#FF0000', 2);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -444,15 +501,13 @@ editor.prototype._drawEventBlock_getColor = function (loc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (editor.currentFloorData.beforeBattle[loc])
|
if (editor.currentFloorData.beforeBattle[loc])
|
||||||
color.push('#009090');
|
color.push('#0000FF');
|
||||||
if (editor.currentFloorData.afterBattle[loc])
|
if (editor.currentFloorData.afterBattle[loc])
|
||||||
color.push('#FFFF00');
|
color.push('#FFFF00');
|
||||||
if (editor.currentFloorData.changeFloor[loc])
|
if (editor.currentFloorData.changeFloor[loc])
|
||||||
color.push('#00FF00');
|
color.push('#00FF00');
|
||||||
if (editor.currentFloorData.afterGetItem[loc])
|
if (editor.currentFloorData.afterGetItem[loc])
|
||||||
color.push('#00FFFF');
|
color.push('#00FFFF');
|
||||||
if (editor.currentFloorData.cannotMove[loc] && editor.currentFloorData.cannotMove[loc].length > 0)
|
|
||||||
color.push('#0000FF');
|
|
||||||
if (editor.currentFloorData.afterOpenDoor[loc])
|
if (editor.currentFloorData.afterOpenDoor[loc])
|
||||||
color.push('#FF00FF');
|
color.push('#FF00FF');
|
||||||
return color;
|
return color;
|
||||||
|
|||||||
@ -42,7 +42,7 @@ editor_listen_wrapper = function (editor) {
|
|||||||
editor.dom.lastUsed.onmouseup = editor.uifunctions.lastUsed_click;
|
editor.dom.lastUsed.onmouseup = editor.uifunctions.lastUsed_click;
|
||||||
editor.dom.lastUsed.oncontextmenu = function (e) { e.preventDefault(); }
|
editor.dom.lastUsed.oncontextmenu = function (e) { e.preventDefault(); }
|
||||||
editor.dom.clearLastUsedBtn.onclick = editor.uifunctions.clearLastUsedBtn_click;
|
editor.dom.clearLastUsedBtn.onclick = editor.uifunctions.clearLastUsedBtn_click;
|
||||||
editor.dom.lockMode.onchange = editor.uifunctions.lockMode_onchange;
|
editor.dom.showMovable.onchange = editor.uifunctions.showMovable_onchange;
|
||||||
|
|
||||||
editor.dom.brushMod.onchange = editor.uifunctions.brushMod_onchange
|
editor.dom.brushMod.onchange = editor.uifunctions.brushMod_onchange
|
||||||
if (editor.dom.brushMod2) editor.dom.brushMod2.onchange = editor.uifunctions.brushMod2_onchange;
|
if (editor.dom.brushMod2) editor.dom.brushMod2.onchange = editor.uifunctions.brushMod2_onchange;
|
||||||
|
|||||||
@ -774,12 +774,13 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* editor.dom.lockMode.onchange
|
* editor.dom.showMovable.onchange
|
||||||
* 点击【】
|
* 点击【】
|
||||||
*/
|
*/
|
||||||
editor.uifunctions.lockMode_onchange = function () {
|
editor.uifunctions.showMovable_onchange = function () {
|
||||||
printf('锁定模式开启下将不再点击空白处自动保存,请谨慎操作。');
|
printf('此模式下将显示每个点的不可通行状态。<br/>请注意,修改了图块属性的不可出入方向后需要刷新才会正确显示在地图上。');
|
||||||
editor.uivalues.lockMode = editor.dom.lockMode.checked;
|
editor.uivalues.showMovable = editor.dom.showMovable.checked;
|
||||||
|
editor.drawEventBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -627,8 +627,18 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
|
|||||||
"prefix": ["上: ", "下: ", "<br>左: ", "右: "],
|
"prefix": ["上: ", "下: ", "<br>左: ", "右: "],
|
||||||
"key": ["up", "down", "left", "right"]
|
"key": ["up", "down", "left", "right"]
|
||||||
},
|
},
|
||||||
"_docs": "不可通行性",
|
"_docs": "不可出方向",
|
||||||
"_data": "该点不可通行的方向 \n 可以在这里定义该点不能前往哪个方向,可以达到悬崖之类的效果\n例如 [\"up\", \"left\"] 代表该点不能往上和左走"
|
"_data": "该点不可通行出的方向 \n 可以在这里定义该点不能前往哪个方向,可以达到悬崖之类的效果"
|
||||||
|
},
|
||||||
|
"cannotMoveIn": {
|
||||||
|
"_leaf": true,
|
||||||
|
"_type": "checkboxSet",
|
||||||
|
"_checkboxSet": {
|
||||||
|
"prefix": ["上: ", "下: ", "<br>左: ", "右: "],
|
||||||
|
"key": ["up", "down", "left", "right"]
|
||||||
|
},
|
||||||
|
"_docs": "不可入方向",
|
||||||
|
"_data": "该点不可通行入的方向 \n 可以在这里定义从哪个方向前往该点,可以达到悬崖之类的效果"
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -664,7 +674,8 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
|
|||||||
"afterGetItem": {},
|
"afterGetItem": {},
|
||||||
"afterOpenDoor": {},
|
"afterOpenDoor": {},
|
||||||
"autoEvent": {},
|
"autoEvent": {},
|
||||||
"cannotMove": {}
|
"cannotMove": {},
|
||||||
|
"cannotMoveIn": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -357,8 +357,8 @@
|
|||||||
<option value="commonevent">公共事件</option>
|
<option value="commonevent">公共事件</option>
|
||||||
<option value="plugins">插件编写</option>
|
<option value="plugins">插件编写</option>
|
||||||
</select>
|
</select>
|
||||||
<span style="font-size: 12px"><input type="checkbox" id="lockMode"/>锁定</span>
|
<span style="font-size: 12px"><input type="checkbox" id="showMovable"/>通行度</span>
|
||||||
<select id="editorTheme">
|
<select id="editorTheme" style="font-size: 11px;">
|
||||||
<option value="editor_color">默认白</option>
|
<option value="editor_color">默认白</option>
|
||||||
<option value="editor_color_dark">夜间黑</option>
|
<option value="editor_color_dark">夜间黑</option>
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@ -316,8 +316,8 @@
|
|||||||
<option value="commonevent">公共事件</option>
|
<option value="commonevent">公共事件</option>
|
||||||
<option value="plugins">插件编写</option>
|
<option value="plugins">插件编写</option>
|
||||||
</select>
|
</select>
|
||||||
<span style="font-size: 12px"><input type="checkbox" id="lockMode"/>锁定</span>
|
<span style="font-size: 12px"><input type="checkbox" id="showMovable"/>通行度</span>
|
||||||
<select id="editorTheme" style="margin-left: 3px;">
|
<select id="editorTheme" style="margin-left: 3px; font-size: 11px;">
|
||||||
<option value="editor_color">默认白</option>
|
<option value="editor_color">默认白</option>
|
||||||
<option value="editor_color_dark">夜间黑</option>
|
<option value="editor_color_dark">夜间黑</option>
|
||||||
</select>
|
</select>
|
||||||
@ -348,6 +348,7 @@
|
|||||||
<input type="button" value="保存地图" id='saveFloor'/>
|
<input type="button" value="保存地图" id='saveFloor'/>
|
||||||
<input type="button" value="后退" id="undoFloor" />
|
<input type="button" value="后退" id="undoFloor" />
|
||||||
<input type="button" value="查看帮助文档" id="openDoc" />
|
<input type="button" value="查看帮助文档" id="openDoc" />
|
||||||
|
<input type="button" value="前往游戏" onclick="window.open('./index.html', '_blank')"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="mid2">
|
<div id="mid2">
|
||||||
|
|||||||
15
libs/maps.js
15
libs/maps.js
@ -23,6 +23,8 @@ maps.prototype._initFloors = function (floorId) {
|
|||||||
|
|
||||||
// 战前事件兼容性
|
// 战前事件兼容性
|
||||||
if (!core.floors[floorId].beforeBattle) core.floors[floorId].beforeBattle = {}
|
if (!core.floors[floorId].beforeBattle) core.floors[floorId].beforeBattle = {}
|
||||||
|
// cannotMoveIn兼容性
|
||||||
|
if (!core.floors[floorId].cannotMoveIn) core.floors[floorId].cannotMoveIn = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
maps.prototype._resetFloorImages = function () {
|
maps.prototype._resetFloorImages = function () {
|
||||||
@ -74,7 +76,8 @@ maps.prototype.loadFloor = function (floorId, map) {
|
|||||||
maps.prototype._loadFloor_doNotCopy = function () {
|
maps.prototype._loadFloor_doNotCopy = function () {
|
||||||
return [
|
return [
|
||||||
"firstArrive", "eachArrive", "blocks", "parallelDo", "map", "bgmap", "fgmap",
|
"firstArrive", "eachArrive", "blocks", "parallelDo", "map", "bgmap", "fgmap",
|
||||||
"events", "changeFloor", "beforeBattle", "afterBattle", "afterGetItem", "afterOpenDoor", "cannotMove"
|
"events", "changeFloor", "beforeBattle", "afterBattle", "afterGetItem", "afterOpenDoor",
|
||||||
|
"cannotMove", "cannotMoveIn"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,15 +728,19 @@ maps.prototype._canMoveHero_checkPoint = function (x, y, direction, floorId, arr
|
|||||||
if (nx < 0 || ny < 0 || nx >= core.floors[floorId].width || ny >= core.floors[floorId].height)
|
if (nx < 0 || ny < 0 || nx >= core.floors[floorId].width || ny >= core.floors[floorId].height)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 2. 检查该点素材的 cannotOut 和下一个点的 cannotIn
|
// 2. 检查下个点的 cannotMoveIn
|
||||||
|
if (core.inArray((core.floors[floorId].cannotMoveIn || {})[nx + "," + ny], core.turnDirection(":back", direction)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// 3. 检查该点素材的 cannotOut 和下一个点的 cannotIn
|
||||||
if (this._canMoveHero_checkCannotInOut(Object.keys(arrays).map(function (name) { return arrays[name][y][x]; }), "cannotOut", direction))
|
if (this._canMoveHero_checkCannotInOut(Object.keys(arrays).map(function (name) { return arrays[name][y][x]; }), "cannotOut", direction))
|
||||||
return false;
|
return false;
|
||||||
if (this._canMoveHero_checkCannotInOut(Object.keys(arrays).map(function (name) { return arrays[name][ny][nx]; }), "cannotIn", direction))
|
if (this._canMoveHero_checkCannotInOut(Object.keys(arrays).map(function (name) { return arrays[name][ny][nx]; }), "cannotIn", direction))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 3. 检查是否能进将死的领域
|
// 4. 检查是否能进将死的领域
|
||||||
if (floorId == core.status.floorId && !core.flags.canGoDeadZone && !core.status.lockControl &&
|
if (floorId == core.status.floorId && !core.flags.canGoDeadZone && !core.status.lockControl &&
|
||||||
Math.max(core.status.hero.hp, 1) <= (core.status.checkBlock.damage[nx + "," + ny]||0) && arrays.eventArray[ny][nx] == 0)
|
Math.max(core.status.hero.hp, 1) <= ((core.status.checkBlock.damage||{})[nx + "," + ny]||0) && arrays.eventArray[ny][nx] == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user