String.prototype.format = function() { var args = arguments; return this.replace(/{(\d+)}/g, function(match, number) { return (typeof args[number] != 'undefined') ? args[number] : match; }); }; function reloadWorldMap(isDetailMap, clickableAll, selectCallback, hrefTemplate){ if(!hrefTemplate){ hrefTemplate = '#'; } var cityPosition = getCityPosition(); //OBJ : startYear, year, month, cityList, nationList, spyList, shownByGeneralList, myCity var $world_map = $('.world_map'); function setMapBackground(obj){ var startYear = obj.startYear; var year = obj.year; var month = obj.month; if(isDetailMap){ $world_map.addClass('map_detail').removeClass('map_basic'); } else{ $world_map.addClass('map_basic').removeClass('map_detail'); } var $map_title = $('.map_title_text'); if(year < startYear + 1){ $map_title.css('color', 'magenta'); } else if(year < startYear + 2){ $map_title.css('color', 'orange'); } else if(year < startYear + 3){ $map_title.css('color', 'yellow'); } $world_map.removeClass('map_string map_summer map_fall map_winter'); if(month <= 3){ $world_map.addClass('map_spring'); } else if(month <= 6){ $world_map.addClass('map_summer'); } else if(month <= 6){ $world_map.addClass('map_fall'); } else{ $world_map.addClass('map_winter'); } $map_title.html('{0}年 {1}月'.format(year, month)); return obj; } function convertCityObjs(obj){ //원본 Obj는 굉장히 간소하게 온다, Object 형태로 변환해서 사용한다. function toCityObj(arr){ return { "id":arr[0], "level":arr[1], "state":arr[2], "nationId":(arr[3]>0)?arr[3]:null, "region":arr[4], "supply":(arr[5]!=0) }; } function toNationObj(arr){ return { "id":arr[0], "name":arr[1], "color":arr[2], "capital":arr[3] }; } function convertSpyList(arr){ var result = []; arr.forEach(function(v){ var cityId = (v / 10) | 0; var spy = v % 10; result[cityId] = spy; }); return result; } var cityList = obj.cityList.map(toCityObj); var nationList = obj.nationList.map(toNationObj); nationList = convertDictById(nationList); //array of object -> dict var spyList = convertSpyList(obj.spyList);//Array -> Dict var shownByGeneralList = convertSet(obj.shownByGeneralList);//Array -> Set var myCity = obj.myCity; var myNation = obj.myNation; function formatCityInfo(city) { var region_str = ''; var level_str = ''; switch(city.region) { case 1: region_str = "【하북|"; break; case 2: region_str = "【중원|"; break; case 3: region_str = "【서북|"; break; case 4: region_str = "【서촉|"; break; case 5: region_str = "【남중|"; break; case 6: region_str = "【 초|"; break; case 7: region_str = "【오월|"; break; case 8: region_str = "【동이|"; break; } switch(city.level) { case 1: level_str = "수】"; break; case 2: level_str = "진】"; break; case 3: level_str = "관】"; break; case 4: level_str = "이】"; break; case 5: level_str = "소】"; break; case 6: level_str = "중】"; break; case 7: level_str = "대】"; break; case 8: level_str = "특】"; break; } city.text = region_str + level_str + city.name; city.region_str = region_str; city.level_str = level_str; return city; } function mergePositionInfo(city){ var id = city.id; if(!(id in cityPosition)){ return city; } var xy_val = cityPosition[id]; city.name = xy_val[0]; city.x = xy_val[1]; city.y = xy_val[2]; return city; } function mergeNationInfo(city){ //nationId 값으로 isCapital, color, nation을 통합 var nationId = city.nationId; if(nationId === null || !(nationId in nationList)){ city.nationId = null; city.nation = null; city.color = null; city.isCapital = false; return city; } var nationObj = nationList[nationId]; city.nation = nationObj.name; city.color = nationObj.color; city.isCapital = (nationObj.capital == city.id); return city; } function mergeClickable(city){ //clickable = (remainSpy << 3) | (ourCity << 2) | (shownByGeneral << 1) | clickableAll var id = city.id; var nationId = city.nationId; var clickable = 0; if(id in spyList){ clickable |= spyList[id] << 3; } if(nationId == myNation){ clickable |= 4; } if(shownByGeneralList.hasOwnProperty(id)){ clickable |= 2; } if(clickableAll){ clickable |= 1; } city.clickable = clickable; return city; } cityList = cityList .map(mergePositionInfo) .map(mergeNationInfo) .map(mergeClickable) .map(formatCityInfo); return { 'cityList' : cityList, 'myCity' : myCity }; } function drawDetailWorldMap(obj){ var $map_body = $('.world_map .map_body'); var cityList = obj.cityList; var myCity = obj.myCity; cityList.forEach(function(city){ var id = city.id; $('.city_base_{0}'.format(id)).detach(); //이전 도시는 지운다. var $cityObj = $('
'.format(id)); $cityObj.addClass('city_level_{0}'.format(city.level)); $cityObj.data('obj', city).css({'left':city.x-20,'top':city.y-15}); if('color' in city && city.color !== null){ var $bgObj = $(''); $cityObj.append($bgObj); $bgObj.css({'background-image':'url({0}/b{1}.png)'.format(pathConfig.gameImage, convColorValue(city.color))}); } var $linkObj = $(''); $linkObj.data({'text':city.text,'nation':city.nation,'id':city.id}); $cityObj.append($linkObj); var $imgObj = $('


