Skip to content

Commit f2c9015

Browse files
authored
Add NewRendererWithFileSystem constructor (#68)
1 parent 64f96c0 commit f2c9015

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

render/renderer.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"image/jpeg"
3232
"image/png"
3333
"io"
34+
"io/fs"
3435
"os"
3536

3637
"github.com/disintegration/imaging"
@@ -58,11 +59,17 @@ type Renderer struct {
5859
Result *image.NRGBA // The image result after rendering using the Render functions.
5960
tileCache map[uint32]image.Image
6061
engine RendererEngine
62+
fs fs.FS
6163
}
6264

6365
// NewRenderer creates new rendering engine instance.
6466
func NewRenderer(m *tiled.Map) (*Renderer, error) {
65-
r := &Renderer{m: m, tileCache: make(map[uint32]image.Image)}
67+
return NewRendererWithFileSystem(m, nil)
68+
}
69+
70+
// NewRendererWithFileSystem creates new rendering engine instance with a custom file system.
71+
func NewRendererWithFileSystem(m *tiled.Map, fs fs.FS) (*Renderer, error) {
72+
r := &Renderer{m: m, tileCache: make(map[uint32]image.Image), fs: fs}
6673
if r.m.Orientation == "orthogonal" {
6774
r.engine = &OrthogonalRendererEngine{}
6875
} else {
@@ -75,6 +82,13 @@ func NewRenderer(m *tiled.Map) (*Renderer, error) {
7582
return r, nil
7683
}
7784

85+
func (r *Renderer) open(f string) (io.ReadCloser, error) {
86+
if r.fs != nil {
87+
return r.fs.Open(f)
88+
}
89+
return os.Open(f)
90+
}
91+
7892
func (r *Renderer) getTileImage(tile *tiled.LayerTile) (image.Image, error) {
7993
timg, ok := r.tileCache[tile.Tileset.FirstGID+tile.ID]
8094
if ok {
@@ -84,7 +98,7 @@ func (r *Renderer) getTileImage(tile *tiled.LayerTile) (image.Image, error) {
8498
if tile.Tileset.Image == nil {
8599
for i := 0; i < len(tile.Tileset.Tiles); i++ {
86100
if tile.Tileset.Tiles[i].ID == tile.ID {
87-
sf, err := os.Open(tile.Tileset.GetFileFullPath(tile.Tileset.Tiles[i].Image.Source))
101+
sf, err := r.open(tile.Tileset.GetFileFullPath(tile.Tileset.Tiles[i].Image.Source))
88102
if err != nil {
89103
return nil, err
90104
}
@@ -97,7 +111,7 @@ func (r *Renderer) getTileImage(tile *tiled.LayerTile) (image.Image, error) {
97111
}
98112
}
99113
} else {
100-
sf, err := os.Open(tile.Tileset.GetFileFullPath(tile.Tileset.Image.Source))
114+
sf, err := r.open(tile.Tileset.GetFileFullPath(tile.Tileset.Image.Source))
101115
if err != nil {
102116
return nil, err
103117
}

0 commit comments

Comments
 (0)