diff --git a/armycalc.js b/armycalc.js index cdd05b0..d2cd433 100644 --- a/armycalc.js +++ b/armycalc.js @@ -165,6 +165,20 @@ function acGetText( xml ){ +//clone prototype. for cloning elements with extedn attribute +function acClone( object ){ + var newObj = (this instanceof Array) ? [] : {}; + for (i in object) { + if (typeof object[i] == "object") + newObj[i] = acClone(object[i]); + else + newObj[i] = object[i]; + } + return newObj; +}; + + + function acSandbox( code, params ){ //TODO safe quote! @@ -250,7 +264,7 @@ function acRuleset( calc ){ }); this.models = {} - + this.mainmenu = {} $(xml).children('mainmenu').children('menu').each(function(){ @@ -290,6 +304,7 @@ function acRuleset( calc ){ }; that.models[model_id].elements = []; + that.models[model_id].elements_by_uid = {}; that.models[model_id].validator = ""; @@ -302,7 +317,7 @@ function acRuleset( calc ){ }); $(this).find('elements').each(function(){ - that.appendElements( baseurl, this, that.models[model_id].elements ); + that.appendElements( baseurl, this, that.models[model_id].elements, that.models[model_id].elements_by_uid); }); @@ -323,7 +338,7 @@ function acRuleset( calc ){ } - this.appendElements = function( baseurl, xml, elements ){ + this.appendElements = function( baseurl, xml, elements, elements_by_uid){ that = this; @@ -331,7 +346,7 @@ function acRuleset( calc ){ $.ajax({ url: baseurl + $(xml).attr('src'), - success: function( xml ){ that.appendElements( baseurl, $(xml).children('elements') , elements ); }, + success: function( xml ){ that.appendElements( baseurl, $(xml).children('elements') , elements, elements_by_uid); }, error: function( jqxhr, text, error ){ that.calc.setError( this.url+' - '+text + ' - ' + error ); }, dataType: 'xml' }); @@ -352,34 +367,66 @@ function acRuleset( calc ){ $(xml).children('element').each(function(){ - var element = {}; - element.uid = $(this).children('uid').text(); + + if($(this).attr('extend') && ($(this).attr('extend') in elements_by_uid) ){ + var element = acClone( elements_by_uid[$(this).attr('extend')] ); + } else { + var element = {}; + } + + if( $(this).children('uid').length > 0 ) + element.uid = $(this).children('uid').text(); if( $(this).children('menu').length > 0 ) element.menu_id = $(this).children('menu').attr('id'); - element.name = acGetText($(this).children('name')); + if( $(this).children('name').length > 0 ) + element.name = acGetText($(this).children('name')); + elements_group.name = elements_group.name + element.name + ", "; - - element.description = acGetText($(this).children('description')); - - element.afterAppend = ($(this).attr('afterAppend')?$(this).attr('afterAppend'):0); - element.beforeRemove = ($(this).attr('beforeRemove')?$(this).attr('beforeRemove'):0); + + if( $(this).children('description').length > 0 ) + element.description = acGetText($(this).children('description')); + + if(! ('afterAppend' in element )) + element.afterAppend = ($(this).attr('afterAppend')?$(this).attr('afterAppend'):0); + if(! ('beforeRemove' in element )) + element.beforeRemove = ($(this).attr('beforeRemove')?$(this).attr('beforeRemove'):0); //alert(element.uid); //element.child = []; - element.elements = []; + if(! ('elements' in element )) + element.elements = []; + + function loadAttr( element, xml, name, def, parse ){ + if(!(name in element)) + element[name] = def; + + if( xml.attr( name ) ) + if( parse ) + element[name] = parseInt(xml.attr(name)); + else + element[name] = xml.attr(name); + + } + + loadAttr( element, $(this), 'minCount', 0, true ); + loadAttr( element, $(this), 'maxCount', null, true ); + loadAttr( element, $(this), 'minSize', 1, true ); + loadAttr( element, $(this), 'maxSize', null, true ); + loadAttr( element, $(this), 'defaultSize', element.minSize, true ); + loadAttr( element, $(this), 'size', 'custom', false ); + + + //element.minCount = ($(this).attr('minCount')?parseInt($(this).attr('minCount')):0); + //element.maxCount = ($(this).attr('maxCount')?parseInt($(this).attr('maxCount')):null); + //element.minSize = ($(this).attr('minSize')?parseInt($(this).attr('minSize')):1); + //element.maxSize = ($(this).attr('maxSize')?parseInt($(this).attr('maxSize')):null); + //element.defaultSize = ($(this).attr('defaultSize')?parseInt($(this).attr('defaultSize')):element.minSize); + //element.size = ($(this).attr('size')?$(this).attr('size'):'custom'); - element.minCount = ($(this).attr('minCount')?$(this).attr('minCount'):0); - element.maxCount = ($(this).attr('maxCount')?$(this).attr('maxCount'):null); - - element.minSize = ($(this).attr('minSize')?$(this).attr('minSize'):1); - element.maxSize = ($(this).attr('maxSize')?$(this).attr('maxSize'):null); - element.defaultSize = ($(this).attr('defaultSize')?$(this).attr('defaultSize'):element.minSize); - - element.size = ($(this).attr('size')?$(this).attr('size'):'custom'); - + element.cost = {}; for(id in that.costs) element.cost[id] = that.costs[id]['default']; @@ -401,12 +448,12 @@ function acRuleset( calc ){ $.each( $(this).children('elements'), function( id, item){ - that.appendElements( baseurl, item, element.elements ); + that.appendElements( baseurl, item, element.elements, elements_by_uid ); }); elements_group.elements[ element.uid ] = element; - + elements_by_uid[ element.uid ] = element; }); elements.push( elements_group ); diff --git a/armycalc.min.js b/armycalc.min.js index 6d068d0..1d9fc6c 100644 --- a/armycalc.min.js +++ b/armycalc.min.js @@ -1 +1 @@ -if(!("bind" in Function.prototype)){Function.prototype.bind=function(a){var c=this;if(arguments.length<=1){return function(){return c.apply(a,arguments)}}else{var b=Array.prototype.slice.call(arguments,1);return function(){return c.apply(a,arguments.length===0?b:b.concat(Array.prototype.slice.call(arguments)))}}}}if(!("trim" in String.prototype)){String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}}if(!("indexOf" in Array.prototype)){Array.prototype.indexOf=function(b,a){if(a===undefined){a=0}if(a<0){a+=this.length}if(a<0){a=0}for(var c=this.length;athis.length-1){a=this.length-1}for(a++;a-->0;){if(a in this&&this[a]===b){return a}}return -1}}if(!("forEach" in Array.prototype)){Array.prototype.forEach=function(c,b){for(var a=0,d=this.length;a"+$(this).text()+""}});return $.trim(txt)}(function(g){g.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(a,b){g.fx.step[b]=function(c){if(!c.colorInit){c.start=h(c.elem,b);c.end=e(c.end);c.colorInit=true}c.elem.style[b]="rgb("+[Math.max(Math.min(parseInt((c.pos*(c.end[0]-c.start[0]))+c.start[0]),255),0),Math.max(Math.min(parseInt((c.pos*(c.end[1]-c.start[1]))+c.start[1]),255),0),Math.max(Math.min(parseInt((c.pos*(c.end[2]-c.start[2]))+c.start[2]),255),0)].join(",")+")"}});function e(a){var b;if(a&&a.constructor==Array&&a.length==3){return a}if(b=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a)){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}if(b=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a)){return[parseFloat(b[1])*2.55,parseFloat(b[2])*2.55,parseFloat(b[3])*2.55]}if(b=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a)){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}if(b=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a)){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}if(b=/rgba\(0, 0, 0, 0\)/.exec(a)){return f.transparent}return f[g.trim(a).toLowerCase()]}function h(a,c){var b;do{b=g.curCSS(a,c);if(b!=""&&b!="transparent"||g.nodeName(a,"body")){break}c="backgroundColor"}while(a=a.parentNode);return e(b)}var f={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);function acSandbox(a,b){new Function("window","with(window){"+a+"}")(b)}function acRuleset(a){this.calc=a;this.loadFromUrl=function(b){that=this;$.ajax({url:b+"info.xml",success:function(c,e,d){that.loadFromXml(b,c)},error:function(e,d,c){that.calc.setError(this.url+" - "+d+" - "+c)},dataType:"xml"})};this.loadFromXml=function(c,b){that=this;b=$(b).children("ruleset");this.calc.langSelect.html();$(b).children("languages").children("language").each(function(){that.calc.langSelect.append("");if($(this).attr("default")=="true"){that.calc.setLang($(this).attr("id"))}});this.version=$(b).attr("version");this.uid=$(b).children("uid").text();this.revision=$(b).children("revision").text();this.name=acGetText($(b).children("name"));this.description=acGetText($(b).children("description"));this.costs={};$(b).children("costs").children("cost").each(function(){that.costs[$(this).attr("id")]={name:acGetText($(this).children("name")),"default":parseFloat($(this).children("default").text()),shortname:acGetText($(this).children("shortname")),unit:acGetText($(this).children("unit"))}});this.stats={};$(b).children("stats").children("stat").each(function(){that.stats[$(this).attr("id")]={display:($(this).attr("display")==true?true:false),name:acGetText($(this).children("name")),shortname:acGetText($(this).children("shortname")),"default":parseInt($(this).children("default").text())}});this.defaultArmyName=acGetText($(b).children("defaultArmyName"));this.defaultArmySize={};$(b).children("defaultArmySize").children("cost").each(function(){that.defaultArmySize[$(this).attr("id")]=$(this).text()});this.models={};this.mainmenu={};$(b).children("mainmenu").children("menu").each(function(){menu_id=$(this).attr("id");that.mainmenu[menu_id]={};that.mainmenu[menu_id]["name"]=acGetText($(this).children("name"));that.mainmenu[menu_id]["submenus"]={};$(this).children("menu").each(function(){that.mainmenu[menu_id]["submenus"][$(this).attr("id")]={};that.mainmenu[menu_id]["submenus"][$(this).attr("id")]["name"]=acGetText($(this).children("name"))})});this.errors={};$(b).children("errors").children("error").each(function(){that.errors[$(this).children("uid").text()]={"class":$(this).attr("class"),message:acGetText($(this).children("message"))}});$(b).children("models").find("model").each(function(){model_id=$(this).attr("id");that.models[model_id]={name:acGetText($(this).children("name")),"default":$(this).attr("default")=="true"};that.models[model_id].elements=[];that.models[model_id].validator="";$.ajax({model_id:model_id,url:c+$(this).children("validator").attr("src"),success:function(d){that.models[this.model_id].validator=d},error:function(f,e,d){that.calc.setError(this.url+" - "+e+" - "+d)},dataType:"text"});$(this).find("elements").each(function(){that.appendElements(c,this,that.models[model_id].elements)});that.models[model_id].mainmenu=that.mainmenu;that.models[model_id].defaultArmyName=that.defaultArmyName;that.models[model_id].defaultArmySize=that.defaultArmySize;if($(this).children("defaultArmyName").length){that.models[model_id].defaultArmyName=acGetText($(this).children("defaultArmyName"))}$(this).children("defaultArmySize").children("cost").each(function(){that.models[model_id].defaultArmySize[$(this).attr("id")]=$(this).text()})})};this.appendElements=function(e,c,d){that=this;if($(c).attr("src")){$.ajax({url:e+$(c).attr("src"),success:function(f){that.appendElements(e,$(f).children("elements"),d)},error:function(h,g,f){that.calc.setError(this.url+" - "+g+" - "+f)},dataType:"xml"})}else{var b={};b.minTotalCount=($(c).attr("minTotalCount")?parseInt($(c).attr("minTotalCount")):0);b.maxTotalCount=($(c).attr("maxTotalCount")?parseInt($(c).attr("maxTotalCount")):null);b.minTotalSize=($(c).attr("minTotalSize")?parseInt($(c).attr("minTotalSize")):0);b.maxTotalSize=($(c).attr("maxTotalSize")?parseInt($(c).attr("maxTotalSize")):null);b.elements={};b.name="";$(c).children("element").each(function(){var f={};f.uid=$(this).children("uid").text();if($(this).children("menu").length>0){f.menu_id=$(this).children("menu").attr("id")}f.name=acGetText($(this).children("name"));b.name=b.name+f.name+", ";f.description=acGetText($(this).children("description"));f.afterAppend=($(this).attr("afterAppend")?$(this).attr("afterAppend"):0);f.beforeRemove=($(this).attr("beforeRemove")?$(this).attr("beforeRemove"):0);f.elements=[];f.minCount=($(this).attr("minCount")?$(this).attr("minCount"):0);f.maxCount=($(this).attr("maxCount")?$(this).attr("maxCount"):null);f.minSize=($(this).attr("minSize")?$(this).attr("minSize"):1);f.maxSize=($(this).attr("maxSize")?$(this).attr("maxSize"):null);f.defaultSize=($(this).attr("defaultSize")?$(this).attr("defaultSize"):f.minSize);f.size=($(this).attr("size")?$(this).attr("size"):"custom");f.cost={};for(id in that.costs){f.cost[id]=that.costs[id]["default"]}$(this).children("cost").each(function(){f.cost[$(this).attr("id")]=parseFloat($(this).text())});if($(this).children("stats").length>0){f.stats={};for(id in that.stats){f.stats[id]=that.stats[id]["default"]}$(this).children("stats").children("stat").each(function(){f.stats[$(this).attr("id")]=parseInt($(this).text())})}$.each($(this).children("elements"),function(h,g){that.appendElements(e,g,f.elements)});b.elements[f.uid]=f});d.push(b)}}}function acInstance(b,a,d,c){var e=this;this.parent=d;this.isArmy=(this.parent==null);this.calc=b;this.army=b.army;this.ruleset=a;this.element=c;this.name=c.name;this._size=parseInt(c.defaultSize);this.size=function(f){if(typeof f==="undefined"){return this._size}this._size=f;this._dom_size.html(this._size);$.each(this.child,function(h,g){$.each(g,function(j,i){if(i.element.size==="inherit"){i.size(f)}})});if((typeof(_focused_element)!=="undefined")&&(_focused_element==this)){$("#acDec").toggle(this.size()!=this.element.minSize);$("#acInc").toggle(this.size()!=this.element.maxSize)}$.each(this._costs_spans,function(h,g){if(e._size*e.element.cost[h]>0){g.text(e._size*e.element.cost[h])}else{g.html(" ")}})};this.stat=function(g,f){if(typeof f==="undefined"){return this._stats[g]}if(g in this._stats){this._stats[g]=f;this._stats_spans[g].text(this._stats[g])}};this._rebuildSubmenu=function(){};this._rebuildListElem=function(){};if(!this.isArmy){this._subul=$("");this._dom_size=$(""+this._size+"");this._anchor=$(" x "+this.name+"").prepend(this._dom_size);this._costs_spans={};$.each(this.ruleset.costs,function(g,f){e._costs_spans[g]=$("");e._anchor.append(e._costs_spans[g])});this._stats_spans={};if(this.element.stats){this._stats={};for(id in this.element.stats){this._stats[id]=this.element.stats[id]}$.each(this.ruleset.stats,function(g,f){e._stats_spans[g]=$(""+e._stats[g]+"");e._anchor.append(e._stats_spans[g])})}this._li=$("
  • ").append(this._anchor).append(this._subul);this._submenu=$("");if(this.element.description){this._submenu.append($("
  • "+this.element.description+"
  • "))}$.each(this.element.elements,function(g,f){$.each(f.elements,function(j,i){var h=$(""+i.name+"");h.click(function(){e.append(j)});e._submenu.append($("
  • ").append(h))})});b.submenuElem.append(this._submenu);this._submenu.hide();this._anchor.click(function(){e._focus();return false})}else{this._subul=$("#acUnits")}this._errorsul=$("");this.clear=function(){this.child={};var f=this;$.each(this.element.elements,function(h,g){$.each(g.elements,function(j,i){f.child[j]=[]})})};this.clear();this.toggleError=function(g,f){this._errorsul.find("."+g).remove();if(f){this._errorsul.append("
  • "+this.ruleset.errors[g]["message"]+"
  • ")}};this.remove=function(){if(this.parent.child[this.element.uid].length>this.element.minCount){if(this.element.beforeRemove){acSandbox(this.element.beforeRemove,{that:this,army:this.army})}this.clear();this.parent.child[this.element.uid].splice(this.parent.child[this.element.uid].indexOf(this),1);this._li.remove();this._submenu.remove()}else{this.calc.flashMsg("Minimum count of "+this.element.name+" is "+this.element.minCount)}};this.count=function(f){if(typeof f==="undefined"){return this.parent.child[this.element.uid].length}if(f in this.child){return this.child[f].length}return 0};this.append=function(h){var g=null;var i=this;$.each(this.element.elements,function(l,k){if(k.elements[h]){g=k.elements[h];var j=0;$.each(k.elements,function(n,m){j+=i.child[n].length});if(j===k.maxTotalCount){i.calc.flashMsg("Maximum total count of group "+k.name+" reached ("+k.maxTotalCount+")");g=null}}});if(!g){return}if((g.maxCount==null)||(this.child[h].length0);$("#acDown").toggle(_focused_element._li.next().length>0);$("#acDec").toggle((e.element.size==="custom")&&(e.size()!=e.element.minSize));$("#acInc").toggle((e.element.size==="custom")&&(e.size()!=e.element.maxSize));$("#acRem").toggle(true)};$.each(this.element.elements,function(g,f){$.each(f.elements,function(k,j){for(var h=0;h0);calc.canvas.find("#acDown").toggle(_focused_element._li.next().length>0);return false}).hide();calc.canvas.find("#acDown").click(function(){_focused_element._li.next().after(_focused_element._li);calc.canvas.find("#acUp").toggle(_focused_element._li.prev().length>0);calc.canvas.find("#acDown").toggle(_focused_element._li.next().length>0);return false}).hide();calc.army=null;calc.units=[];calc.availableUnits={};calc.closePopup=function(){this.canvas.find("#acPopup").fadeOut();this.canvas.find("#acPopupBg").fadeOut()};calc.popup=function(f,d,e){this.canvas.find("#acPopupTitle").html(f);this.canvas.find("#acPopupContent").html("");this.canvas.find("#acPopupContent").append(d);if(e){this.canvas.find("#acClosePopup").hide()}else{this.canvas.find("#acClosePopup").show()}this.canvas.find("#acPopupBg").fadeIn();this.canvas.find("#acPopup").fadeIn();this.canvas.find("#acClosePopup").click(function(){calc.canvas.find("#acPopup").fadeOut();calc.canvas.find("#acPopupBg").fadeOut();return false})};calc.setStatus=function(d){this.statusElem.text(d)};calc.flashMsg=function(d){this.statusElem.html(d);this.statusElem.stop().css("background-color","#ff0000").animate({backgroundColor:"#000000"},1000)};calc.setLang=function(d){acAddCSSRule(".trans","display","none");if(this.lang){acAddCSSRule("."+this.lang+"","display","none")}this.lang=d;acAddCSSRule("."+d+"","display","inline")};calc.setStatus("no TWR file loaded");calc.setError=function(d){this.statusElem.html(''+d+"")};xhrError=function(f,e,d){this.calc.setError(this.url+" - "+e+" - "+d)};calc.calcLoadUnitsXml=function(d){console.log(d)};calc.loadTWR=function(d){this.twrurl=d;this.units=[];this.availableUnits=[];this.setStatus("loading "+d);this.ruleset=new acRuleset(this);this.ruleset.loadFromUrl(d)};calc.revalidate=function(){if(!this.army){this.flashMsg("Please create new army first!");return}if(!this.model.validator){this.flashMsg("This model do not provide a validator!");return}acSandbox(this.model.validator,{army:this.army});this.popup("validation result",this.army._errorsul)};calc.newArmy=function(){that=this;body=$("
    ");body.append("

    "+this.ruleset.name+"

    "+this.ruleset.description+"
    ");modelSelect=$("");for(id in this.ruleset.models){modelSelect.append("")}createButton=$("");body.append($("").append(modelSelect));for(id in this.ruleset.costs){this.ruleset.costs[id].input=$("");body.append($("").append(this.ruleset.costs[id].input))}createButton.click(function(){calc.closePopup();calc.canvas.find("#acElements").html("");calc.canvas.find("#acUnits").html("");var e=$("
    ");$.each(that.ruleset.costs,function(g,f){e.append(""+f.shortname+"")});$.each(that.ruleset.stats,function(g,f){e.append(""+f.shortname+"")});calc.canvas.find("#acUnitsHeader").html("");calc.canvas.find("#acUnitsHeader").append(e);calc.model=that.ruleset.models[modelSelect.val()];calc.army=new acInstance(that,that.ruleset,null,calc.model);calc.army.maxCosts={};for(id in calc.ruleset.costs){calc.army.maxCosts[id]=that.ruleset.costs[id].input.val()}var d={};$.each(calc.model.mainmenu,function(h,g){d[h]=$("
      ");var f=$(""+g.name+"");calc.canvas.find("#acElements").append($("
    • ").append(f).append(d[h]).hover(function(){$(this).children("ul").show()},function(){$(this).children("ul").hide()}));$.each(g.submenus,function(k,j){d[k]=$("
        ");var i=$(""+j.name+"");d[h].append($("
      • ").append(i).append(d[k]).hover(function(){$(this).children("ul").show()},function(){$(this).children("ul").hide()}))})});$.each(calc.army.element.elements,function(g,f){$.each(f.elements,function(j,i){if(i.menu_id){var h=$(""+i.name+"");d[i.menu_id].append($("
      • ").append(h));h.click(function(){calc.army.append(j);$(".submm").hide()})}})});$.each(d,function(g,f){if($(f).children("li").length==0){$(f).parent().remove()}})});body.append($("
        ").append(createButton));this.popup("New army - "+this.ruleset.name,body)};calc.setFullscreen=function(d){$("body").toggleClass("acFullscreen",d);this.canvas.toggleClass("acFullscreen",d);this.canvas.find("#acMaximize").toggle(!d);this.canvas.find("#acMinimize").toggle(d);if(d){var e=$(window).height()-80;this.canvas.find(".unitslist").height(e)}else{this.canvas.find(".unitslist").height(200)}};return calc}function goodbye(a){}if(navigator.appName!="Microsoft Internet Explorer"){window.onbeforeunload=goodbye}; \ No newline at end of file +if(!("bind" in Function.prototype)){Function.prototype.bind=function(a){var c=this;if(arguments.length<=1){return function(){return c.apply(a,arguments)}}else{var b=Array.prototype.slice.call(arguments,1);return function(){return c.apply(a,arguments.length===0?b:b.concat(Array.prototype.slice.call(arguments)))}}}}if(!("trim" in String.prototype)){String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}}if(!("indexOf" in Array.prototype)){Array.prototype.indexOf=function(b,a){if(a===undefined){a=0}if(a<0){a+=this.length}if(a<0){a=0}for(var c=this.length;athis.length-1){a=this.length-1}for(a++;a-->0;){if(a in this&&this[a]===b){return a}}return -1}}if(!("forEach" in Array.prototype)){Array.prototype.forEach=function(c,b){for(var a=0,d=this.length;a"+$(this).text()+""}});return $.trim(txt)}(function(g){g.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(a,b){g.fx.step[b]=function(c){if(!c.colorInit){c.start=h(c.elem,b);c.end=e(c.end);c.colorInit=true}c.elem.style[b]="rgb("+[Math.max(Math.min(parseInt((c.pos*(c.end[0]-c.start[0]))+c.start[0]),255),0),Math.max(Math.min(parseInt((c.pos*(c.end[1]-c.start[1]))+c.start[1]),255),0),Math.max(Math.min(parseInt((c.pos*(c.end[2]-c.start[2]))+c.start[2]),255),0)].join(",")+")"}});function e(a){var b;if(a&&a.constructor==Array&&a.length==3){return a}if(b=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a)){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}if(b=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a)){return[parseFloat(b[1])*2.55,parseFloat(b[2])*2.55,parseFloat(b[3])*2.55]}if(b=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a)){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}if(b=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a)){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}if(b=/rgba\(0, 0, 0, 0\)/.exec(a)){return f.transparent}return f[g.trim(a).toLowerCase()]}function h(a,c){var b;do{b=g.curCSS(a,c);if(b!=""&&b!="transparent"||g.nodeName(a,"body")){break}c="backgroundColor"}while(a=a.parentNode);return e(b)}var f={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);function acClone(b){var a=(this instanceof Array)?[]:{};for(i in b){if(typeof b[i]=="object"){a[i]=acClone(b[i])}else{a[i]=b[i]}}return a}function acSandbox(a,b){new Function("window","with(window){"+a+"}")(b)}function acRuleset(a){this.calc=a;this.loadFromUrl=function(b){that=this;$.ajax({url:b+"info.xml",success:function(c,e,d){that.loadFromXml(b,c)},error:function(e,d,c){that.calc.setError(this.url+" - "+d+" - "+c)},dataType:"xml"})};this.loadFromXml=function(c,b){that=this;b=$(b).children("ruleset");this.calc.langSelect.html();$(b).children("languages").children("language").each(function(){that.calc.langSelect.append("");if($(this).attr("default")=="true"){that.calc.setLang($(this).attr("id"))}});this.version=$(b).attr("version");this.uid=$(b).children("uid").text();this.revision=$(b).children("revision").text();this.name=acGetText($(b).children("name"));this.description=acGetText($(b).children("description"));this.costs={};$(b).children("costs").children("cost").each(function(){that.costs[$(this).attr("id")]={name:acGetText($(this).children("name")),"default":parseFloat($(this).children("default").text()),shortname:acGetText($(this).children("shortname")),unit:acGetText($(this).children("unit"))}});this.stats={};$(b).children("stats").children("stat").each(function(){that.stats[$(this).attr("id")]={display:($(this).attr("display")==true?true:false),name:acGetText($(this).children("name")),shortname:acGetText($(this).children("shortname")),"default":parseInt($(this).children("default").text())}});this.defaultArmyName=acGetText($(b).children("defaultArmyName"));this.defaultArmySize={};$(b).children("defaultArmySize").children("cost").each(function(){that.defaultArmySize[$(this).attr("id")]=$(this).text()});this.models={};this.mainmenu={};$(b).children("mainmenu").children("menu").each(function(){menu_id=$(this).attr("id");that.mainmenu[menu_id]={};that.mainmenu[menu_id]["name"]=acGetText($(this).children("name"));that.mainmenu[menu_id]["submenus"]={};$(this).children("menu").each(function(){that.mainmenu[menu_id]["submenus"][$(this).attr("id")]={};that.mainmenu[menu_id]["submenus"][$(this).attr("id")]["name"]=acGetText($(this).children("name"))})});this.errors={};$(b).children("errors").children("error").each(function(){that.errors[$(this).children("uid").text()]={"class":$(this).attr("class"),message:acGetText($(this).children("message"))}});$(b).children("models").find("model").each(function(){model_id=$(this).attr("id");that.models[model_id]={name:acGetText($(this).children("name")),"default":$(this).attr("default")=="true"};that.models[model_id].elements=[];that.models[model_id].elements_by_uid={};that.models[model_id].validator="";$.ajax({model_id:model_id,url:c+$(this).children("validator").attr("src"),success:function(d){that.models[this.model_id].validator=d},error:function(f,e,d){that.calc.setError(this.url+" - "+e+" - "+d)},dataType:"text"});$(this).find("elements").each(function(){that.appendElements(c,this,that.models[model_id].elements,that.models[model_id].elements_by_uid)});that.models[model_id].mainmenu=that.mainmenu;that.models[model_id].defaultArmyName=that.defaultArmyName;that.models[model_id].defaultArmySize=that.defaultArmySize;if($(this).children("defaultArmyName").length){that.models[model_id].defaultArmyName=acGetText($(this).children("defaultArmyName"))}$(this).children("defaultArmySize").children("cost").each(function(){that.models[model_id].defaultArmySize[$(this).attr("id")]=$(this).text()})})};this.appendElements=function(f,c,e,d){that=this;if($(c).attr("src")){$.ajax({url:f+$(c).attr("src"),success:function(g){that.appendElements(f,$(g).children("elements"),e,d)},error:function(j,h,g){that.calc.setError(this.url+" - "+h+" - "+g)},dataType:"xml"})}else{var b={};b.minTotalCount=($(c).attr("minTotalCount")?parseInt($(c).attr("minTotalCount")):0);b.maxTotalCount=($(c).attr("maxTotalCount")?parseInt($(c).attr("maxTotalCount")):null);b.minTotalSize=($(c).attr("minTotalSize")?parseInt($(c).attr("minTotalSize")):0);b.maxTotalSize=($(c).attr("maxTotalSize")?parseInt($(c).attr("maxTotalSize")):null);b.elements={};b.name="";$(c).children("element").each(function(){if($(this).attr("extend")&&($(this).attr("extend") in d)){var h=acClone(d[$(this).attr("extend")])}else{var h={}}if($(this).children("uid").length>0){h.uid=$(this).children("uid").text()}if($(this).children("menu").length>0){h.menu_id=$(this).children("menu").attr("id")}if($(this).children("name").length>0){h.name=acGetText($(this).children("name"))}b.name=b.name+h.name+", ";if($(this).children("description").length>0){h.description=acGetText($(this).children("description"))}if(!("afterAppend" in h)){h.afterAppend=($(this).attr("afterAppend")?$(this).attr("afterAppend"):0)}if(!("beforeRemove" in h)){h.beforeRemove=($(this).attr("beforeRemove")?$(this).attr("beforeRemove"):0)}if(!("elements" in h)){h.elements=[]}function g(l,k,j,m,n){if(!(j in l)){l[j]=m}if(k.attr(j)){if(n){l[j]=parseInt(k.attr(j))}else{l[j]=k.attr(j)}}}g(h,$(this),"minCount",0,true);g(h,$(this),"maxCount",null,true);g(h,$(this),"minSize",1,true);g(h,$(this),"maxSize",null,true);g(h,$(this),"defaultSize",h.minSize,true);g(h,$(this),"size","custom",false);h.cost={};for(id in that.costs){h.cost[id]=that.costs[id]["default"]}$(this).children("cost").each(function(){h.cost[$(this).attr("id")]=parseFloat($(this).text())});if($(this).children("stats").length>0){h.stats={};for(id in that.stats){h.stats[id]=that.stats[id]["default"]}$(this).children("stats").children("stat").each(function(){h.stats[$(this).attr("id")]=parseInt($(this).text())})}$.each($(this).children("elements"),function(k,j){that.appendElements(f,j,h.elements,d)});b.elements[h.uid]=h;d[h.uid]=h});e.push(b)}}}function acInstance(b,a,d,c){var e=this;this.parent=d;this.isArmy=(this.parent==null);this.calc=b;this.army=b.army;this.ruleset=a;this.element=c;this.name=c.name;this._size=parseInt(c.defaultSize);this.size=function(f){if(typeof f==="undefined"){return this._size}this._size=f;this._dom_size.html(this._size);$.each(this.child,function(h,g){$.each(g,function(k,j){if(j.element.size==="inherit"){j.size(f)}})});if((typeof(_focused_element)!=="undefined")&&(_focused_element==this)){$("#acDec").toggle(this.size()!=this.element.minSize);$("#acInc").toggle(this.size()!=this.element.maxSize)}$.each(this._costs_spans,function(h,g){if(e._size*e.element.cost[h]>0){g.text(e._size*e.element.cost[h])}else{g.html(" ")}})};this.stat=function(g,f){if(typeof f==="undefined"){return this._stats[g]}if(g in this._stats){this._stats[g]=f;this._stats_spans[g].text(this._stats[g])}};this._rebuildSubmenu=function(){};this._rebuildListElem=function(){};if(!this.isArmy){this._subul=$("
          ");this._dom_size=$(""+this._size+"");this._anchor=$(" x "+this.name+"").prepend(this._dom_size);this._costs_spans={};$.each(this.ruleset.costs,function(g,f){e._costs_spans[g]=$("");e._anchor.append(e._costs_spans[g])});this._stats_spans={};if(this.element.stats){this._stats={};for(id in this.element.stats){this._stats[id]=this.element.stats[id]}$.each(this.ruleset.stats,function(g,f){e._stats_spans[g]=$(""+e._stats[g]+"");e._anchor.append(e._stats_spans[g])})}this._li=$("
        • ").append(this._anchor).append(this._subul);this._submenu=$("
            ");if(this.element.description){this._submenu.append($("
          • "+this.element.description+"
          • "))}$.each(this.element.elements,function(g,f){$.each(f.elements,function(k,j){var h=$(""+j.name+"");h.click(function(){e.append(k)});e._submenu.append($("
          • ").append(h))})});b.submenuElem.append(this._submenu);this._submenu.hide();this._anchor.click(function(){e._focus();return false})}else{this._subul=$("#acUnits")}this._errorsul=$("
              ");this.clear=function(){this.child={};var f=this;$.each(this.element.elements,function(h,g){$.each(g.elements,function(k,j){f.child[k]=[]})})};this.clear();this.toggleError=function(g,f){this._errorsul.find("."+g).remove();if(f){this._errorsul.append("
            • "+this.ruleset.errors[g]["message"]+"
            • ")}};this.remove=function(){if(this.parent.child[this.element.uid].length>this.element.minCount){if(this.element.beforeRemove){acSandbox(this.element.beforeRemove,{that:this,army:this.army})}this.clear();this.parent.child[this.element.uid].splice(this.parent.child[this.element.uid].indexOf(this),1);this._li.remove();this._submenu.remove()}else{this.calc.flashMsg("Minimum count of "+this.element.name+" is "+this.element.minCount)}};this.count=function(f){if(typeof f==="undefined"){return this.parent.child[this.element.uid].length}if(f in this.child){return this.child[f].length}return 0};this.append=function(h){var g=null;var j=this;$.each(this.element.elements,function(m,l){if(l.elements[h]){g=l.elements[h];var k=0;$.each(l.elements,function(o,n){k+=j.child[o].length});if(k===l.maxTotalCount){j.calc.flashMsg("Maximum total count of group "+l.name+" reached ("+l.maxTotalCount+")");g=null}}});if(!g){return}if((g.maxCount==null)||(this.child[h].length0);$("#acDown").toggle(_focused_element._li.next().length>0);$("#acDec").toggle((e.element.size==="custom")&&(e.size()!=e.element.minSize));$("#acInc").toggle((e.element.size==="custom")&&(e.size()!=e.element.maxSize));$("#acRem").toggle(true)};$.each(this.element.elements,function(g,f){$.each(f.elements,function(k,j){for(var h=0;h0);calc.canvas.find("#acDown").toggle(_focused_element._li.next().length>0);return false}).hide();calc.canvas.find("#acDown").click(function(){_focused_element._li.next().after(_focused_element._li);calc.canvas.find("#acUp").toggle(_focused_element._li.prev().length>0);calc.canvas.find("#acDown").toggle(_focused_element._li.next().length>0);return false}).hide();calc.army=null;calc.units=[];calc.availableUnits={};calc.closePopup=function(){this.canvas.find("#acPopup").fadeOut();this.canvas.find("#acPopupBg").fadeOut()};calc.popup=function(f,d,e){this.canvas.find("#acPopupTitle").html(f);this.canvas.find("#acPopupContent").html("");this.canvas.find("#acPopupContent").append(d);if(e){this.canvas.find("#acClosePopup").hide()}else{this.canvas.find("#acClosePopup").show()}this.canvas.find("#acPopupBg").fadeIn();this.canvas.find("#acPopup").fadeIn();this.canvas.find("#acClosePopup").click(function(){calc.canvas.find("#acPopup").fadeOut();calc.canvas.find("#acPopupBg").fadeOut();return false})};calc.setStatus=function(d){this.statusElem.text(d)};calc.flashMsg=function(d){this.statusElem.html(d);this.statusElem.stop().css("background-color","#ff0000").animate({backgroundColor:"#000000"},1000)};calc.setLang=function(d){acAddCSSRule(".trans","display","none");if(this.lang){acAddCSSRule("."+this.lang+"","display","none")}this.lang=d;acAddCSSRule("."+d+"","display","inline")};calc.setStatus("no TWR file loaded");calc.setError=function(d){this.statusElem.html(''+d+"")};xhrError=function(f,e,d){this.calc.setError(this.url+" - "+e+" - "+d)};calc.calcLoadUnitsXml=function(d){console.log(d)};calc.loadTWR=function(d){this.twrurl=d;this.units=[];this.availableUnits=[];this.setStatus("loading "+d);this.ruleset=new acRuleset(this);this.ruleset.loadFromUrl(d)};calc.revalidate=function(){if(!this.army){this.flashMsg("Please create new army first!");return}if(!this.model.validator){this.flashMsg("This model do not provide a validator!");return}acSandbox(this.model.validator,{army:this.army});this.popup("validation result",this.army._errorsul)};calc.newArmy=function(){that=this;body=$("
              ");body.append("

              "+this.ruleset.name+"

              "+this.ruleset.description+"
              ");modelSelect=$("");for(id in this.ruleset.models){modelSelect.append("")}createButton=$("");body.append($("").append(modelSelect));for(id in this.ruleset.costs){this.ruleset.costs[id].input=$("");body.append($("").append(this.ruleset.costs[id].input))}createButton.click(function(){calc.closePopup();calc.canvas.find("#acElements").html("");calc.canvas.find("#acUnits").html("");var e=$("
              ");$.each(that.ruleset.costs,function(g,f){e.append(""+f.shortname+"")});$.each(that.ruleset.stats,function(g,f){e.append(""+f.shortname+"")});calc.canvas.find("#acUnitsHeader").html("");calc.canvas.find("#acUnitsHeader").append(e);calc.model=that.ruleset.models[modelSelect.val()];calc.army=new acInstance(that,that.ruleset,null,calc.model);calc.army.maxCosts={};for(id in calc.ruleset.costs){calc.army.maxCosts[id]=that.ruleset.costs[id].input.val()}var d={};$.each(calc.model.mainmenu,function(h,g){d[h]=$("
                ");var f=$(""+g.name+"");calc.canvas.find("#acElements").append($("
              • ").append(f).append(d[h]).hover(function(){$(this).children("ul").show()},function(){$(this).children("ul").hide()}));$.each(g.submenus,function(l,k){d[l]=$("
                  ");var j=$(""+k.name+"");d[h].append($("
                • ").append(j).append(d[l]).hover(function(){$(this).children("ul").show()},function(){$(this).children("ul").hide()}))})});$.each(calc.army.element.elements,function(g,f){$.each(f.elements,function(k,j){if(j.menu_id){var h=$(""+j.name+"");d[j.menu_id].append($("
                • ").append(h));h.click(function(){calc.army.append(k);$(".submm").hide()})}})});$.each(d,function(g,f){if($(f).children("li").length==0){$(f).parent().remove()}})});body.append($("
                  ").append(createButton));this.popup("New army - "+this.ruleset.name,body)};calc.setFullscreen=function(d){$("body").toggleClass("acFullscreen",d);this.canvas.toggleClass("acFullscreen",d);this.canvas.find("#acMaximize").toggle(!d);this.canvas.find("#acMinimize").toggle(d);if(d){var e=$(window).height()-80;this.canvas.find(".unitslist").height(e)}else{this.canvas.find(".unitslist").height(200)}};return calc}function goodbye(a){}if(navigator.appName!="Microsoft Internet Explorer"){window.onbeforeunload=goodbye}; \ No newline at end of file diff --git a/src/class.ruleset.js b/src/class.ruleset.js index 8bf634a..c9f488d 100644 --- a/src/class.ruleset.js +++ b/src/class.ruleset.js @@ -76,7 +76,7 @@ function acRuleset( calc ){ }); this.models = {} - + this.mainmenu = {} $(xml).children('mainmenu').children('menu').each(function(){ @@ -116,6 +116,7 @@ function acRuleset( calc ){ }; that.models[model_id].elements = []; + that.models[model_id].elements_by_uid = {}; that.models[model_id].validator = ""; @@ -128,7 +129,7 @@ function acRuleset( calc ){ }); $(this).find('elements').each(function(){ - that.appendElements( baseurl, this, that.models[model_id].elements ); + that.appendElements( baseurl, this, that.models[model_id].elements, that.models[model_id].elements_by_uid); }); @@ -149,7 +150,7 @@ function acRuleset( calc ){ } - this.appendElements = function( baseurl, xml, elements ){ + this.appendElements = function( baseurl, xml, elements, elements_by_uid){ that = this; @@ -157,7 +158,7 @@ function acRuleset( calc ){ $.ajax({ url: baseurl + $(xml).attr('src'), - success: function( xml ){ that.appendElements( baseurl, $(xml).children('elements') , elements ); }, + success: function( xml ){ that.appendElements( baseurl, $(xml).children('elements') , elements, elements_by_uid); }, error: function( jqxhr, text, error ){ that.calc.setError( this.url+' - '+text + ' - ' + error ); }, dataType: 'xml' }); @@ -178,34 +179,66 @@ function acRuleset( calc ){ $(xml).children('element').each(function(){ - var element = {}; - element.uid = $(this).children('uid').text(); + + if($(this).attr('extend') && ($(this).attr('extend') in elements_by_uid) ){ + var element = acClone( elements_by_uid[$(this).attr('extend')] ); + } else { + var element = {}; + } + + if( $(this).children('uid').length > 0 ) + element.uid = $(this).children('uid').text(); if( $(this).children('menu').length > 0 ) element.menu_id = $(this).children('menu').attr('id'); - element.name = acGetText($(this).children('name')); + if( $(this).children('name').length > 0 ) + element.name = acGetText($(this).children('name')); + elements_group.name = elements_group.name + element.name + ", "; - - element.description = acGetText($(this).children('description')); - - element.afterAppend = ($(this).attr('afterAppend')?$(this).attr('afterAppend'):0); - element.beforeRemove = ($(this).attr('beforeRemove')?$(this).attr('beforeRemove'):0); + + if( $(this).children('description').length > 0 ) + element.description = acGetText($(this).children('description')); + + if(! ('afterAppend' in element )) + element.afterAppend = ($(this).attr('afterAppend')?$(this).attr('afterAppend'):0); + if(! ('beforeRemove' in element )) + element.beforeRemove = ($(this).attr('beforeRemove')?$(this).attr('beforeRemove'):0); //alert(element.uid); //element.child = []; - element.elements = []; - + if(! ('elements' in element )) + element.elements = []; - element.minCount = ($(this).attr('minCount')?$(this).attr('minCount'):0); - element.maxCount = ($(this).attr('maxCount')?$(this).attr('maxCount'):null); - - element.minSize = ($(this).attr('minSize')?$(this).attr('minSize'):1); - element.maxSize = ($(this).attr('maxSize')?$(this).attr('maxSize'):null); - element.defaultSize = ($(this).attr('defaultSize')?$(this).attr('defaultSize'):element.minSize); + + function loadAttr( element, xml, name, def, parse ){ + if(!(name in element)) + element[name] = def; + + if( xml.attr( name ) ) + if( parse ) + element[name] = parseInt(xml.attr(name)); + else + element[name] = xml.attr(name); + + } + + loadAttr( element, $(this), 'minCount', 0, true ); + loadAttr( element, $(this), 'maxCount', null, true ); + loadAttr( element, $(this), 'minSize', 1, true ); + loadAttr( element, $(this), 'maxSize', null, true ); + loadAttr( element, $(this), 'defaultSize', element.minSize, true ); + loadAttr( element, $(this), 'size', 'custom', false ); + + + //element.minCount = ($(this).attr('minCount')?parseInt($(this).attr('minCount')):0); + //element.maxCount = ($(this).attr('maxCount')?parseInt($(this).attr('maxCount')):null); + //element.minSize = ($(this).attr('minSize')?parseInt($(this).attr('minSize')):1); + //element.maxSize = ($(this).attr('maxSize')?parseInt($(this).attr('maxSize')):null); + //element.defaultSize = ($(this).attr('defaultSize')?parseInt($(this).attr('defaultSize')):element.minSize); + //element.size = ($(this).attr('size')?$(this).attr('size'):'custom'); - element.size = ($(this).attr('size')?$(this).attr('size'):'custom'); - + element.cost = {}; for(id in that.costs) element.cost[id] = that.costs[id]['default']; @@ -227,12 +260,12 @@ function acRuleset( calc ){ $.each( $(this).children('elements'), function( id, item){ - that.appendElements( baseurl, item, element.elements ); + that.appendElements( baseurl, item, element.elements, elements_by_uid ); }); elements_group.elements[ element.uid ] = element; - + elements_by_uid[ element.uid ] = element; }); elements.push( elements_group ); diff --git a/src/helpers.js b/src/helpers.js index 6363676..2301bf8 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -67,3 +67,17 @@ function acGetText( xml ){ + +//clone prototype. for cloning elements with extedn attribute +function acClone( object ){ + var newObj = (this instanceof Array) ? [] : {}; + for (i in object) { + if (typeof object[i] == "object") + newObj[i] = acClone(object[i]); + else + newObj[i] = object[i]; + } + return newObj; +}; + + diff --git a/test1.twr/equipment.xml b/test1.twr/equipment.xml new file mode 100644 index 0000000..19c5745 --- /dev/null +++ b/test1.twr/equipment.xml @@ -0,0 +1,99 @@ + + + + + + runic-sword + + Runic Sword + Runiczny Miecz + + + This element can be appended to every hero. + Ten element może zostać dodany do każdego bohatera. + + + + + + + + rune-of-might + Rune Of Might + + + + rune-of-fire + Rune Of Fire + + + + rune-of-ice + Rune Of Ice + + + + + + + + + runic-armor + + Runic Armor + Runiczna Zbroja + + + This element can be appended to every hero. + Ten element może zostać dodany do każdego bohatera. + + + + + + + + rune-of-protection + Rune Of Protection + + + + rune-of-speed + Rune Of Speed + + + + + + + + + runic-shield + + Runic Shield + Runiczna Tarcza + + + This element can be appended to every hero. + Ten element może zostać dodany do każdego bohatera. + + + + + + + + rune-of-stone + Rune Of Stone + + + + rune-of-invisibility + Rune Of Invisibility + + + + + + + diff --git a/test1.twr/heroes.xml b/test1.twr/heroes.xml index 366cad2..de098e0 100644 --- a/test1.twr/heroes.xml +++ b/test1.twr/heroes.xml @@ -4,37 +4,46 @@ hero - - Hero - Bohater - + HeroBohater - - 50 - 50 - 50 - 50 - + 50505050 - 100 - 10 + 10010 - - runic-sword-2 - - Runic Sword 2 - Runiczny Miecz 2 - - - + + + + + + hero-remus + RemusRemus + 46544075 + 11011 + + + + hero-barri + BarriBarri + 16363425 + 405 + + + + hero-kearney + KearneyKearney + 56667499 + 14015 + + + diff --git a/test1.twr/info.xml b/test1.twr/info.xml index 2568b4d..59a8e54 100644 --- a/test1.twr/info.xml +++ b/test1.twr/info.xml @@ -175,10 +175,10 @@ Default Model + - @@ -190,10 +190,10 @@ Tournament army Armia turniejowa + - diff --git a/test1.twr/magic_items.xml b/test1.twr/magic_items.xml deleted file mode 100644 index 92dad73..0000000 --- a/test1.twr/magic_items.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - runic-sword - - Runic Sword - Runiczny Miecz - - - - - - - - - - - - rune-of-might - Rune Of Might - - - - rune-of-fire - Rune Of Fire - - - - rune-of-ice - Rune Of Ice - - - - - - - diff --git a/test1.twr/special_units.xml b/test1.twr/special_units.xml index ffa4a52..dec76ce 100644 --- a/test1.twr/special_units.xml +++ b/test1.twr/special_units.xml @@ -1,5 +1,69 @@ - + + + cannon + + Cannon + Działo + + + Can have up to 5 crewmen (minimum 2). We use maxSize=1 and maxCount=5 instead of minCount=1 and maxSize=5 so every crewman can have its own set of sub elements. + Morze mieć do 5 załogantów (co najmniej 2). Element ma ustawione maxSize=1 i maxCount=5 aby każdy załogant mógł mieć swój włąsny zestaw podelementów. + + + + + + 100 + 1 + 1 + 2 + + + 100 + 5 + + + + + + crewman + + Crewman + Załogant + + + + 3 + 3 + 3 + 3 + + + + + shield + Shield + 1 + + + + two-handed-weapon + Two handed weapon + 1 + + + + + + + + +