automatic-assessments
Version:
Automatic assessment of Marty and Scratch 3.0 projects
59 lines (58 loc) • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WAIT_UNTIL_OPCODE = exports.STOP_OPCODE = exports.WAIT_OPCODE = void 0;
const Analyzer_1 = require("../Analyzer");
exports.WAIT_OPCODE = 'control_wait';
exports.STOP_OPCODE = 'control_stop';
exports.WAIT_UNTIL_OPCODE = 'control_wait_until';
class Synchronisation extends Analyzer_1.default {
constructor(targets) {
super();
this.score = 0;
this.targets = targets;
}
execute() {
this.firstPointWait();
this.twoPointsStop();
this.threePointsWaitUntil();
return this.score;
}
firstPointWait() {
// one point when using wait block (and it has at least a child)
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
if (_block.opcode === exports.WAIT_OPCODE && _block.next) {
this.score = 1;
break;
}
}
}
}
twoPointsStop() {
// twop points when using stop block (and it has a parent)
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
if (_block.opcode === exports.STOP_OPCODE && _block.parent) {
this.score = 2;
break;
}
}
}
}
threePointsWaitUntil() {
// three points when using wait until (with a child and an input)
for (const target of this.targets) {
for (const _blockKey of Object.keys(target.blocks._blocks)) {
const _block = target.blocks._blocks[_blockKey];
const inputsLength = Object.keys(_block.inputs).length;
if (_block.opcode === exports.WAIT_UNTIL_OPCODE && _block.next && inputsLength) {
this.score = 3;
break;
}
}
}
}
}
exports.default = Synchronisation;