Merge pull request #699 from nonameShijian/PR-Branch
game#prompt和game#alert进行promise化、文件读写函数不需要考虑平台问题、为其他自定义平台提供文件读写函数赋值方式、修改end_of_line为crlf
This commit is contained in:
commit
405b89c5b1
|
@ -3,7 +3,7 @@ root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
end_of_line = lf
|
end_of_line = crlf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
[*.js]
|
[*.js]
|
||||||
|
|
190
game/game.js
190
game/game.js
|
@ -7838,6 +7838,7 @@ new Promise(resolve=>{
|
||||||
/**
|
/**
|
||||||
* @type {import('path')}
|
* @type {import('path')}
|
||||||
*/
|
*/
|
||||||
|
// @ts-ignore
|
||||||
path:{},
|
path:{},
|
||||||
getErrorTip:msg=>{
|
getErrorTip:msg=>{
|
||||||
if(typeof msg!='string'){
|
if(typeof msg!='string'){
|
||||||
|
@ -9916,62 +9917,6 @@ new Promise(resolve=>{
|
||||||
proceed2();
|
proceed2();
|
||||||
})};
|
})};
|
||||||
|
|
||||||
const initGamePromises=function(){
|
|
||||||
game.promises.download=function(url,folder,dev,onprogress){
|
|
||||||
return new Promise((resolve,reject)=>{
|
|
||||||
game.download(url,folder,resolve,reject,dev,onprogress);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
game.promises.readFile=function(filename){
|
|
||||||
return new Promise((resolve,reject)=>{
|
|
||||||
game.readFile(filename,resolve,reject);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
game.promises.readFileAsText=function(filename){
|
|
||||||
return new Promise((resolve,reject)=>{
|
|
||||||
game.readFileAsText(filename,resolve,reject);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
game.promises.writeFile=function(data,path,name){
|
|
||||||
return (new Promise((resolve,reject)=>{
|
|
||||||
game.writeFile(data,path,name,resolve);
|
|
||||||
})).then(result=>{
|
|
||||||
return new Promise((resolve,reject)=>{
|
|
||||||
if(result instanceof Error){
|
|
||||||
reject(result);
|
|
||||||
}else{
|
|
||||||
resolve(result);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
game.promises.removeFile=function(dir){
|
|
||||||
return (new Promise((resolve,reject)=>{
|
|
||||||
game.removeFile(dir,resolve);
|
|
||||||
})).then(result=>{
|
|
||||||
return new Promise((resolve,reject)=>{
|
|
||||||
if(result instanceof Error){
|
|
||||||
reject(result);
|
|
||||||
}else{
|
|
||||||
resolve(result);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
game.promises.getFileList=function(dir){
|
|
||||||
return new Promise((resolve,reject)=>{
|
|
||||||
game.getFileList(dir,resolve,reject);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
game.promises.ensureDirectory=game.ensureDirectory;
|
|
||||||
};
|
|
||||||
|
|
||||||
if(lib.device){
|
if(lib.device){
|
||||||
lib.init.cordovaReady=function(){
|
lib.init.cordovaReady=function(){
|
||||||
if(lib.device=='android'){
|
if(lib.device=='android'){
|
||||||
|
@ -10015,8 +9960,8 @@ new Promise(resolve=>{
|
||||||
if ("cordova" in window && "plugins" in window.cordova && "permissions" in window.cordova.plugins) {
|
if ("cordova" in window && "plugins" in window.cordova && "permissions" in window.cordova.plugins) {
|
||||||
const permissions = cordova.plugins.permissions;
|
const permissions = cordova.plugins.permissions;
|
||||||
const requests = ["WRITE_EXTERNAL_STORAGE", "READ_EXTERNAL_STORAGE"]
|
const requests = ["WRITE_EXTERNAL_STORAGE", "READ_EXTERNAL_STORAGE"]
|
||||||
requests.forEach((request) => {
|
requests.forEach(request => {
|
||||||
permissions.checkPermission(permissions[request], (status) => {
|
permissions.checkPermission(permissions[request], status => {
|
||||||
if (!status.hasPermission) {
|
if (!status.hasPermission) {
|
||||||
permissions.requestPermission(permissions[request], lib.other.ignore, lib.other.ignore);
|
permissions.requestPermission(permissions[request], lib.other.ignore, lib.other.ignore);
|
||||||
}
|
}
|
||||||
|
@ -10150,7 +10095,6 @@ new Promise(resolve=>{
|
||||||
createDirectory();
|
createDirectory();
|
||||||
},reject));
|
},reject));
|
||||||
};
|
};
|
||||||
initGamePromises();
|
|
||||||
if(ui.updateUpdate){
|
if(ui.updateUpdate){
|
||||||
ui.updateUpdate();
|
ui.updateUpdate();
|
||||||
}
|
}
|
||||||
|
@ -10335,20 +10279,38 @@ new Promise(resolve=>{
|
||||||
createDirectory();
|
createDirectory();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
initGamePromises();
|
|
||||||
if(ui.updateUpdate){
|
if(ui.updateUpdate){
|
||||||
ui.updateUpdate();
|
ui.updateUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
window.onbeforeunload=function(){
|
//为其他自定义平台提供文件读写函数赋值的一种方式。
|
||||||
if(lib.config.confirm_exit&&!_status.reloading){
|
//但这种方式只能修改game的文件读写函数。
|
||||||
|
if(window.initReadWriteFunction){
|
||||||
|
const g={};
|
||||||
|
const ReadWriteFunctionName=['download','readFile','readFileAsText','writeFile','removeFile','getFileList','ensureDirectory','createDir'];
|
||||||
|
ReadWriteFunctionName.forEach(prop=>{
|
||||||
|
Object.defineProperty(g,prop,{
|
||||||
|
configurable:true,
|
||||||
|
get(){ return undefined; },
|
||||||
|
set(newValue) {
|
||||||
|
if(typeof newValue=='function'){
|
||||||
|
delete g[prop];
|
||||||
|
g[prop]=game[prop]=newValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
window.initReadWriteFunction(g);
|
||||||
|
}
|
||||||
|
window.onbeforeunload = function () {
|
||||||
|
if (lib.config.confirm_exit && !_status.reloading) {
|
||||||
return '是否离开游戏?'
|
return '是否离开游戏?'
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
lib.config=window.config;
|
lib.config=window.config;
|
||||||
|
@ -36105,10 +36067,95 @@ new Promise(resolve=>{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const game={
|
const game={
|
||||||
|
promises:{
|
||||||
/**
|
/**
|
||||||
* @type { { [key: string]: (...args:[])=>Promise } }
|
* 模仿h5的prompt,用于显示可提示用户进行输入的对话框
|
||||||
|
*
|
||||||
|
* 注: 由于参数列表是随意的,在这里我准备限制一下这个函数的参数顺序
|
||||||
|
*
|
||||||
|
* @type {{
|
||||||
|
* (title: string, forced?: boolean): Promise<string>;
|
||||||
|
* (alertOption: 'alert', title: string, forced?: boolean): Promise<string>;
|
||||||
|
* }}
|
||||||
|
*
|
||||||
|
* @param { string } title 设置prompt标题与input内容
|
||||||
|
* @param { boolean } [forced] 为true的话将没有"取消按钮"
|
||||||
|
* @param { string } alertOption 设置prompt是否模拟alert
|
||||||
|
* @example
|
||||||
|
* ```js
|
||||||
|
* // 只设置标题(但是input的初始值就变成了undefined)
|
||||||
|
* game.promises.prompt('###prompt标题').then(value => console.log(value));
|
||||||
|
* // 设置标题和input初始内容
|
||||||
|
* game.promises.prompt('###prompt标题###input初始内容').then(value => console.log(value));
|
||||||
|
* ```
|
||||||
|
* @returns { Promise<string> }
|
||||||
*/
|
*/
|
||||||
promises:{},
|
prompt(alertOption,title,forced){
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
if(alertOption!='alert'){
|
||||||
|
forced=title||false;
|
||||||
|
title=option;
|
||||||
|
game.prompt(title,forced,resolve);
|
||||||
|
}else{
|
||||||
|
game.prompt(alertOption,title,forced,resolve);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 模仿h5的alert,用于显示信息的对话框
|
||||||
|
*
|
||||||
|
* @param { string } title
|
||||||
|
* @example
|
||||||
|
* ```js
|
||||||
|
* await game.promises.alert('弹窗内容');
|
||||||
|
* ```
|
||||||
|
* @returns { Promise<true> }
|
||||||
|
*/
|
||||||
|
alert(title){
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
game.prompt('alert',title,resolve);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 读写函数promises化(不用考虑其对应函数是否存在)
|
||||||
|
download(url,folder,dev,onprogress){
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
game.download(url,folder,resolve,reject,dev,onprogress);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
readFile(filename){
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
game.readFile(filename,resolve,reject);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
readFileAsText(filename){
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
game.readFileAsText(filename,resolve,reject);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
writeFile(data,path,name){
|
||||||
|
return (new Promise((resolve,reject)=>{
|
||||||
|
game.writeFile(data,path,name,resolve);
|
||||||
|
})).then(result=>{
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
if(result instanceof Error){
|
||||||
|
reject(result);
|
||||||
|
}else{
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
ensureDirectory(list,callback,file){
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
game.ensureDirectory(list,callback,file).then(resolve).catch(reject);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
createDir(directory) {
|
||||||
|
return new Promise((resolve,reject)=>{
|
||||||
|
game.createDir(directory,resolve,reject);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
globalEventHandlers: new class {
|
globalEventHandlers: new class {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._handlers = {};
|
this._handlers = {};
|
||||||
|
@ -39660,7 +39707,6 @@ new Promise(resolve=>{
|
||||||
for(var i=0;i<arguments.length;i++){
|
for(var i=0;i<arguments.length;i++){
|
||||||
if(arguments[i]=='alert'){
|
if(arguments[i]=='alert'){
|
||||||
forced=true;
|
forced=true;
|
||||||
callback=function(){};
|
|
||||||
noinput=true;
|
noinput=true;
|
||||||
}
|
}
|
||||||
else if(typeof arguments[i]=='string'){
|
else if(typeof arguments[i]=='string'){
|
||||||
|
@ -39679,7 +39725,7 @@ new Promise(resolve=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!callback){
|
if(!callback){
|
||||||
return;
|
callback=function(){};
|
||||||
}
|
}
|
||||||
//try{
|
//try{
|
||||||
// if(noinput){
|
// if(noinput){
|
||||||
|
@ -39710,16 +39756,18 @@ new Promise(resolve=>{
|
||||||
var controls=ui.create.div(dialog);
|
var controls=ui.create.div(dialog);
|
||||||
var clickConfirm=function(){
|
var clickConfirm=function(){
|
||||||
if(noinput){
|
if(noinput){
|
||||||
|
//给一个返回值使promise化正常使用
|
||||||
|
callback(true);
|
||||||
promptContainer.remove();
|
promptContainer.remove();
|
||||||
}
|
}
|
||||||
else if(input.value){
|
else{
|
||||||
callback(input.value);
|
callback(input.value);
|
||||||
promptContainer.remove();
|
promptContainer.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var clickCancel=function(){
|
var clickCancel=function(){
|
||||||
if(!forced){
|
|
||||||
callback(false);
|
callback(false);
|
||||||
|
if(!forced){
|
||||||
promptContainer.remove();
|
promptContainer.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39727,7 +39775,7 @@ new Promise(resolve=>{
|
||||||
if(!forced){
|
if(!forced){
|
||||||
ui.create.div('.menubutton.large','取消',controls,clickCancel);
|
ui.create.div('.menubutton.large','取消',controls,clickCancel);
|
||||||
}
|
}
|
||||||
if(noinput){
|
if(noinput||(str2&&str2.length>0)){
|
||||||
confirmNode.classList.remove('disabled');
|
confirmNode.classList.remove('disabled');
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
Loading…
Reference in New Issue