Restore the template's facing after a failed wired clone
Also remove a hack for an edge case that's been fixed with the recent changes to death handling.
This commit is contained in:
parent
2b488b2d89
commit
e45a580d1a
@ -1533,6 +1533,7 @@ const TILE_TYPES = {
|
|||||||
// This temporary flag tells us to let it leave; it doesn't need to be undoable, since
|
// This temporary flag tells us to let it leave; it doesn't need to be undoable, since
|
||||||
// it doesn't persist for more than a tic
|
// it doesn't persist for more than a tic
|
||||||
actor._clone_release = true;
|
actor._clone_release = true;
|
||||||
|
let cloned = false;
|
||||||
// Wire activation allows the cloner to try every direction, searching clockwise
|
// Wire activation allows the cloner to try every direction, searching clockwise
|
||||||
for (let i = 0; i < (aggressive ? 4 : 1); i++) {
|
for (let i = 0; i < (aggressive ? 4 : 1); i++) {
|
||||||
// If the actor successfully moves, replace it with a new clone. As a special case,
|
// If the actor successfully moves, replace it with a new clone. As a special case,
|
||||||
@ -1546,14 +1547,6 @@ const TILE_TYPES = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (success) {
|
if (success) {
|
||||||
// Surprising edge case: if the actor immediately killed the player, do NOT
|
|
||||||
// spawn a new template, since the move was actually aborted
|
|
||||||
// FIXME this is inconsistent. the move was aborted because of an emergency
|
|
||||||
// failure handling case in move_to, but that doesn't make the step count as a
|
|
||||||
// failure. would this be fixed by making the player block all other actors?
|
|
||||||
if (level.state === 'failure')
|
|
||||||
break;
|
|
||||||
|
|
||||||
// FIXME add this underneath, just above the cloner, so the new actor is on top
|
// FIXME add this underneath, just above the cloner, so the new actor is on top
|
||||||
let new_template = new actor.constructor(type, direction);
|
let new_template = new actor.constructor(type, direction);
|
||||||
if (type.on_clone) {
|
if (type.on_clone) {
|
||||||
@ -1561,10 +1554,15 @@ const TILE_TYPES = {
|
|||||||
}
|
}
|
||||||
level.add_tile(new_template, me.cell);
|
level.add_tile(new_template, me.cell);
|
||||||
level.add_actor(new_template);
|
level.add_actor(new_template);
|
||||||
|
cloned = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
direction = DIRECTIONS[direction].right;
|
direction = DIRECTIONS[direction].right;
|
||||||
}
|
}
|
||||||
|
if (aggressive && ! cloned) {
|
||||||
|
// Restore original facing
|
||||||
|
level.set_actor_direction(actor, direction);
|
||||||
|
}
|
||||||
delete actor._clone_release;
|
delete actor._clone_release;
|
||||||
},
|
},
|
||||||
// Also clones on rising pulse or gray button
|
// Also clones on rising pulse or gray button
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user