noname/game/directory.js

177 lines
4.1 KiB
JavaScript

var fs=require('fs');
var path=require('path');
var exec = require('child_process').exec;
global.window=global;
require(__dirname+'/update.js');
require(__dirname+'/asset.js');
var updates=window.noname_update;
var newversion=false;
var commit=false
if(process.argv[2]){
if(/[0-9]/.test(process.argv[2][0])){
newversion=true;
updates.update = updates.version;
updates.version = '1.9.' + process.argv[2];
commit=updates.version;
}
else{
commit=process.argv[2];
}
}
var assetlist='';
var skinlist='window.noname_skin_list={\n';
var entrylist=[];
var entrymap={};
var get = function(dir,callback){
fs.readdir(dir,function(err,list){
var shift=function(){
if(list.length){
var filename=list.shift();
var delay=false;
if(!/\.|~|_/.test(filename[0])){
var url=dir+'/'+filename;
var stat=fs.statSync(url);
if(stat.isFile()){
if(['.jpg','.png','.mp3','.ttf'].indexOf(path.extname(url))!=-1){
var assetentry=path.relative(path.dirname(__dirname),url);
assetlist+=',\n\t\''+assetentry+'\'';
entrylist.push(assetentry);
}
}
else if(stat.isDirectory()){
if(dir==path.dirname(__dirname)+'/image/skin'){
fs.readdir(url,function(err,list){
var num=0;
for(var i=0;i<list.length;i++){
var url2=url+'/'+list[i];
var stat=fs.statSync(url2);
if(stat.isFile()&&path.extname(url2)=='.jpg'){
num++;
}
}
skinlist+='\t'+filename+':'+num+',\n';
entrymap[filename]=num;
shift();
});
delay=true;
}
else{
get(url,shift);
delay=true;
}
}
}
if(!delay){
shift();
}
}
else{
callback();
}
}
shift();
});
};
get(path.dirname(__dirname),function(){
var diff=false;
if(window.noname_asset_list.length==entrylist.length+1){
for(var i=0;i<entrylist.length;i++){
if(entrylist[i]!=window.noname_asset_list[i+1]){
diff=true;
break;
}
}
if(!diff){
for(var i in entrymap){
if(window.noname_skin_list[i]!==entrymap[i]){
diff=true;
break;
}
}
for(var i in noname_skin_list){
if(window.noname_skin_list[i]!==entrymap[i]){
diff=true;
break;
}
}
}
}
else{
diff=true;
}
var next=function(){
exec('git diff --name-only', (error, stdout, stderr) => {
var updatelist='window.noname_update={\n\tversion:\''+updates.version+'\',';
updatelist+='\n\tupdate:\''+(updates.update||'')+'\',';
var apply=function(name,list){
updatelist+='\n\t'+name+':[\n';
for(var i=0;i<list.length;i++){
updatelist+='\t\t\''+list[i]+'\'';
if(i<list.length-1){
updatelist+=',';
}
updatelist+='\n';
}
updatelist+='\t]';
};
if(updates.changeLog){
apply('changeLog',updates.changeLog);
updatelist+=',';
}
if(updates.players){
apply('players',updates.players);
updatelist+=',';
}
if(updates.cards){
apply('cards',updates.cards);
updatelist+=',';
}
var changes = stdout.split('\n');
for(var i=0;i<changes.length;i++){
var extname=path.extname(changes[i]);
if(!changes[i]||(extname!='.js'&&extname!='.css')||changes[i]=='game/update.js'){
changes.splice(i--,1);
}
}
var files;
if(newversion){
files = [];
}
else{
files = updates.files || [];
}
for(var i=0;i<changes.length;i++){
if(files.indexOf(changes[i])===-1){
files.push(changes[i])
}
}
files.sort(function(a,b){
if (a>b) return 1;
if (a<b) return -1;
return 0;
})
apply('files',files);
fs.writeFile('game/update.js',updatelist+'\n};','utf-8',function(){
console.log('updated update.js');
if(commit && typeof commit==='string'){
exec('git add . && git commit -am '+commit);
console.log('committed '+commit);
}
});
});
}
if(diff){
var assetversion='window.noname_asset_list=[\n\t\''+updates.version+'\'';
fs.writeFile('game/asset.js',assetversion+assetlist+'\n];\n'+skinlist.slice(0,skinlist.length-2)+'\n};','utf-8',function(){
console.log('udpated asset.js');
next();
});
}
else{
next();
}
});