From 0b0252022efa6843faa4c69ffe8489ac8b84ac41 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Sun, 7 Apr 2024 14:24:28 +0200 Subject: [PATCH] started animation background --- assets/loader-sprites.go | 2 +- assets/sprites/backgroundstars-animated.json | 72 +++++++++++++++++++ assets/sprites/backgroundstars-animated.png | Bin 0 -> 21355 bytes assets/sprites/backgroundstars.gif | Bin 13718 -> 0 bytes game/levels.go | 3 +- systems/grid_system.go | 57 +++++++++++++-- 6 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 assets/sprites/backgroundstars-animated.json create mode 100644 assets/sprites/backgroundstars-animated.png delete mode 100644 assets/sprites/backgroundstars.gif diff --git a/assets/loader-sprites.go b/assets/loader-sprites.go index 9a4fa94..4cc2d41 100644 --- a/assets/loader-sprites.go +++ b/assets/loader-sprites.go @@ -32,7 +32,7 @@ type AnimationGeo struct { type AnimationFrame struct { Position AnimationGeo `json:"frame"` - // FIXME: maybe also add delay etc? might be cool to tweak these things from LDTK + Duration int } type AnimationMeta struct { diff --git a/assets/sprites/backgroundstars-animated.json b/assets/sprites/backgroundstars-animated.json new file mode 100644 index 0000000..e0b72c3 --- /dev/null +++ b/assets/sprites/backgroundstars-animated.json @@ -0,0 +1,72 @@ +{ "frames": [ + { + "filename": "backgroundstars 0.ase", + "frame": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "sourceSize": { "w": 640, "h": 384 }, + "duration": 500 + }, + { + "filename": "backgroundstars 1.ase", + "frame": { "x": 640, "y": 0, "w": 640, "h": 384 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "sourceSize": { "w": 640, "h": 384 }, + "duration": 100 + }, + { + "filename": "backgroundstars 2.ase", + "frame": { "x": 1280, "y": 0, "w": 640, "h": 384 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "sourceSize": { "w": 640, "h": 384 }, + "duration": 500 + }, + { + "filename": "backgroundstars 3.ase", + "frame": { "x": 1920, "y": 0, "w": 640, "h": 384 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "sourceSize": { "w": 640, "h": 384 }, + "duration": 100 + }, + { + "filename": "backgroundstars 4.ase", + "frame": { "x": 2560, "y": 0, "w": 640, "h": 384 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "sourceSize": { "w": 640, "h": 384 }, + "duration": 500 + }, + { + "filename": "backgroundstars 5.ase", + "frame": { "x": 3200, "y": 0, "w": 640, "h": 384 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 640, "h": 384 }, + "sourceSize": { "w": 640, "h": 384 }, + "duration": 100 + } + ], + "meta": { + "app": "http://www.aseprite.org/", + "version": "1.x-dev", + "image": "backgroundstars-animated.png", + "format": "RGBA8888", + "size": { "w": 3840, "h": 384 }, + "scale": "1", + "frameTags": [ + ], + "layers": [ + { "name": "Layer", "opacity": 255, "blendMode": "normal" } + ], + "slices": [ + ] + } +} diff --git a/assets/sprites/backgroundstars-animated.png b/assets/sprites/backgroundstars-animated.png new file mode 100644 index 0000000000000000000000000000000000000000..b966d1b3d220259383a9919951e8d184036bdf02 GIT binary patch literal 21355 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
g~ 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 literal 0 HcmV?d00001 diff --git a/assets/sprites/backgroundstars.gif b/assets/sprites/backgroundstars.gif deleted file mode 100644 index 26148a5bced852a15c049235dfa0a229ff105e0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13718 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 diff --git a/game/levels.go b/game/levels.go index a43c87b..c1b49cf 100644 --- a/game/levels.go +++ b/game/levels.go @@ -37,10 +37,11 @@ func NewLevel(game *Game, cellsize int, plan *ldtkgo.Level) *Level { systemlist := []systems.System{} gridcontainer := &grid.GridContainer{} + bgimage := util.GetBGImage(plan) systemlist = append(systemlist, systems.NewGridSystem(game.World, game.ScreenWidth, game.ScreenHeight, cellsize, - assets.Assets[util.GetBGImage(plan)])) + bgimage)) systemlist = append(systemlist, systems.NewCollectibleSystem(game.World, cellsize)) diff --git a/systems/grid_system.go b/systems/grid_system.go index 0ba0c80..b2afe10 100644 --- a/systems/grid_system.go +++ b/systems/grid_system.go @@ -1,7 +1,14 @@ package systems import ( + "log/slog" + "openquell/assets" + "openquell/components" . "openquell/components" + "openquell/config" + "openquell/util" + + "log" "github.com/hajimehoshi/ebiten/v2" "github.com/mlange-42/arche/ecs" @@ -15,14 +22,20 @@ type GridSystem struct { Cache *ebiten.Image Count int // register tile count, invalidates cache Background *ebiten.Image + Animate components.Animation + BackgroundAnimated bool Width, Height, Tilesize int } func NewGridSystem(world *ecs.World, width, height, - tilesize int, background *ebiten.Image) System { + tilesize int, background string) System { cache := ebiten.NewImage(width, height) + if !util.Exists(assets.Assets, background) { + log.Fatalf("no background %s in assets", background) + } + system := &GridSystem{ Selector: generic.NewFilter3[Renderable, Position, Solid](), UseCache: false, @@ -30,14 +43,46 @@ func NewGridSystem(world *ecs.World, width, height, Width: width, Height: height, Tilesize: tilesize, - Background: background, + Background: assets.Assets[background], World: world, } + if util.Exists(assets.Animations, background+"-animated") { + system.BackgroundAnimated = true + + system.Animate = components.Animation{ + Active: true, + Loop: true, + Tiles: assets.Animations[background+"-animated"].Sprites, + } + + system.Animate.Timer.Start(config.ANIMATION_LOOPWAIT) + } + return system } func (system *GridSystem) Update() error { + if system.BackgroundAnimated { + slog.Debug("animate bg?", "timer", system.Animate.Timer) + if system.Animate.Timer.IsReady() { + switch { + // animation shows from earlier tick, animate + case system.Animate.Index > -1 && system.Animate.Index < len(system.Animate.Tiles)-1: + system.Animate.Index += 1 + system.Animate.Timer.Start(config.ANIMATION_LOOPWAIT) + default: + // last sprite reached + if system.Animate.Loop { + system.Animate.Index = 0 + } + } + } else { + system.Animate.Timer.Update() + } + + } + return nil } @@ -45,9 +90,13 @@ func (system *GridSystem) Draw(screen *ebiten.Image) { op := &ebiten.DrawImageOptions{} query := system.Selector.Query(system.World) - if !system.UseCache || query.Count() != system.Count { + if !system.UseCache || query.Count() != system.Count || system.BackgroundAnimated { // map not cached or cacheable, write it to the cache - system.Cache.DrawImage(system.Background, op) + if system.BackgroundAnimated { + system.Cache.DrawImage(system.Animate.Tiles[system.Animate.Index], op) + } else { + system.Cache.DrawImage(system.Background, op) + } system.Count = query.Count() counter := 0