def visitOr(blockcontext): operand1 = visitGeneric(blockcontext, "OPERAND1") if operand1 is None: operand1 = False operand2 = visitGeneric(blockcontext, "OPERAND2") if operand2 is None: operand2 = False return ["|", operand1, operand2]
def visitRepeat(blockcontext): block = blockcontext.block times = visitGeneric(blockcontext, "TIMES") if times == []: times = block.inputs["TIMES"][1][1] substack = visitSubstack(blockcontext, "SUBSTACK") return ["doRepeat", times, substack]
def visitSetvolumeto(blockcontext): block = blockcontext.block volume = visitGeneric(blockcontext, "VOLUME") if volume == []: volume = block.inputs['VOLUME'][1][1] return ["setVolumeTo:", volume]
def visitPlayuntildone(blockcontext): sound = visitGeneric(blockcontext, 'SOUND_MENU') return ['doPlaySoundAndWait', sound]
def visitSety(blockcontext): y = visitGeneric(blockcontext, "Y") return ["ypos:", y]
def visitSetsizeto(blockcontext): size = visitGeneric(blockcontext, "SIZE") return ["setSizeTo:", size]
def visitGlideto(blockcontext): secs = visitGeneric(blockcontext, "SECS") to = visitGeneric(blockcontext, "TO") log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(blockcontext.block.opcode, blockcontext.block.name)) return ["glideTo:", secs, to] #TODO: not in scratch2?
def visitChangexby(blockcontext): x = visitGeneric(blockcontext, "DX") return ["changeXposBy:", x]
def visitAddtolist(blockcontext): block = blockcontext.block list = block.fields["LIST"][0] item = visitGeneric(blockcontext, "ITEM") return ["append:toList:", item, list]
def visitSetPenHueToNumber(blockcontext): size = visitGeneric(blockcontext, "HUE") log.warn("[Scratch3] SetPenHue block possibly not available in Scratch2") return ["penHue:", size]
def visitGoforwardbackwardlayers(blockcontext): block = blockcontext.block direction = block.fields["FORWARD_BACKWARD"][0] change = visitGeneric(blockcontext, "NUM") return ["goBackByLayers:", change]
def visitChangevariableby(blockcontext): block = blockcontext.block variable = block.fields["VARIABLE"][0] value = visitGeneric(blockcontext, "VALUE") return ["changeVar:by:", variable, value]
def visitSeteffectto(blockcontext): block = blockcontext.block effect = block.fields["EFFECT"][0] value = visitGeneric(blockcontext, "VALUE") return ["setGraphicEffect:to:", effect, value]
def visitSayforsecs(blockcontext): message = visitGeneric(blockcontext, "MESSAGE") duration = visitGeneric(blockcontext, "SECS") return ["say:duration:elapsed:from:", message, duration]
def visitChangeeffectby(blockcontext): block = blockcontext.block effect = block.fields["EFFECT"][0] change = visitGeneric(blockcontext, "CHANGE") return ["changeGraphicEffect:by:", effect, change]
def visitChangePenSizeBy(blockcontext): sizechange = visitGeneric(blockcontext, "SIZE") return ["changePenSizeBy:", sizechange]
def visitInsertatlist(blockcontext): block = blockcontext.block list = block.fields["LIST"][0] item = visitGeneric(blockcontext, "ITEM") index = visitGeneric(blockcontext, "INDEX") return ["insert:at:ofList:", item, index, list]
def visitSetPenShadeToNumber(blockcontext): size = visitGeneric(blockcontext, "SHADE") return ["penShade:", size]
def visitReplaceitemoflist(blockcontext): block = blockcontext.block list = block.fields["LIST"][0] item = visitGeneric(blockcontext, "ITEM") index = visitGeneric(blockcontext, "INDEX") return ["setLine:ofList:to:", index, list, item]
def visitGoto(blockcontext): to = visitGeneric(blockcontext, "TO") return ["gotoSpriteOrMouse:", to]
def visitSetvariableto(blockcontext): block = blockcontext.block variable = block.fields["VARIABLE"][0] value = visitGeneric(blockcontext, "VALUE") return ["setVar:to:", variable, value]
def visitPointindirection(blockcontext): direction = visitGeneric(blockcontext, "DIRECTION") return ["heading:", direction]
def visitWhengreaterthan(blockcontext): block = blockcontext.block sensor = block.fields["WHENGREATERTHANMENU"][0].lower() value = visitGeneric(blockcontext, "VALUE") return ["whenSensorGreaterThan", sensor, value]
def visitSetx(blockcontext): x = visitGeneric(blockcontext, "X") return ["xpos:", x]
def visitBroadcastandwait(blockcontext): message = visitGeneric(blockcontext, "BROADCAST_INPUT") return ["doBroadcastAndWait", message]
def visitItemoflist(blockcontext): block = blockcontext.block list = block.fields["LIST"][0] index = visitGeneric(blockcontext, "INDEX") return ["getLine:ofList:", index, list]
def visitChangesizeby(blockcontext): size = visitGeneric(blockcontext, "CHANGE") return ["changeSizeBy:", size]
def visitBroadcast(blockcontext): message = visitGeneric(blockcontext, "BROADCAST_INPUT") return ["broadcast:", message]
def visitItemnumoflist(blockcontext): block = blockcontext.block list = block.fields["LIST"][0] item = visitGeneric(blockcontext, "ITEM") log.warn("[Scratch3] block {} ({}) possibly not available in Scratch2".format(block.opcode, block.name)) return ["itemNum:ofList:", list, item] #TODO: not in scratch2
def visitChangevolumeby(blockcontext): block = blockcontext.block volume = visitGeneric(blockcontext, "VOLUME") if volume == []: volume = block.inputs['VOLUME'][1][1] return ["changeVolumeBy:", volume]
def visitListcontainsitem(blockcontext): block = blockcontext.block list = block.fields["LIST"][0] item = visitGeneric(blockcontext, "ITEM") return ["list:contains:", list, item]
def visitPlay(blockcontext): sound = visitGeneric(blockcontext, 'SOUND_MENU') return ['playSound:', sound]
def visitSwitchcostumeto(blockcontext): costume = visitGeneric(blockcontext, "COSTUME") return ["lookLike:", costume]
def visitSetPenColorToColor(blockcontext): color = visitGeneric(blockcontext, "COLOR") return ["penColor:", color]
def visitSwitchbackdropto(blockcontext): backdrop = visitGeneric(blockcontext, "BACKDROP") return ["startScene", backdrop]
def visitSetPenSizeTo(blockcontext): size = visitGeneric(blockcontext, "SIZE") return ["penSize:", size]
def visitChangesizeby(blockcontext): size = visitGeneric(blockcontext, "CHANGE") return ["changeSizeBy:", size]
def visitChangePenShadeByNumber(blockcontext): size = visitGeneric(blockcontext, "SHADE") return ["changePenShadeBy:", size]
def visitSetsizeto(blockcontext): size = visitGeneric(blockcontext, "SIZE") return ["setSizeTo:", size]
def visitTurnleft(blockcontext): degrees = visitGeneric(blockcontext, "DEGREES") return ["turnLeft:", degrees]
def visitChangeeffectby(blockcontext): block = blockcontext.block effect = block.fields["EFFECT"][0] change = visitGeneric(blockcontext, "CHANGE") return ["changeGraphicEffect:by:", effect, change]
def visitGotoxy(blockcontext): x = visitGeneric(blockcontext, "X") y = visitGeneric(blockcontext, "Y") return ["gotoX:y:", x, y]
def visitSayforsecs(blockcontext): message = visitGeneric(blockcontext, "MESSAGE") duration = visitGeneric(blockcontext, "SECS") return ["say:duration:elapsed:from:", message, duration]
def visitGlidesecstoxy(blockcontext): secs = visitGeneric(blockcontext, "SECS") x = visitGeneric(blockcontext, "X") y = visitGeneric(blockcontext, "Y") return ["glideSecs:toX:y:elapsed:from:", secs, x, y]
def visitSeteffectto(blockcontext): block = blockcontext.block effect = block.fields["EFFECT"][0] value = visitGeneric(blockcontext, "VALUE") return ["setGraphicEffect:to:", effect, value]
def visitPointtowards(blockcontext): towards = visitGeneric(blockcontext, "TOWARDS") return ["pointTowards:", towards]
def visitGoforwardbackwardlayers(blockcontext): block = blockcontext.block direction = block.fields["FORWARD_BACKWARD"][0] change = visitGeneric(blockcontext, "NUM") return ["goBackByLayers:", change]
def visitMovesteps(blockcontext): steps = visitGeneric(blockcontext, "STEPS") return ["forward:", steps]
def visitBroadcastandwait(blockcontext): message = visitGeneric(blockcontext, "BROADCAST_INPUT") return ["doBroadcastAndWait", message]
def visitChangeyby(blockcontext): y = visitGeneric(blockcontext, "DY") return ["changeYposBy:", y]
def visitWhengreaterthan(blockcontext): block = blockcontext.block sensor = block.fields["WHENGREATERTHANMENU"][0].lower() value = visitGeneric(blockcontext, "VALUE") return ["whenSensorGreaterThan", sensor, value]
def visitTurnright(blockcontext): degrees = visitGeneric(blockcontext, "DEGREES") return ["turnRight:", degrees]
def visitBroadcast(blockcontext): message = visitGeneric(blockcontext, "BROADCAST_INPUT") return ["broadcast:", message]