kopia lustrzana https://github.com/backface/turtlestitch
fixed scanning for senders and receivers of messages for new BROADCAST scheme
rodzic
e7801f1ee2
commit
c852c9849f
|
@ -50,6 +50,7 @@
|
|||
### 2021-10-29
|
||||
* objects: flood-fill edge case fix, thanks, Dariusz!
|
||||
* gui: removed obsolete dev comments
|
||||
* blocks, objects: fixed scanning for senders and receivers of messages for new BROADCAST scheme
|
||||
|
||||
### 2021-10-28
|
||||
* introduced default values for expandable slot specs
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<script src="src/morphic.js?version=2021-07-09"></script>
|
||||
<script src="src/symbols.js?version=2021-03-03"></script>
|
||||
<script src="src/widgets.js?version=2021-10-26"></script>
|
||||
<script src="src/blocks.js?version=2021-10-28"></script>
|
||||
<script src="src/blocks.js?version=2021-10-29"></script>
|
||||
<script src="src/threads.js?version=2021-10-22"></script>
|
||||
<script src="src/objects.js?version=2021-10-29"></script>
|
||||
<script src="src/scenes.js?version=2021-10-12"></script>
|
||||
|
|
|
@ -160,7 +160,7 @@ CustomCommandBlockMorph, ToggleButtonMorph, DialMorph, SnapExtensions*/
|
|||
|
||||
// Global stuff ////////////////////////////////////////////////////////
|
||||
|
||||
modules.blocks = '2021-October-28';
|
||||
modules.blocks = '2021-October-29';
|
||||
|
||||
var SyntaxElementMorph;
|
||||
var BlockMorph;
|
||||
|
@ -3196,14 +3196,19 @@ BlockMorph.prototype.userMenu = function () {
|
|||
};
|
||||
|
||||
BlockMorph.prototype.showMessageUsers = function () {
|
||||
// for the following selectors:
|
||||
// ['doBroadcast', 'doBroadcastAndWait',
|
||||
// 'receiveMessage', 'receiveOnClone', 'receiveGo']
|
||||
|
||||
var ide = this.parentThatIsA(IDE_Morph) ||
|
||||
this.parentThatIsA(BlockEditorMorph)
|
||||
.target.parentThatIsA(IDE_Morph),
|
||||
corral = ide.corral,
|
||||
getter = (this.selector.indexOf('receive') === 0) ?
|
||||
'allSendersOf' : 'allHatBlocksFor',
|
||||
isSender = this.selector.indexOf('doBroadcast') === 0,
|
||||
isReceiver = this.selector.indexOf('receive') === 0,
|
||||
getter = isReceiver ? 'allSendersOf' : 'allHatBlocksFor',
|
||||
inputs = this.inputs(),
|
||||
message, receiverName, knownSenders;
|
||||
message, receiverSlot, receiverName, knownSenders;
|
||||
|
||||
if (this.selector === 'receiveGo') {
|
||||
message = '__shout__go__';
|
||||
|
@ -3211,33 +3216,41 @@ BlockMorph.prototype.showMessageUsers = function () {
|
|||
message = '__clone__init__';
|
||||
} else if (inputs[0] instanceof InputSlotMorph) {
|
||||
message = inputs[0].evaluate();
|
||||
if (isSender && message instanceof Array) {
|
||||
message = message[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (((this.selector === 'doBroadcast') &&
|
||||
inputs[1] instanceof InputSlotMorph)) {
|
||||
receiverName = this.inputs()[1].evaluate();
|
||||
} else if (this.selector.indexOf('receive') === 0) {
|
||||
if (isSender) {
|
||||
receiverSlot = inputs[1].inputs()[0];
|
||||
if (receiverSlot instanceof InputSlotMorph) {
|
||||
receiverName = receiverSlot.evaluate();
|
||||
if (receiverName instanceof Array) { // ['all']
|
||||
receiverName = null;
|
||||
}
|
||||
}
|
||||
} else if (isReceiver) {
|
||||
receiverName = this.scriptTarget().name;
|
||||
}
|
||||
|
||||
if (message !== '') {
|
||||
if (getter === 'allSendersOf') {
|
||||
if (isReceiver) {
|
||||
knownSenders = ide.stage.globalBlocksSending(message, receiverName);
|
||||
}
|
||||
corral.frame.contents.children.concat(corral.stageIcon).forEach(
|
||||
icon => {
|
||||
if (icon.object &&
|
||||
((this.selector !== 'doBroadcast' ||
|
||||
receiverName === icon.object.name) &&
|
||||
(icon.object[getter](
|
||||
icon.object[getter](
|
||||
message,
|
||||
receiverName,
|
||||
knownSenders
|
||||
).length > 0))
|
||||
).length
|
||||
) {
|
||||
icon.flash();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
);
|
||||
}
|
||||
};
|
||||
|
@ -3247,24 +3260,31 @@ BlockMorph.prototype.isSending = function (message, receiverName, known = []) {
|
|||
message = message.toString();
|
||||
}
|
||||
return this.allChildren().some(morph => {
|
||||
var event, eventReceiver;
|
||||
var inputs, event, receiverSlot, eventReceiver;
|
||||
if (morph.isCustomBlock &&
|
||||
morph.isGlobal &&
|
||||
contains(known, morph.definition)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
if ((morph.selector) &&
|
||||
contains(
|
||||
['doBroadcast', 'doBroadcastAndWait'],
|
||||
morph.selector)
|
||||
) {
|
||||
event = morph.inputs()[0].evaluate();
|
||||
eventReceiver = morph.inputs()[1].evaluate();
|
||||
return receiverName === eventReceiver &&
|
||||
if (morph.selector && morph.selector.indexOf('doBroadcast') === 0) {
|
||||
inputs = morph.inputs();
|
||||
event = inputs[0].evaluate();
|
||||
if (event instanceof Array) {
|
||||
event = event[0];
|
||||
}
|
||||
receiverSlot = inputs[1].inputs()[0];
|
||||
if (receiverSlot instanceof InputSlotMorph) {
|
||||
eventReceiver = receiverSlot.evaluate();
|
||||
if (eventReceiver instanceof Array) { // ['all']
|
||||
eventReceiver = null;
|
||||
}
|
||||
}
|
||||
return (!eventReceiver || (receiverName === eventReceiver)) &&
|
||||
((event === message) ||
|
||||
(message instanceof Array &&
|
||||
message[0] === 'any message'));
|
||||
message[0] === 'any message' &&
|
||||
event !== '__shout__go__'));
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
|
|
@ -9718,7 +9718,7 @@ StageMorph.prototype.reportPenTrailsAsCostume = function () {
|
|||
StageMorph.prototype.globalBlocksSending = function (message, receiverName) {
|
||||
// "transitive hull"
|
||||
var all = this.globalBlocks.filter(
|
||||
def =>def.isSending(message, receiverName)
|
||||
def => def.isSending(message, receiverName)
|
||||
);
|
||||
this.globalBlocks.forEach(def => {
|
||||
if (def.collectDependencies().some(dep => contains(all, dep))) {
|
||||
|
|
Ładowanie…
Reference in New Issue