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.on_death) {
killer.type.on_death(killer, this);
}
this.remove_tile(killer);
}
else //presumably terrain

View File

@ -1351,7 +1351,7 @@ const TILE_TYPES = {
on_death(me, level) {
//needs to be called by transmute_tile to ttl and by lit_dynamite before remove_tile
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);
}
}
@ -2638,6 +2638,7 @@ const TILE_TYPES = {
let actor = cell.get_actor();
let terrain = cell.get_terrain();
let item = cell.get_item();
let removed_anything;
for (let layer = LAYERS.MAX - 1; layer >= 0; layer--) {
let tile = cell[layer];
@ -2653,6 +2654,10 @@ const TILE_TYPES = {
level.fail(me.type.name, me, tile);
}
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
if (tile.type.on_death) {
tile.type.on_death(tile, level);