package terrain import ( "bytes" "github.com/hajimehoshi/ebiten/v2" "gitlab.com/kbr4/9heroja/configuration" "gitlab.com/kbr4/9heroja/resources" "image" "log" "slices" ) var ( grassImage *ebiten.Image ) type Terrain struct { positionX float64 positionY float64 direction configuration.Direction } func (t *Terrain) DrawTerrain(screen *ebiten.Image) { screenWidth := screen.Bounds().Max.X screenHeight := screen.Bounds().Max.Y offsetX := int(t.positionX) % 64 offsetY := int(t.positionY) % 64 op := &ebiten.DrawImageOptions{} for i := -1; i <= screenWidth/64+1; i++ { for j := -1; j <= screenHeight/64+1; j++ { // ground op.GeoM.Reset() op.GeoM.Translate(float64(i*64+offsetX), float64(j*64+offsetY)) screen.DrawImage(grassImage.SubImage(image.Rect(32, 160, 32+64, 160+64)).(*ebiten.Image), op) } } } func init() { img, _, err := image.Decode(bytes.NewReader(resources.Grass_png)) if err != nil { log.Fatal(err) } grassImage = ebiten.NewImageFromImage(img) } func NewTerrain() *Terrain { return &Terrain{ positionX: 0, positionY: 0, } } func (t *Terrain) Move() { if slices.Contains([]configuration.Direction{configuration.North, configuration.NorthEast, configuration.NorthWest}, t.direction) { t.positionY += 1 } if slices.Contains([]configuration.Direction{configuration.South, configuration.SouthEast, configuration.SouthWest}, t.direction) { t.positionY -= 1 } if slices.Contains([]configuration.Direction{configuration.East, configuration.NorthEast, configuration.SouthEast}, t.direction) { t.positionX -= 1 } if slices.Contains([]configuration.Direction{configuration.West, configuration.NorthWest, configuration.SouthWest}, t.direction) { t.positionX += 1 } } func (t *Terrain) ChangeDirection(direction configuration.Direction) { if direction != configuration.PreviouslyHeld { t.direction = direction } }