Pause/unpause sound added. Minor audio tweaks. Cleanup.
This commit is contained in:
@@ -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() {
|
||||
|
||||
BIN
assets/magic.wav
BIN
assets/magic.wav
Binary file not shown.
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user