'use strict';
game.import('mode',function(lib,game,ui,get,ai,_status){
	return {
		name:'tafang',
		canvasUpdates2:[],
		start:function(){
			"step 0"
			_status.gameDrawed=true;
			lib.init.css(lib.assetURL+'layout/mode','chess');
			lib.init.css(lib.assetURL+'layout/mode','tafang');
			game.loadMode('chess');
			"step 1"
			if(get.is.phoneLayout()&&lib.config.touchscreen&&
				!lib.config.show_round_menu&&
				!['system','menu'].includes(lib.config.swipe_left)&&
				!['system','menu'].includes(lib.config.swipe_right)&&
				!['system','menu'].includes(lib.config.swipe_up)){
				ui.roundmenu.style.display='';
			}
			if(lib.config.player_border=='normal'&&(lib.config.layout=='long'||lib.config.layout=='long2')){
				ui.arena.classList.add('lslim_player');
			}
			for(var i in result.element){
				for(var j in result.element[i]){
					if(j!='dieAfter'){
						lib.element[i][j]=result.element[i][j];
					}
				}
			}
			for(var i in result.ui){
				for(var j in result.ui[i]){
					ui[i][j]=result.ui[i][j];
				}
			}
			get.chessDistance=result.get.chessDistance;
			get.rawAttitude=result.get.rawAttitude;
			var toLoad=['addChessPlayer','addObstacle','removeObstacle','isChessNeighbour',
				'draw2','updateCanvas2','setChessInfo','modeSwapPlayer','initChess'];
			for(var i=0;i<toLoad.length;i++){
				game[toLoad[i]]=result.game[toLoad[i]];
			}
			toLoad=['_attackmove','_phasequeue','_chessmove','_chesscenter','_tempobstacle'];
			for(var i=0;i<toLoad.length;i++){
				lib.skill[toLoad[i]]=result.skill[toLoad[i]];
			}
			ui.placeChess=result.ui.placeChess;
			ui.click.moveContainer=result.ui.click.moveContainer;
			for(var i in lib.skill){
				if(lib.skill[i].changeSeat){
					lib.skill[i]={};
					if(lib.translate[i+'_info']){
						lib.translate[i+'_info']='此模式下不可用';
					}
				}
			}
			// if(!localStorage.getItem(lib.configprefix+'playback')){
			//     game.loadMap();
			// }
			"step 2"
			var result='basic_medium';
			_status.map=lib.tafang.map[result];
			_status.mapname=result;
			ui.chesssheet=document.createElement('style');
			document.head.appendChild(ui.chesssheet);
			var playback=localStorage.getItem(lib.configprefix+'playback');
			lib.mechlist=[];
			for(var i in lib.characterPack.mode_tafang){
				if(i.indexOf('tafang_mech_')==0){
					lib.characterPack.mode_tafang[i][3].push(i+'_skill');
					lib.mechlist.push(i);
				}
				lib.character[i]=lib.characterPack.mode_tafang[i];
				if(!lib.character[i][4]){
					lib.character[i][4]=[];
				}
			}
			ui.create.cardsAsync();
			game.finishCards();
			game.addGlobalSkill('autoswap');
			ui.chessContainer=ui.create.div('#chess-container',ui.arena);
			ui.chessContainer.move=ui.click.moveContainer;
			ui.chessContainer.chessLeft=0;
			ui.chessContainer.chessTop=0;
			// lib.setScroll(ui.chessContainer);
			ui.chess=ui.create.div('#chess',ui.chessContainer);
			ui.canvas2=document.createElement('canvas');
			ui.canvas2.id='canvas2';
			ui.chess.appendChild(ui.canvas2);
			ui.ctx2=ui.canvas2.getContext('2d');
			game.me=ui.create.player();
			if(playback){
				for(var i in lib.characterPack){
					for(var j in lib.characterPack[i]){
						lib.character[j]=lib.character[j]||lib.characterPack[i][j];
					}
				}
				game.pause();
				ui.system.style.display='none';
				_status.playback=playback;
				localStorage.removeItem(lib.configprefix+'playback');
				var store=lib.db.transaction(['video'],'readwrite').objectStore('video');
				store.get(parseInt(playback)).onsuccess=function(e){
					if(e.target.result){
						event.video=e.target.result.video;
						game.resume();
					}
					else{
						alert('播放失败:找不到录像');
						game.reload();
					}
				}
			}
			_status.mylist=[];
			_status.enemylist=[];
			"step 3"
			ui.arena.classList.add('chess');
			if(event.video){
				for(var ii=0;ii<event.video.length;ii++){
					if(event.video[ii].type=='init'){
						_status.mapname=event.video[ii].content;
						break;
					}
				}
				_status.map=lib.tafang.map[_status.mapname];
				game.playerMap=lib.posmap;
			}
			ui.chesswidth=_status.map.size[0];
			ui.chessheight=_status.map.size[1];
			game.initChess();

			var grids=[];
			var gridnum=ui.chessheight*ui.chesswidth;
			for(var i=0;i<gridnum;i++){
				grids.push(i);
			}
			event.obs=[];
			if(!event.video){
				var tafanglist=[0,2,3,5,6,8,9,11,12];
				for(var i=0;i<ui.chessheight-1;i++){
					for(var j=0;j<ui.chesswidth;j++){
						if(i>=8&&j!=0&&j!=ui.chesswidth-1) continue;
						if(tafanglist.includes(j)){
							var cg=i*ui.chesswidth+j;
							grids.remove(cg);
							game.addObstacle(cg.toString(),false);
							event.obs.push(cg.toString());
						}
					}
				}
				for(var i=0;i<ui.chesswidth;i++){
					switch(ui.chesswidth){
						case 6:if(i==2||i==3) continue;break;
						case 9:if(i==3||i==4||i==5) continue;break;
						case 12:if(i==4||i==5||i==6||i==7) continue;break;
					}
					var cg=(ui.chessheight-1)*ui.chesswidth+i;
					grids.remove(cg);
					game.addObstacle(cg.toString(),false);
					event.obs.push(cg.toString());
				}
			}

			if(lib.config.show_handcardbutton){
				lib.setPopped(ui.create.system('手牌',null,true),function(){
					var uiintro=ui.create.dialog('hidden');
					var added=false;
					for(var i=0;i<game.players.length;i++){
						if(game.players[i].side==game.me.side&&game.players[i]!=game.me){
							added=true;
							uiintro.add(get.translation(game.players[i]));
							var cards=game.players[i].getCards('h');
							if(cards.length){
								uiintro.addSmall(cards,true);
							}
							else{
								uiintro.add('(无)');
							}
						}
					}
					if(!added){
						uiintro.add('无队友');
					}
					return uiintro;
				},220);
			}

			ui.create.me();
			ui.create.fakeme();

			ui.chessinfo=ui.create.div('.fakeme.player',ui.me,function(e){
				e.stopPropagation();
			});
			ui.create.div(ui.chessinfo);
			lib.setScroll(ui.chessinfo.firstChild);

			game.arrangePlayers();
			"step 4"
			ui.control.style.display='';
			if(event.video){
				game.playVideoContent(event.video);
				game.setChessInfo();
				return;
			}
			_status.videoInited=true;
			game.addVideo('init',null,_status.mapname);
			if(game.friendZhu){
				game.addVideo('identityText',game.friendZhu,'将');
				game.addVideo('identityText',game.enemyZhu,'帅');
				if(game.friendViceZhu){
					game.addVideo('identityText',game.friendViceZhu,'仕');
					game.addVideo('identityText',game.enemyViceZhu,'士');
				}
			}
			if(event.obs){
				game.addVideo('initobs',null,event.obs);
			}

			ui.me.querySelector('.fakeme.player').hide();
			ui.me.querySelector('.fakeme.avatar').hide();

			var list=[];
			for(i in lib.character){
				if(i.indexOf('treasure_')==0) continue;
				if(i.indexOf('tafang_mech_')==0) continue;
				if(lib.character[i][4].includes('minskin')) continue;
				if(lib.config.forbidchess.includes(i)) continue;
				if(lib.character[i][4].includes('boss')) continue;
				if(lib.filter.characterDisabled(i)) continue;
				list.push(i);
			}
			list.randomSort();
			_status.characterList=list;
			_status.friends=[];
			_status.enemies=[];
			_status.turnCount=0;
			_status.turnTotal=parseInt(get.config('tafang_turn'));
			ui.turnCount=ui.create.system('',null,true);
			_status.remainingCount=0;

			_status.tafangend=[];
			for(var i=0;i<ui.chesswidth;i++){
				var tafangdes=ui.chesswidth*(ui.chessheight-1)+i;
				if(!lib.posmap[tafangdes]){
					_status.tafangend.push(tafangdes.toString());
				}
			}
			lib.init.onfree();
			event.trigger('gameStart');
			game.phaseLoopTafang();
		},
		element:{
			content:{
				chessMechRemove:function(){
					game.treasures.remove(player);
					setTimeout(function(){
						player.delete();
					},500);
					delete lib.posmap[player.dataset.position];
					game.addVideo('deleteChessPlayer',player);
					game.addObstacle(player.dataset.position);
					game.log(get.translation(player)+'使用期限已到');
				}
			},
			player:{
				dieAfter2:function(){
					var player=this;
					delete lib.posmap[player.dataset.position];
					setTimeout(function(){
						player.delete();
					},500);
					for(var i=0;i<ui.phasequeue.length;i++){
						if(ui.phasequeue[i].link==player){
							ui.phasequeue[i].remove();
							ui.phasequeue.splice(i,1);
							break;
						}
					}
				},
				dieAfter:function(source){
					var player=this;
					if(_status.friends){
						_status.friends.remove(this);
					}
					if(_status.enemies){
						_status.enemies.remove(this);
					}
					if(player==game.me){
						for(var i=0;i<game.players.length;i++){
							if(game.players[i].side==player.side){
								game.modeSwapPlayer(game.players[i]);
							}
						}
					}
					if(_status.friends.length==0){
						ui.fakeme.hide();
						this.node.handcards1.delete();
						this.node.handcards2.delete();
						game.me=ui.create.player();
						game.me.side=false;
						game.addVideo('removeTafangPlayer');
					}
				},
			},
		},
		tafang:{
			map:{
				basic_small:{
					name:'小型战场',
					size:[6,11],
					obstacle:[]
				},
				basic_medium:{
					name:'中型战场',
					size:[9,11],
				},
				basic_large:{
					name:'大型战场',
					size:[12,11],
				},
			}
		},
		game:{
			minskin:true,
			singleHandcard:true,
			chess:true,
			treasures:[],
			obstacles:[],
			getVideoName:function(){
				return [get.translation(game.me.name),'塔防模式'];
			},
			addOverDialog:function(dialog){
				dialog.classList.add('center');
			},
			phaseLoopTafang:function(){
				var next=game.createEvent('phaseLoop');
				next.setContent(function(){
					'step 0'
					delete _status.roundStart;
					_status.turnCount++;
					_status.remainingCount-=_status.friends.length;
					ui.turnCount.innerHTML='回合'+get.cnNumber(_status.turnCount,true);
					var dialog=ui.create.dialog('剩余行动点:'+(10+_status.remainingCount),'hidden');
					dialog.style.height='260px';
					dialog.style.maxHeight='260px';
					dialog.style.top='calc(50% - 160px)';
					dialog.classList.add('center');
					dialog.classList.add('noupdate');
					dialog.classList.add('fixed');
					event.dialog=dialog;
					var list=_status.characterList.splice(0,6);
					list.sort(function(a,b){
						return get.rank(a,true)-get.rank(b,true);
					});
					var map={};
					var mechlist=lib.mechlist.randomGets(6);
					mechlist.sort(function(a,b){
						return lib.character[a][5]-lib.character[b][5];
					});
					map.bufang=ui.create.buttons(mechlist,'character',dialog.content);
					var difficulty=parseInt(get.config('tafang_difficulty'));
					for(var i=0;i<map.bufang.length;i++){
						var button=map.bufang[i];
						// button.node.name.style.top='8px';
						button.node.intro.classList.add('showintro');
						button.node.intro.classList.add('tafang');
						button.count=difficulty+lib.character[button.link][5]-2;
						button.node.intro.innerHTML=get.cnNumber(button.count,true);
						button._link='布防';
					}
					map.zhaomu=ui.create.buttons(list,'character',dialog.content);
					for(var i=0;i<map.zhaomu.length;i++){
						var button=map.zhaomu[i];
						if(lib.config.buttoncharacter_style=='default'){
							button.node.group.style.display='none';
						}
						button.node.intro.classList.add('showintro');
						button.node.intro.classList.add('tafang');
						button.count=difficulty+get.rank(button.link,3.9)+3;
						button.node.intro.innerHTML=get.cnNumber(button.count,true);
						button._link='招募';
					}
					if(_status.friends.length){
						map.xingdong=ui.create.buttons(_status.friends,'player',dialog.content);
						for(var i=0;i<map.xingdong.length;i++){
							var button=map.xingdong[i];
							button.node.intro.classList.add('showintro');
							button.node.intro.classList.add('tafang');
							if(difficulty<2){
								button.count=1;
							}
							else{
								button.count=2;
							}
							button.node.intro.innerHTML=get.cnNumber(button.count,true);
							button._link='行动';
						}
					}
					else{
						map.xingdong=[];
					}
					var updateSelected=function(){
						var count=10+_status.remainingCount;
						var selected=dialog.querySelectorAll('.button.selected');
						var selectedZhaomu=0;
						for(var i=0;i<selected.length;i++){
							count-=selected[i].count;
							if(selected[i]._link=='招募'){
								selectedZhaomu++;
							}
						}
						for(var i in map){
							for(var j=0;j<map[i].length;j++){
								map[i][j].classList.remove('unselectable');
								map[i][j].classList.add('pointerdiv');
								if(map[i][j].count>count){
									map[i][j].classList.add('unselectable');
									map[i][j].classList.remove('pointerdiv');
								}
								else if(i=='zhaomu'&&_status.friends.length+selectedZhaomu>=5){
									map[i][j].classList.add('unselectable');
									map[i][j].classList.remove('pointerdiv');
								}
								else if(i=='bufang'){
									var numbufang=0;
									for(var k=0;k<game.treasures.length;k++){
										if(game.treasures[k].name==map[i][j].link){
											numbufang++;
										}
										if(numbufang>=3){
											map[i][j].classList.add('unselectable');
											break;
										}
									}
								}
							}
						}
						ui.dialog.content.firstChild.innerHTML='剩余行动点:'+count;
					}
					var clickOrder=0;
					event.custom.replace.button=function(button){
						if(!button.classList.contains('unselectable')||
							button.classList.contains('selected')){
							button.classList.toggle('selected');
							button._clickOrder=clickOrder++;
						}
						updateSelected();
					}
					event.custom.add.window=function(clicked){
						if(clicked) return;
						if(event.step>1) return;
						for(var i in map){
							for(var j=0;j<map[i].length;j++){
								map[i][j].classList.remove('selected');
								map[i][j].classList.remove('unselectable');
							}
						}
						updateSelected();
					}
					var update=function(link){
						for(var i in map){
							for(var j=0;j<map[i].length;j++){
								if(map[i][j]._link!=link){
									map[i][j].style.display='none';
								}
								else{
									map[i][j].style.display='';
								}
							}
						}
						for(var i=0;i<event.control.childNodes.length;i++){
							if(event.control.childNodes[i].innerHTML==link){
								event.control.childNodes[i].classList.add('thundertext');
							}
						}
						_status.lastTafangCommand=link;
					}
					event.control=ui.create.control('布防','招募',function(link,node){
						if(node.disabled) return;
						var current=node.parentNode.querySelector('.thundertext');
						if(current==node) return;
						if(current){
							current.classList.remove('thundertext');
						}
						update(link);
					});
					// if(!_status.friends.length){
					// 	event.control.lastChild.style.opacity=0.5;
					// 	if(_status.lastTafangCommand=='行动'){
					// 		_status.lastTafangCommand='招募';
					// 	}
					// }
					if(_status.friends.length>=5){
						event.control.childNodes[1].style.opacity=0.5;
						event.control.childNodes[1].disabled=true;
						if(_status.lastTafangCommand=='招募'){
							_status.lastTafangCommand='布防';
						}
					}
					_status.imchoosing=true;
					ui.auto.hide();
					var eventdong=function(){
						var selected=dialog.querySelectorAll('.button.selected');
						event.bufang=[];
						event.zhaomu=[];
						event.xingdong=_status.friends.slice(0);
						// var xingdongs=[];
						_status.remainingCount+=10;
						for(var i=0;i<selected.length;i++){
							switch(selected[i]._link){
								case '布防':event.bufang.push(selected[i].link);break;
								case '招募':event.zhaomu.push(selected[i].link);break;
								// case '行动':xingdongs.push(selected[i]);break;
							}
							_status.remainingCount-=selected[i].count;
						}
						_status.remainingCount=Math.floor(_status.remainingCount/2);
						// xingdongs.sort(function(a,b){
						// 	return a._clickOrder-b._clickOrder;
						// });
						// for(var i=0;i<xingdongs.length;i++){
						// 	event.xingdong.push(xingdongs[i].link);
						// }
						game.resume();
					};
					event.done=ui.create.control('完成',eventdong);
					if(_status.lastTafangCommand){
						update(_status.lastTafangCommand);
					}
					else{
						update('招募');
					}
					if(_status.characterList.length<6){
						game.over(true);
						event.done.close();
						event.control.close();
						return;
					}
					setTimeout(function(){
						dialog.open();
						updateSelected();
					},50);
					event.switchToAuto=eventdong;
					if(!_status.auto&&10+_status.remainingCount>0){
						game.pause();
					}
					else{
						eventdong();
					}
					'step 1'
					event.dialog.close();
					event.control.close();
					event.done.close();
					delete event.dialog;
					delete event.control;
					delete event.done;
					'step 2'
					event.chooseObstacle=false;
					if(event.bufang.length){
						event.obstacles=game.obstacles.slice(0);
						for(var i=0;i<event.obstacles.length;i++){
							event.obstacles[i].classList.add('glow');
						}
						event.chooseObstacle=true;
						event.currentBufang=event.bufang.shift();
						event.dialog=ui.create.dialog('选择一个位置放置【'+get.translation(event.currentBufang)+'】');
						if(!_status.auto){
							game.pause();
						}
						else{
							event.obstacle=event.obstacles.randomGet();
						}
						event.switchToAuto=function(){
							event.obstacle=event.obstacles.randomGet();
							game.resume();
						};
					}
					else{
						delete event.bufang;
					}
					'step 3'
					if(event.dialog){
						event.dialog.close();
						delete event.dialog;
					}
					if(event.chooseObstacle){
						game.removeObstacle(event.obstacle.dataset.position);
						var mech=game.addChessPlayer(event.currentBufang,'treasure',0,event.obstacle.dataset.position);
						event.chooseObstacle=false;
						event.goto(2);
					}
					else{
						if(event.obstacles){
							for(var i=0;i<event.obstacles.length;i++){
								event.obstacles[i].classList.remove('glow');
							}
							delete event.obstacles;
						}
						delete event.obstacle;
						delete event.currentBufang;
					}
					'step 4'
					if(event.dialog){
						event.dialog.close();
						delete event.dialog;
					}
					if(event.zhaomu.length){
						event.currentZhaomu=event.zhaomu.shift();
						event.dialog=ui.create.dialog('选择一个位置安排【'+get.translation(event.currentZhaomu)+'】');
						var size=ui.chesswidth*(ui.chessheight-1);
						var clickGrid=function(){
							var player=game.addChessPlayer(event.currentZhaomu,false,4,this.dataset.position);
							_status.friends.push(player);
							if(!game.me.name){
								game.me=player;
								game.me.classList.add('current_action');
								ui.me.querySelector('.fakeme.avatar').show();
								ui.me.querySelector('.fakeme.player').show();
								ui.create.fakeme();
								ui.handcards1=player.node.handcards1.addTempClass('start').fix();
								ui.handcards2=player.node.handcards2.addTempClass('start').fix();
								ui.handcards1Container.appendChild(ui.handcards1);
								ui.handcards2Container.appendChild(ui.handcards2);
								ui.updatehl();
								game.setChessInfo();
								game.addVideo('tafangMe',player);
							}
							this.delete();
							event.redo();
							game.resume();
						}
						if(!event.playergrids){
							event.playergrids=[]
							for(var i=ui.chesswidth;i<size;i++){
								if(!lib.posmap[i.toString()]){
									var grid=ui.create.div('.player.minskin.playerblank.glow',clickGrid,ui.chess);
									grid.addTempClass('start');
									ui.placeChess(grid,i);
									event.playergrids.push(grid);
								}
							}
						}
						game.pause();
						if(_status.auto){
							setTimeout(function(){
								clickGrid.call(event.playergrids.randomGet());
							},50);
						}
					}
					else{
						delete event.zhaomu;
					}
					'step 5'
					_status.imchoosing=false;
					ui.auto.show();
					game.delay();
					if(event.dialog){
						event.dialog.close();
						delete event.dialog;
					}
					if(event.playergrids){
						for(var i=0;i<event.playergrids.length;i++){
							event.playergrids[i].delete();
						}
						delete event.playergrids;
					}
					delete event.currentZhaomu;
					'step 6'
					var shalldelay=false;
					for(var i=0;i<ui.chesswidth;i++){
						if(lib.posmap[i]&&game.players.includes(lib.posmap[i])){
							for(var j=0;j<ui.chessheight;j++){
								var pos=i+j*ui.chesswidth;
								if(lib.posmap[pos]&&lib.posmap[pos].movable(0,1)){
									break;
								}
							}
							if(j<ui.chessheight){
								shalldelay=true;
								for(var k=j;k>=0;k--){
									var pos=i+k*ui.chesswidth;
									if(lib.posmap[pos]){
										lib.posmap[pos].moveDown();
									}
								}
							}
						}
					}
					if(shalldelay) game.delay();
					'step 7'
					event.justadded=[];
					if(_status.characterList.length){
						if(_status.enemies.length<ui.chesswidth*2){
							var list1=[];
							for(var i=0;i<ui.chesswidth;i++){
								if(!lib.posmap[i]){
									list1.push(i);
								}
							}
							if(list1.length){
								var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
								_status.enemies.push(enemy);
								event.justadded.push(enemy.name);
								if(game.players.length==1){
									ui.me.querySelector('.fakeme.player').show();
									game.setChessInfo(game.players[0]);
								}
								game.delay();
							}
							// var difficulty=get.config('tafang_difficulty');
							// if(_status.turnCount>=10&&list1.length&&difficulty>1){
							// 	var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
							// 	_status.enemies.push(enemy);
							// 	event.justadded.push(enemy.name);
							// }
							// if(_status.turnCount>=20&&list1.length&&difficulty>1){
							// 	var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
							// 	_status.enemies.push(enemy);
							// 	event.justadded.push(enemy.name);
							// }
							// if(list1.length&&difficulty>2){
							// 	var enemy=game.addChessPlayer(_status.characterList.shift(),true,4,list1.randomRemove());
							// 	_status.enemies.push(enemy);
							// 	event.justadded.push(enemy.name);
							// }
						}
					}
					else{
						game.over(true);
					}
					'step 8'
					if(event.xingdong.length){
						var toact=event.xingdong.shift();
						if(game.players.includes(toact)){
							toact.phase();
						}
						event.redo();
					}
					else{
						event.xingdong=_status.enemies.slice(0);
					}
					'step 9'
					if(event.xingdong.length){
						var enemy=event.xingdong.shift();
						if(!event.justadded.includes(enemy.name)&&game.players.includes(enemy)){
							enemy.phase();
						}
						event.redo();
					}
					else{
						event.mechlist=game.treasures.slice(0);
					}
					'step 10'
					if(event.mechlist.length){
						var mech=event.mechlist.shift();
						var info=lib.skill[mech.name+'_skill'];
						if(!info.filter||info.filter(mech)){
							var next=game.createEvent('chessMech');
							next.player=mech;
							next.setContent(info.content);
							mech.chessFocus();
							if(lib.config.animation&&!lib.config.low_performance){
								mech.$epic2();
							}
							game.delay();
						}
						if(--mech.hp<=0){
							var next=game.createEvent('chessMechRemove');
							next.player=mech;
							next.setContent('chessMechRemove');
						}
						else{
							mech.update();
						}
						event.redo();
					}
					'step 11'
					delete event.xingdong;
					delete event.mechlist;
					if(_status.turnCount>=_status.turnTotal){
						game.over(true);
					}
					else{
						event.goto(0);
						game.delay();
					}
				});
			},
			loadMap:function(){
				var next=game.createEvent('loadMap');
				next.setContent(function(){
					if(!lib.storage.map){
						lib.storage.map=['basic_small','basic_medium','basic_large'];
					}
					if(!lib.storage.newmap){
						lib.storage.newmap=[];
					}
					var sceneview=ui.create.div('.storyscene');
					if(!lib.config.touchscreen&&lib.config.mousewheel){
						sceneview._scrollspeed=30;
						sceneview._scrollnum=10;
						sceneview.onmousewheel=function(){
							if(!this.classList.contains('lockscroll')){
								ui.click.mousewheel.apply(this,arguments);
							}
						};
					}
					lib.setScroll(sceneview);
					var switchScene=function(){
						event.result=this.link;
						sceneview.delete();
						setTimeout(game.resume,300);
					}
					var clickScene=function(e){
						if(this.classList.contains('unselectable')) return;
						if(this._clicking) return;
						if(e&&e.stopPropagation) e.stopPropagation();
						if(this.classList.contains('flipped')){
							return;
						}
						if(this.classList.contains('glow3')){
							this.classList.remove('glow3');
							lib.storage.newmap.remove(this.name);
							game.save('newmap',lib.storage.newmap);
						}
						var sceneNode=this.parentNode;
						var current=document.querySelector('.flipped.scene');
						if(current){
							restoreScene(current,true);
						}
						this.content.innerHTML='';
						ui.create.div('.menubutton.large.enter','进入',this.content,switchScene).link=this.name;
						sceneNode.classList.add('lockscroll');
						var node=this;
						node._clicking=true;
						setTimeout(function(){
							node._clicking=false;
						},700);
						sceneNode.dx=ui.window.offsetWidth/2-(-sceneNode.scrollLeft+this.offsetLeft+this.offsetWidth/2);
						if(Math.abs(sceneNode.dx)<20){
							sceneNode.dx=0;
						}
						if(!sceneNode.sceneInterval&&sceneNode.dx){
							sceneNode.sceneInterval=setInterval(function(){
								var dx=sceneNode.dx;
								if(Math.abs(dx)<=2){
									sceneNode.scrollLeft-=dx;
									clearInterval(sceneNode.sceneInterval);
									delete sceneNode.sceneInterval;
								}
								else{
									var ddx=dx/Math.sqrt(Math.abs(dx))*1.5;
									sceneNode.scrollLeft-=ddx;
									sceneNode.dx-=ddx;
								}
							},16);
						}
						node.style.transition='all ease-in 0.2s';
						node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)';
						var onEnd=function(){
							node.removeEventListener('webkitTransitionEnd',onEnd);
							node.classList.add('flipped');
							sceneNode.classList.add('lockscroll');
							node.style.transition='all ease-out 0.4s';
							node.style.transform='perspective(1600px) rotateY(180deg) scale(1)'
						};
						node.listenTransition(onEnd);
					}
					ui.click.scene=clickScene;
					var restoreScene=function(node,forced){
						if(node._clicking&&!forced) return;
						if(node.transformInterval){
							clearInterval(node.transformInterval);
							delete node.transformInterval;
						}
						var sceneNode=node.parentNode;
						node._clicking=true;
						setTimeout(function(){
							node._clicking=false;
						},700);
						node.style.transition='all ease-in 0.2s';
						node.style.transform='perspective(1600px) rotateY(90deg) scale(0.75)';
						var onEnd=function(){
							node.removeEventListener('webkitTransitionEnd',onEnd);
							node.classList.remove('flipped');
							if(!sceneNode.querySelector('.flipped')){
								sceneNode.classList.remove('lockscroll');
							}
							node.style.transition='all ease-out 0.4s';
							node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)'
						};
						node.listenTransition(onEnd);
					}
					ui.click.scene2=restoreScene;
					var createScene=function(name){
						var scene=lib.tafang.map[name];
						var node=ui.create.div('.scene',clickScene);
						node.style.transform='perspective(1600px) rotateY(0deg) scale(0.7)';
						node.name=name;
						node.bgnode=ui.create.div('.background.player',node);
						node.info=scene;
						ui.create.div('.avatar.menu',node.bgnode);
						node.namenode=ui.create.div('.name',node,(scene.name));
						if(lib.storage.map.includes(name)){
							if(lib.storage.newmap.includes(name)){
								node.classList.add('glow3');
							}
							node.namenode.dataset.nature='soilm';
						}
						else{
							node.classList.add('unselectable');
							node.namenode.innerHTML=('未开启');
						}
						var content=ui.create.div('.menu',node);
						lib.setScroll(content);
						node.content=content;
						sceneview.appendChild(node);
						return node;
					}
					event.custom.add.window=function(){
						var current=document.querySelector('.flipped.scene');
						if(current){
							restoreScene(current);
						}
					}
					for(var i in lib.tafang.map){
						createScene(i);
					}
					ui.window.appendChild(sceneview.addTempClass('start'));
					game.pause();
				});
			},
		},
		skill:{
			tafang_mech_weixingxianjing_skill:{
				filter:function(player){
					for(var i=0;i<_status.enemies.length;i++){
						if(!_status.enemies[i].isTurnedOver()&&
							get.chessDistance(player,_status.enemies[i])<=2){
							return true;
						}
					}
					return false;
				},
				content:function(){
					var list=[];
					for(var i=0;i<_status.enemies.length;i++){
						if(!_status.enemies[i].isTurnedOver()&&
							get.chessDistance(player,_status.enemies[i])<=2){
							list.push(_status.enemies[i]);
						}
					}
					if(list.length){
						game.log('小型陷阱发动');
						var target=list.randomGet();
						target.turnOver();
						game.logv(player,'tafang_mech_weixingxianjing_skill',[target]).node.text.style.display='none';
						player.line(target,'green');
					}
				}
			},
			tafang_mech_nengliangqiu_skill:{
				filter:function(player){
					for(var i=0;i<_status.friends.length;i++){
						if(get.chessDistance(player,_status.friends[i])<=3){
							return true;
						}
					}
					return false;
				},
				content:function(){
					var list1=[],list2=[];
					for(var i=0;i<_status.friends.length;i++){
						if(get.chessDistance(player,_status.friends[i])<=1){
							list2.push(_status.friends[i]);
						}
						else if(get.chessDistance(player,_status.friends[i])<=3){
							list1.push(_status.friends[i]);
						}
						// else if(get.chessDistance(player,_status.friends[i])<=4){
						// 	list2.push(_status.friends[i]);
						// }
					}
					if(list2.length){
						game.asyncDraw(list2,2);
						player.line(list2,'green');
					}
					if(list1.length){
						game.asyncDraw(list1);
						player.line(list1,'green');
					}
					if(list1.length||list2.length){
						game.log('能量球发动');
						game.logv(player,'tafang_mech_nengliangqiu_skill',list1.concat(list2)).node.text.style.display='none';
					}
				}
			},
			tafang_mech_mutong_skill:{
				filter:function(player){
					for(var i=0;i<_status.enemies.length;i++){
						if(get.chessDistance(player,_status.enemies[i])<=3){
							return true;
						}
					}
					return false;
				},
				content:function(){
					var list=[];
					for(var i=0;i<_status.enemies.length;i++){
						if(get.chessDistance(player,_status.enemies[i])<=3){
							list.push(_status.enemies[i]);
						}
					}
					if(list.length){
						game.log('木桶发动');
						var targets=list.randomGets(1);
						game.logv(player,'tafang_mech_mutong_skill',targets).node.text.style.display='none';
						player.line(targets,'green');
						for(var i=0;i<targets.length;i++){
							targets[i].damage('nosource');
						}
					}
				}
			},
			tafang_mech_guangmingquan_skill:{
				filter:function(player){
					for(var i=0;i<_status.friends.length;i++){
						if(_status.friends[i].hp<_status.friends[i].maxHp&&
							get.chessDistance(player,_status.friends[i])<=2){
							return true;
						}
					}
					return false;
				},
				content:function(){
					var list=[];
					for(var i=0;i<_status.friends.length;i++){
						if(_status.friends[i].hp<_status.friends[i].maxHp&&
							get.chessDistance(player,_status.friends[i])<=2){
							list.push(_status.friends[i]);
						}
					}
					if(list.length){
						game.log('光明泉发动');
						player.line(list,'green');
						game.logv(player,'tafang_mech_guangmingquan_skill',list.slice(0)).node.text.style.display='none';
						while(list.length){
							list.shift().recover();
						}
					}
				}
			},
			tafang_mech_jiguanren_skill:{
				filter:function(player){
					for(var i=0;i<_status.enemies.length;i++){
						if(get.chessDistance(player,_status.enemies[i])<=3){
							return true;
						}
					}
					return false;
				},
				content:function(){
					'step 0'
					var list=[];
					for(var i=0;i<_status.enemies.length;i++){
						if(get.chessDistance(player,_status.enemies[i])<=3){
							list.push(_status.enemies[i]);
						}
					}
					if(list.length){
						game.log('机关人发动');
						player.line(list,'green');
						game.logv(player,'tafang_mech_jiguanren_skill',list.slice(0)).node.text.style.display='none';
						event.list=list;
					}
					else{
						event.finish();
					}
					'step 1'
					if(event.list.length){
						var target=event.list.shift();
						var he=target.getCards('he');
						if(he.length){
							target.discard(he.randomGets(Math.ceil(Math.random()*2)));
						}
						event.redo();
					}
				}
			},
			tafang_mech_gongchengche_skill:{
				filter:function(player){
					for(var i=0;i<_status.enemies.length;i++){
						if(get.chessDistance(player,_status.enemies[i])<=2){
							return true;
						}
					}
					return false;
				},
				content:function(){
					var list=[];
					for(var i=0;i<_status.enemies.length;i++){
						if(get.chessDistance(player,_status.enemies[i])<=2){
							list.push(_status.enemies[i]);
						}
					}
					if(list.length){
						game.log('攻城车发动');
						var target=list.randomGet();
						player.line(target,'fire');
						target.damage('fire','nosource');
						var he=target.getCards('he');
						if(he.length){
							target.discard(he.randomGet());
						}
						game.logv(player,'tafang_mech_gongchengche_skill',[target]).node.text.style.display='none';
					}
				}
			},
		},
		translate:{
			friend:'友',
			enemy:'敌',
			neutral:'中',
			trueColor:"zhu",
			falseColor:"wei",
			_chessmove:'移动',

			mode_tafang_character_config:'塔防模式',
			mode_tafang_card_config:'塔防模式',

			tafang_mech_weixingxianjing:'小型陷阱',
			tafang_mech_weixingxianjing_skill:'捕猎',
			tafang_mech_weixingxianjing_skill_info:'每一轮令距离你2格以内的一名随机敌人翻面。',
			tafang_mech_mutong:'木桶',
			tafang_mech_mutong_skill:'飞滚',
			tafang_mech_mutong_skill_info:'每一轮对距离3格以内的一名随机敌人造成1点伤害。',
			tafang_mech_nengliangqiu:'能量球',
			tafang_mech_nengliangqiu_skill:'充能',
			tafang_mech_nengliangqiu_skill_info:'每一轮令距离3格以内的所有友方角色摸1张牌,距离1以内改为摸2张。',
			tafang_mech_jiguanren:'机关人',
			tafang_mech_jiguanren_skill:'掠夺',
			tafang_mech_jiguanren_skill_info:'每一轮弃置3格以内的所有敌方角色各1~2张牌。',
			tafang_mech_gongchengche:'攻城车',
			tafang_mech_gongchengche_skill:'攻坚',
			tafang_mech_gongchengche_skill_info:'每一轮对距离2格以内的一名随机敌方角色造成1点火焰伤害,并随机弃置其一张牌。',
			tafang_mech_guangmingquan:'光明泉',
			tafang_mech_guangmingquan_skill:'圣疗',
			tafang_mech_guangmingquan_skill_info:'每一轮令距离2格以内的所有友方角色各回复1点体力。',

			tafang_mech_dubiaoxianjing:'毒镖陷阱',
			tafang_mech_dubiaoxianjing_skill:'毒镖',
			tafang_mech_dubiaoxianjing_skill_info:'每当距离2格以内的一名敌方角色。',
			tafang_mech_jiqishi:'集合石',
			tafang_mech_shenmidiaoxiang:'神秘雕像',
			tafang_mech_shenpanxianjing:'审判之刃',
			tafang_mech_shiyuansu:'石元素',
			tafang_mech_wuyashenxiang:'乌鸦神像',
		},
		characterPack:{
			mode_tafang:{
				// tafang_mech_dubiaoxianjing:['','',4,[],['boss'],2],
				// tafang_mech_wuyashenxiang:['','',4,[],['boss'],2],
				// tafang_mech_shenpanxianjing:['','',4,[],['boss'],2],
				// tafang_mech_shenmidiaoxiang:['','',4,[],['boss'],5],
				// tafang_mech_shiyuansu:['','',4,[],['boss'],5],
				// tafang_mech_jiqishi:['','',4,[],['boss'],5],

				tafang_mech_guangmingquan:['','',3,[],['boss'],3],
				tafang_mech_nengliangqiu:['','',3,[],['boss'],3],
				tafang_mech_jiguanren:['','',3,[],['boss'],3],
				tafang_mech_weixingxianjing:['','',3,[],['boss'],4],
				tafang_mech_mutong:['','',3,[],['boss'],4],
				tafang_mech_gongchengche:['','',3,[],['boss'],4],
			}
		},
		cardPack:{
			mode_tafang:[]
		},
		posmap:{},
		help:{
			'塔防模式':
			'<ul><li>阻上敌人到达最下方的出口,坚持到给定的回合数即获得胜利<li>'+
			'每轮可获得10个行动点,用来布置机关、招募武将。场上每有一个友方武将,行动点数-1。游戏难度将影响不同操作消耗的行动点数。未用完的行动点将减半(向下取整)并累积到下一轮<li>'+
			'每一轮在最上方的一个随机位置增加一名敌人,若最上方已有角色,则将其下移一格<li>'+
			'战场上最多出现3个相同的机关,每个机关在置入战场3轮后消失。战场上最多招募5名友方角色。<li>'+
			'敌方角色到达底部出口时游戏失败,已方角色到达底部出口,将被移出游戏',
		},
	};
});