diff --git a/assets/audiobank.go b/assets/audiobank.go index 5c6d736..33c51e6 100644 --- a/assets/audiobank.go +++ b/assets/audiobank.go @@ -37,6 +37,10 @@ var ( Magic []byte //go:embed survive.wav Survive []byte + //go:embed pausein.wav + PauseIn []byte + //go:embed pauseout.wav + PauseOut []byte ) func LoadSounds() { diff --git a/assets/magic.wav b/assets/magic.wav index 0de9b99..6c32718 100644 Binary files a/assets/magic.wav and b/assets/magic.wav differ diff --git a/screenmanager/manager.go b/screenmanager/manager.go index ae5562c..b3439d2 100644 --- a/screenmanager/manager.go +++ b/screenmanager/manager.go @@ -26,7 +26,7 @@ func NewManager() Manager { return Manager{ Info: gamedata.GameInfo{ Name: "survive", - Version: "0.20", + Version: "0.22", Dimensions: gamedata.Area{ Width: defaultWidth, Height: defaultHeight, diff --git a/screens/game.go b/screens/game.go index 67cb897..6674885 100644 --- a/screens/game.go +++ b/screens/game.go @@ -44,17 +44,11 @@ type Game struct { projectiles map[int]*elements.Projectile explosion *elements.Explosion audioplayer *audio.Player - sfxplayer []*audio.Player score int counter int timer int targets []*elements.Mover - - //gamepadIDsBuf []ebiten.GamepadID - //gamepadIDs map[ebiten.GamepadID]struct{} - //axes map[ebiten.GamepadID][]string - //pressedButtons map[ebiten.GamepadID][]string } var ( @@ -72,21 +66,9 @@ func NewGame() *Game { func (g *Game) Initialize() { if !g.musicInitialized { - //s, _ := wav.DecodeWithSampleRate(sampleRate) - //d, _ := wav.DecodeWithSampleRate(sampleRate, bytes.NewReader(loop_wav)) - s := audio.NewInfiniteLoop(assets.SoundBank[assets.MainLoop], assets.SoundBank[assets.MainLoop].Length()) - - /* - - reader := bytes.NewReader(loop_wav) - - s := audio.NewInfiniteLoopF32(reader, reader.Length()) - */ g.audioplayer, _ = audioContext.NewPlayer(s) - g.audioplayer.Play() - g.musicInitialized = true } @@ -127,23 +109,6 @@ func (g *Game) Initialize() { } func (g *Game) Update() error { - /* - if g.gamepadIDs == nil { - g.gamepadIDs = map[ebiten.GamepadID]struct{}{} - } - - g.gamepadIDsBuf = inpututil.AppendJustConnectedGamepadIDs(g.gamepadIDsBuf[:0]) - for _, id := range g.gamepadIDsBuf { - log.Printf("gamepad connected: id: %d, SDL ID: %s", id, ebiten.GamepadSDLID(id)) - g.gamepadIDs[id] = struct{}{} - } - for id := range g.gamepadIDs { - if inpututil.IsGamepadJustDisconnected(id) { - log.Printf("gamepad disconnected: id: %d", id) - delete(g.gamepadIDs, id) - } - }*/ - if !g.initialized || g.reset { g.Initialize() } else { @@ -171,7 +136,6 @@ func (g *Game) Draw(screen *ebiten.Image) { } op.GeoM.Translate(-MOVER_WIDTH/2, -MOVER_HEIGHT/2) - //op.GeoM.Rotate(g.hero.Angle) op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y) screen.DrawImage(g.hero.Sprite, op) @@ -215,9 +179,7 @@ func (g *Game) Draw(screen *ebiten.Image) { g.projectileMask.Clear() - //ebitenutil.DrawCircle() for _, p := range g.projectiles { - //vector.DrawFilledCircle(screen, float32(p.Pos.X), float32(p.Pos.Y), 3, color.White, true) vector.DrawFilledCircle(g.projectileMask, float32(p.Pos.X), float32(p.Pos.Y), 3, color.White, true) } @@ -225,9 +187,6 @@ func (g *Game) Draw(screen *ebiten.Image) { vector.StrokeCircle(screen, float32(g.explosion.Origin.X), float32(g.explosion.Origin.Y), float32(g.explosion.Radius), 3, color.White, true) - /*for _, gamepad ebiten.StandardGamepadAxisValue(id, ebiten.StandardGamepadAxisRightStickHorizontal), - ebiten.StandardGamepadAxisValue(id, ebiten.StandardGamepadAxisRightStickVertical))*/ - s := fmt.Sprintf("%02.3f", g.runtime) if !g.gameover { text.Draw(screen, "TIME: "+s, fonts.SurviveFont.Arcade, 640/2-250, 25, color.White) @@ -356,12 +315,10 @@ func (g *Game) HandlePulseWaveUpdate() { func (g *Game) UpdateProjectiles() { for k, p := range g.projectiles { - //for i := 0; i < len(g.projectiles); i++ { - // g.projectiles[i].Update() p.Update() - //if g.projectiles[i].Pos.X < 5 || g.projectiles[i].Pos.X > 635 || g.projectiles[i].Pos.Y < 5 || g.projectiles[i].Pos.Y > 475 { - if p.Pos.X < 5 || p.Pos.X > 635 || p.Pos.Y < 5 || p.Pos.Y > 475 { + //cleanup projectiles at boundaries + if p.Pos.X < -640/2 || p.Pos.X > 1.5*640 || p.Pos.Y < -480/2 || p.Pos.Y > 1.5*480 { p.Velocity = 0 delete(g.projectiles, k) } @@ -501,6 +458,13 @@ func (g *Game) HandleInput() { g.reset = true } else { g.Paused = !g.Paused + var player *audio.Player + if g.Paused { + player = audioContext.NewPlayerFromBytes(assets.PauseIn) + } else { + player = audioContext.NewPlayerFromBytes(assets.PauseOut) + } + player.Play() } } diff --git a/screens/start.go b/screens/start.go index 7edcb43..3e43736 100644 --- a/screens/start.go +++ b/screens/start.go @@ -8,6 +8,7 @@ import ( "mover/gamedata" "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/audio" "github.com/hajimehoshi/ebiten/v2/inpututil" "github.com/hajimehoshi/ebiten/v2/text" ) @@ -20,6 +21,7 @@ type StartScreen struct { targetreached bool audioplayed bool cycle int + audioplayer *audio.Player } func NewStartScreen() *StartScreen { @@ -39,11 +41,14 @@ func (s *StartScreen) Update() error { if inpututil.IsKeyJustPressed(ebiten.KeyEnter) || ebiten.IsStandardGamepadButtonPressed(0, ebiten.StandardGamepadButtonCenterRight) { s.eHandler[EventCompleted]() + if s.audioplayer.IsPlaying() { + s.audioplayer.Close() + } } if !s.audioplayed { - player := audioContext.NewPlayerFromBytes(assets.Survive) - player.Play() + s.audioplayer = audioContext.NewPlayerFromBytes(assets.Survive) + s.audioplayer.Play() s.audioplayed = true }