From 58ce169cc29be0791d47ec7e8f2ceb98572588a5 Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Sun, 19 Nov 2023 14:19:34 +0100 Subject: [PATCH] Walking --- hero/hero.go | 61 +++++++++++++++++++++++++++++++++++++++++++-- main.go | 6 +++-- resources/hero.png | Bin 13045 -> 12733 bytes terrain/terrain.go | 21 +++++++++++++--- 4 files changed, 81 insertions(+), 7 deletions(-) diff --git a/hero/hero.go b/hero/hero.go index ff35321..f0b2cb5 100644 --- a/hero/hero.go +++ b/hero/hero.go @@ -6,16 +6,39 @@ import ( "gitlab.com/kbr4/9heroja/resources" "image" "log" + "time" ) +const WalkSpeedMs = 400 + var ( - heroImage *ebiten.Image + heroImage *ebiten.Image + walkTicker *time.Ticker ) type Hero struct { + step int +} + +type spritePosition struct { + x int + y int } func (h *Hero) DrawHero(screen *ebiten.Image) { + + positions := []spritePosition{ + {0, 166}, + {33, 166}, + {66, 166}, + {99, 166}, + {132, 166}, + {99, 166}, + {66, 166}, + {33, 166}, + } + p := positions[h.step%5] + op := &ebiten.DrawImageOptions{} screenWidth := screen.Bounds().Max.X screenHeight := screen.Bounds().Max.Y @@ -25,7 +48,8 @@ func (h *Hero) DrawHero(screen *ebiten.Image) { op.GeoM.Translate(float64(screenWidth/2-16), float64(screenHeight/2-16)) //op.GeoM.Translate(float64(i*tileSize-floorMod(g.cameraX, tileSize)), // float64((ny-1)*tileSize-floorMod(g.cameraY, tileSize))) - screen.DrawImage(heroImage.SubImage(image.Rect(67, 167, 66+resources.HeroTileSize, 166+resources.HeroTileSize)).(*ebiten.Image), op) + + screen.DrawImage(heroImage.SubImage(image.Rect(p.x+1, p.y, p.x+resources.HeroTileSize, p.y+resources.HeroTileSize)).(*ebiten.Image), op) } func init() { @@ -34,4 +58,37 @@ func init() { log.Fatal(err) } heroImage = ebiten.NewImageFromImage(img) + walkTicker = time.NewTicker(WalkSpeedMs * time.Millisecond) + // go routine that runs on every tick and increases step + +} + +func NewHero() *Hero { + hero := &Hero{ + step: 0, + } + + go func() { + for { + select { + case <-walkTicker.C: + hero.step++ + if hero.step > 7 { + hero.step = 0 + } + } + } + }() + return hero +} + +func (h *Hero) Walk() { + + walkTicker.Reset(WalkSpeedMs * time.Millisecond) + +} + +func (h *Hero) Stop() { + h.step = 2 + walkTicker.Stop() } diff --git a/main.go b/main.go index 3f86583..9e0b8b5 100644 --- a/main.go +++ b/main.go @@ -45,6 +45,7 @@ type Game struct { } func (g *Game) Update() error { + g.terrain.GoDown() return nil } @@ -63,8 +64,9 @@ var GameInstance *Game func init() { GameInstance = &Game{} - GameInstance.hero = &hero.Hero{} - GameInstance.terrain = &terrain.Terrain{} + GameInstance.hero = hero.NewHero() + GameInstance.terrain = terrain.NewTerrain() + GameInstance.hero.Walk() } func main() { diff --git a/resources/hero.png b/resources/hero.png index 67e12b878edd067ad086dcf9ebb5b28c7acb7856..2237754b3202921cee8e6cf461ad66949a5d94af 100644 GIT binary patch delta 9049 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 delta 9537 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 VD63s}>i?VQq^hK)SfPLk{vSh|-U|Q# diff --git a/terrain/terrain.go b/terrain/terrain.go index 077acbf..6c1c74c 100644 --- a/terrain/terrain.go +++ b/terrain/terrain.go @@ -13,17 +13,21 @@ var ( ) type Terrain struct { + positionX float64 + positionY float64 } 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 := 0; i <= screenWidth/64; i++ { - for j := 0; j <= screenHeight/64; j++ { + 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), float64(j*64)) + 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) } @@ -37,3 +41,14 @@ func init() { } grassImage = ebiten.NewImageFromImage(img) } + +func NewTerrain() *Terrain { + return &Terrain{ + positionX: 0, + positionY: 0, + } +} + +func (t *Terrain) GoDown() { + t.positionY += 1 +}