전투 시뮬레이터 모두 저장/모두 불러오기 구현

This commit is contained in:
2018-08-27 03:08:35 +09:00
parent 44c59f2236
commit 434468ca65
5 changed files with 165 additions and 11 deletions
+1
View File
File diff suppressed because one or more lines are too long
+7 -9
View File
@@ -24,6 +24,7 @@ $startYear = $gameStor->getValue('startyear');
<?=WebUtil::printCSS('css/battle_simulator.css')?>
<?=WebUtil::printJS('../d_shared/common_path.js')?>
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('../e_lib/moment.min.js')?>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('../e_lib/download2.js')?>
<?=WebUtil::printJS('js/common.js')?>
@@ -35,7 +36,7 @@ $startYear = $gameStor->getValue('startyear');
<div class="card-header">
전역 설정
</div>
<div class="card-body">
<div class="card-body dragpad_battle">
<div class="row">
<div class="col-sm-6">
<div class="input-group">
@@ -68,9 +69,9 @@ $startYear = $gameStor->getValue('startyear');
<button type="button" class="btn btn-danger btn-begin_battle">전투</button>
</div>
<div class="btn-group mr-2" role="group">
<button type="button" class="btn btn-info">모두 저장</button>
<button type="button" class="btn btn-info btn-battle-save">모두 저장</button>
<input type="file" class="form_load_battle_file" style="display: none;" />
<button type="button" class="btn btn-primary">모두 불러오기</button>
<button type="button" class="btn btn-primary btn-battle-load">모두 불러오기</button>
</div>
</div>
</div>
@@ -83,7 +84,7 @@ $startYear = $gameStor->getValue('startyear');
<div class="card-header">
출병국 설정
</div>
<div class="card-body nation_detail">
<div class="card-body nation_detail dragpad_battle">
<div class="input-group mb-1">
<div class="input-group-prepend">
<span class="input-group-text">국가 성향</span>
@@ -154,7 +155,7 @@ $startYear = $gameStor->getValue('startyear');
<div class="card-header">
수비국 설정
</div>
<div class="card-body">
<div class="card-body dragpad_battle">
<div class="input-group mb-1">
<div class="input-group-prepend">
<span class="input-group-text">국가 성향</span>
@@ -220,10 +221,6 @@ $startYear = $gameStor->getValue('startyear');
<div class="btn-group btn-group-sm mr-2" role="group">
<button type="button" class="btn btn-dark btn-reorder_defender">수비 순서대로 정렬</button>
</div>
<div class="btn-group btn-group-sm mr-2" role="group">
<input type="file" class="form_load_general_file" style="display: none;" />
<button type="button" class="btn btn-primary btn-general-load-new">불러오기</button>
</div>
<div class="btn-group btn-group-sm" role="group">
<button type="button" class="btn btn-success add-defender">추가</button>
</div>
@@ -367,6 +364,7 @@ $startYear = $gameStor->getValue('startyear');
<span class="input-group-text">전특</span>
</div>
<select class="custom-select form_general_special_war">
<option value="0">-</option>
<?php foreach(SpecialityConst::WAR as $specialWarID => [$name,$buff,$cond]): ?>
<option value="<?=$specialWarID?>"><?=$name?></option>
<?php endforeach; ?>
+1 -1
View File
@@ -20,7 +20,6 @@ function NationCharCall($call) {
function getCharacterList(){
$infoText = [
10=>['은둔', '명성 -10%, 계급 -10%, 사기 -5, 훈련 -5, 단련 성공률 +10%'],
9=>['안전', '사기 -5, 징·모병 비용 -20%'],
8=>['유지', '훈련 -5, 징·모병 비용 -20%'],
7=>['재간', '명성 -10%, 징·모병 비용 -20%'],
@@ -31,6 +30,7 @@ function getCharacterList(){
2=>['의협', '사기 +5, 징·모병 비용 +20%'],
1=>['대의', '명성 +10%, 훈련 -5'],
0=>['왕좌', '명성 +10%, 사기 -5'],
10=>['은둔', '명성 -10%, 계급 -10%, 사기 -5, 훈련 -5, 단련 성공률 +10%'],
];
return $infoText;
}
+1 -1
View File
@@ -121,7 +121,7 @@ $generalCheck = [
],
'in'=>[
['personal', array_keys(getCharacterList())],
['special2', array_keys(SpecialityConst::WAR)],
['special2', array_merge(array_keys(SpecialityConst::WAR), [0])],
['crewtype', array_keys(GameUnitConst::all())],
]
];
+155
View File
@@ -89,6 +89,31 @@ jQuery(function($){
download(saveData, filename, 'application/json');
});
$('.btn-battle-load').click(function(){
var $file = $(this).prev();
$file[0].click();
})
$('.form_load_battle_file').on('change', function(e){
e.preventDefault();
var $this = $(this);
var files = e.target.files;
importBattleInfoByFile(files);
return false;
});
$('.btn-battle-save').click(function(){
var battleData = exportAllData();
var filename = "battle_{0}.json".format(moment().format('YYYYMMDD_hhmmss'));
var saveData = JSON.stringify({
objType:'battle',
data:battleData
}, null, 4);
download(saveData, filename, 'application/json');
})
var $generals = $('.general_detail');
$generals.bind('dragover dragleave', function(e) {
e.stopPropagation()
@@ -104,6 +129,20 @@ jQuery(function($){
importGeneralInfoByFile(files, $card);
return false;
});
var $battlePad = $('.dragpad_battle');
$battlePad.bind('dragover dragleave', function(e) {
e.stopPropagation()
e.preventDefault()
})
$battlePad.bind('drop', function(e){
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
importBattleInfoByFile(files);
return false;
});
}
var importGeneralInfo = function($general, data){
@@ -193,6 +232,64 @@ jQuery(function($){
};
}
var importBattleInfoByFile = function(files){
if(files === null){
alert('파일 에러!');
return false;
}
if(files.length < 1){
alert("파일 에러!");
return false;
}
var file = files[0];
if(file.size > 1024*1024){
alert('파일이 너무 큽니다!');
return false;
}
if(file.type === ''){
alert('폴더를 업로드할 수 없습니다!');
return false;
}
var reader = new FileReader();
reader.onload = function(){
var battleData = {};
try {
battleData = JSON.parse(reader.result);
} catch(e) {
alert('올바르지 않은 파일 형식입니다');
return false;
}
if(!('objType' in battleData)){
alert('파일 형식을 확인할 수 없습니다');
return false;
}
if(battleData.objType != 'battle'){
alert('전투 데이터가 아닙니다');
return false;
}
importBattleInfo(battleData.data);
return true;
};
try {
reader.readAsText(file);
}
catch(e) {
alert('파일을 읽는데 실패했습니다.');
return false;
}
return true;
}
var importGeneralInfoByFile = function(files, $card){
if($card === undefined){
$card = addDefender();
@@ -234,6 +331,10 @@ jQuery(function($){
return false;
}
if(generalData.objType == 'battle'){
importBattleInfo(generalData.data);
return true;
}
if(generalData.objType != 'general'){
alert('장수 데이터가 아닙니다');
return false;
@@ -362,6 +463,60 @@ jQuery(function($){
importGeneralInfo(getGeneralDetail($newObj), generalData);
}
var importBattleInfo = function(battleData){
$('.form_load_battle_file').val('');
console.log(battleData);
var $attackerNation = $('.attacker_nation');
var $defenderNation = $('.defender_nation');
var attackerGeneral = battleData.attackerGeneral;
var attackerCity = battleData.attackerCity;
var attackerNation = battleData.attackerNation;
var defenderGenerals = battleData.defenderGenerals;
var defenderCity = battleData.defenderCity;
var defenderNation = battleData.defenderNation;
$('#year').val(battleData.year);
$('#month').val(battleData.month);
$('#repeat_cnt').val(battleData.repeatCnt);
$('.delete-defender').click();
$attackerNation.find('.form_nation_type').val(attackerNation.type);
$attackerNation.find('.form_tech').val(Math.floor(attackerNation.tech/1000));
$attackerNation.find('.form_nation_level').val(attackerNation.level);
if(attackerNation.capital == 1){
$attackerNation.find('.form_is_capital:first').click();
}
else{
$attackerNation.find('.form_is_capital:last').click();
}
$attackerNation.find('.form_city_level').val(attackerCity.level);
importGeneralInfo($('.attacker_form'), attackerGeneral);
$defenderNation.find('.form_nation_type').val(defenderNation.type);
$defenderNation.find('.form_tech').val(Math.floor(defenderNation.tech/1000));
$defenderNation.find('.form_nation_level').val(defenderNation.level);
if(defenderNation.capital == 1){
$defenderNation.find('.form_is_capital:first').click();
}
else{
$defenderNation.find('.form_is_capital:last').click();
}
$defenderNation.find('.form_city_level').val(defenderCity.level);
$('#city_def').val(defenderCity.def);
$('#city_wall').val(defenderCity.wall);
$.each(defenderGenerals, function(idx, defenderGeneral){
var $card = addDefender();
importGeneralInfo($card, defenderGeneral);
});
}
var exportAllData = function(){
var $attackerNation = $('.attacker_nation');
var $defenderNation = $('.defender_nation');