glass block blown up by dynamite/halo drops its item (fixes #62)

This commit is contained in:
Timothy.Stiles 2021-03-03 13:51:25 +11:00
parent 094e94a69c
commit ee718323cd
2 changed files with 9 additions and 1 deletions

View File

@ -2441,6 +2441,9 @@ export class Level extends LevelInterface {
{ {
if (killer.type.is_actor || killer.type.is_item) if (killer.type.is_actor || killer.type.is_item)
{ {
if (killer.type.on_death) {
killer.type.on_death(killer, this);
}
this.remove_tile(killer); this.remove_tile(killer);
} }
else //presumably terrain else //presumably terrain

View File

@ -1351,7 +1351,7 @@ const TILE_TYPES = {
on_death(me, level) { on_death(me, level) {
//needs to be called by transmute_tile to ttl and by lit_dynamite before remove_tile //needs to be called by transmute_tile to ttl and by lit_dynamite before remove_tile
if (me.encased_item !== null) { if (me.encased_item !== null) {
level._place_dropped_item(me.encased_item, me.cell, me); level._place_dropped_item(me.encased_item, me.cell ?? me.previous_cell, me);
level._set_tile_prop(me, 'encased_item', null); level._set_tile_prop(me, 'encased_item', null);
} }
} }
@ -2638,6 +2638,7 @@ const TILE_TYPES = {
let actor = cell.get_actor(); let actor = cell.get_actor();
let terrain = cell.get_terrain(); let terrain = cell.get_terrain();
let item = cell.get_item();
let removed_anything; let removed_anything;
for (let layer = LAYERS.MAX - 1; layer >= 0; layer--) { for (let layer = LAYERS.MAX - 1; layer >= 0; layer--) {
let tile = cell[layer]; let tile = cell[layer];
@ -2653,6 +2654,10 @@ const TILE_TYPES = {
level.fail(me.type.name, me, tile); level.fail(me.type.name, me, tile);
} }
else { else {
//newly appearing items (e.g. dropped by a glass block) are safe
if (tile.type.layer === LAYERS.item && tile !== item) {
continue;
}
// Everything else is destroyed // Everything else is destroyed
if (tile.type.on_death) { if (tile.type.on_death) {
tile.type.on_death(tile, level); tile.type.on_death(tile, level);