xxxxxxxxxx
93
class TileMapInterface extends Resource
{
constructor(name, fullPath, atlases)
{
super(name);
this.Data = loadJSON(fullPath);
this.Atlases = atlases;
this.Dirty = true;
}
Setup()
{
this.TileW = tileMapData.tilewidth;
this.TileH = tileMapData.tileheight;
this.LayerCols = tileMapData.width;
this.LayerRows = tileMapData.height;
this.BuildLayers(tileMapData);
}
BuildLayers(tileMapData)
{
let layers = [];
for (const rawLayerObject of tileMapData.layers)
{
let indexImage = this.CreateLayerIndexImage(rawLayerObject);
let layer = new TileMapLayer(rawLayerObject, indexImage);
layers.push(layer);
}
this.Layers = layers;
}
CreateLayerIndexImage(rawLayerObject)
{
let indexImage = createImage(rawLayerObject.width, rawLayerObject.height);
indexImage.loadPixels();
let pixels = indexImage.pixels;
// Remember, when you read an empty tile, write a pixel
// that the shader will interpret as a sentinel value
let indexArray = rawLayerObject.data;
for (let i = 0; i < indexArray.length; ++i)
{
let index = indexArray[i] - 1;
let r, g, b, a;
if (index <= 0)
{
r = 255;
g = 255;
b = 0;
a = 255;
}
else
{
r = (index >> 16) & 255;
g = (index >> 8) & 255;
b = index & 255;
a = 255;
}
let p = i * 4;
pixels[p + 0] = r;
pixels[p + 1] = g;
pixels[p + 2] = b;
pixels[p + 3] = a;
}
indexImage.updatePixels();
return indexImage;
}
}
class TileMapLayer
{
constructor(rawLayerObject, indexImage, atlas)
{
this.Name = rawLayerObject.name;
this.IndexArray = rawLayerObject.data;
this.IndexImage = indexImage;
this.Atlas = atlas;
}
}