diff --git a/dist/dwelibs.min.js b/dist/dwelibs.min.js index f27986d..6e87a0a 100644 --- a/dist/dwelibs.min.js +++ b/dist/dwelibs.min.js @@ -1 +1 @@ -!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";window.DWE={};n(1),n(2),n(3),n(4),n(5),n(6),n(7)},function(t,e,n){"use strict";DWE.context=function(t){return t.star=function(e,n,i,r,o){var a=Math.PI/2*3,s=e,u=n,l=Math.PI/i;t.beginPath(),t.moveTo(e,n-r);for(var h=0;hthis.width/2+t.r)&&(!(e.y>this.height/2+t.r)&&(e.x<=this.width/2||(e.y<=this.height/2||Math.pow(e.x-this.width/2,2)+Math.pow(e.y-this.height/2,2)<=Math.pow(t.r,2))))}}]),t}(),DWE.Math.Circle=function(){function t(e,n,i){r(this,t),this.x=e,this.y=n,this.r=i}return i(t,[{key:"radius",get:function(){return this.r}}]),t}()},function(t,e,n){"use strict";DWE.getMousePosition=function(t,e){var n=void 0,i=void 0;if(t.changedTouches){var r=t.changedTouches[0];r&&(t.pageX=r.pageX,t.pageY=r.pageY)}return t.pageX||t.pageY?(n=t.pageX,i=t.pageY):(n=t.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,i=t.clientY+document.body.scrollTop+document.documentElement.scrollTop),n-=e.offsetLeft,i-=e.offsetTop,new DWE.Math.Vector2(n,i)}},function(t,e,n){"use strict";DWE.Keyboard={};var i={},r={},o={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,pausebreak:19,capslock:20,escape:27,pgup:33,pgdown:34,end:35,home:36,left:37,up:38,right:39,down:40,insert:45,delete:46,"left-window":91,"right-window":92,select:93,numpad0:96,numpad1:97,numpad2:98,numpad3:99,numpad4:100,numpad5:101,numpad6:102,numpad7:103,numpad8:104,numpad9:105,multiply:106,add:107,subtract:109,decimal:110,divide:111,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,numlock:144,scrolllock:145,"semi-colon":186,equals:187,comma:188,dash:189,period:190,fwdslash:191,grave:192,"open-bracket":219,bkslash:220,"close-braket":221,"single-quote":222};function a(t){return null!=i[t]&&i[t]}function s(t){return null!=r[t]&&r[t]}DWE.Keyboard.toggleKey=function(t,e){var n=null;for(var r in o){if(t===o[r]){n=r;break}}n||(n=String.fromCharCode(t).toLowerCase()),i[n]=!0===e},DWE.Keyboard.keyDown=function(t){var e;window.event?e=window.event.keyCode:t&&(e=t.which),DWE.Keyboard.toggleKey(e,!0)},DWE.Keyboard.keyUp=function(t){var e;window.event?e=window.event.keyCode:t&&(e=t.which),DWE.Keyboard.toggleKey(e,!1)},DWE.Keyboard.isDown=function(t){return a(t)&&s(t)},DWE.Keyboard.isUp=function(t){return!DWE.Keyboard.isDown(t)},DWE.Keyboard.isPressed=function(t){return!0===a(t)&&!1===s(t)},DWE.Keyboard.nextIteration=function(){for(var t in r={},i)!0===i[t]&&(r[t]=!0)}},function(t,e,n){"use strict";var i=function(){function t(t,e){for(var n=0;n=400&&i(r.responseText)},r.open("GET",t,!0),r.responseType=e?"xml":"text",r.send(null)})},DWE.File.loadXML=function(t){return DWE.File.httpGET(t,!0)},DWE.File.loadJson=function(t){return new Promise(function(e,n){DWE.File.httpGET(t).then(function(t){var i;try{i=JSON.parse(t)}catch(t){return n(t)}e(i)},n)})}},function(t,e,n){"use strict";var i=function(){function t(t,e){for(var n=0;n=a.offset&&u.tile<=l&&a.draw(t,u.tile-1,u.x*this.tileWidth*this.scale+e.x+r.x+n.x,u.y*this.tileHeight*this.scale+e.y+r.y+n.y,this.tileWidth*this.scale,this.tileHeight*this.scale)}}}},{key:"collideLayer",value:function(t,e){if(!this.layers[e])return null;this.layers[e];return null}},{key:"setScale",value:function(t){this.scale=t}}]),t}()}]); \ No newline at end of file +!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";window.DWE={};n(1),n(2),n(3),n(4),n(5),n(6),n(7)},function(t,e,n){"use strict";DWE.context=function(t){return t.star=function(e,n,i,r,o){var a=Math.PI/2*3,s=e,u=n,h=Math.PI/i;t.beginPath(),t.moveTo(e,n-r);for(var l=0;lthis.width/2+t.r)&&(!(e.y>this.height/2+t.r)&&(e.x<=this.width/2||(e.y<=this.height/2||Math.pow(e.x-this.width/2,2)+Math.pow(e.y-this.height/2,2)<=Math.pow(t.r,2))))}}]),t}(),DWE.Math.Circle=function(){function t(e,n,i){r(this,t),this.x=e,this.y=n,this.r=i}return i(t,[{key:"radius",get:function(){return this.r}}]),t}()},function(t,e,n){"use strict";DWE.getMousePosition=function(t,e){var n=void 0,i=void 0;if(t.changedTouches){var r=t.changedTouches[0];r&&(t.pageX=r.pageX,t.pageY=r.pageY)}return t.pageX||t.pageY?(n=t.pageX,i=t.pageY):(n=t.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,i=t.clientY+document.body.scrollTop+document.documentElement.scrollTop),n-=e.offsetLeft,i-=e.offsetTop,new DWE.Math.Vector2(n,i)}},function(t,e,n){"use strict";DWE.Keyboard={};var i={},r={},o={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,pausebreak:19,capslock:20,escape:27,pgup:33,pgdown:34,end:35,home:36,left:37,up:38,right:39,down:40,insert:45,delete:46,"left-window":91,"right-window":92,select:93,numpad0:96,numpad1:97,numpad2:98,numpad3:99,numpad4:100,numpad5:101,numpad6:102,numpad7:103,numpad8:104,numpad9:105,multiply:106,add:107,subtract:109,decimal:110,divide:111,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,numlock:144,scrolllock:145,"semi-colon":186,equals:187,comma:188,dash:189,period:190,fwdslash:191,grave:192,"open-bracket":219,bkslash:220,"close-braket":221,"single-quote":222};function a(t){return null!=i[t]&&i[t]}function s(t){return null!=r[t]&&r[t]}DWE.Keyboard.toggleKey=function(t,e){var n=null;for(var r in o){if(t===o[r]){n=r;break}}n||(n=String.fromCharCode(t).toLowerCase()),i[n]=!0===e},DWE.Keyboard.keyDown=function(t){var e;window.event?e=window.event.keyCode:t&&(e=t.which),DWE.Keyboard.toggleKey(e,!0)},DWE.Keyboard.keyUp=function(t){var e;window.event?e=window.event.keyCode:t&&(e=t.which),DWE.Keyboard.toggleKey(e,!1)},DWE.Keyboard.isDown=function(t){return a(t)&&s(t)},DWE.Keyboard.isUp=function(t){return!DWE.Keyboard.isDown(t)},DWE.Keyboard.isPressed=function(t){return!0===a(t)&&!1===s(t)},DWE.Keyboard.nextIteration=function(){for(var t in r={},i)!0===i[t]&&(r[t]=!0)}},function(t,e,n){"use strict";var i=function(){function t(t,e){for(var n=0;n=400&&n(i.responseText)},i.open("GET",t,!0),i.responseType="text",i.send(null)})},DWE.File.loadJson=function(t){return new Promise(function(e,n){DWE.File.httpGET(t).then(function(t){var i;try{i=JSON.parse(t)}catch(t){return n(t)}e(i)},n)})}},function(t,e,n){"use strict";var i=function(){function t(t,e){for(var n=0;n=a.offset&&u.tile<=h&&a.draw(t,u.tile-1,u.x*this.tileWidth*this.scale+e.x+r.x+n.x,u.y*this.tileHeight*this.scale+e.y+r.y+n.y,this.tileWidth*this.scale,this.tileHeight*this.scale)}}}},{key:"collideLayer",value:function(t,e){if(!this.layers[e])return null;this.layers[e];return null}},{key:"setScale",value:function(t){this.scale=t}}]),t}()}]); \ No newline at end of file diff --git a/src/file.js b/src/file.js index 6b60832..8736123 100644 --- a/src/file.js +++ b/src/file.js @@ -1,28 +1,24 @@ DWE.File = {} -DWE.File.httpGET = function (url, xml) { +DWE.File.httpGET = function (url) { return new Promise(function (resolve, reject) { var xmlHttp = new XMLHttpRequest() xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { - resolve(xml === true ? xmlHttp.response : xmlHttp.responseText) + resolve(xmlHttp.responseText) } else if (xmlHttp.readyState == 4 && xmlHttp.status >= 400) { reject(xmlHttp.responseText) } } xmlHttp.open('GET', url, true) - xmlHttp.responseType = xml ? 'xml' : 'text' + xmlHttp.responseType = 'text' xmlHttp.send(null) }) } -DWE.File.loadXML = function (url) { - return DWE.File.httpGET(url, true) -} - DWE.File.loadJson = function (url) { return new Promise(function (resolve, reject) { var promise = DWE.File.httpGET(url) diff --git a/src/tiled.js b/src/tiled.js index cb2edbd..1956539 100644 --- a/src/tiled.js +++ b/src/tiled.js @@ -19,9 +19,9 @@ DWE.Tiled.Map = class { } done () { - if (this['onready']) { + if (this['onready']) this.onready.apply(this, [this]) - } + this.loaded = true } @@ -44,15 +44,19 @@ DWE.Tiled.Map = class { // Load map layers function loadMapLayers () { - let width = mapData.width - let height = mapData.height + var width = mapData.width + var height = mapData.height + for (let i in mapData.layers) { let layer = mapData.layers[i] + let lw = layer.width || width + let lh = layer.height || height let tiles = [] + if (layer.type != 'tilelayer' || !layer.visible) continue - for(let i = 0; i < width; i++) { - for(let j = 0; j < height; j++) { + for(let i = 0; i < lw; i++) { + for(let j = 0; j < lh; j++) { let value = layer.data[(j * width) + i] if (value == 0) continue @@ -84,25 +88,29 @@ DWE.Tiled.Map = class { var xtile = mapData.tilesets[index] var path = map.dir + '/' + xtile.source - DWE.File.loadXML(path).then(function (data) { + DWE.File.httpGET(path).then(function (data) { var parser = new DOMParser() var doc = parser.parseFromString(data, 'application/xml') var tilesets = doc.getElementsByTagName('tileset') - var dataf = {} + for (let i in tilesets) { let d = tilesets[i] if (!(d instanceof Element)) continue + let tw = parseInt(d.getAttribute('tilewidth')) let th = parseInt(d.getAttribute('tileheight')) let imgfile = d.getElementsByTagName('image')[0] + if (imgfile) { let img = new DWE.Image.TileMap(map.dir + '/' + imgfile.getAttribute('source'), tw, th) - img.onready = function () { - loadNextTileMap(index + 1) - } + img.offset = xtile.firstgid img.tileCount = parseInt(d.getAttribute('tilecount')) map.tileMaps.push(img) + + img.onready = function () { + loadNextTileMap(index + 1) + } } } }, function (e) { @@ -118,14 +126,17 @@ DWE.Tiled.Map = class { drawLayer (ctx, origin, viewport, name) { if (!this.layers[name]) return null - let layer = this.layers[name] + var layer = this.layers[name] + for (let i in this.tileMaps) { - let t = this.tileMaps[i] + let tileMap = this.tileMaps[i] + for (let j in layer.tiles) { let tile = layer.tiles[j] - let tcount = t.tileCount || t.tiles.length - if (tile.tile >= t.offset && tile.tile <= tcount) { - t.draw(ctx, tile.tile - 1, ((tile.x * this.tileWidth * this.scale) + origin.x + layer.x) + viewport.x, + let tcount = tileMap.tileCount || tileMap.tiles.length + + if (tile.tile >= tileMap.offset && tile.tile <= tcount) { + tileMap.draw(ctx, tile.tile - 1, ((tile.x * this.tileWidth * this.scale) + origin.x + layer.x) + viewport.x, ((tile.y * this.tileHeight * this.scale) + origin.y + layer.y) + viewport.y, this.tileWidth * this.scale, this.tileHeight * this.scale) } @@ -135,7 +146,7 @@ DWE.Tiled.Map = class { collideLayer (object, name) { if (!this.layers[name]) return null - let layer = this.layers[name] + var layer = this.layers[name] // TODO: Handle object collisions with map tiles return null }