Pause/unpause sound added. Minor audio tweaks. Cleanup.
This commit is contained in:
@@ -37,6 +37,10 @@ var (
|
|||||||
Magic []byte
|
Magic []byte
|
||||||
//go:embed survive.wav
|
//go:embed survive.wav
|
||||||
Survive []byte
|
Survive []byte
|
||||||
|
//go:embed pausein.wav
|
||||||
|
PauseIn []byte
|
||||||
|
//go:embed pauseout.wav
|
||||||
|
PauseOut []byte
|
||||||
)
|
)
|
||||||
|
|
||||||
func LoadSounds() {
|
func LoadSounds() {
|
||||||
|
|||||||
BIN
assets/magic.wav
BIN
assets/magic.wav
Binary file not shown.
@@ -26,7 +26,7 @@ func NewManager() Manager {
|
|||||||
return Manager{
|
return Manager{
|
||||||
Info: gamedata.GameInfo{
|
Info: gamedata.GameInfo{
|
||||||
Name: "survive",
|
Name: "survive",
|
||||||
Version: "0.20",
|
Version: "0.22",
|
||||||
Dimensions: gamedata.Area{
|
Dimensions: gamedata.Area{
|
||||||
Width: defaultWidth,
|
Width: defaultWidth,
|
||||||
Height: defaultHeight,
|
Height: defaultHeight,
|
||||||
|
|||||||
@@ -44,17 +44,11 @@ type Game struct {
|
|||||||
projectiles map[int]*elements.Projectile
|
projectiles map[int]*elements.Projectile
|
||||||
explosion *elements.Explosion
|
explosion *elements.Explosion
|
||||||
audioplayer *audio.Player
|
audioplayer *audio.Player
|
||||||
sfxplayer []*audio.Player
|
|
||||||
|
|
||||||
score int
|
score int
|
||||||
counter int
|
counter int
|
||||||
timer int
|
timer int
|
||||||
targets []*elements.Mover
|
targets []*elements.Mover
|
||||||
|
|
||||||
//gamepadIDsBuf []ebiten.GamepadID
|
|
||||||
//gamepadIDs map[ebiten.GamepadID]struct{}
|
|
||||||
//axes map[ebiten.GamepadID][]string
|
|
||||||
//pressedButtons map[ebiten.GamepadID][]string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -72,21 +66,9 @@ func NewGame() *Game {
|
|||||||
func (g *Game) Initialize() {
|
func (g *Game) Initialize() {
|
||||||
|
|
||||||
if !g.musicInitialized {
|
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())
|
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, _ = audioContext.NewPlayer(s)
|
||||||
|
|
||||||
g.audioplayer.Play()
|
g.audioplayer.Play()
|
||||||
|
|
||||||
g.musicInitialized = true
|
g.musicInitialized = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,23 +109,6 @@ func (g *Game) Initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) Update() error {
|
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 {
|
if !g.initialized || g.reset {
|
||||||
g.Initialize()
|
g.Initialize()
|
||||||
} else {
|
} else {
|
||||||
@@ -171,7 +136,6 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
op.GeoM.Translate(-MOVER_WIDTH/2, -MOVER_HEIGHT/2)
|
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)
|
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
|
||||||
screen.DrawImage(g.hero.Sprite, op)
|
screen.DrawImage(g.hero.Sprite, op)
|
||||||
|
|
||||||
@@ -215,9 +179,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
|
|
||||||
g.projectileMask.Clear()
|
g.projectileMask.Clear()
|
||||||
|
|
||||||
//ebitenutil.DrawCircle()
|
|
||||||
for _, p := range g.projectiles {
|
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)
|
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)
|
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)
|
s := fmt.Sprintf("%02.3f", g.runtime)
|
||||||
if !g.gameover {
|
if !g.gameover {
|
||||||
text.Draw(screen, "TIME: "+s, fonts.SurviveFont.Arcade, 640/2-250, 25, color.White)
|
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() {
|
func (g *Game) UpdateProjectiles() {
|
||||||
for k, p := range g.projectiles {
|
for k, p := range g.projectiles {
|
||||||
|
|
||||||
//for i := 0; i < len(g.projectiles); i++ {
|
|
||||||
// g.projectiles[i].Update()
|
|
||||||
p.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 {
|
//cleanup projectiles at boundaries
|
||||||
if p.Pos.X < 5 || p.Pos.X > 635 || p.Pos.Y < 5 || p.Pos.Y > 475 {
|
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
|
p.Velocity = 0
|
||||||
delete(g.projectiles, k)
|
delete(g.projectiles, k)
|
||||||
}
|
}
|
||||||
@@ -501,6 +458,13 @@ func (g *Game) HandleInput() {
|
|||||||
g.reset = true
|
g.reset = true
|
||||||
} else {
|
} else {
|
||||||
g.Paused = !g.Paused
|
g.Paused = !g.Paused
|
||||||
|
var player *audio.Player
|
||||||
|
if g.Paused {
|
||||||
|
player = audioContext.NewPlayerFromBytes(assets.PauseIn)
|
||||||
|
} else {
|
||||||
|
player = audioContext.NewPlayerFromBytes(assets.PauseOut)
|
||||||
|
}
|
||||||
|
player.Play()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"mover/gamedata"
|
"mover/gamedata"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
|
"github.com/hajimehoshi/ebiten/v2/audio"
|
||||||
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
||||||
"github.com/hajimehoshi/ebiten/v2/text"
|
"github.com/hajimehoshi/ebiten/v2/text"
|
||||||
)
|
)
|
||||||
@@ -20,6 +21,7 @@ type StartScreen struct {
|
|||||||
targetreached bool
|
targetreached bool
|
||||||
audioplayed bool
|
audioplayed bool
|
||||||
cycle int
|
cycle int
|
||||||
|
audioplayer *audio.Player
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStartScreen() *StartScreen {
|
func NewStartScreen() *StartScreen {
|
||||||
@@ -39,11 +41,14 @@ func (s *StartScreen) Update() error {
|
|||||||
if inpututil.IsKeyJustPressed(ebiten.KeyEnter) ||
|
if inpututil.IsKeyJustPressed(ebiten.KeyEnter) ||
|
||||||
ebiten.IsStandardGamepadButtonPressed(0, ebiten.StandardGamepadButtonCenterRight) {
|
ebiten.IsStandardGamepadButtonPressed(0, ebiten.StandardGamepadButtonCenterRight) {
|
||||||
s.eHandler[EventCompleted]()
|
s.eHandler[EventCompleted]()
|
||||||
|
if s.audioplayer.IsPlaying() {
|
||||||
|
s.audioplayer.Close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !s.audioplayed {
|
if !s.audioplayed {
|
||||||
player := audioContext.NewPlayerFromBytes(assets.Survive)
|
s.audioplayer = audioContext.NewPlayerFromBytes(assets.Survive)
|
||||||
player.Play()
|
s.audioplayer.Play()
|
||||||
s.audioplayed = true
|
s.audioplayed = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user