poder slow motion
This commit is contained in:
parent
c90fd3d14a
commit
8159246e2c
1 changed files with 57 additions and 53 deletions
110
main.go
110
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,56 +184,52 @@ 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()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue