1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package main
import (
"image/color"
"github.com/hajimehoshi/ebiten/v2"
)
type Person struct {
size Point
Position Point
IsSelected bool
move Move
image *ebiten.Image
selectedImage *ebiten.Image
}
func NewPerson(position Point) Person {
image := ebiten.NewImage(100, 100)
image.Fill(color.RGBA{0xff, 0xff, 0xff, 0xff})
selectedImage := ebiten.NewImage(120, 120)
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(10, 10)
selectedImage.Fill(color.RGBA{0xff, 0x00, 0x00, 0xff})
selectedImage.DrawImage(image, op)
return Person{Position: position, size: Point{100, 100}, image: image, selectedImage: selectedImage}
}
func (p Person) Image() *ebiten.Image {
if p.IsSelected {
return p.selectedImage
}
return p.image
}
func (p Person) CollisionBounds() Rectangle {
return Rectangle{
p.Position.Sub(p.size.Div(2)),
p.Position.Add(p.size.Div(2)),
}
}
func (p *Person) MoveTo(destination Point, blocked map[Point]bool) {
p.move = NewMove(p.Position, destination, blocked)
}
func (p *Person) Update() {
p.Position = p.move.Update(p.Position, 10)
}
|