395 lines
14 KiB
JavaScript
395 lines
14 KiB
JavaScript
editor_datapanel_wrapper = function (editor) {
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 地图编辑 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
editor.uifunctions.newMap_func = function () {
|
||
|
||
var newMap = document.getElementById('newMap');
|
||
var newFileName = document.getElementById('newFileName');
|
||
newMap.onclick = function () {
|
||
if (!newFileName.value) return;
|
||
if (core.floorIds.indexOf(newFileName.value) >= 0) {
|
||
printe("该楼层已存在!");
|
||
return;
|
||
}
|
||
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(newFileName.value)) {
|
||
printe("楼层名不合法!请使用字母、数字、下划线,且不能以数字开头!");
|
||
return;
|
||
}
|
||
var width = parseInt(document.getElementById('newMapWidth').value);
|
||
var height = parseInt(document.getElementById('newMapHeight').value);
|
||
if (!core.isset(width) || !core.isset(height) || width < core.__SIZE__ || height < core.__SIZE__ || width * height > 1000) {
|
||
printe("新建地图的宽高都不得小于" + core.__SIZE__ + ",且宽高之积不能超过1000");
|
||
return;
|
||
}
|
||
|
||
editor_mode.onmode('');
|
||
editor.file.saveNewFile(newFileName.value, function (err) {
|
||
if (err) {
|
||
printe(err);
|
||
throw (err)
|
||
}
|
||
core.floorIds.push(newFileName.value);
|
||
editor.file.editTower([['change', "['main']['floorIds']", core.floorIds]], function (objs_) {//console.log(objs_);
|
||
if (objs_.slice(-1)[0] != null) {
|
||
printe(objs_.slice(-1)[0]);
|
||
throw (objs_.slice(-1)[0])
|
||
}
|
||
; printe('新建成功,请F5刷新编辑器生效');
|
||
});
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
|
||
editor.uifunctions.createNewMaps_func = function () {
|
||
var newMaps = document.getElementById('newMaps');
|
||
var newFloors = document.getElementById('newFloors');
|
||
newMaps.onclick = function () {
|
||
if (newFloors.style.display == 'none') newFloors.style.display = 'block';
|
||
else newFloors.style.display = 'none';
|
||
}
|
||
|
||
var createNewMaps = document.getElementById('createNewMaps');
|
||
createNewMaps.onclick = function () {
|
||
var floorIds = document.getElementById('newFloorIds').value;
|
||
if (!floorIds) return;
|
||
var from = parseInt(document.getElementById('newMapsFrom').value),
|
||
to = parseInt(document.getElementById('newMapsTo').value);
|
||
if (!core.isset(from) || !core.isset(to) || from > to || from < 0 || to < 0) {
|
||
printe("请输入有效的起始和终止楼层");
|
||
return;
|
||
}
|
||
if (to - from >= 100) {
|
||
printe("一次最多创建99个楼层");
|
||
return;
|
||
}
|
||
var floorIdList = [];
|
||
for (var i = from; i <= to; i++) {
|
||
var floorId = floorIds.replace(/\${(.*?)}/g, function (word, value) {
|
||
return eval(value);
|
||
});
|
||
if (core.floorIds.indexOf(floorId) >= 0) {
|
||
printe("要创建的楼层 " + floorId + " 已存在!");
|
||
return;
|
||
}
|
||
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(floorId)) {
|
||
printe("楼层名 " + floorId + " 不合法!请使用字母、数字、下划线,且不能以数字开头!");
|
||
return;
|
||
}
|
||
if (floorIdList.indexOf(floorId) >= 0) {
|
||
printe("尝试重复创建楼层 " + floorId + " !");
|
||
return;
|
||
}
|
||
floorIdList.push(floorId);
|
||
}
|
||
|
||
var width = parseInt(document.getElementById('newMapsWidth').value);
|
||
var height = parseInt(document.getElementById('newMapsHeight').value);
|
||
if (!core.isset(width) || !core.isset(height) || width < core.__SIZE__ || height < core.__SIZE__ || width * height > 1000) {
|
||
printe("新建地图的宽高都不得小于" + core.__SIZE__ + ",且宽高之积不能超过1000");
|
||
return;
|
||
}
|
||
editor_mode.onmode('');
|
||
|
||
editor.file.saveNewFiles(floorIdList, from, to, function (err) {
|
||
if (err) {
|
||
printe(err);
|
||
throw (err)
|
||
}
|
||
core.floorIds = core.floorIds.concat(floorIdList);
|
||
editor.file.editTower([['change', "['main']['floorIds']", core.floorIds]], function (objs_) {//console.log(objs_);
|
||
if (objs_.slice(-1)[0] != null) {
|
||
printe(objs_.slice(-1)[0]);
|
||
throw (objs_.slice(-1)[0])
|
||
}
|
||
; printe('批量创建 ' + floorIdList[0] + '~' + floorIdList[floorIdList.length - 1] + ' 成功,请F5刷新编辑器生效');
|
||
});
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 地图选点 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 图块属性 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
editor.uifunctions.newIdIdnum_func = function () {
|
||
|
||
|
||
var newIdIdnum = document.getElementById('newIdIdnum');
|
||
newIdIdnum.children[2].onclick = function () {
|
||
if (newIdIdnum.children[0].value && newIdIdnum.children[1].value) {
|
||
var id = newIdIdnum.children[0].value;
|
||
var idnum = parseInt(newIdIdnum.children[1].value);
|
||
if (!core.isset(idnum)) {
|
||
printe('不合法的idnum');
|
||
return;
|
||
}
|
||
if (!/^[0-9a-zA-Z_]+$/.test(id)) {
|
||
printe('不合法的id,请使用字母、数字或下划线')
|
||
return;
|
||
}
|
||
editor.file.changeIdAndIdnum(id, idnum, editor_mode.info, function (err) {
|
||
if (err) {
|
||
printe(err);
|
||
throw (err)
|
||
}
|
||
printe('添加id和idnum成功,请F5刷新编辑器');
|
||
});
|
||
} else {
|
||
printe('请输入id和idnum');
|
||
}
|
||
}
|
||
|
||
newIdIdnum.children[4].onclick = function () {
|
||
editor.file.autoRegister(editor_mode.info, function (err) {
|
||
if (err) {
|
||
printe(err);
|
||
throw (err)
|
||
}
|
||
printe('该列所有剩余项全部自动注册成功,请F5刷新编辑器');
|
||
})
|
||
}
|
||
}
|
||
|
||
editor.uifunctions.changeId_func = function () {
|
||
var changeId = document.getElementById('changeId');
|
||
changeId.children[1].onclick = function () {
|
||
var id = changeId.children[0].value;
|
||
if (id) {
|
||
if (!/^[0-9a-zA-Z_]+$/.test(id)) {
|
||
printe('不合法的id,请使用字母、数字或下划线')
|
||
return;
|
||
}
|
||
editor.file.changeIdAndIdnum(id, null, editor_mode.info, function (err) {
|
||
if (err) {
|
||
printe(err);
|
||
throw (err);
|
||
}
|
||
printe('修改id成功,请F5刷新编辑器');
|
||
});
|
||
} else {
|
||
printe('请输入要修改到的ID');
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 楼层属性 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
editor.uifunctions.changeFloorId_func = function () {
|
||
|
||
var changeFloorId = document.getElementById('changeFloorId');
|
||
changeFloorId.children[1].onclick = function () {
|
||
var floorId = changeFloorId.children[0].value;
|
||
if (floorId) {
|
||
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(floorId)) {
|
||
printe("楼层名 " + floorId + " 不合法!请使用字母、数字、下划线,且不能以数字开头!");
|
||
return;
|
||
}
|
||
if (main.floorIds.indexOf(floorId) >= 0) {
|
||
printe("楼层名 " + floorId + " 已存在!");
|
||
return;
|
||
}
|
||
var currentFloorId = editor.currentFloorId;
|
||
editor.currentFloorId = floorId;
|
||
editor.currentFloorData.floorId = floorId;
|
||
editor.file.saveFloorFile(function (err) {
|
||
if (err) {
|
||
printe(err);
|
||
throw (err);
|
||
}
|
||
core.floorIds[core.floorIds.indexOf(currentFloorId)] = floorId;
|
||
editor.file.editTower([['change', "['main']['floorIds']", core.floorIds]], function (objs_) {//console.log(objs_);
|
||
if (objs_.slice(-1)[0] != null) {
|
||
printe(objs_.slice(-1)[0]);
|
||
throw (objs_.slice(-1)[0])
|
||
}
|
||
alert("修改floorId成功,需要刷新编辑器生效。\n请注意,原始的楼层文件没有删除,请根据需要手动删除。");
|
||
window.location.reload();
|
||
});
|
||
});
|
||
} else {
|
||
printe('请输入要修改到的floorId');
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 全塔属性 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 脚本编辑 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 追加素材 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
editor.uifunctions.fixCtx_func = function () {
|
||
[editor.dom.sourceCtx, editor.dom.spriteCtx].forEach(function (ctx) {
|
||
ctx.mozImageSmoothingEnabled = false;
|
||
ctx.webkitImageSmoothingEnabled = false;
|
||
ctx.msImageSmoothingEnabled = false;
|
||
ctx.imageSmoothingEnabled = false;
|
||
})
|
||
}
|
||
|
||
editor.uifunctions.selectAppend_func = function () {
|
||
|
||
var selectAppend_str = [];
|
||
["terrains", "animates", "enemys", "enemy48", "items", "npcs", "npc48", "autotile"].forEach(function (image) {
|
||
selectAppend_str.push(["<option value='", image, "'>", image, '</option>\n'].join(''));
|
||
});
|
||
editor.dom.selectAppend.innerHTML = selectAppend_str.join('');
|
||
editor.dom.selectAppend.onchange = function () {
|
||
|
||
var value = editor.dom.selectAppend.value;
|
||
|
||
if (value == 'autotile') {
|
||
editor_mode.appendPic.imageName = 'autotile';
|
||
for (var jj = 0; jj < 4; jj++) editor.dom.appendPicSelection.children[jj].style = 'display:none';
|
||
if (editor_mode.appendPic.img) {
|
||
editor.dom.sprite.style.width = (editor.dom.sprite.width = editor_mode.appendPic.img.width) / editor.uivalues.ratio + 'px';
|
||
editor.dom.sprite.style.height = (editor.dom.sprite.height = editor_mode.appendPic.img.height) / editor.uivalues.ratio + 'px';
|
||
editor.dom.spriteCtx.clearRect(0, 0, editor.dom.sprite.width, editor.dom.sprite.height);
|
||
editor.dom.spriteCtx.drawImage(editor_mode.appendPic.img, 0, 0);
|
||
}
|
||
return;
|
||
}
|
||
|
||
var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32;
|
||
editor_mode.appendPic.imageName = value;
|
||
var img = core.material.images[value];
|
||
editor_mode.appendPic.toImg = img;
|
||
var num = ~~img.width / 32;
|
||
editor_mode.appendPic.num = num;
|
||
editor_mode.appendPic.index = 0;
|
||
var selectStr = '';
|
||
for (var ii = 0; ii < num; ii++) {
|
||
editor.dom.appendPicSelection.children[ii].style = 'left:0;top:0;height:' + (ysize - 6) + 'px';
|
||
selectStr += '{"x":0,"y":0},'
|
||
}
|
||
editor_mode.appendPic.selectPos = eval('[' + selectStr + ']');
|
||
for (var jj = num; jj < 4; jj++) {
|
||
editor.dom.appendPicSelection.children[jj].style = 'display:none';
|
||
}
|
||
editor.dom.sprite.style.width = (editor.dom.sprite.width = img.width) / editor.uivalues.ratio + 'px';
|
||
editor.dom.sprite.style.height = (editor.dom.sprite.height = img.height + ysize) / editor.uivalues.ratio + 'px';
|
||
editor.dom.spriteCtx.drawImage(img, 0, 0);
|
||
}
|
||
editor.dom.selectAppend.onchange();
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 公共事件 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
//////////////////// 插件编写 //////////////////////////////////////////
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
} |