Single save

This commit is contained in:
oc 2018-02-01 10:57:38 +08:00
parent 777e296179
commit deb465ed5c
3 changed files with 321 additions and 17 deletions

View File

@ -220,7 +220,9 @@ core.prototype.init = function (dom, statusBar, canvas, images, pngs, bgms, soun
return;
}
}
catch (e) {}
catch (e) {
console.log(e);
}
alert("不是有效的JSON文件");
if (core.isset(core.platform.errorCallback))
@ -701,6 +703,14 @@ core.prototype.keyDown = function(keyCode) {
core.events.keyDownSyncSave(keyCode);
return;
}
if (core.status.event.id=='syncSelect') {
core.events.keyDownSyncSelect(keyCode);
return;
}
if (core.status.event.id=='localSaveSelect') {
core.events.keyDownLocalSaveSelect(keyCode);
return;
}
return;
}
if(!core.status.played) {
@ -816,6 +826,14 @@ core.prototype.keyUp = function(keyCode) {
core.events.keyUpSyncSave(keyCode);
return;
}
if (core.status.event.id=='syncSelect') {
core.events.keyUpSyncSelect(keyCode);
return;
}
if (core.status.event.id=='localSaveSelect') {
core.events.keyUpLocalSaveSelect(keyCode);
return;
}
return;
}
@ -1152,6 +1170,16 @@ core.prototype.onclick = function (x, y, stepPostfix) {
return;
}
if (core.status.event.id == 'syncSelect') {
core.events.clickSyncSelect(x,y);
return;
}
if (core.status.event.id == 'localSaveSelect') {
core.events.clickLocalSaveSelect(x,y);
return;
}
}
////// 滑动鼠标滚轮时的操作 //////
@ -1283,8 +1311,6 @@ core.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) {
}
}
moveStep=moveStep.concat(stepPostfix);
//core.status.automaticRoutingTemp.destX = destX;
//core.status.automaticRoutingTemp.destY = destY;
core.status.automaticRoute.destX=destX;
core.status.automaticRoute.destY=destY;
core.canvas.ui.save();
@ -3918,6 +3944,151 @@ core.prototype.doSL = function (id, type) {
}
}
////// 同步存档到服务器 //////
core.prototype.syncSave = function (type) {
var saves=null;
// data
if (type=='all') {
saves=[];
for (var i=1;i<=150;i++) {
var data = core.getLocalStorage("save"+i, null);
if (core.isset(data)) {
saves.push(data);
}
}
}
else {
for (var i=150;i>=1;i--) {
saves=core.getLocalStorage("save"+i, null);
if (core.isset(saves)) {
break;
}
}
}
if (!core.isset(saves)) {
core.drawText("没有要同步的存档");
return;
}
core.ui.drawWaiting("正在同步,请稍后...");
var formData = new FormData();
formData.append('type', 'save');
formData.append('name', core.firstData.name);
var save_text = JSON.stringify(saves);
formData.append('data', save_text);
// send
var xhr = new XMLHttpRequest();
xhr.open("POST", "/games/sync.php");
xhr.onload = function(e) {
if (xhr.status==200) {
// console.log("同步成功。");
var response = JSON.parse(xhr.response);
if (response.code<0) {
core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因"+response.msg);
}
else {
core.drawText("同步成功!\n\n您的存档编号 "+response.code+"\n您的存档密码 "+response.msg+"\n\n请牢记以上两个信息如截图等在从服务器\n同步存档时使用。")
}
}
else {
core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因HTTP "+xhr.status);
}
};
xhr.ontimeout = function() {
core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因Timeout");
}
xhr.onerror = function() {
core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因XHR Error");
}
xhr.send(formData);
}
////// 从服务器加载存档 //////
core.prototype.syncLoad = function () {
var id = prompt("请输入存档编号:");
if (id==null || id=="") {
core.ui.drawSyncSave(); return;
}
var password = prompt("请输入存档密码:");
if (password==null || password=="") {
core.ui.drawSyncSave(); return;
}
core.ui.drawWaiting("正在同步,请稍后...");
var formData = new FormData();
formData.append('type', 'load');
formData.append('name', core.firstData.name);
formData.append('id', id);
formData.append('password', password);
// send
var xhr = new XMLHttpRequest();
xhr.open("POST", "/games/sync.php");
xhr.onload = function(e) {
if (xhr.status==200) {
// console.log("同步成功。");
var response = JSON.parse(xhr.response);
switch (response.code) {
case 0:
// 成功
var data=JSON.parse(response.msg);
// console.log(data);
if (data instanceof Array) {
core.status.event.selection=1;
core.ui.drawConfirmBox("所有本地存档都将被覆盖,确认?", function () {
for (var i=1;i<=150;i++) {
if (i<=data.length) {
core.setLocalStorage("save"+i, data[i-1]);
}
else {
core.removeLocalStorage("save"+i);
}
}
core.drawText("同步成功!\n你的本地所有存档均已被覆盖。");
}, function () {
core.status.event.selection=0;
core.ui.drawSyncSave();
})
}
else {
// 只覆盖单存档
var index=150;
for (var i=150;i>=1;i--) {
if (core.getLocalStorage("save"+i, null)==null)
index=i;
else break;
}
core.setLocalStorage("save"+index, data);
core.drawText("同步成功!\n单存档已覆盖至存档"+index);
}
break;
case -1:
core.drawText("出错啦!\n存档编号"+id+"不存在!");
break;
case -2:
core.drawText("出错啦!\n存档密码错误");
break;
default:
core.drawText("出错啦!\n无法从服务器同步存档。\n错误原因"+response.msg);
break;
}
}
else {
core.drawText("出错啦!\n无法从服务器同步存档。\n错误原因HTTP "+xhr.status);
}
};
xhr.ontimeout = function() {
core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因Timeout");
}
xhr.onerror = function() {
core.drawText("出错啦!\n无法同步存档到服务器。\n错误原因XHR Error");
}
xhr.send(formData);
}
/*
////// 存档同步操作 //////
core.prototype.syncSave = function(type) {
if (type=='save') {
@ -4039,6 +4210,7 @@ core.prototype.syncSave = function(type) {
}
}
*/
////// 存档到本地 //////
core.prototype.saveData = function(dataId) {

View File

@ -1686,12 +1686,14 @@ events.prototype.clickSyncSave = function (x,y) {
switch (selection) {
case 0:
// core.syncSave("save");
core.status.event.selection=0;
core.ui.drawSyncSelect();
break;
case 1:
core.syncSave("load");
core.syncLoad();
break;
case 2:
/*
var saves = [];
for (var i=1;i<=150;i++) {
var data = core.getLocalStorage("save"+i, null);
@ -1705,6 +1707,9 @@ events.prototype.clickSyncSave = function (x,y) {
"data": saves
}
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5save", JSON.stringify(content));
*/
core.status.event.selection=0;
core.ui.drawLocalSaveSelect();
break;
case 3:
core.readFile(function (obj) {
@ -1721,15 +1726,33 @@ events.prototype.clickSyncSave = function (x,y) {
return;
}
var data=obj.data;
for (var i=1;i<=150;i++) {
if (i<=data.length) {
core.setLocalStorage("save"+i, data[i-1]);
}
else {
core.removeLocalStorage("save"+i);
}
if (data instanceof Array) {
core.ui.drawConfirmBox("所有本地存档都将被覆盖,确认?", function () {
for (var i=1;i<=150;i++) {
if (i<=data.length) {
core.setLocalStorage("save"+i, data[i-1]);
}
else {
core.removeLocalStorage("save"+i);
}
}
core.drawText("读取成功!\n你的本地所有存档均已被覆盖。");
}, function () {
core.status.event.selection=0;
core.ui.drawSyncSave();
})
}
else {
var index=150;
for (var i=150;i>=1;i--) {
if (core.getLocalStorage("save"+i, null)==null)
index=i;
else break;
}
core.setLocalStorage("save"+index, data);
core.drawText("同步成功!\n单存档已覆盖至存档"+index);
}
core.drawText("读取成功!\n你的本地所有存档均已被覆盖。");
}, function () {
});
@ -1747,8 +1770,8 @@ events.prototype.clickSyncSave = function (x,y) {
localStorage.clear();
core.drawText("\t[操作成功]你的所有存档已被清空。");
}, function() {
core.status.event.selection=2;
core.ui.drawSyncSave(false);
core.status.event.selection=5;
core.ui.drawSyncSave();
})
break;
case 6:
@ -1787,7 +1810,7 @@ events.prototype.keyUpSyncSave = function (keycode) {
}
}
////// 同步存档选择界面时的点击操作
////// 同步存档选择界面时的点击操作 //////
events.prototype.clickSyncSelect = function (x, y) {
if (x<5 || x>7) return;
var choices = core.status.event.ui.choices;
@ -1797,12 +1820,114 @@ events.prototype.clickSyncSelect = function (x, y) {
var selection = y - topIndex;
switch (selection) {
case 0:
core.syncSave('all');
break;
case 1:
core.syncSave();
break;
case 2:
core.status.event.selection=0;
core.ui.drawSyncSave();
break;
}
}
}
////// 同步存档选择界面时,按下某个键的操作 //////
events.prototype.keyDownSyncSelect = function (keycode) {
if (keycode==38) {
core.status.event.selection--;
core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices);
}
if (keycode==40) {
core.status.event.selection++;
core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices);
}
}
////// 同步存档选择界面时,放开某个键的操作 //////
events.prototype.keyUpSyncSelect = function (keycode) {
if (keycode==27 || keycode==88) {
core.status.event.selection=0;
core.ui.drawSettings();
return;
}
var choices = core.status.event.ui.choices;
if (keycode==13 || keycode==32 || keycode==67) {
var topIndex = 6 - parseInt((choices.length - 1) / 2);
this.clickSyncSelect(6, topIndex+core.status.event.selection);
}
}
////// 存档下载界面时的点击操作 //////
events.prototype.clickLocalSaveSelect = function (x,y) {
if (x<5 || x>7) return;
var choices = core.status.event.ui.choices;
var topIndex = 6 - parseInt((choices.length - 1) / 2);
var saves=null;
if (y>=topIndex && y<topIndex+choices.length) {
var selection = y - topIndex;
switch (selection) {
case 0:
saves=[];
for (var i=1;i<=150;i++) {
var data = core.getLocalStorage("save"+i, null);
if (core.isset(data)) {
saves.push(data);
}
}
break;
case 1:
for (var i=150;i>=1;i--) {
saves=core.getLocalStorage("save"+i, null);
if (core.isset(saves)) {
break;
}
}
break;
case 2:
break;
}
}
if (core.isset(saves)) {
var content = {
"name": core.firstData.name,
"version": core.firstData.version,
"data": saves
}
core.download(core.firstData.name+"_"+core.formatDate2(new Date())+".h5save", JSON.stringify(content));
}
core.status.event.selection=2;
core.ui.drawSyncSave();
}
////// 存档下载界面时,按下某个键的操作 //////
events.prototype.keyDownLocalSaveSelect = function (keycode) {
if (keycode==38) {
core.status.event.selection--;
core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices);
}
if (keycode==40) {
core.status.event.selection++;
core.ui.drawChoices(core.status.event.ui.text, core.status.event.ui.choices);
}
}
////// 存档下载界面时,放开某个键的操作 //////
events.prototype.keyUpLocalSaveSelect = function (keycode) {
if (keycode==27 || keycode==88) {
core.status.event.selection=0;
core.ui.drawSettings();
return;
}
var choices = core.status.event.ui.choices;
if (keycode==13 || keycode==32 || keycode==67) {
var topIndex = 6 - parseInt((choices.length - 1) / 2);
this.clickLocalSaveSelect(6, topIndex+core.status.event.selection);
}
}
////// “虚拟键盘”界面时的点击操作 //////

View File

@ -696,6 +696,13 @@ ui.prototype.drawSyncSelect = function () {
]);
}
////// 绘制单存档界面 //////
ui.prototype.drawLocalSaveSelect = function () {
core.status.event.id = 'localSaveSelect';
this.drawChoices(null, [
"下载所有存档", "只下载最新单存档", "返回上级菜单"
]);
}
////// 绘制分页 //////
ui.prototype.drawPagination = function (page, totalPage) {