From 8934688511850b3be335ef464d0d76f130fcdd5c Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Sun, 19 Nov 2023 08:06:40 +0100 Subject: [PATCH] Refactor --- hero/hero.go | 37 +++++++++++++++++++++ main.go | 74 +++++++----------------------------------- resources/constants.go | 3 ++ terrain/terrain.go | 39 ++++++++++++++++++++++ 4 files changed, 90 insertions(+), 63 deletions(-) create mode 100644 hero/hero.go create mode 100644 resources/constants.go create mode 100644 terrain/terrain.go diff --git a/hero/hero.go b/hero/hero.go new file mode 100644 index 0000000..ff35321 --- /dev/null +++ b/hero/hero.go @@ -0,0 +1,37 @@ +package hero + +import ( + "bytes" + "github.com/hajimehoshi/ebiten/v2" + "gitlab.com/kbr4/9heroja/resources" + "image" + "log" +) + +var ( + heroImage *ebiten.Image +) + +type Hero struct { +} + +func (h *Hero) DrawHero(screen *ebiten.Image) { + op := &ebiten.DrawImageOptions{} + screenWidth := screen.Bounds().Max.X + screenHeight := screen.Bounds().Max.Y + + // ground + op.GeoM.Reset() + 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) +} + +func init() { + img, _, err := image.Decode(bytes.NewReader(resources.Hero_png)) + if err != nil { + log.Fatal(err) + } + heroImage = ebiten.NewImageFromImage(img) +} diff --git a/main.go b/main.go index 692a692..3f86583 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,9 @@ package main import ( - "bytes" "github.com/hajimehoshi/ebiten/v2" - "github.com/hajimehoshi/ebiten/v2/audio" - "gitlab.com/kbr4/9heroja/resources" - "image" + "gitlab.com/kbr4/9heroja/hero" + "gitlab.com/kbr4/9heroja/terrain" _ "image/png" "log" ) @@ -23,11 +21,6 @@ const ( pipeGapY = 5 ) -var ( - heroImage *ebiten.Image - grassImage *ebiten.Image -) - func floorDiv(x, y int) int { d := x / y if d*y == x || x >= 0 { @@ -47,21 +40,8 @@ type Game struct { y16 int vy16 int - // Camera - cameraX int - cameraY int - - // Pipes - pipeTileYs []int - - gameoverCount int - - touchIDs []ebiten.TouchID - gamepadIDs []ebiten.GamepadID - - audioContext *audio.Context - jumpPlayer *audio.Player - hitPlayer *audio.Player + hero *hero.Hero + terrain *terrain.Terrain } func (g *Game) Update() error { @@ -69,8 +49,8 @@ func (g *Game) Update() error { } func (g *Game) Draw(screen *ebiten.Image) { - g.drawGrass(screen) - g.drawHero(screen) + g.terrain.DrawTerrain(screen) + g.hero.DrawHero(screen) } func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) { @@ -78,52 +58,20 @@ func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeigh return int(float64(outsideWidth) * s), int(float64(outsideHeight) * s) } -func (g *Game) drawHero(screen *ebiten.Image) { - const ( - nx = screenWidth / tileSize - ny = screenHeight / tileSize - ) +var GameInstance *Game - op := &ebiten.DrawImageOptions{} - // ground - op.GeoM.Reset() - op.GeoM.Translate(screenWidth/2-16, 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+tileSize, 166+tileSize)).(*ebiten.Image), op) -} - -func (g *Game) drawGrass(screen *ebiten.Image) { - op := &ebiten.DrawImageOptions{} - for i := 0; i <= screenWidth/64; i++ { - for j := 0; j <= screenHeight/64; j++ { - // ground - op.GeoM.Reset() - op.GeoM.Translate(float64(i*64), float64(j*64)) - screen.DrawImage(grassImage.SubImage(image.Rect(32, 160, 32+64, 160+64)).(*ebiten.Image), op) - } - - } -} func init() { - img, _, err := image.Decode(bytes.NewReader(resources.Hero_png)) - if err != nil { - log.Fatal(err) - } - heroImage = ebiten.NewImageFromImage(img) - img, _, err = image.Decode(bytes.NewReader(resources.Grass_png)) - if err != nil { - log.Fatal(err) - } - grassImage = ebiten.NewImageFromImage(img) + GameInstance = &Game{} + GameInstance.hero = &hero.Hero{} + GameInstance.terrain = &terrain.Terrain{} } func main() { ebiten.SetWindowSize(screenWidth, screenHeight) ebiten.SetWindowTitle("Bosanski Zombicid") - if err := ebiten.RunGame(&Game{}); err != nil { + if err := ebiten.RunGame(GameInstance); err != nil { log.Fatal(err) } } diff --git a/resources/constants.go b/resources/constants.go new file mode 100644 index 0000000..91246f2 --- /dev/null +++ b/resources/constants.go @@ -0,0 +1,3 @@ +package resources + +const HeroTileSize = 33 diff --git a/terrain/terrain.go b/terrain/terrain.go new file mode 100644 index 0000000..077acbf --- /dev/null +++ b/terrain/terrain.go @@ -0,0 +1,39 @@ +package terrain + +import ( + "bytes" + "github.com/hajimehoshi/ebiten/v2" + "gitlab.com/kbr4/9heroja/resources" + "image" + "log" +) + +var ( + grassImage *ebiten.Image +) + +type Terrain struct { +} + +func (t *Terrain) DrawTerrain(screen *ebiten.Image) { + screenWidth := screen.Bounds().Max.X + screenHeight := screen.Bounds().Max.Y + op := &ebiten.DrawImageOptions{} + for i := 0; i <= screenWidth/64; i++ { + for j := 0; j <= screenHeight/64; j++ { + // ground + op.GeoM.Reset() + op.GeoM.Translate(float64(i*64), float64(j*64)) + 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) +}