aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2023-09-19 06:47:50 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2023-09-19 06:48:50 +0200
commit0305cd01f8438d2c23033958120e61dff4fd2b1b (patch)
tree41beb17a71d881f162aaddcd9d721cd39aac6df3
parentdc17461910194815ff9b329f386f17d6218a5853 (diff)
fix: Display selection rect above all entities
-rw-r--r--README.md2
-rw-r--r--entity.go7
-rw-r--r--image.go8
-rw-r--r--main.go13
-rw-r--r--selection.go14
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)
+ }
+ }
+}