Pause/unpause sound added. Minor audio tweaks. Cleanup.

This commit is contained in:
2024-11-11 17:25:33 -05:00
parent 7b08eadd27
commit 8a1194eca3
5 changed files with 21 additions and 48 deletions

View File

@@ -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() {

Binary file not shown.

View File

@@ -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,

View File

@@ -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()
}
}

View File

@@ -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
}