internal override async Task DetachEntityAsync(IDetachArgs e) { if (IsOpen) { await base.DetachEntityAsync(e); } else { e.Seal(); } }
internal override Task DetachEntityAsync(IDetachArgs e) { if (!IsExtended && e.CurrentMove.Entity is PistonEntity) { e.Result = new PistonTile(TriggerPosition, Direction, true); } else { throw new InvalidOperationException("The piston has an invalid entity on it"); } return Task.CompletedTask; }
internal override Task DetachEntityAsync(IDetachArgs e) { if (e.CurrentMove.Offset.IsDirection && !GetOutDirections().Contains(e.CurrentMove.Offset)) { // The entity tries to leave the tile across a wall side of the corner e.Seal(); } else { e.Result = WithoutEntity(this); } return Task.CompletedTask; }
internal override Task DetachEntityAsync(IDetachArgs e) { e.Seal(); return Task.CompletedTask; }