package tiles import ( "bytes" "fmt" "image" "log" "github.com/hajimehoshi/ebiten/v2" "gitlab.com/kbr4/9heroja/collision" "gitlab.com/kbr4/9heroja/resources" ) var ( destinationImage *ebiten.Image ) type Ending struct { X float64 Y float64 IsDead bool } func (e *Ending) DrawEnding(screen *ebiten.Image) { // set movement positions to be hashmap of sprite positions for each direction op := &ebiten.DrawImageOptions{} op.GeoM.Reset() op.GeoM.Translate(e.X, e.Y) // Center the sprite on the tile op.GeoM.Scale(1, 1) // Apply red tint if the zombie is dead if e.IsDead { op.ColorScale.Scale(1, 0, 0, 1) // Scale the red channel up, green and blue down. } screen.DrawImage(destinationImage.SubImage(image.Rect(0, 0, resources.TileTileSize, resources.TileTileSize)).(*ebiten.Image), op) } func init() { img, _, err := image.Decode(bytes.NewReader(resources.Ending_png)) if err != nil { log.Fatal(err) } destinationImage = ebiten.NewImageFromImage(img) } func NewEnding() *Ending { ending := &Ending{} ending.X = 45 ending.Y = 75 return ending } func (e *Ending) CollisionShape() collision.Polygon { if !e.IsDead { return collision.Polygon{ Points: []collision.Point{ {X: e.X, Y: e.Y}, {X: e.X + resources.TileTileSize, Y: e.Y}, {X: e.X + resources.TileTileSize, Y: e.Y + resources.TileTileSize}, {X: e.X, Y: e.Y + resources.TileTileSize}, }, } } else { return collision.Polygon{ Points: []collision.Point{}, } } } func (e *Ending) CollisionObjectType() collision.ObjectType { return collision.Ending } func (e *Ending) HandleCollisionEvent(other collision.Collidable) { coll := other.CollisionObjectType() switch coll { case collision.Zombie: fmt.Println("Ending hit by zombie") } }