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