feat:图块通行性计入存档
This commit is contained in:
parent
656e35bb84
commit
cdb26566c8
56
libs/maps.js
56
libs/maps.js
@ -11,6 +11,19 @@ maps.prototype._init = function () {
|
|||||||
//delete(maps_90f36752_8815_4be8_b32b_d7fad1d0542e);
|
//delete(maps_90f36752_8815_4be8_b32b_d7fad1d0542e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maps.prototype.getBlocksInfo = function () {
|
||||||
|
let blocksInfo = core.clone(maps_90f36752_8815_4be8_b32b_d7fad1d0542e);
|
||||||
|
const blocksInfo_flag = core.getFlag('blocksInfo', {});
|
||||||
|
for (let i in blocksInfo_flag) {
|
||||||
|
if (blocksInfo.hasOwnProperty(i)) {
|
||||||
|
for (let j in blocksInfo_flag[i]) {
|
||||||
|
blocksInfo[i][j] = blocksInfo_flag[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return blocksInfo;
|
||||||
|
}
|
||||||
|
|
||||||
maps.prototype._initFloors = function (floorId) {
|
maps.prototype._initFloors = function (floorId) {
|
||||||
if (!floorId) {
|
if (!floorId) {
|
||||||
core.floorIds.forEach(function (floorId) {
|
core.floorIds.forEach(function (floorId) {
|
||||||
@ -2483,6 +2496,49 @@ maps.prototype.setBgFgBlock = function (name, number, x, y, floorId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////// 改变事件层图块的连通性 //////
|
||||||
|
maps.prototype.setBlockConnectivity = function (num, statusName, statusValue) {
|
||||||
|
if (typeof num === 'string') num = this.getNumberById(num);
|
||||||
|
if (!core.maps.blocksInfo.hasOwnProperty(num)) return;
|
||||||
|
|
||||||
|
const floorIds = core.floorIds,
|
||||||
|
maps = core.status.maps,
|
||||||
|
mapBlockObjs = core.status.mapBlockObjs,
|
||||||
|
blocksInfo = core.maps.blocksInfo,
|
||||||
|
number2Block = core.status.number2Block;
|
||||||
|
core.maps.blocksInfo = core.clone(maps_90f36752_8815_4be8_b32b_d7fad1d0542e);
|
||||||
|
if (statusName === 'noPass') {
|
||||||
|
floorIds.forEach((floorId) => {
|
||||||
|
if (maps.hasOwnProperty(floorId)) {
|
||||||
|
Object.values(maps[floorId].blocks).forEach(
|
||||||
|
(block) => {
|
||||||
|
if (block.id === num) block.event[statusName] = statusValue;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (mapBlockObjs.hasOwnProperty(floorId)) {
|
||||||
|
Object.values(mapBlockObjs[floorId]).forEach(
|
||||||
|
(block) => {
|
||||||
|
if (block.id === num) block.event[statusName] = statusValue;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
blocksInfo[num]['canPass'] = !statusValue;
|
||||||
|
const blocksInfo_flag = core.getFlag('blocksInfo', {});
|
||||||
|
if (!blocksInfo_flag.hasOwnProperty(num)) blocksInfo_flag[num] = {};
|
||||||
|
blocksInfo_flag[num]['canPass'] = !statusValue;
|
||||||
|
core.setFlag('blocksInfo', blocksInfo_flag);
|
||||||
|
}
|
||||||
|
else if (['cannotOut', 'cannotIn'].includes(statusName)) {
|
||||||
|
if (number2Block) number2Block[num]['event'][statusName] = statusValue;
|
||||||
|
blocksInfo[num][statusName] = statusValue;
|
||||||
|
const blocksInfo_flag = core.getFlag('blocksInfo', {});
|
||||||
|
if (!blocksInfo_flag.hasOwnProperty(num)) blocksInfo_flag[num] = {};
|
||||||
|
blocksInfo_flag[num][statusName] = statusValue;
|
||||||
|
core.setFlag('blocksInfo', blocksInfo_flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////// 重置地图 //////
|
////// 重置地图 //////
|
||||||
maps.prototype.resetMap = function (floorId) {
|
maps.prototype.resetMap = function (floorId) {
|
||||||
floorId = floorId || core.status.floorId;
|
floorId = floorId || core.status.floorId;
|
||||||
|
|||||||
20
mynote.md
Normal file
20
mynote.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
tileset只有noPass属性。设置noPass为false的瞬间就会写入project/maps.js
|
||||||
|
其它情况只要不是items就不可过。
|
||||||
|
写入可通行性对tileset只用写canPass就好
|
||||||
|
读档:```core.utils.decompress(core.saves.cache['template_save3'] );```
|
||||||
|
解码录像 core.decodeRoute(a.route);
|
||||||
|
|
||||||
|
可通行性,关键在getBlockByNumber函数。它从core.status.number2Block中获取信息。而number2Block不存在该属性时会initBlock
|
||||||
|
initBlock从blocksInfo中读
|
||||||
|
|
||||||
|
改变canPass后:(模仿setBlock)
|
||||||
|
originBlock = core.getBlock(x, y, floorId, true);获取originBlock
|
||||||
|
core.status.maps[floorId].blocks全要改
|
||||||
|
core.status.mapBlockObjs全要改
|
||||||
|
|
||||||
|
enemyInfo进存档的手法非常简单粗暴 就是存了个变量
|
||||||
|
|
||||||
|
extractBlocks->_mapIntoBlocks->initBlock
|
||||||
|
|
||||||
|
cannotOut和cannotIn的关键
|
||||||
|
箭头还在getBlockByNumber中
|
||||||
@ -30,9 +30,10 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
core.status.floorId = floorId;
|
core.status.floorId = floorId;
|
||||||
core.status.maps = maps;
|
core.status.maps = maps;
|
||||||
core.maps._resetFloorImages();
|
core.maps._resetFloorImages();
|
||||||
// 初始化怪物和道具
|
// 初始化怪物,道具,和地图图块信息
|
||||||
core.material.enemys = core.enemys.getEnemys();
|
core.material.enemys = core.enemys.getEnemys();
|
||||||
core.material.items = core.items.getItems();
|
core.material.items = core.items.getItems();
|
||||||
|
core.maps.blocksInfo = core.maps.getBlocksInfo();
|
||||||
// 初始化全局数值和全局开关
|
// 初始化全局数值和全局开关
|
||||||
core.values = core.clone(core.data.values);
|
core.values = core.clone(core.data.values);
|
||||||
for (var key in values || {})
|
for (var key in values || {})
|
||||||
@ -163,7 +164,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
|
|
||||||
// ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
|
// ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
|
||||||
|
|
||||||
},
|
},
|
||||||
"afterChangeFloor": function (floorId) {
|
"afterChangeFloor": function (floorId) {
|
||||||
// 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
|
// 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
|
||||||
// floorId是切换到的楼层
|
// floorId是切换到的楼层
|
||||||
@ -513,7 +514,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (todo.length > 0) core.insertAction(todo, x, y);
|
if (todo.length > 0) core.insertAction(todo, x, y);
|
||||||
},
|
},
|
||||||
"afterPushBox": function () {
|
"afterPushBox": function () {
|
||||||
// 推箱子后的事件
|
// 推箱子后的事件
|
||||||
if (core.searchBlock('box').length == 0) {
|
if (core.searchBlock('box').length == 0) {
|
||||||
@ -567,7 +568,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
[29, "败移", function (enemy) { return ""; }, "#c0ddbb"],
|
[29, "败移", function (enemy) { return ""; }, "#c0ddbb"],
|
||||||
[30, "吸噬", function (enemy) { return ""; }, "#c0ddbb"],
|
[30, "吸噬", function (enemy) { return ""; }, "#c0ddbb"],
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
"getEnemyInfo": function (enemy, hero, x, y, floorId) {
|
"getEnemyInfo": function (enemy, hero, x, y, floorId) {
|
||||||
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
|
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
|
||||||
// 例如:坚固、模仿、仿攻等等
|
// 例如:坚固、模仿、仿攻等等
|
||||||
@ -1027,7 +1028,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
"onStatusBarClick": function (px, py, vertical) {
|
"onStatusBarClick": function (px, py, vertical) {
|
||||||
// 点击状态栏时触发的事件,仅在自绘状态栏开启时生效
|
// 点击状态栏时触发的事件,仅在自绘状态栏开启时生效
|
||||||
// px和py为点击的像素坐标
|
// px和py为点击的像素坐标
|
||||||
@ -1561,7 +1562,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
needCache: needCache,
|
needCache: needCache,
|
||||||
cache: {} // clear cache
|
cache: {} // clear cache
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
"moveOneStep": function (callback) {
|
"moveOneStep": function (callback) {
|
||||||
// 勇士每走一步后执行的操作。callback为行走完毕后的回调
|
// 勇士每走一步后执行的操作。callback为行走完毕后的回调
|
||||||
// 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
|
// 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
|
||||||
|
|||||||
25
runtime.d.ts
vendored
25
runtime.d.ts
vendored
@ -1549,6 +1549,21 @@ interface enemys {
|
|||||||
/** @file maps.js负责一切和地图相关的处理内容 */
|
/** @file maps.js负责一切和地图相关的处理内容 */
|
||||||
interface maps {
|
interface maps {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取初始core.maps.blockInfo的一个拷贝
|
||||||
|
*/
|
||||||
|
getBlocksInfo(): {
|
||||||
|
[x: string]: {
|
||||||
|
cls: string
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
cannotIn: string[]
|
||||||
|
cannotOut: string[]
|
||||||
|
canPass: boolean
|
||||||
|
[x: string]: any
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据图块id得到数字(地图矩阵中的值)
|
* 根据图块id得到数字(地图矩阵中的值)
|
||||||
* @example core.getNumberById('yellowWall'); // 1
|
* @example core.getNumberById('yellowWall'); // 1
|
||||||
@ -1832,6 +1847,16 @@ interface maps {
|
|||||||
*/
|
*/
|
||||||
setBgFgBlock(name: 'bg' | 'fg', number: number | string, x: number, y: number, floorId?: string): void
|
setBgFgBlock(name: 'bg' | 'fg', number: number | string, x: number, y: number, floorId?: string): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 改变事件层图块的连通性
|
||||||
|
* @example core.setBlockConnectivity(165, 'noPass', true);
|
||||||
|
* @example core.setBlockConnectivity(162, 'cannotIn', ['left', 'right']);
|
||||||
|
* @param num 图层的数字或id
|
||||||
|
* @param statusName 要修改的图块属性的名称
|
||||||
|
* @param statusValue 要修改到的值
|
||||||
|
*/
|
||||||
|
setBlockConnectivity(num: number | string, statusName: 'noPass' | 'cannotIn' | 'cannotOut', statusValue: unknown): void
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 移动图块
|
* 移动图块
|
||||||
* @example core.moveBlock(0, 0, ['down']); // 令地图左上角的图块下移一格,用时半秒,再花半秒淡出
|
* @example core.moveBlock(0, 0, ['down']); // 令地图左上角的图块下移一格,用时半秒,再花半秒淡出
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user