* read the Image Layer Data * @ignore
(map, data, z)
| 42 | * @ignore |
| 43 | */ |
| 44 | function readImageLayer(map, data, z) { |
| 45 | // resolve embedded JSON image data if present |
| 46 | resolveEmbeddedImage(data); |
| 47 | |
| 48 | // Normalize properties |
| 49 | applyTMXProperties(data.properties, data); |
| 50 | |
| 51 | // derive repeat mode: legacy custom "repeat" property takes precedence |
| 52 | // (for backward compatibility), then Tiled 1.8+ native repeatx/repeaty |
| 53 | const repX = data.repeatx === true || data.repeatx === "1"; |
| 54 | const repY = data.repeaty === true || data.repeaty === "1"; |
| 55 | let repeat = data.properties?.repeat; |
| 56 | if (typeof repeat === "undefined" && (repX || repY)) { |
| 57 | if (repX && repY) { |
| 58 | repeat = "repeat"; |
| 59 | } else if (repX) { |
| 60 | repeat = "repeat-x"; |
| 61 | } else { |
| 62 | repeat = "repeat-y"; |
| 63 | } |
| 64 | } |
| 65 | |
| 66 | // Tiled 1.8+ parallax origin (map-level, baked into layer offset) |
| 67 | const pox = +(map.data.parallaxoriginx ?? 0); |
| 68 | const poy = +(map.data.parallaxoriginy ?? 0); |
| 69 | const ratioX = +(data.parallaxx ?? 1.0); |
| 70 | const ratioY = +(data.parallaxy ?? 1.0); |
| 71 | const ox = +(data.offsetx ?? data.x ?? 0) + pox * ratioX; |
| 72 | const oy = +(data.offsety ?? data.y ?? 0) + poy * ratioY; |
| 73 | |
| 74 | // create the layer |
| 75 | const imageLayer = pool.pull( |
| 76 | "ImageLayer", |
| 77 | ox, |
| 78 | oy, |
| 79 | Object.assign( |
| 80 | { |
| 81 | name: data.name, |
| 82 | image: data.image, |
| 83 | ratio: vector2dPool.get(ratioX, ratioY), |
| 84 | tint: parseTintColor(data.tintcolor), |
| 85 | z: z, |
| 86 | repeat: repeat, |
| 87 | }, |
| 88 | data.properties, |
| 89 | ), |
| 90 | ); |
| 91 | |
| 92 | // set some additional flags |
| 93 | const visible = data.visible ?? true; |
| 94 | imageLayer.setOpacity(visible ? +data.opacity : 0); |
| 95 | |
| 96 | // layer blend mode (Tiled 1.12+) |
| 97 | imageLayer.blendMode = tiledBlendMode(data.mode); |
| 98 | |
| 99 | return imageLayer; |
| 100 | } |
| 101 |
no test coverage detected