polish explosions
This commit is contained in:
parent
c7fb1d5a86
commit
b860968ef5
63
cart.wren
63
cart.wren
|
@ -20,6 +20,7 @@ class Color {
|
|||
static green_light { 5 }
|
||||
static green { 6 }
|
||||
static green_dark { 7 }
|
||||
static white { 12 }
|
||||
}
|
||||
|
||||
class Star {
|
||||
|
@ -157,6 +158,9 @@ class Player {
|
|||
}
|
||||
|
||||
draw() {
|
||||
if (!_alive) {
|
||||
return
|
||||
}
|
||||
TIC.spr(256, _x - _w / 2, _y - _h / 2, 0, 1, 0, 0, 2, 2)
|
||||
for (b in _bullets) {
|
||||
b.draw()
|
||||
|
@ -178,22 +182,34 @@ class Player {
|
|||
|
||||
class Explosion {
|
||||
construct new(x, y) {
|
||||
System.print("explosion at %(x), %(y)")
|
||||
_x = x
|
||||
_y = y
|
||||
_countdown = 30
|
||||
_countdown = 10
|
||||
_t = 0
|
||||
}
|
||||
|
||||
expired { _countdown < 0 }
|
||||
expired { _t > _countdown }
|
||||
|
||||
update() {
|
||||
//System.print("explosion countdown %(_countdown)")
|
||||
_countdown = _countdown - 1
|
||||
_t = _t + 1
|
||||
}
|
||||
|
||||
draw() {
|
||||
var size = 10
|
||||
TIC.circ(_x, _y, size, 2)
|
||||
if (_t <= 2) {
|
||||
TIC.circ(_x, _y, 10, Color.white)
|
||||
} else if (_t <= 4) {
|
||||
TIC.circ(_x, _y, 10, Color.red)
|
||||
} else if (_t <= 6) {
|
||||
TIC.circ(_x - 4, _y - 4, 4, Color.white)
|
||||
TIC.circ(_x - 4, _y + 4, 4, Color.white)
|
||||
TIC.circ(_x + 4, _y + 4, 4, Color.white)
|
||||
TIC.circ(_x + 4, _y - 4, 4, Color.white)
|
||||
} else if (_t <= 8) {
|
||||
TIC.circ(_x - 4, _y - 4, 4, Color.red)
|
||||
TIC.circ(_x - 4, _y + 4, 4, Color.red)
|
||||
TIC.circ(_x + 4, _y + 4, 4, Color.red)
|
||||
TIC.circ(_x + 4, _y - 4, 4, Color.red)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -259,14 +275,8 @@ class World {
|
|||
v.update()
|
||||
}
|
||||
|
||||
// Collect
|
||||
while (_stars.count > 0 && _stars[0].expired) {
|
||||
_stars.removeAt(0)
|
||||
}
|
||||
|
||||
collect(_enemies)
|
||||
collect(_vfx)
|
||||
|
||||
// Generation
|
||||
//
|
||||
// small stars
|
||||
if (_t % 30 == 0) {
|
||||
_stars.add(Star.new(W, R.int(0,H), 1, 1, 12))
|
||||
|
@ -280,15 +290,24 @@ class World {
|
|||
_stars.add(Star.new(W, R.int(0,H), width, speed, 13))
|
||||
}
|
||||
|
||||
if (_player.alive) {
|
||||
_t = _t + 1
|
||||
}
|
||||
|
||||
// Map scrolling
|
||||
if (_t % _world_scroll_speed == 0) {
|
||||
_world_x = _world_x + 1
|
||||
}
|
||||
_w_offset_x = -(_t % _world_scroll_speed) / (_world_scroll_speed / 8)
|
||||
|
||||
if (_player.alive) {
|
||||
_t = _t + 1
|
||||
}
|
||||
|
||||
// Collect
|
||||
while (_stars.count > 0 && _stars[0].expired) {
|
||||
_stars.removeAt(0)
|
||||
}
|
||||
|
||||
collect(_enemies)
|
||||
collect(_vfx)
|
||||
|
||||
// Collisions
|
||||
var i = 0
|
||||
while (i < _player.bullets.count) {
|
||||
|
@ -307,15 +326,17 @@ class World {
|
|||
i = i + 1
|
||||
}
|
||||
}
|
||||
if (_player.alive) {
|
||||
if (!(fgCheck(_player.x - _player.bw / 2, _player.y - _player.bh / 2) &&
|
||||
fgCheck(_player.x - _player.bw / 2, _player.y + _player.bh / 2) &&
|
||||
fgCheck(_player.x + _player.bw / 2, _player.y + _player.bh / 2) &&
|
||||
fgCheck(_player.x + _player.bw / 2, _player.y - _player.bh / 2))) {
|
||||
System.print("collision with foreground")
|
||||
//System.print("collision with foreground")
|
||||
_player.die()
|
||||
_vfx.add(Explosion.new(_player.x, _player.y))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
collide(x1, y1, w1, h1, x2, y2, w2, h2) {
|
||||
// [x1] [x2]
|
||||
|
@ -350,7 +371,7 @@ class World {
|
|||
if (tile == 0) {
|
||||
return true
|
||||
}
|
||||
System.print("collision at %(x), %(y)!")
|
||||
//System.print("collision at %(x), %(y)!")
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue