From 8159246e2cd330b6c3ae065ec5cf46a8279182de Mon Sep 17 00:00:00 2001 From: silva guimaraes Date: Mon, 24 Jul 2023 14:03:30 -0300 Subject: [PATCH] poder slow motion --- main.go | 110 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/main.go b/main.go index a6cb2e3..c88fd50 100644 --- a/main.go +++ b/main.go @@ -23,10 +23,11 @@ type game struct { arenaWidth int32 arenaHeight int32 interfaceWidth int32 - frame int + frame float32 enemies []*enemy bullets []*bullet score int + gameSpeed float32 // 1 = velocidade normal } type bullet struct { @@ -67,7 +68,7 @@ func (g *game) removeBullet(index int) { } func (b *bullet) update(g *game, index int) { - b.pos = rl.Vector2Add(b.pos, b.speed) + b.pos = rl.Vector2Add(b.pos, rl.Vector2Scale(b.speed, g.gameSpeed)) if !g.insideArena(b.pos) { g.removeBullet(index) @@ -79,7 +80,7 @@ func (b *bullet) update(g *game, index int) { func bulletExplosion(g *game, rate, amount int, bulletSpeed, size float32) shootingPattern { return func(e *enemy) { - if g.frame % rate != 0 { + if int(g.frame) % rate != 0 { return } @@ -110,7 +111,7 @@ func bulletExplosion(g *game, rate, amount int, bulletSpeed, size float32) shoot func ShootAtPlayer(g *game, p *player, rate int, bulletMoveSpeed float32) shootingPattern { return func(e *enemy) { - if g.frame % rate != 0 { + if int(g.frame) % rate != 0 { return } direction := rl.Vector2Subtract(p.pos, e.pos) @@ -131,7 +132,7 @@ func burstShootAtPlayer(g *game, p *player, rate int, bulletMoveSpeed float32) shootingPattern { flag := true return func(e *enemy) { - if g.frame % 100 == 0 { + if int(g.frame) % 100 == 0 { flag = !flag } @@ -139,7 +140,7 @@ rate int, bulletMoveSpeed float32) shootingPattern { return } - if g.frame % rate != 0 { + if int(g.frame) % rate != 0 { return } @@ -159,7 +160,7 @@ rate int, bulletMoveSpeed float32) shootingPattern { func shootStraightDown(g *game) shootingPattern { return func(e *enemy) { - if g.frame % 10 != 0 { + if int(g.frame) % 10 != 0 { return } g.bullets = append(g.bullets, &bullet{ @@ -175,7 +176,7 @@ func shootStraightDown(g *game) shootingPattern { func shootStill() movementPattern { return func(e *enemy) rl.Vector2 { e.shoot(e) - return e.pos + return rl.Vector2{X: 0, Y: 0} } } @@ -183,57 +184,53 @@ func horizonalPattern(g *game) movementPattern { direction := rl.Vector2{X: 4, Y: 0} return func(e *enemy) rl.Vector2 { - result := rl.Vector2Add(direction, e.pos) - e.shoot(e) + result := rl.Vector2Add(direction, e.pos) if !g.insideArena(result) { direction = rl.Vector2Negate(direction) } - return result + return direction } } -// func aimPlayerPattern(g *game, p *player) movementPattern { +// func foobarPattern(g *game) movementPattern { +// +// pos := rl.Vector2{} +// state := 0 +// wait := 0 +// +// return func(e *enemy) rl.Vector2 { +// +// switch state { +// case 0: // init +// pos.X = e.pos.X +// state = 1 +// return pos +// case 1: // descer +// pos.Y += 1 +// if pos.Y >= 100 { state = 2; wait = 50 } +// return pos +// case 2: // atirar por um tempo +// e.shoot(e) +// wait -= 1 +// if wait <= 0 { state = 3; wait = 60 } +// return pos +// case 3: // wait +// wait -= 1 +// if wait <= 0 { state = 4 } +// return pos +// case 4: // retornar +// pos.Y -= 3 +// if pos.Y - e.hitBoxRadius < 0 { +// e.health = 0 +// } +// return pos +// } +// panic(state) +// } // } -func foobarPattern(g *game) movementPattern { - - pos := rl.Vector2{} - state := 0 - wait := 0 - - return func(e *enemy) rl.Vector2 { - - switch state { - case 0: // init - pos.X = e.pos.X - state = 1 - return pos - case 1: // descer - pos.Y += 1 - if pos.Y >= 100 { state = 2; wait = 50 } - return pos - case 2: // atirar por um tempo - e.shoot(e) - wait -= 1 - if wait <= 0 { state = 3; wait = 60 } - return pos - case 3: // wait - wait -= 1 - if wait <= 0 { state = 4 } - return pos - case 4: // retornar - pos.Y -= 3 - if pos.Y - e.hitBoxRadius < 0 { - e.health = 0 - } - return pos - } - panic(state) - } -} - func (e *enemy) checkHit(g *game) (bool, *bullet, int) { for index, bullet := range g.bullets { @@ -261,7 +258,8 @@ func (e *enemy) update(g *game, index int) { enemyColor := rl.Blue if e.move != nil { - e.pos = e.move(e) + e.pos = rl.Vector2Add(rl.Vector2Scale(e.move(e), g.gameSpeed), e.pos) + // e.pos = e.move(e) } if hit, bullet, idx := e.checkHit(g); hit { @@ -320,7 +318,7 @@ func (p *player) shoot(g *game){ return } - if g.frame % 3 != 0 { + if int(g.frame) % 3 != 0 { return } @@ -392,7 +390,7 @@ func (p *player) update(g *game) { func main() { - state := &game{arenaWidth: 450, arenaHeight: 700, interfaceWidth: 300} + state := &game{arenaWidth: 450, arenaHeight: 700, interfaceWidth: 300, gameSpeed: 1} player := player{ pos: rl.Vector2{ @@ -436,7 +434,7 @@ func main() { currectScore := 0 - for ; !rl.WindowShouldClose(); state.frame += 1 { + for ; !rl.WindowShouldClose(); state.frame += state.gameSpeed { rl.BeginDrawing() rl.ClearBackground(rl.Black) @@ -463,6 +461,12 @@ func main() { rl.DrawText(strconv.Itoa(len(state.bullets)), state.arenaWidth, 50, 50, rl.White) + if player.focusMode { + state.gameSpeed = 0.3 + } else { + state.gameSpeed = 1 + } + rl.EndDrawing() }