aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--geometry.go14
-rw-r--r--main.go58
-rw-r--r--person.go45
3 files changed, 59 insertions, 58 deletions
diff --git a/geometry.go b/geometry.go
new file mode 100644
index 0000000..1398f00
--- /dev/null
+++ b/geometry.go
@@ -0,0 +1,14 @@
+package main
+
+type Vec struct {
+ X, Y float64
+}
+
+type Rectangle struct {
+ leftTop Vec
+ rightBottom Vec
+}
+
+func (r Rectangle) Contains(point Vec) bool {
+ return point.X > r.leftTop.X && point.X < r.rightBottom.X && point.Y > r.leftTop.Y && point.Y < r.rightBottom.Y
+}
diff --git a/main.go b/main.go
index 6a4799a..1de0da6 100644
--- a/main.go
+++ b/main.go
@@ -8,34 +8,6 @@ import (
"github.com/hajimehoshi/ebiten/v2/inpututil"
)
-type Vec struct {
- X, Y float64
-}
-
-type Rectangle struct {
- leftTop Vec
- rightBottom Vec
-}
-
-func NewRectangle(leftTop Vec, rightBottom Vec) Rectangle {
- return Rectangle{leftTop: leftTop, rightBottom: rightBottom}
-}
-
-func (r Rectangle) Contains(point Vec) bool {
- return point.X > r.leftTop.X && point.X < r.rightBottom.X && point.Y > r.leftTop.Y && point.Y < r.rightBottom.Y
-}
-
-type Person struct {
- size Vec
- Position Vec
- IsSelected bool
- image *ebiten.Image
- selectedImage *ebiten.Image
-}
-
-var personColor = color.RGBA{0xff, 0xff, 0xff, 0xff}
-var haloColor = color.RGBA{0xff, 0x00, 0x00, 0xff}
-
type Tile struct {
*ebiten.Image
Size Vec
@@ -51,36 +23,6 @@ func NewTile(size Vec, position Vec, color color.Color) Tile {
var soilColor = color.RGBA{0x60, 0x40, 0x20, 0xff}
var soil = NewTile(Vec{X: 280, Y: 200}, Vec{X: 20, Y: 20}, soilColor)
-func NewPerson(position Vec) Person {
- image := ebiten.NewImage(10, 10)
- image.Fill(personColor)
- selectedImage := ebiten.NewImage(12, 12)
- op := &ebiten.DrawImageOptions{}
- op.GeoM.Translate(1, 1)
- selectedImage.Fill(haloColor)
- selectedImage.DrawImage(image, op)
- return Person{Position: position, size: Vec{X: 10, Y: 10}, image: image, selectedImage: selectedImage}
-}
-
-func (p Person) Image() *ebiten.Image {
- if p.IsSelected {
- return p.selectedImage
- }
- return p.image
-}
-
-func (p Person) Size() Vec {
- if p.IsSelected {
- return Vec{X: p.size.X + 2, Y: p.size.Y + 2}
- } else {
- return p.size
- }
-}
-
-func (p *Person) Bounds() Rectangle {
- return NewRectangle(Vec{X: p.Position.X - p.size.X/2, Y: p.Position.Y - p.size.Y/2}, Vec{X: p.Position.X + p.size.X/2, Y: p.Position.Y + p.size.Y/2})
-}
-
func GetDrawImageOptions(size Vec, position Vec) *ebiten.DrawImageOptions {
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(position.X-size.X/2, position.Y-size.Y/2)
diff --git a/person.go b/person.go
new file mode 100644
index 0000000..777b782
--- /dev/null
+++ b/person.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "image/color"
+
+ "github.com/hajimehoshi/ebiten/v2"
+)
+
+type Person struct {
+ size Vec
+ Position Vec
+ IsSelected bool
+ image *ebiten.Image
+ selectedImage *ebiten.Image
+}
+
+func NewPerson(position Vec) Person {
+ image := ebiten.NewImage(10, 10)
+ image.Fill(color.RGBA{0xff, 0xff, 0xff, 0xff})
+ selectedImage := ebiten.NewImage(12, 12)
+ op := &ebiten.DrawImageOptions{}
+ op.GeoM.Translate(1, 1)
+ selectedImage.Fill(color.RGBA{0xff, 0x00, 0x00, 0xff})
+ selectedImage.DrawImage(image, op)
+ return Person{Position: position, size: Vec{X: 10, Y: 10}, image: image, selectedImage: selectedImage}
+}
+
+func (p Person) Image() *ebiten.Image {
+ if p.IsSelected {
+ return p.selectedImage
+ }
+ return p.image
+}
+
+func (p Person) Size() Vec {
+ if p.IsSelected {
+ return Vec{X: p.size.X + 2, Y: p.size.Y + 2}
+ } else {
+ return p.size
+ }
+}
+
+func (p Person) Bounds() Rectangle {
+ return Rectangle{Vec{p.Position.X - p.size.X/2, p.Position.Y - p.size.Y/2}, Vec{p.Position.X + p.size.X/2, p.Position.Y + p.size.Y/2}}
+}