diff --git a/src/engine/runtime.js b/src/engine/runtime.js index 7a4604348..92f98e434 100644 --- a/src/engine/runtime.js +++ b/src/engine/runtime.js @@ -672,7 +672,6 @@ class Runtime extends EventEmitter { * inactive threads after each iteration. */ _step () { - this._refreshTargets = false; // Find all edge-activated hats, and add them to threads to be evaluated. for (const hatType in this._hats) { if (!this._hats.hasOwnProperty(hatType)) continue; @@ -694,7 +693,11 @@ class Runtime extends EventEmitter { // @todo: Only render when this.redrawRequested or clones rendered. this.renderer.draw(); } - if (this._refreshTargets) this.emit(Runtime.TARGETS_UPDATE); + + if (this._refreshTargets) { + this.emit(Runtime.TARGETS_UPDATE); + this._refreshTargets = false; + } // @todo(vm#570) only emit if monitors has changed since last time. this.emit(Runtime.MONITORS_UPDATE, diff --git a/src/virtual-machine.js b/src/virtual-machine.js index 3bd41bbd4..cf4d0e636 100644 --- a/src/virtual-machine.js +++ b/src/virtual-machine.js @@ -332,9 +332,8 @@ class VirtualMachine extends EventEmitter { } if (newName && RESERVED_NAMES.indexOf(newName) === -1) { const names = this.runtime.targets - .filter(runtimeTarget => runtimeTarget.isSprite()) + .filter(runtimeTarget => runtimeTarget.isSprite() && runtimeTarget.id !== target.id) .map(runtimeTarget => runtimeTarget.sprite.name); - sprite.name = StringUtil.unusedName(newName, names); } this.emitTargetsUpdate(); diff --git a/test/unit/virtual-machine.js b/test/unit/virtual-machine.js index 73cefb8a2..37a62ff69 100644 --- a/test/unit/virtual-machine.js +++ b/test/unit/virtual-machine.js @@ -94,3 +94,18 @@ test('renameSprite increments from existing sprite names', t => { t.equal(vm.runtime.targets[0].sprite.name, 'that name2'); t.end(); }); + +test('renameSprite does not increment when renaming to the same name', t => { + const vm = new VirtualMachine(); + vm.emitTargetsUpdate = () => {}; + vm.runtime.targets = [{ + id: 'id1', + isSprite: () => true, + sprite: { + name: 'this name' + } + }]; + vm.renameSprite('id1', 'this name'); + t.equal(vm.runtime.targets[0].sprite.name, 'this name'); + t.end(); +});