diff options
| -rw-r--r-- | geometry.go | 14 | ||||
| -rw-r--r-- | main.go | 58 | ||||
| -rw-r--r-- | person.go | 45 |
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 +} @@ -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}} +} |
