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
|
arenaWidth int32
|
||||||
arenaHeight int32
|
arenaHeight int32
|
||||||
interfaceWidth int32
|
interfaceWidth int32
|
||||||
frame int
|
frame float32
|
||||||
enemies []*enemy
|
enemies []*enemy
|
||||||
bullets []*bullet
|
bullets []*bullet
|
||||||
score int
|
score int
|
||||||
|
gameSpeed float32 // 1 = velocidade normal
|
||||||
}
|
}
|
||||||
|
|
||||||
type bullet struct {
|
type bullet struct {
|
||||||
|
|
@ -67,7 +68,7 @@ func (g *game) removeBullet(index int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *bullet) update(g *game, 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) {
|
if !g.insideArena(b.pos) {
|
||||||
g.removeBullet(index)
|
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 {
|
func bulletExplosion(g *game, rate, amount int, bulletSpeed, size float32) shootingPattern {
|
||||||
return func(e *enemy) {
|
return func(e *enemy) {
|
||||||
if g.frame % rate != 0 {
|
if int(g.frame) % rate != 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -110,7 +111,7 @@ func bulletExplosion(g *game, rate, amount int, bulletSpeed, size float32) shoot
|
||||||
func ShootAtPlayer(g *game, p *player, rate int,
|
func ShootAtPlayer(g *game, p *player, rate int,
|
||||||
bulletMoveSpeed float32) shootingPattern {
|
bulletMoveSpeed float32) shootingPattern {
|
||||||
return func(e *enemy) {
|
return func(e *enemy) {
|
||||||
if g.frame % rate != 0 {
|
if int(g.frame) % rate != 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
direction := rl.Vector2Subtract(p.pos, e.pos)
|
direction := rl.Vector2Subtract(p.pos, e.pos)
|
||||||
|
|
@ -131,7 +132,7 @@ func burstShootAtPlayer(g *game, p *player,
|
||||||
rate int, bulletMoveSpeed float32) shootingPattern {
|
rate int, bulletMoveSpeed float32) shootingPattern {
|
||||||
flag := true
|
flag := true
|
||||||
return func(e *enemy) {
|
return func(e *enemy) {
|
||||||
if g.frame % 100 == 0 {
|
if int(g.frame) % 100 == 0 {
|
||||||
flag = !flag
|
flag = !flag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,7 +140,7 @@ rate int, bulletMoveSpeed float32) shootingPattern {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if g.frame % rate != 0 {
|
if int(g.frame) % rate != 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,7 +160,7 @@ rate int, bulletMoveSpeed float32) shootingPattern {
|
||||||
|
|
||||||
func shootStraightDown(g *game) shootingPattern {
|
func shootStraightDown(g *game) shootingPattern {
|
||||||
return func(e *enemy) {
|
return func(e *enemy) {
|
||||||
if g.frame % 10 != 0 {
|
if int(g.frame) % 10 != 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
g.bullets = append(g.bullets, &bullet{
|
g.bullets = append(g.bullets, &bullet{
|
||||||
|
|
@ -175,7 +176,7 @@ func shootStraightDown(g *game) shootingPattern {
|
||||||
func shootStill() movementPattern {
|
func shootStill() movementPattern {
|
||||||
return func(e *enemy) rl.Vector2 {
|
return func(e *enemy) rl.Vector2 {
|
||||||
e.shoot(e)
|
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}
|
direction := rl.Vector2{X: 4, Y: 0}
|
||||||
|
|
||||||
return func(e *enemy) rl.Vector2 {
|
return func(e *enemy) rl.Vector2 {
|
||||||
result := rl.Vector2Add(direction, e.pos)
|
|
||||||
|
|
||||||
e.shoot(e)
|
e.shoot(e)
|
||||||
|
|
||||||
|
result := rl.Vector2Add(direction, e.pos)
|
||||||
if !g.insideArena(result) {
|
if !g.insideArena(result) {
|
||||||
direction = rl.Vector2Negate(direction)
|
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) {
|
func (e *enemy) checkHit(g *game) (bool, *bullet, int) {
|
||||||
for index, bullet := range g.bullets {
|
for index, bullet := range g.bullets {
|
||||||
|
|
@ -261,7 +258,8 @@ func (e *enemy) update(g *game, index int) {
|
||||||
enemyColor := rl.Blue
|
enemyColor := rl.Blue
|
||||||
|
|
||||||
if e.move != nil {
|
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 {
|
if hit, bullet, idx := e.checkHit(g); hit {
|
||||||
|
|
@ -320,7 +318,7 @@ func (p *player) shoot(g *game){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if g.frame % 3 != 0 {
|
if int(g.frame) % 3 != 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -392,7 +390,7 @@ func (p *player) update(g *game) {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
state := &game{arenaWidth: 450, arenaHeight: 700, interfaceWidth: 300}
|
state := &game{arenaWidth: 450, arenaHeight: 700, interfaceWidth: 300, gameSpeed: 1}
|
||||||
|
|
||||||
player := player{
|
player := player{
|
||||||
pos: rl.Vector2{
|
pos: rl.Vector2{
|
||||||
|
|
@ -436,7 +434,7 @@ func main() {
|
||||||
|
|
||||||
currectScore := 0
|
currectScore := 0
|
||||||
|
|
||||||
for ; !rl.WindowShouldClose(); state.frame += 1 {
|
for ; !rl.WindowShouldClose(); state.frame += state.gameSpeed {
|
||||||
rl.BeginDrawing()
|
rl.BeginDrawing()
|
||||||
rl.ClearBackground(rl.Black)
|
rl.ClearBackground(rl.Black)
|
||||||
|
|
||||||
|
|
@ -463,6 +461,12 @@ func main() {
|
||||||
|
|
||||||
rl.DrawText(strconv.Itoa(len(state.bullets)), state.arenaWidth, 50, 50, rl.White)
|
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()
|
rl.EndDrawing()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue