Skip to content

Commit bd22e4c

Browse files
committed
Introduce tileFlipper interface
this allows custom flipping instead of always using imaging
1 parent cc766e7 commit bd22e4c

File tree

2 files changed

+45
-6
lines changed

2 files changed

+45
-6
lines changed

flipper.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package tmx
2+
3+
import (
4+
"image"
5+
6+
"github.com/disintegration/imaging"
7+
)
8+
9+
//TileFlipper allows a custom implementation of
10+
//flipping techniques
11+
type TileFlipper interface {
12+
FlipHorizontal(image.Image) image.Image
13+
FlipVertical(image.Image) image.Image
14+
FlipDiagonal(image.Image) image.Image
15+
}
16+
17+
type imagingFlipper struct {
18+
}
19+
20+
func (i imagingFlipper) FlipHorizontal(tile image.Image) image.Image {
21+
return imaging.FlipH(tile)
22+
}
23+
func (i imagingFlipper) FlipVertical(tile image.Image) image.Image {
24+
return imaging.FlipV(tile)
25+
}
26+
27+
func (i imagingFlipper) FlipDiagonal(tile image.Image) image.Image {
28+
return imaging.FlipH(imaging.Rotate270(tile))
29+
}

renderer.go

+16-6
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package tmx
33
import (
44
"image"
55
"path/filepath"
6-
7-
"github.com/disintegration/imaging"
86
)
97

108
//Renderer renders
@@ -17,6 +15,7 @@ type fullRenderer struct {
1715
canvas Canvas
1816
m Map
1917
loader ResourceLocator
18+
tf TileFlipper
2019
}
2120

2221
//NewRenderer lets you draw the map on a custom canvas
@@ -27,7 +26,18 @@ func NewRenderer(m Map, c Canvas) Renderer {
2726

2827
//NewRendererWithResourceLocator return a new renderer
2928
func NewRendererWithResourceLocator(m Map, c Canvas, locator ResourceLocator) Renderer {
30-
return &fullRenderer{m: m, canvas: c, loader: locator}
29+
return NewRendererWithResourceLocatorAndTileFlipper(m, c, locator, &imagingFlipper{})
30+
}
31+
32+
//NewRendererWithResourceLocatorAndTileFlipper allows you to specify
33+
//a custom canvas, locator and TileFlipper
34+
func NewRendererWithResourceLocatorAndTileFlipper(
35+
m Map,
36+
c Canvas,
37+
locator ResourceLocator,
38+
tf TileFlipper,
39+
) Renderer {
40+
return &fullRenderer{m: m, canvas: c, loader: locator, tf: tf}
3141
}
3242

3343
//Render will generate a preview image of the tmx map provided
@@ -90,15 +100,15 @@ func (t *tilemap) renderLayer(r fullRenderer) error {
90100
tile := ptileset.SubImage(tileBounds)
91101

92102
if dt.DiagonalFlip {
93-
tile = imaging.FlipH(imaging.Rotate270(tile))
103+
tile = r.tf.FlipDiagonal(tile)
94104
}
95105

96106
if dt.HorizontalFlip {
97-
tile = imaging.FlipH(tile)
107+
tile = r.tf.FlipHorizontal(tile)
98108
}
99109

100110
if dt.VerticalFlip {
101-
tile = imaging.FlipV(tile)
111+
tile = r.tf.FlipVertical(tile)
102112
}
103113

104114
x := (i % l.Width) * t.subject.TileWidth

0 commit comments

Comments
 (0)