From f51a9efca57b561a3ccd88d04e1330dc9cc65726 Mon Sep 17 00:00:00 2001 From: davidovski Date: Tue, 23 Apr 2024 01:24:40 +0100 Subject: add spring boing --- assets/ambient.ogg | Bin 2893087 -> 4605681 bytes assets/spring.ogg | Bin 0 -> 12022 bytes assets/tiles.png | Bin 4654 -> 4666 bytes level.go | 51 +++++++++++++++++++++++++++++++++++++++------------ main.go | 33 ++++++++++++++++++++++----------- objects.go | 2 ++ 6 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 assets/spring.ogg diff --git a/assets/ambient.ogg b/assets/ambient.ogg index f64284c..b858738 100644 Binary files a/assets/ambient.ogg and b/assets/ambient.ogg differ diff --git a/assets/spring.ogg b/assets/spring.ogg new file mode 100644 index 0000000..0ab726b Binary files /dev/null and b/assets/spring.ogg differ diff --git a/assets/tiles.png b/assets/tiles.png index 58096da..9d76526 100644 Binary files a/assets/tiles.png and b/assets/tiles.png differ diff --git a/level.go b/level.go index 24c79ff..4d5bcec 100644 --- a/level.go +++ b/level.go @@ -3,6 +3,11 @@ package main import ( "fmt" ) + +func StartGame(g *Game) { + StartLevel4(g) +} + func PauseScreen(g *Game) { g.SetPaused() fmt.Printf("PAUSE\n", 0, len(g.playerAi)) @@ -28,14 +33,14 @@ func levelStart(g *Game) { g.ResetAll() g.playerAiIdx = 0 g.SetInGame() +} + +func noMoveable(g *Game) { for _, o := range g.objects { o.movable = false } } -func StartGame(g *Game) { - StartLevel1(g) -} func StartLevel1(g *Game ) { g.SetInGame() @@ -106,6 +111,7 @@ func StartLevel1(g *Game ) { func StartLevel2(g *Game) { g.SetPlacing() + noMoveable(g) g.toPlace = append(g.toPlace, NewLeftSpike(g, 0, 0)) @@ -118,6 +124,7 @@ func StartLevel2(g *Game) { func StartLevel3(g *Game) { g.SetPlacing() + noMoveable(g) g.toPlace = append(g.toPlace, NewSpike(g, 0, 0)) @@ -130,6 +137,8 @@ func StartLevel3(g *Game) { func StartLevel4(g *Game) { g.SetPlacing() + noMoveable(g) + g.toPlace = append(g.toPlace, NewSpring(g, 0, 0)) g.ClearAll() @@ -139,11 +148,11 @@ func StartLevel4(g *Game) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 34, 35, 36, 34, 35, 36, 34, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 34, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 69, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 37, 38, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 53, 54, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 34, 35, 36, 34, 35, 71, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 37, 38, 39, 37, 38, 39, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, 53, 54, 55, 53, 54, 55, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 71, 69, 70, 71, 69, 70, 71, 69, 70, 0, @@ -157,11 +166,11 @@ func StartLevel4(g *Game) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 82, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 82, 83, 84, 82, 83, 84, 82, 115, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 82, 83, 84, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0, @@ -174,7 +183,7 @@ func StartLevel4(g *Game) { g.tilemap = &tilemap g.tilemap.UpdateSurface() - g.exit.startx = 20 * tileSize + g.exit.startx = 18 * tileSize g.exit.starty = 6 * tileSize g.ResetAll() @@ -188,9 +197,27 @@ func StartLevel4(g *Game) { g.QueueState(StartLevel5) } +// HMM maybe we can make this a bit harder, lets try moving the exit by clicking on it func StartLevel5(g *Game) { g.SetPlacing() - g.toPlace = append(g.toPlace, NewSpike(g, 0, 0)) + //noMoveable(g) + + //g.toPlace = append(g.toPlace, NewSpring(g, 0, 0)) + g.exit.movable = true + g.toPlace = append(g.toPlace, NewSpring(g, 0, 0)) + // after end + g.QueueState(ReverseLevel) + // after reversed + g.QueueState(afterReversed) + g.QueueState(StartLevel5) +} + +// Ok lets add a spring there as well +func StartLevel6(g *Game) { + g.SetPlacing() + //noMoveable(g) + + g.toPlace = append(g.toPlace, NewSpring(g, 0, 0)) g.exit.movable = true // after end diff --git a/main.go b/main.go index 1be1bef..fcb31c4 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,7 @@ import ( "math" "github.com/hajimehoshi/ebiten/v2" - "github.com/hajimehoshi/ebiten/v2/ebitenutil" + _ "github.com/hajimehoshi/ebiten/v2/ebitenutil" "github.com/hajimehoshi/ebiten/v2/inpututil" "github.com/hajimehoshi/ebiten/v2/text/v2" "github.com/hajimehoshi/ebiten/v2/examples/resources/fonts" @@ -28,7 +28,6 @@ const ( tileSize = 16 playerSpeed = 2.1 jumpHeight = 4 - rewindSpeed = 2 gravity = 0.16 friction = 0.75 airResistance = 0.98 @@ -71,6 +70,9 @@ var ( //go:embed assets/ambient.ogg ambientOgg_src []byte + + //go:embed assets/spring.ogg + springOgg_src []byte ) var ( @@ -78,6 +80,8 @@ var ( tilesImage *ebiten.Image characterImage *ebiten.Image fontFaceSource *text.GoTextFaceSource + + rewindSpeed = 2 ) type State int @@ -104,6 +108,7 @@ type AudioPlayer struct { stopAudio *audio.Player startAudio *audio.Player ambientAudio *audio.Player + springAudio *audio.Player } type Game struct { @@ -236,6 +241,12 @@ func (g *Game) Init() { } } +func (g *Game) SetEditingMode() { + g.SetPlacing() + //g.playerAi = g.playerAi[:0] + g.ResetAll() + g.playerAiIdx = 0 + } func (g *Game) Update() error { g.time += 1 @@ -255,6 +266,10 @@ func (g *Game) Update() error { } if g.state == IN_GAME { + if inpututil.IsKeyJustPressed(ebiten.KeyE) { + g.SetEditingMode() + } + if inpututil.IsKeyJustPressed(ebiten.KeyR) { g.SetReversing() next := func (g *Game){ @@ -420,7 +435,7 @@ func (g *Game) DrawTheEnd(surface *ebiten.Image, alpha float32) { msg := fmt.Sprintf("THE END") textOp := &text.DrawOptions{} textOp.GeoM.Translate((screenWidth - textSize*7 ) / 2, (screenHeight - textSize) / 2) - textOp.ColorScale.ScaleWithColor(color.White) + textOp.ColorScale.ScaleWithColor(color.RGBA{55, 53, 53, 255}) textOp.ColorScale.ScaleAlpha(alpha) text.Draw(surface, msg, &text.GoTextFace{ Size: textSize, @@ -458,7 +473,7 @@ func (g *Game) Draw(screen *ebiten.Image) { // draw THE END a := float64(endCardDuration - (g.time - g.animStart)) / float64(endCardDuration); - a = 1 - float64(math.Pow(float64(a), 10)) + a = 1 - float64(math.Pow(float64(a), 2)) if g.state == PAUSED { a = 10.0 @@ -484,7 +499,7 @@ func (g *Game) Draw(screen *ebiten.Image) { PostProcess(screen, g.shaderName, g.time) - ebitenutil.DebugPrint(screen, fmt.Sprintf("tps: %.4f", ebiten.ActualFPS())) + //ebitenutil.DebugPrint(screen, fmt.Sprintf("tps: %.4f", ebiten.ActualFPS())) } func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int){ @@ -533,9 +548,6 @@ func (g *Game) KillPlayer() { g.playerAi = g.playerAi[:0] g.SetInGame() - for _, o := range g.objects { - o.movable = false - } } } } @@ -578,6 +590,7 @@ func (g *Game) SetPaused() { } func (g *Game) SetReversing() { g.state = REVERSING + rewindSpeed = 1 + int(len(g.recording) / 120) g.shaderName = "vcr" g.player.alpha = 1.0 g.audioPlayer.rewindAudio.Rewind() @@ -647,10 +660,8 @@ func (g *Game) LoadAudio() { g.audioPlayer.stopAudio = loadAudio(stopWav_src, g.audioPlayer.audioContext) g.audioPlayer.startAudio = loadAudio(startWav_src, g.audioPlayer.audioContext) g.audioPlayer.ambientAudio = loadAudioVorbis(ambientOgg_src, g.audioPlayer.audioContext) + g.audioPlayer.springAudio = loadAudioVorbis(springOgg_src, g.audioPlayer.audioContext) - if g.audioPlayer.ambientAudio == nil { - fmt.Printf("AUDIO NUL") - } } func (g *Game) LoadImages() { diff --git a/objects.go b/objects.go index b26d1c8..008d712 100644 --- a/objects.go +++ b/objects.go @@ -333,6 +333,8 @@ func OnCollideSpring(this, other *GameObject) bool { other.onGround = true this.state = 2 this.delta = 1 + this.game.audioPlayer.springAudio.Rewind() + this.game.audioPlayer.springAudio.Play() return false } -- cgit v1.2.1