|
1 | 1 | var Class = require('../../utils/Class'); |
2 | | -var MapData = require('./mapdata/MapData'); |
| 2 | +var Extend = require('../../utils/object/Extend'); |
3 | 3 | var LayerData = require('./mapdata/LayerData'); |
4 | 4 | var StaticTilemapLayer = require('./staticlayer/StaticTilemapLayer.js'); |
5 | 5 | var DynamicTilemapLayer = require('./dynamiclayer/DynamicTilemapLayer.js'); |
6 | 6 | var Tileset = require('./Tileset'); |
7 | 7 | var Formats = require('./Formats'); |
8 | 8 | var TilemapComponents = require('./components'); |
9 | 9 | var Tile = require('./Tile'); |
| 10 | +var Rotate = require('../../math/Rotate'); |
| 11 | +var DegToRad = require('../../math/DegToRad'); |
10 | 12 |
|
11 | 13 | var Tilemap = new Class({ |
12 | 14 |
|
@@ -133,6 +135,89 @@ var Tilemap = new Class({ |
133 | 135 | return dynamicLayer; |
134 | 136 | }, |
135 | 137 |
|
| 138 | + /** |
| 139 | + * Creates a Sprite for every object matching the given gid in the map data. All properties from |
| 140 | + * the map data objectgroup are copied into the `spriteConfig`, so you can use this as an easy |
| 141 | + * way to configure Sprite properties from within the map editor. For example giving an object a |
| 142 | + * property of alpha: 0.5 in the map editor will duplicate that when the Sprite is created. |
| 143 | + * |
| 144 | + * @param {string} name - The name of the object layer (from Tiled) to create Sprites from. |
| 145 | + * @param {number} id - Either the id (object), gid (tile object) or name (object or tile |
| 146 | + * object) from Tiled. |
| 147 | + * @param {object} spriteConfig - The config object to pass into the Sprite creator (i.e. |
| 148 | + * scene.make.sprite). |
| 149 | + * @param {Scene} [scene=the scene the map is within] - The Scene to create the Sprites within. |
| 150 | + * @return {array} An array of the Sprites that were created. |
| 151 | + */ |
| 152 | + createFromObjects: function (name, id, spriteConfig, scene) |
| 153 | + { |
| 154 | + if (spriteConfig === undefined) { spriteConfig = {}; } |
| 155 | + if (scene === undefined) { scene = this.scene; } |
| 156 | + |
| 157 | + if (!this.objects[name]) |
| 158 | + { |
| 159 | + console.warn('Cannot create from object. Invalid objectgroup name given: ' + name); |
| 160 | + return; |
| 161 | + } |
| 162 | + |
| 163 | + for (var i = 0; i < this.objects[name].length; i++) |
| 164 | + { |
| 165 | + var found = false; |
| 166 | + var obj = this.objects[name][i]; |
| 167 | + |
| 168 | + if (obj.gid !== undefined && typeof id === 'number' && obj.gid === id || |
| 169 | + obj.id !== undefined && typeof id === 'number' && obj.id === id || |
| 170 | + obj.name !== undefined && typeof id === 'string' && obj.name === id) |
| 171 | + { |
| 172 | + found = true; |
| 173 | + } |
| 174 | + |
| 175 | + if (found) |
| 176 | + { |
| 177 | + Extend(spriteConfig, obj.properties); |
| 178 | + |
| 179 | + spriteConfig.x = obj.x; |
| 180 | + spriteConfig.y = obj.y; |
| 181 | + |
| 182 | + var sprite = this.scene.make.sprite(spriteConfig); |
| 183 | + |
| 184 | + sprite.name = obj.name; |
| 185 | + |
| 186 | + if (obj.width) { sprite.displayWidth = obj.width; } |
| 187 | + if (obj.height) { sprite.displayHeight = obj.height; } |
| 188 | + |
| 189 | + // Origin is (0, 1) in Tiled, so shift it to match (0.5, 0.5) in Phaser |
| 190 | + spriteConfig.x = obj.x + sprite.displayWidth / 2; |
| 191 | + spriteConfig.y = obj.y - sprite.displayHeight / 2; |
| 192 | + |
| 193 | + // If the object is rotated, then perform an additional correction for the origin |
| 194 | + // changing from (0, 1) to (0.5, 0.5) |
| 195 | + if (obj.rotation) |
| 196 | + { |
| 197 | + var angle = DegToRad(obj.rotation); |
| 198 | + var offset = { |
| 199 | + x: sprite.displayWidth / 2, |
| 200 | + y: - sprite.displayHeight / 2 |
| 201 | + }; |
| 202 | + Rotate(offset, angle); |
| 203 | + |
| 204 | + sprite.rotation = angle; |
| 205 | + sprite.x += offset.x; |
| 206 | + sprite.y += offset.y; |
| 207 | + } |
| 208 | + |
| 209 | + if (obj.flippedHorizontal !== undefined || obj.flippedVertical !== undefined) |
| 210 | + { |
| 211 | + sprite.setFlip(obj.flippedHorizontal, obj.flippedVertical); |
| 212 | + } |
| 213 | + |
| 214 | + if (!obj.visible) { sprite.visible = false; } |
| 215 | + } |
| 216 | + } |
| 217 | + |
| 218 | + return sprite; |
| 219 | + }, |
| 220 | + |
136 | 221 | // Creates & selects |
137 | 222 | createStaticLayer: function (layerID, tileset, x, y) |
138 | 223 | { |
|
0 commit comments