89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
package tiles
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"image"
|
|
"log"
|
|
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
"gitlab.com/kbr4/9heroja/collision"
|
|
"gitlab.com/kbr4/9heroja/resources"
|
|
"gitlab.com/kbr4/9heroja/zombie"
|
|
)
|
|
|
|
var (
|
|
startingImage *ebiten.Image
|
|
)
|
|
|
|
type Starting struct {
|
|
X float64
|
|
Y float64
|
|
IsDead bool
|
|
}
|
|
|
|
func (s *Starting) DrawStarting(screen *ebiten.Image) {
|
|
op := &ebiten.DrawImageOptions{}
|
|
op.GeoM.Reset()
|
|
op.GeoM.Translate(s.X, s.Y)
|
|
op.GeoM.Scale(1, 1)
|
|
if s.IsDead {
|
|
op.ColorScale.Scale(1, 0, 0, 1)
|
|
}
|
|
screen.DrawImage(startingImage.SubImage(image.Rect(0, 0, resources.TileTileSize, resources.TileTileSize)).(*ebiten.Image), op)
|
|
}
|
|
|
|
func init() {
|
|
img, _, err := image.Decode(bytes.NewReader(resources.Starting_png))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
startingImage = ebiten.NewImageFromImage(img)
|
|
}
|
|
|
|
func NewStarting() *Starting {
|
|
starting := &Starting{}
|
|
starting.X = 550
|
|
starting.Y = 1000
|
|
return starting
|
|
}
|
|
|
|
func (s *Starting) CollisionShape() collision.Polygon {
|
|
if !s.IsDead {
|
|
return collision.Polygon{
|
|
Points: []collision.Point{
|
|
{X: s.X, Y: s.Y},
|
|
{X: s.X + resources.TileTileSize, Y: s.Y},
|
|
{X: s.X + resources.TileTileSize, Y: s.Y + resources.TileTileSize},
|
|
{X: s.X, Y: s.Y + resources.TileTileSize},
|
|
},
|
|
}
|
|
} else {
|
|
return collision.Polygon{
|
|
Points: []collision.Point{},
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *Starting) CollisionObjectType() collision.ObjectType {
|
|
return collision.Starting
|
|
}
|
|
|
|
func (s *Starting) HandleCollisionEvent(other collision.Collidable) {
|
|
coll := other.CollisionObjectType()
|
|
switch coll {
|
|
case collision.Zombie:
|
|
fmt.Println("Starting hit by zombie")
|
|
}
|
|
}
|
|
|
|
func (s *Starting) SpawnZombie(whereToGoX, whereToGoY float64) *zombie.Zombie {
|
|
z := zombie.NewZombie()
|
|
z.X = s.X
|
|
z.Y = s.Y
|
|
z.WhereToGoX = whereToGoX
|
|
z.WhereToGoY = whereToGoY
|
|
z.Walk()
|
|
return z
|
|
}
|