Don't remove the player when stepping on a bomb; it breaks things

This commit is contained in:
Eevee (Evelyn Woods) 2020-09-12 20:45:34 -06:00
parent afa132bd4c
commit d3dfcba63b
3 changed files with 17 additions and 6 deletions

View File

@ -946,7 +946,15 @@ export class Level {
let current = tile.type.name;
this.pending_undo.push(() => tile.type = TILE_TYPES[current]);
tile.type = TILE_TYPES[name];
// TODO adjust anything else?
// For transmuting into an animation, set up the timer immediately
if (tile.type.ttl) {
if (! TILE_TYPES[current].is_actor) {
console.warn("Transmuting a non-actor into an animation!");
}
this._set_prop(tile, 'animation_speed', tile.type.ttl);
this._set_prop(tile, 'animation_progress', 0);
}
}
give_actor(actor, name) {

View File

@ -490,6 +490,8 @@ class Player extends PrimaryView {
// Redraws every frame, unless the game isn't running
redraw() {
// FIXME draw one more frame after losing, so we can see the player explode or whatever
// TODO for bonus points, also finish the player animation (but don't advance the game any further)
if (this.state !== 'playing' && this.state !== 'rewinding') {
this._redraw_handle = null;
return;

View File

@ -291,15 +291,15 @@ const TILE_TYPES = {
level.transmute_tile(other, 'player_drowned');
}
else {
level.remove_tile(other);
level.transmute_tile(other, 'splash');
}
level.spawn_animation(me.cell, 'splash');
},
},
turtle: {
draw_layer: LAYER_TERRAIN,
on_depart(me, level, other) {
level.transmute_tile(me, 'water');
// TODO feels like we should spawn water underneath us, then transmute ourselves into the splash?
level.spawn_animation(me.cell, 'splash');
},
},
@ -411,11 +411,11 @@ const TILE_TYPES = {
on_arrive(me, level, other) {
let cell = me.cell;
level.remove_tile(me);
level.remove_tile(other);
level.spawn_animation(cell, 'explosion');
if (other.type.is_player) {
// Check this /before/ we change it...
level.fail("watch where you step");
}
level.transmute_tile(other, 'explosion');
},
},
thief_tools: {
@ -509,10 +509,11 @@ const TILE_TYPES = {
on_arrive(me, level, other) {
// TODO explode
level.remove_tile(me);
level.remove_tile(other);
if (other.type.is_player) {
// Check this /before/ we change it...
level.fail("watch where you step");
}
level.transmute_tile(other, 'explosion');
},
},
cloner: {