From 0305cd01f8438d2c23033958120e61dff4fd2b1b Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Tue, 19 Sep 2023 06:47:50 +0200 Subject: fix: Display selection rect above all entities --- README.md | 2 ++ entity.go | 7 +------ image.go | 8 -------- main.go | 13 ++++++++----- selection.go | 14 ++++++++++++-- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index ab0c271..de8669a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +## TODO + ```go func (g \*Game) updatePlacingWall(cursor Point) { if inpututil.IsMouseButtonJustReleased(ebiten.MouseButtonLeft) { diff --git a/entity.go b/entity.go index 6066772..75c1604 100644 --- a/entity.go +++ b/entity.go @@ -29,11 +29,6 @@ func Draw(screen *ebiten.Image, e *Entity) { if e.Image.IsEnabled && e.Position.IsEnabled { op := &ebiten.DrawImageOptions{} op.GeoM.Translate(float64(e.Position.Value.X), float64(e.Position.Value.Y)) - if e.Selection.IsEnabled && e.Selection.Value.IsSelected { - op.GeoM.Translate(-10, -10) - screen.DrawImage(e.Selection.Value.SelectedImage, op) - } else { - screen.DrawImage(e.Image.Value, op) - } + screen.DrawImage(e.Image.Value, op) } } diff --git a/image.go b/image.go index c95dd94..0823576 100644 --- a/image.go +++ b/image.go @@ -11,11 +11,3 @@ func NewColorImage(size Point, color color.Color) *ebiten.Image { image.Fill(color) return image } - -func NewHaloImage(sourceImage *ebiten.Image, color color.Color, width int) *ebiten.Image { - image := NewColorImage(sourceImage.Bounds().Size().Add(Point{2 * width, 2 * width}), color) - op := &ebiten.DrawImageOptions{} - op.GeoM.Translate(float64(width), float64(width)) - image.DrawImage(sourceImage, op) - return image -} diff --git a/main.go b/main.go index 900429c..f2b2855 100644 --- a/main.go +++ b/main.go @@ -91,6 +91,11 @@ func (g *Game) Draw(screen *ebiten.Image) { screen.Fill(soilColor) for _, e := range g.Entities { Draw(screen, e) + } + for _, e := range g.Entities { + DrawSelection(screen, e) + } + for _, e := range g.Entities { DrawMove(screen, e) } if g.Selection.IsActive { @@ -109,26 +114,24 @@ func main() { ebiten.SetWindowTitle("Age of Empire") game := &Game{} ironImage := NewColorImage(Point{100, 100}, color.RGBA{0x80, 0x80, 0x80, 0xff}) - ironSelectedImage := NewHaloImage(ironImage, color.RGBA{0xff, 0xff, 0xff, 0xff}, 10) ironMine := Entity{ Position: C(Point{1000, 1000}), Image: C(ironImage), - Selection: C(Selection{IsSelected: false, SelectedImage: ironSelectedImage}), + Selection: C(Selection{IsSelected: false}), } game.Entities = append(game.Entities, &ironMine) personImage := NewColorImage(Point{100, 100}, color.RGBA{0xff, 0xff, 0xff, 0xff}) - personSelectedImage := NewHaloImage(personImage, color.RGBA{0xff, 0x00, 0x00, 0xff}, 10) person1 := Entity{ Position: C(Point{2000, 2000}), Image: C(personImage), - Selection: C(Selection{IsSelected: false, SelectedImage: personSelectedImage}), + Selection: C(Selection{IsSelected: false}), Move: C(Move{IsActive: false}), } game.Entities = append(game.Entities, &person1) person2 := Entity{ Position: C(Point{2200, 2200}), Image: C(personImage), - Selection: C(Selection{IsSelected: false, SelectedImage: personSelectedImage}), + Selection: C(Selection{IsSelected: false}), Move: C(Move{IsActive: false}), } game.Entities = append(game.Entities, &person2) diff --git a/selection.go b/selection.go index 9b6dbb2..730570a 100644 --- a/selection.go +++ b/selection.go @@ -1,13 +1,15 @@ package main import ( + "image/color" + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/vector" "golang.org/x/exp/slog" ) type Selection struct { - IsSelected bool - SelectedImage *ebiten.Image + IsSelected bool } func (e *Entity) SelectMultiple(cursor Point, selection GlobalSelection) { @@ -32,3 +34,11 @@ func (e *Entity) SelectSingle(cursor Point, canBeSelected bool) bool { } return false } + +func DrawSelection(screen *ebiten.Image, e *Entity) { + if e.Image.IsEnabled && e.Position.IsEnabled && e.Selection.IsEnabled { + if e.Selection.Value.IsSelected { + vector.StrokeRect(screen, float32(e.Position.Value.X-5), float32(e.Position.Value.Y-5), 110, 110, 10, color.RGBA{0xff, 0x00, 0x00, 0xff}, false) + } + } +} -- cgit v1.3