1 goog.provide('lime.parser.ZWOPTEX2'); 2 3 goog.require('goog.dom.xml'); 4 goog.require('goog.math.Rect'); 5 goog.require('goog.math.Vec2'); 6 goog.require('goog.math.Size'); 7 goog.require('goog.json'); 8 9 (function(){ 10 11 12 13 function makeDict(element){ 14 var ob = {}; 15 var keys = findNodes(element,'key'); 16 for(var i=0;i<keys.length;i++){ 17 ob[keys[i].firstChild.nodeValue] = goog.dom.getNextElementSibling(keys[i]); 18 } 19 return ob; 20 }; 21 22 function findNodes(element,tag){ 23 var ar = []; 24 for(var i=0;i<element.childNodes.length;i++){ 25 if(element.childNodes[i].nodeName==tag){ 26 ar.push(element.childNodes[i]); 27 } 28 } 29 return ar; 30 } 31 32 33 lime.parser.ZWOPTEX2 = function(data){ 34 var dict = {}; 35 var doc = goog.dom.xml.loadXml(data); 36 37 var root = findNodes(findNodes(doc,'plist')[1],'dict')[0]; 38 39 var d0 = makeDict(root); 40 var d1 = makeDict(d0['frames']); 41 var parse = function(v){ 42 return goog.json.parse(this[v].firstChild.nodeValue.replace(/\{/g,'[').replace(/\}/g,']')); 43 } 44 45 for(var i in d1){ 46 var d2 = makeDict(d1[i]); 47 d2.getValue = parse; 48 49 var frame_ = d2['textureRect'] ? 'textureRect' : 'frame', 50 sourceSize_ = d2['spriteSourceSize'] ? 'spriteSourceSize' : 'sourceSize', 51 sourceColorRect_ = d2['spriteColorRect'] ? 'spriteColorRect' : 'sourceColorRect', 52 rotated_ = d2['textureRotated'] ? 'textureRotated' : 'rotated'; 53 54 var tr = d2.getValue(frame_), ss = d2.getValue(sourceSize_), 55 scr = d2.getValue(sourceColorRect_); 56 57 var rotated = d2[rotated_].tagName.toLowerCase()=='true'; 58 59 if(rotated && rotated_=='rotated'){ 60 var c = tr[1][0]; 61 tr[1][0] = tr[1][1]; 62 tr[1][1] = c; 63 } 64 dict[i] = [new goog.math.Rect(tr[0][0],tr[0][1],tr[1][0],tr[1][1]), 65 new goog.math.Vec2(scr[0][0],scr[0][1]), 66 new goog.math.Size(ss[0],ss[1]),rotated 67 ]; 68 } 69 70 return dict; 71 }; 72 73 })();