From 949cd139a1d64ee9448ef76ebec9182491223ae1 Mon Sep 17 00:00:00 2001 From: ft-Demo <fischertechnik-team@fischer.de> Date: Mon, 25 Oct 2021 06:09:42 +0000 Subject: [PATCH] commit by robo pro coding --- lib/camera.py | 6 +- lib/camera.xml | 2 +- omniwheels_x4_soccer_goal.blockly | 4106 +++++++++++++++-------------- omniwheels_x4_soccer_goal.py | 114 +- 4 files changed, 2246 insertions(+), 1982 deletions(-) diff --git a/lib/camera.py b/lib/camera.py index d557223..64e21ac 100644 --- a/lib/camera.py +++ b/lib/camera.py @@ -8,7 +8,7 @@ TXT_M_USB_1_camera.set_width(320) TXT_M_USB_1_camera.set_fps(15) TXT_M_USB_1_camera.start() -ball_detector = txt_factory.camera_factory.create_ball_detector(0, 0, 320, 240, 5, 80, -100, 100, [230,133,82], 20) +ball_detector = txt_factory.camera_factory.create_ball_detector(0, 0, 320, 240, 5, 80, -100, 100, [225,146,124], 20) TXT_M_USB_1_camera.add_detector(ball_detector) blocked_area_right = txt_factory.camera_factory.create_blocked_area(240, 190, 80, 50) @@ -17,9 +17,9 @@ TXT_M_USB_1_camera.add_blocked_area(blocked_area_right) blocked_area_left = txt_factory.camera_factory.create_blocked_area(0, 190, 80, 50) TXT_M_USB_1_camera.add_blocked_area(blocked_area_left) -ball_detector_goal_right = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [182,142,47], 25) +ball_detector_goal_right = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [203,163,120], 25) TXT_M_USB_1_camera.add_detector(ball_detector_goal_right) -ball_detector_goal_left = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [157,31,43], 25) +ball_detector_goal_left = txt_factory.camera_factory.create_ball_detector(0, 70, 320, 120, 10, 120, -100, 100, [69,110,52], 25) TXT_M_USB_1_camera.add_detector(ball_detector_goal_left) diff --git a/lib/camera.xml b/lib/camera.xml index 3aafaee..552d554 100644 --- a/lib/camera.xml +++ b/lib/camera.xml @@ -1 +1 @@ -<xml type="camera" verion="1" version="2" rotate="0" height="240" width="320" fps="15"><item id="2" class="BallDetector"><name>ball_detector</name><color>#e68552</color><tolerance>20</tolerance><min_ball_diameter>5</min_ball_diameter><max_ball_diameter>80</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>0</y><width>320</width><height>240</height></geometry></item><item id="4" class="BlockedArea"><name>blocked_area_right</name><geometry><x>240</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="5" class="BlockedArea"><name>blocked_area_left</name><geometry><x>0</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="12" class="BallDetector"><name>ball_detector_goal_right</name><color>#b68e2f</color><tolerance>25</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item><item id="11" class="BallDetector"><name>ball_detector_goal_left</name><color>#9d1f2b</color><tolerance>25</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item></xml> \ No newline at end of file +<xml type="camera" verion="1" version="2" rotate="0" height="240" width="320" fps="15"><item id="2" class="BallDetector"><name>ball_detector</name><color>#e1927c</color><tolerance>20</tolerance><min_ball_diameter>5</min_ball_diameter><max_ball_diameter>80</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>0</y><width>320</width><height>240</height></geometry></item><item id="4" class="BlockedArea"><name>blocked_area_right</name><geometry><x>240</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="5" class="BlockedArea"><name>blocked_area_left</name><geometry><x>0</x><y>190</y><width>80</width><height>50</height></geometry></item><item id="12" class="BallDetector"><name>ball_detector_goal_right</name><color>#cba378</color><tolerance>25</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item><item id="11" class="BallDetector"><name>ball_detector_goal_left</name><color>#456e34</color><tolerance>25</tolerance><min_ball_diameter>10</min_ball_diameter><max_ball_diameter>120</max_ball_diameter><start_range_value>-100</start_range_value><end_range_value>100</end_range_value><geometry><x>0</x><y>70</y><width>320</width><height>120</height></geometry></item></xml> \ No newline at end of file diff --git a/omniwheels_x4_soccer_goal.blockly b/omniwheels_x4_soccer_goal.blockly index 1b2c15a..b082732 100644 --- a/omniwheels_x4_soccer_goal.blockly +++ b/omniwheels_x4_soccer_goal.blockly @@ -6,16 +6,17 @@ <variable id="v3eHF0atAL+ouaa{W$=m">ts_ball</variable> <variable id=";Ki:[qYaZnowqSa`]/aW">ts_goal_left</variable> <variable id="z^z{Ev+IMfS6[W1raY;l">ts_goal_right</variable> + <variable id="fPH`.@]riH+=v{,A)bP5">cmd</variable> <variable id="S~)Q:X5BHfQZe.ZJfdE)">factor_y</variable> <variable id="S4.mduNQC(va3iR{oSdB">posx_ball</variable> - <variable id=")rK_fR,m=]b(j[{.CtBj">v_slow</variable> <variable id="5@U(%o_ghQ1;jiB#odH8">counters</variable> - <variable id="2Lkg^#Z.uZy(%Nr[26)6">search_dir_left</variable> <variable id="rOE96qIEVvA5gBu*K^?x">factor_ball_rot</variable> <variable id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</variable> <variable id="=2ARo+;2DS07SU~j29Fk">posx_goal</variable> - <variable id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</variable> + <variable id="2Lkg^#Z.uZy(%Nr[26)6">search_dir_left</variable> + <variable id=")rK_fR,m=]b(j[{.CtBj">v_slow</variable> <variable id="Ym/+Qo0YZe25;%N1d!*f">x_min</variable> + <variable id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</variable> <variable id="2G]XEQ3Lhl$dG]=:]8Ge">x_max</variable> <variable id=";S3?%3)**s[[l~Aq3*,{">v_var_ball_ypos</variable> <variable id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</variable> @@ -216,1441 +217,1561 @@ </block> </value> <next> - <block type="util_wait_for" id="psY%VZ5++RBl5.z;}C^B"> - <field name="format">s</field> - <value name="value"> - <shadow type="math_number" id="((-m~`=x]Jlg;bgN9QH!"> - <field name="NUM">2</field> - </shadow> + <block type="variables_set" id="!eP!#y!o25=Kc{0p7GDs"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="vc4C]$ok!Yk@_eIUD8L)"> + <field name="TEXT">NONE</field> + </block> </value> <next> - <block type="loop_endless" id="V,Gw25li,3_,;92QCQLj"> - <statement name="DO"> - <block type="procedures_callnoreturn" id="O6U,(~H4n-^0fP^x)_,{"> - <mutation name="checkTimeouts"/> - <next> - <block type="controls_if" id="LIzedxH5dle@WM!lcbM#"> - <value name="IF0"> - <block type="display_get_switch_state" id="/xkM7bR[)*BEY41xd)JA"> - <field name="instance_name">txt_switch_active</field> - <field name="property_name">checked</field> - </block> - </value> - <statement name="DO0"> - <block type="controls_if" id="MN`F(]itK#DR^wQxXz,."> - <mutation elseif="5" else="1"/> + <block type="util_wait_for" id="psY%VZ5++RBl5.z;}C^B"> + <field name="format">s</field> + <value name="value"> + <shadow type="math_number" id="((-m~`=x]Jlg;bgN9QH!"> + <field name="NUM">2</field> + </shadow> + </value> + <next> + <block type="loop_endless" id="V,Gw25li,3_,;92QCQLj"> + <statement name="DO"> + <block type="procedures_callnoreturn" id="O6U,(~H4n-^0fP^x)_,{"> + <mutation name="checkTimeouts"/> + <next> + <block type="controls_if" id="LIzedxH5dle@WM!lcbM#"> <value name="IF0"> - <block type="logic_operation" id="4(iam8G0^]{P-vv8rZ~f" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_operation" id="~/u3*G]LZK9pvIFTV#^q" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="D%l9OSY`vM-xzaB}nY1r"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="92sOCNRLiogo~;}oI++#"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id="UJ,gxhveD7#?I9I*:A(r"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="Nd,4OywJ0ocibay-klwh"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="xiIzl/p_!nb4$eUrqxet"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id="z0gO+`Su.;sXQ(oI,(y^"/> - </value> - </block> - </value> - </block> - </value> - <value name="B"> - <block type="logic_operation" id="n+p!xL0Cy:ManlHugN9b" inline="false"> + <block type="display_get_switch_state" id="/xkM7bR[)*BEY41xd)JA"> + <field name="instance_name">txt_switch_active</field> + <field name="property_name">checked</field> + </block> + </value> + <statement name="DO0"> + <block type="controls_if" id="MN`F(]itK#DR^wQxXz,."> + <mutation elseif="6" else="1"/> + <value name="IF0"> + <block type="logic_operation" id="4(iam8G0^]{P-vv8rZ~f" inline="false"> <field name="OP">AND</field> <value name="A"> - <block type="logic_compare" id="Vs3%xCaz|qN@}C*=Tq3$"> - <field name="OP">EQ</field> + <block type="logic_operation" id="~/u3*G]LZK9pvIFTV#^q" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="lists_getIndex" id="~GuPJ/(BunJIEuttSlw5"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="GddxTJE,O^,fb~pxb3(b"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="D%l9OSY`vM-xzaB}nY1r"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="92sOCNRLiogo~;}oI++#"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="B~Ic{tkFNcdReHWMqxf6"> - <field name="NUM">1</field> - </block> + <value name="B"> + <block type="logic_null" id="UJ,gxhveD7#?I9I*:A(r"/> </value> </block> </value> <value name="B"> - <block type="logic_null" id="zdJr-qt**l*{;JppUgmP"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="1IfAVQZEPrL6SRY?6A28"> - <field name="OP">EQ</field> - <value name="A"> - <block type="lists_getIndex" id="Il7jHRe($kU8GqYG+eR#"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="I@,t{sciNOi(fg$?r)#f"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="Nd,4OywJ0ocibay-klwh"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="xiIzl/p_!nb4$eUrqxet"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id=",RX#r,ztOfES#y;BmliI"> - <field name="NUM">2</field> - </block> + <value name="B"> + <block type="logic_null" id="z0gO+`Su.;sXQ(oI,(y^"/> </value> </block> </value> - <value name="B"> - <block type="logic_null" id="woPk%eJHq,DN-n%_Z+nD"/> - </value> </block> </value> - </block> - </value> - </block> - </value> - <statement name="DO0"> - <block type="variables_set" id="=B4Rj[z{i:0)u!6?C.@u"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="Vz)~xH3AGhNl8(w~ZeE1"> - <field name="TEXT">ONLY_BALL</field> - </block> - </value> - <next> - <block type="controls_if" id="+oz+[YfRRkvCLn10-B4d"> - <mutation elseif="2" else="1"/> - <value name="IF0"> - <block type="logic_operation" id="^asrJKsemc}^7|@CcyFs" inline="false"> + <value name="B"> + <block type="logic_operation" id="n+p!xL0Cy:ManlHugN9b" inline="false"> <field name="OP">AND</field> <value name="A"> - <block type="logic_compare" id="TwsU8jOZc$*pZ+:EbKo8"> - <field name="OP">GTE</field> + <block type="logic_compare" id="Vs3%xCaz|qN@}C*=Tq3$"> + <field name="OP">EQ</field> <value name="A"> - <block type="variables_get" id="0Ipt`Bjn]B09@rni:!Bt"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="lists_getIndex" id="~GuPJ/(BunJIEuttSlw5"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="GddxTJE,O^,fb~pxb3(b"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="B~Ic{tkFNcdReHWMqxf6"> + <field name="NUM">1</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="Y{MczN`(?*Y74i0iF|bh"> - <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> - </block> + <block type="logic_null" id="zdJr-qt**l*{;JppUgmP"/> </value> </block> </value> <value name="B"> - <block type="logic_compare" id="s:+dT(r%}]H#_Y~wHeTE"> - <field name="OP">LTE</field> + <block type="logic_compare" id="1IfAVQZEPrL6SRY?6A28"> + <field name="OP">EQ</field> <value name="A"> - <block type="variables_get" id="mW,P#kP}6gH1+ZmkJ/L8"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="lists_getIndex" id="Il7jHRe($kU8GqYG+eR#"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="I@,t{sciNOi(fg$?r)#f"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id=",RX#r,ztOfES#y;BmliI"> + <field name="NUM">2</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="8:8~qf8*mh3[Jhzmk^A%"> - <field name="VAR" id="2G]XEQ3Lhl$dG]=:]8Ge">x_max</field> - </block> + <block type="logic_null" id="woPk%eJHq,DN-n%_Z+nD"/> </value> </block> </value> </block> </value> - <statement name="DO0"> - <block type="controls_if" id="Bp.|BTULdy(,]aAoN,l["> - <mutation elseif="3" else="1"/> + </block> + </value> + <statement name="DO0"> + <block type="variables_set" id="=B4Rj[z{i:0)u!6?C.@u"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="Vz)~xH3AGhNl8(w~ZeE1"> + <field name="TEXT">BALL_NO_GOAL</field> + </block> + </value> + <next> + <block type="controls_if" id="+oz+[YfRRkvCLn10-B4d"> + <mutation elseif="2" else="1"/> <value name="IF0"> - <block type="logic_compare" id="Y-Fctm`Flpx7MN)@x%-u"> - <field name="OP">LTE</field> + <block type="logic_operation" id="^asrJKsemc}^7|@CcyFs" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="=t4?53|MsS#r1P:M`ZP4"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="logic_compare" id="TwsU8jOZc$*pZ+:EbKo8"> + <field name="OP">GTE</field> + <value name="A"> + <block type="variables_get" id="0Ipt`Bjn]B09@rni:!Bt"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="Y{MczN`(?*Y74i0iF|bh"> + <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="nkMArfis6_;l59N|,9yJ"> - <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> + <block type="logic_compare" id="s:+dT(r%}]H#_Y~wHeTE"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="mW,P#kP}6gH1+ZmkJ/L8"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="8:8~qf8*mh3[Jhzmk^A%"> + <field name="VAR" id="2G]XEQ3Lhl$dG]=:]8Ge">x_max</field> + </block> + </value> </block> </value> </block> </value> <statement name="DO0"> - <block type="procedures_callnoreturn" id="n=@SEs?8o@WHm;Ad7A2k" inline="true"> - <mutation name="fwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="fZlf#E.-0%/`U+X#~UvW"> - <field name="VAR" id="1idj3sw*{G$j`2:II{^5">v_fast</field> - </block> - </value> - </block> - </statement> - <value name="IF1"> - <block type="logic_operation" id=".cYqj,XlTza-:6y_=EOC" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="#%BG`,J51l+POEj{Q4Vj"> - <field name="OP">GT</field> + <block type="controls_if" id="Bp.|BTULdy(,]aAoN,l["> + <mutation elseif="3" else="1"/> + <value name="IF0"> + <block type="logic_compare" id="Y-Fctm`Flpx7MN)@x%-u"> + <field name="OP">LTE</field> <value name="A"> - <block type="variables_get" id="KDP(VY1Jh?W1cz~WWh=,"> + <block type="variables_get" id="=t4?53|MsS#r1P:M`ZP4"> <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> <value name="B"> - <block type="variables_get" id="L/RedQ[=!jNwBI,ivSt/"> + <block type="variables_get" id="nkMArfis6_;l59N|,9yJ"> <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> </block> </value> </block> </value> - <value name="B"> - <block type="logic_compare" id="!r4f:gx)bYp.aGG:gEck"> - <field name="OP">LTE</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="n=@SEs?8o@WHm;Ad7A2k" inline="true"> + <mutation name="fwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="fZlf#E.-0%/`U+X#~UvW"> + <field name="VAR" id="1idj3sw*{G$j`2:II{^5">v_fast</field> + </block> + </value> + </block> + </statement> + <value name="IF1"> + <block type="logic_operation" id=".cYqj,XlTza-:6y_=EOC" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="t$DoS#o~XI)VEHk9e7sN"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="logic_compare" id="#%BG`,J51l+POEj{Q4Vj"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="KDP(VY1Jh?W1cz~WWh=,"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="L/RedQ[=!jNwBI,ivSt/"> + <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="lEUT-.WcN]l3/82:-voJ"> - <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> + <block type="logic_compare" id="!r4f:gx)bYp.aGG:gEck"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="t$DoS#o~XI)VEHk9e7sN"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="lEUT-.WcN]l3/82:-voJ"> + <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> + </block> + </value> </block> </value> </block> </value> - </block> - </value> - <statement name="DO1"> - <block type="procedures_callnoreturn" id="1[SBSPn+FQ.[P7YtUwNZ" inline="true"> - <mutation name="fwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="~7B*FKz:f^U{s6BN1TJ9"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + <statement name="DO1"> + <block type="procedures_callnoreturn" id="1[SBSPn+FQ.[P7YtUwNZ" inline="true"> + <mutation name="fwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="~7B*FKz:f^U{s6BN1TJ9"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> </block> - </value> - </block> - </statement> - <value name="IF2"> - <block type="logic_operation" id=":2kiZ:)l/(drayLhwske" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="dKOwmYr|Z6CW(+u8.a:w"> - <field name="OP">GT</field> + </statement> + <value name="IF2"> + <block type="logic_operation" id=":2kiZ:)l/(drayLhwske" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="_PZg0?|Eka9OOdKCVIhZ"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="logic_compare" id="dKOwmYr|Z6CW(+u8.a:w"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="_PZg0?|Eka9OOdKCVIhZ"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id=".5Q?xw/;CtWi-HzsEBhp"> + <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id=".5Q?xw/;CtWi-HzsEBhp"> - <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> + <block type="logic_compare" id="({,ER8#k!G3+tpPl645Q"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="QB39f^ga_-f?bwb+!.8X"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="qkncjacBYB1~0@aF1Q[x"> + <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> + </block> + </value> </block> </value> </block> </value> - <value name="B"> - <block type="logic_compare" id="({,ER8#k!G3+tpPl645Q"> + <statement name="DO2"> + <block type="procedures_callnoreturn" id="5?xr%Un4{ZZP/*kbTrS4"> + <mutation name="turnBallLeft"/> + </block> + </statement> + <value name="IF3"> + <block type="logic_compare" id="O3!qDGS(I#FcP9l5t9T!"> <field name="OP">LTE</field> <value name="A"> - <block type="variables_get" id="QB39f^ga_-f?bwb+!.8X"> + <block type="variables_get" id="a_^h(hS^A_Nr^XWwIDo9"> <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> <value name="B"> - <block type="variables_get" id="qkncjacBYB1~0@aF1Q[x"> + <block type="variables_get" id="cgnlj~O=P[`vJ5ggLQ{z"> <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> </block> </value> </block> </value> + <statement name="DO3"> + <block type="procedures_callnoreturn" id=";$*URO!$mNp;(}~rEzSA" inline="true"> + <mutation name="bwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="[3C}+lMgr=zfSwjcYdsJ"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + </block> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="sx~{uZ4bCDN4vbG6oz~)"> + <mutation name="stop"/> + </block> + </statement> + </block> + </statement> + <value name="IF1"> + <block type="logic_compare" id="@i?;*nt)I.q@3:as9$CV"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="r6YxtH4C]YX0#d={f!-G"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="/*nplOY#VKPMyS,KOq3!"> + <field name="VAR" id="2G]XEQ3Lhl$dG]=:]8Ge">x_max</field> + </block> + </value> </block> </value> - <statement name="DO2"> - <block type="procedures_callnoreturn" id="5?xr%Un4{ZZP/*kbTrS4"> - <mutation name="turnBallLeft"/> + <statement name="DO1"> + <block type="procedures_callnoreturn" id="Do:{V-Htoxi(Ky;5q%7)"> + <mutation name="right"> + <arg name="v"/> + <arg name="ticks"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id=",KoGdtd-~NDCr4a3[S}!"> + <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </block> + </value> + <value name="ARG1"> + <block type="math_constrain" id="O(GD0npMQ5}pU7S_p6Fw" inline="false"> + <value name="VALUE"> + <block type="math_arithmetic" id="EmeRL7tak./N9g?B@nFs"> + <field name="OP">MULTIPLY</field> + <value name="A"> + <block type="variables_get" id="($1]A%(r+nV+-me@mi{*"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="5*ed5[K7:%|#-rdvwe2p"> + <field name="VAR" id="rOE96qIEVvA5gBu*K^?x">factor_ball_rot</field> + </block> + </value> + </block> + </value> + <value name="LOW"> + <block type="math_number" id="ex%*G*X[(1UM%,lV]FfW"> + <field name="NUM">3</field> + </block> + </value> + <value name="HIGH"> + <block type="math_number" id="nqm#GPG6WTZ|}UMKIt!{"> + <field name="NUM">100</field> + </block> + </value> + </block> + </value> </block> </statement> - <value name="IF3"> - <block type="logic_compare" id="O3!qDGS(I#FcP9l5t9T!"> - <field name="OP">LTE</field> + <value name="IF2"> + <block type="logic_compare" id="sFua#TKb}~WWPqj6KeIW"> + <field name="OP">LT</field> <value name="A"> - <block type="variables_get" id="a_^h(hS^A_Nr^XWwIDo9"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="variables_get" id="J{E0oBqm),8kwbHyQ?=."> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> <value name="B"> - <block type="variables_get" id="cgnlj~O=P[`vJ5ggLQ{z"> - <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> + <block type="variables_get" id=".ts{wyW$c]RydnDM,}dN"> + <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> </block> </value> </block> </value> - <statement name="DO3"> - <block type="procedures_callnoreturn" id=";$*URO!$mNp;(}~rEzSA" inline="true"> - <mutation name="bwd_v"> + <statement name="DO2"> + <block type="procedures_callnoreturn" id="#7@$9Gz4rn?uePi|!w5H"> + <mutation name="left"> <arg name="v"/> + <arg name="ticks"/> </mutation> <value name="ARG0"> - <block type="variables_get" id="[3C}+lMgr=zfSwjcYdsJ"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + <block type="variables_get" id="Ur=9P[d2~h+UuLiecS=0"> + <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </block> + </value> + <value name="ARG1"> + <block type="math_constrain" id="W3t]erG4jM/-7Ha9Rz8=" inline="false"> + <value name="VALUE"> + <block type="math_arithmetic" id=";7U*){*?kwgf!k^}}5GA"> + <field name="OP">MULTIPLY</field> + <value name="A"> + <block type="variables_get" id="ii5E[ARI)`Bgg5KUe]}u"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="_rWdYF]99IuNPR?jeS*v"> + <field name="VAR" id="rOE96qIEVvA5gBu*K^?x">factor_ball_rot</field> + </block> + </value> + </block> + </value> + <value name="LOW"> + <block type="math_number" id="fC}]TN}rkpW?/cte-Bp]"> + <field name="NUM">3</field> + </block> + </value> + <value name="HIGH"> + <block type="math_number" id="8+tZg^1UjmO}E,sNn-t{"> + <field name="NUM">100</field> + </block> + </value> </block> </value> </block> </statement> <statement name="ELSE"> - <block type="procedures_callnoreturn" id="sx~{uZ4bCDN4vbG6oz~)"> + <block type="procedures_callnoreturn" id="K2~d9j?nrPh-CWpCKZ^I"> <mutation name="stop"/> </block> </statement> </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id="@i?;*nt)I.q@3:as9$CV"> - <field name="OP">GT</field> + </next> + </block> + </statement> + <value name="IF1"> + <block type="logic_operation" id="B~L1BuQh-S6uKm^YJSgH" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_operation" id="4bB{1Bu{%4*rAe!/uepL" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="r6YxtH4C]YX0#d={f!-G"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="logic_compare" id="*p.1tBx0!3(A,.#v~}gR"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="JhBQ6%W7fhLicBS4$+~r"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="/pF(LOrFaYg`Z;:T=pMq"/> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="/*nplOY#VKPMyS,KOq3!"> - <field name="VAR" id="2G]XEQ3Lhl$dG]=:]8Ge">x_max</field> - </block> - </value> - </block> - </value> - <statement name="DO1"> - <block type="procedures_callnoreturn" id="Do:{V-Htoxi(Ky;5q%7)"> - <mutation name="right"> - <arg name="v"/> - <arg name="ticks"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id=",KoGdtd-~NDCr4a3[S}!"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + <block type="logic_compare" id="|rcsXSAUj_o}mh1L:hw3"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="V1Jj,Q+-!7UMu,ag}Y2#"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="b7),FwxGz-g+3(2a:iAH"/> + </value> </block> </value> - <value name="ARG1"> - <block type="math_constrain" id="O(GD0npMQ5}pU7S_p6Fw" inline="false"> - <value name="VALUE"> - <block type="math_arithmetic" id="EmeRL7tak./N9g?B@nFs"> - <field name="OP">MULTIPLY</field> - <value name="A"> - <block type="variables_get" id="($1]A%(r+nV+-me@mi{*"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_operation" id="fGq*Z2TDY5Aiyb._(iWw" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_compare" id="@zlHHSd5%+h?_A?s;121"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="lists_getIndex" id="s5?^~_8K{8Ds{9:#%k6@"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="O/m@rtsP1-]GZu;z!Kd7"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> - <value name="B"> - <block type="variables_get" id="5*ed5[K7:%|#-rdvwe2p"> - <field name="VAR" id="rOE96qIEVvA5gBu*K^?x">factor_ball_rot</field> + <value name="AT"> + <block type="math_number" id="AHQ$-$-`kl9D]lvFKqEw"> + <field name="NUM">1</field> </block> </value> </block> </value> - <value name="LOW"> - <block type="math_number" id="ex%*G*X[(1UM%,lV]FfW"> - <field name="NUM">3</field> - </block> + <value name="B"> + <block type="logic_null" id="c0`hO)W_@*rN3v3J#n/b"/> </value> - <value name="HIGH"> - <block type="math_number" id="nqm#GPG6WTZ|}UMKIt!{"> - <field name="NUM">100</field> + </block> + </value> + <value name="B"> + <block type="logic_compare" id="ppt3KZ(DNQQ?lul~f,#i"> + <field name="OP">EQ</field> + <value name="A"> + <block type="lists_getIndex" id="*LHs;5s*!AaP%zlD5e]o"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="%*W`_VauA#TUT8Bhr(l["> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="2~D!AD)saoFre@h_@fqZ"> + <field name="NUM">2</field> + </block> + </value> </block> </value> + <value name="B"> + <block type="logic_null" id="oSv:/]3N6Gn3|DbI0mHC"/> + </value> </block> </value> </block> - </statement> - <value name="IF2"> - <block type="logic_compare" id="sFua#TKb}~WWPqj6KeIW"> - <field name="OP">LT</field> - <value name="A"> - <block type="variables_get" id="J{E0oBqm),8kwbHyQ?=."> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </value> + </block> + </value> + <statement name="DO1"> + <block type="variables_set" id="%Io@znvhX3QvyZ*mPL},"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="y/+X`X}C3$Nc/TH%3_dv"> + <field name="TEXT">BALL_GOAL_LEFT</field> + </block> + </value> + <next> + <block type="controls_if" id="*BrJG}XZ76}TB4xGqW~`"> + <mutation elseif="2" else="1"/> + <value name="IF0"> + <block type="logic_compare" id=";t5FsnVMWwTmT^NniB|e"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="T7qB~%1Qe1a.P*MQs$Ij"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="D)b~KYP=}7Q`ujSBZJyh"> + <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> + </block> + </value> </block> </value> - <value name="B"> - <block type="variables_get" id=".ts{wyW$c]RydnDM,}dN"> - <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="3TBW}iU2UgA?brmPI5+J" inline="true"> + <mutation name="fwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="bLDCOqV7YSx,/UkFj)T%"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> </block> - </value> - </block> - </value> - <statement name="DO2"> - <block type="procedures_callnoreturn" id="#7@$9Gz4rn?uePi|!w5H"> - <mutation name="left"> - <arg name="v"/> - <arg name="ticks"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="Ur=9P[d2~h+UuLiecS=0"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </statement> + <value name="IF1"> + <block type="logic_compare" id=".k[+$zFZm_;CFMOBjQ=U"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="iY/UC$Qo23IduI}_6|fy"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="NF,/T;m.#62@CZQe#+[`"> + <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> + </block> + </value> </block> </value> - <value name="ARG1"> - <block type="math_constrain" id="W3t]erG4jM/-7Ha9Rz8=" inline="false"> - <value name="VALUE"> - <block type="math_arithmetic" id=";7U*){*?kwgf!k^}}5GA"> - <field name="OP">MULTIPLY</field> + <statement name="DO1"> + <block type="controls_if" id="KJ#o$M|scI;Nb]boFDzc"> + <mutation elseif="1" else="1"/> + <value name="IF0"> + <block type="logic_compare" id="Hvw%^q~Hu5/N%}1^$97E"> + <field name="OP">LT</field> <value name="A"> - <block type="variables_get" id="ii5E[ARI)`Bgg5KUe]}u"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="lists_getIndex" id="XiNY`%tpd`~0oRax[?wl"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="]Pnwg,R0`8-u%~|{ySI)"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id=",`#W`9DPbV_Z3Ay]AI7y"> + <field name="NUM">1</field> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="variables_get" id=")Y^E1(LwkP6u5Zr]E#v/"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + </block> + </value> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="),QhMk?KFwaoqgIh6A~w"> + <mutation name="turnBallRight"/> + </block> + </statement> + <value name="IF1"> + <block type="logic_compare" id="nUbsUlJ45(hnk!)6CNAr"> + <field name="OP">GT</field> + <value name="A"> + <block type="lists_getIndex" id="yIp~#Cn:I`9g1gyN4|22"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="tchE8Qc)Kp|9?UE;Fpe%"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="saTD#QpS5Cx+?U!E/:[:"> + <field name="NUM">1</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="_rWdYF]99IuNPR?jeS*v"> - <field name="VAR" id="rOE96qIEVvA5gBu*K^?x">factor_ball_rot</field> + <block type="variables_get" id="M9wjV+z*e*Hh*PspIXEY"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> </block> </value> - <value name="LOW"> - <block type="math_number" id="fC}]TN}rkpW?/cte-Bp]"> - <field name="NUM">3</field> + <statement name="DO1"> + <block type="procedures_callnoreturn" id="_q6X5`*YO|;FU%~(RZ2?"> + <mutation name="turnBallLeft"/> + </block> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="4!};}Pi@kx7+v]x,}fg2"> + <mutation name="stop"/> + </block> + </statement> + </block> + </statement> + <value name="IF2"> + <block type="logic_compare" id="Bl$M.GwPg~+!37[;`0o2"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="hk4|9x7W)79Bt`+.QJ}h"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> - <value name="HIGH"> - <block type="math_number" id="8+tZg^1UjmO}E,sNn-t{"> - <field name="NUM">100</field> + <value name="B"> + <block type="variables_get" id="lFZoL.IQB6RM@%_m9*-3"> + <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> </block> </value> </block> </value> - </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="K2~d9j?nrPh-CWpCKZ^I"> - <mutation name="stop"/> - </block> - </statement> - </block> - </next> - </block> - </statement> - <value name="IF1"> - <block type="logic_operation" id="B~L1BuQh-S6uKm^YJSgH" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_operation" id="4bB{1Bu{%4*rAe!/uepL" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="*p.1tBx0!3(A,.#v~}gR"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="JhBQ6%W7fhLicBS4$+~r"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <statement name="DO2"> + <block type="procedures_callnoreturn" id="QN+5a=dUZe|3;6UVwiue" inline="true"> + <mutation name="bwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="v5iy]*Vt3nsse;Eg[EjI"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> </block> - </value> - <value name="B"> - <block type="logic_null" id="/pF(LOrFaYg`Z;:T=pMq"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="|rcsXSAUj_o}mh1L:hw3"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="V1Jj,Q+-!7UMu,ag}Y2#"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="`pvAUE*_G,HFP6Y*ra9~"> + <mutation name="stop"/> </block> - </value> - <value name="B"> - <block type="logic_null" id="b7),FwxGz-g+3(2a:iAH"/> - </value> + </statement> </block> - </value> + </next> </block> - </value> - <value name="B"> - <block type="logic_operation" id="fGq*Z2TDY5Aiyb._(iWw" inline="false"> + </statement> + <value name="IF2"> + <block type="logic_operation" id="QKmOZD,=Y4S|jqiAJ4.k" inline="false"> <field name="OP">AND</field> <value name="A"> - <block type="logic_compare" id="@zlHHSd5%+h?_A?s;121"> - <field name="OP">NEQ</field> + <block type="logic_operation" id="Xu[n/TE:SYcd;s+dYubv" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="lists_getIndex" id="s5?^~_8K{8Ds{9:#%k6@"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="O/m@rtsP1-]GZu;z!Kd7"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="OeAZ19W_g)]s*LP0=8r,"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="M/Nu-s2$K?+~7cG|vO,;"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="AHQ$-$-`kl9D]lvFKqEw"> - <field name="NUM">1</field> - </block> + <value name="B"> + <block type="logic_null" id="z~Da7_)q,Bo-$yJb73oH"/> </value> </block> </value> <value name="B"> - <block type="logic_null" id="c0`hO)W_@*rN3v3J#n/b"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="ppt3KZ(DNQQ?lul~f,#i"> - <field name="OP">EQ</field> - <value name="A"> - <block type="lists_getIndex" id="*LHs;5s*!AaP%zlD5e]o"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="%*W`_VauA#TUT8Bhr(l["> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="d9U8).!K)LC)*3RzV-$z"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="^H7sM5ajVqht|@UM.F/m"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="2~D!AD)saoFre@h_@fqZ"> - <field name="NUM">2</field> - </block> + <value name="B"> + <block type="logic_null" id=":8|/_EWW~8cxsv_2[8XZ"/> </value> </block> </value> - <value name="B"> - <block type="logic_null" id="oSv:/]3N6Gn3|DbI0mHC"/> - </value> - </block> - </value> - </block> - </value> - </block> - </value> - <statement name="DO1"> - <block type="variables_set" id="%Io@znvhX3QvyZ*mPL},"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="y/+X`X}C3$Nc/TH%3_dv"> - <field name="TEXT">BALL_AND_GOAL_LEFT</field> - </block> - </value> - <next> - <block type="controls_if" id="*BrJG}XZ76}TB4xGqW~`"> - <mutation elseif="2" else="1"/> - <value name="IF0"> - <block type="logic_compare" id=";t5FsnVMWwTmT^NniB|e"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id="T7qB~%1Qe1a.P*MQs$Ij"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="D)b~KYP=}7Q`ujSBZJyh"> - <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> - </block> - </value> </block> </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="3TBW}iU2UgA?brmPI5+J" inline="true"> - <mutation name="fwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="bLDCOqV7YSx,/UkFj)T%"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> - </block> - </value> - </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id=".k[+$zFZm_;CFMOBjQ=U"> - <field name="OP">LTE</field> + <value name="B"> + <block type="logic_operation" id="?A+N_1,#}@kRY%dxQMa9" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="iY/UC$Qo23IduI}_6|fy"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="NF,/T;m.#62@CZQe#+[`"> - <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> - </block> - </value> - </block> - </value> - <statement name="DO1"> - <block type="controls_if" id="KJ#o$M|scI;Nb]boFDzc"> - <mutation elseif="1" else="1"/> - <value name="IF0"> - <block type="logic_compare" id="Hvw%^q~Hu5/N%}1^$97E"> - <field name="OP">LT</field> + <block type="logic_compare" id="`~AJbhHRzn/)DgR4fRI;"> + <field name="OP">EQ</field> <value name="A"> - <block type="lists_getIndex" id="XiNY`%tpd`~0oRax[?wl"> + <block type="lists_getIndex" id="wBVqviD0-D3E`(V(uiV~"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="]Pnwg,R0`8-u%~|{ySI)"> + <block type="variables_get" id="?uA|$zvDe+x4kMz%-{d."> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id=",`#W`9DPbV_Z3Ay]AI7y"> + <block type="math_number" id="3~ZXLDV~ZSV8RX_^%[6]"> <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> - <block type="variables_get" id=")Y^E1(LwkP6u5Zr]E#v/"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> + <block type="logic_null" id="vG[m`V+N^1KjrN:te9QO"/> </value> </block> </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="),QhMk?KFwaoqgIh6A~w"> - <mutation name="turnBallRight"/> - </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id="nUbsUlJ45(hnk!)6CNAr"> - <field name="OP">GT</field> + <value name="B"> + <block type="logic_compare" id=";P}d!ou6kF,_]Y}2c}oU"> + <field name="OP">NEQ</field> <value name="A"> - <block type="lists_getIndex" id="yIp~#Cn:I`9g1gyN4|22"> + <block type="lists_getIndex" id="9qxZzDB=dlHB#35+H*!N"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="tchE8Qc)Kp|9?UE;Fpe%"> + <block type="variables_get" id="D3C[P^f3vp}xb!,-2#r5"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="saTD#QpS5Cx+?U!E/:[:"> - <field name="NUM">1</field> + <block type="math_number" id="@69b4byUu7@Wfx)U/;Xp"> + <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> - <block type="variables_get" id="M9wjV+z*e*Hh*PspIXEY"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> + <block type="logic_null" id="1@:,7WVUfe~r2),.)v7f"/> </value> </block> </value> - <statement name="DO1"> - <block type="procedures_callnoreturn" id="_q6X5`*YO|;FU%~(RZ2?"> - <mutation name="turnBallLeft"/> - </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="4!};}Pi@kx7+v]x,}fg2"> - <mutation name="stop"/> - </block> - </statement> - </block> - </statement> - <value name="IF2"> - <block type="logic_compare" id="Bl$M.GwPg~+!37[;`0o2"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id="hk4|9x7W)79Bt`+.QJ}h"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="lFZoL.IQB6RM@%_m9*-3"> - <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> - </block> - </value> </block> </value> - <statement name="DO2"> - <block type="procedures_callnoreturn" id="QN+5a=dUZe|3;6UVwiue" inline="true"> - <mutation name="bwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="v5iy]*Vt3nsse;Eg[EjI"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> - </block> - </value> - </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="`pvAUE*_G,HFP6Y*ra9~"> - <mutation name="stop"/> - </block> - </statement> </block> - </next> - </block> - </statement> - <value name="IF2"> - <block type="logic_operation" id="QKmOZD,=Y4S|jqiAJ4.k" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_operation" id="Xu[n/TE:SYcd;s+dYubv" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="OeAZ19W_g)]s*LP0=8r,"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="M/Nu-s2$K?+~7cG|vO,;"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id="z~Da7_)q,Bo-$yJb73oH"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="d9U8).!K)LC)*3RzV-$z"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="^H7sM5ajVqht|@UM.F/m"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id=":8|/_EWW~8cxsv_2[8XZ"/> - </value> + </value> + <statement name="DO2"> + <block type="variables_set" id=",9T_FbUWwGZlugNQ_c#x"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="5?`m/5fCq/Z(s/u)oR*~"> + <field name="TEXT">BALL_GOAL_RIGHT</field> </block> </value> - </block> - </value> - <value name="B"> - <block type="logic_operation" id="?A+N_1,#}@kRY%dxQMa9" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="`~AJbhHRzn/)DgR4fRI;"> - <field name="OP">EQ</field> - <value name="A"> - <block type="lists_getIndex" id="wBVqviD0-D3E`(V(uiV~"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="?uA|$zvDe+x4kMz%-{d."> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <next> + <block type="controls_if" id="oOSLtR1E1%!.Oz+LD*|O"> + <mutation elseif="2" else="1"/> + <value name="IF0"> + <block type="logic_compare" id="{AkiSJ!:M-e{%|_5,Va{"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="u2W_3eBph941yf[`AO1:"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="3~ZXLDV~ZSV8RX_^%[6]"> - <field name="NUM">1</field> + <value name="B"> + <block type="variables_get" id="m`EhNfvklFtISL#l0*_4"> + <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> </block> </value> </block> </value> - <value name="B"> - <block type="logic_null" id="vG[m`V+N^1KjrN:te9QO"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id=";P}d!ou6kF,_]Y}2c}oU"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="lists_getIndex" id="9qxZzDB=dlHB#35+H*!N"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="D3C[P^f3vp}xb!,-2#r5"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="]2;?=Iy9hHyC!C}^y~h~" inline="true"> + <mutation name="fwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="Ytx*_*[sy$_4eoX:jjS#"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> - <value name="AT"> - <block type="math_number" id="@69b4byUu7@Wfx)U/;Xp"> - <field name="NUM">2</field> + </block> + </statement> + <value name="IF1"> + <block type="logic_compare" id="rWZfl+Ze,4+*KK/_Y|f2"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id=".K(H|%8UHLv-,l~)q36:"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="~UptJA?^oJ2DWj=i2Yfh"> + <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> </block> </value> </block> </value> - <value name="B"> - <block type="logic_null" id="1@:,7WVUfe~r2),.)v7f"/> - </value> - </block> - </value> - </block> - </value> - </block> - </value> - <statement name="DO2"> - <block type="variables_set" id=",9T_FbUWwGZlugNQ_c#x"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="5?`m/5fCq/Z(s/u)oR*~"> - <field name="TEXT">BALL_AND_GOAL_RIGHT</field> - </block> - </value> - <next> - <block type="controls_if" id="oOSLtR1E1%!.Oz+LD*|O"> - <mutation elseif="2" else="1"/> - <value name="IF0"> - <block type="logic_compare" id="{AkiSJ!:M-e{%|_5,Va{"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id="u2W_3eBph941yf[`AO1:"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="m`EhNfvklFtISL#l0*_4"> - <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> - </block> - </value> - </block> - </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="]2;?=Iy9hHyC!C}^y~h~" inline="true"> - <mutation name="fwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="Ytx*_*[sy$_4eoX:jjS#"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> - </block> - </value> - </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id="rWZfl+Ze,4+*KK/_Y|f2"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id=".K(H|%8UHLv-,l~)q36:"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="~UptJA?^oJ2DWj=i2Yfh"> - <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> - </block> - </value> - </block> - </value> - <statement name="DO1"> - <block type="controls_if" id="s(!f@_5wN)RYM`|~CC8r"> - <mutation elseif="1" else="1"/> - <value name="IF0"> - <block type="logic_compare" id="!5NG0L6Qc4L9!/ENQ#^6"> - <field name="OP">LT</field> - <value name="A"> - <block type="lists_getIndex" id="hPhr1/4Q89owPRmZ4=A@"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="BBBFnF[e5`GyH[7wiUs#"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <statement name="DO1"> + <block type="controls_if" id="s(!f@_5wN)RYM`|~CC8r"> + <mutation elseif="1" else="1"/> + <value name="IF0"> + <block type="logic_compare" id="!5NG0L6Qc4L9!/ENQ#^6"> + <field name="OP">LT</field> + <value name="A"> + <block type="lists_getIndex" id="hPhr1/4Q89owPRmZ4=A@"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="BBBFnF[e5`GyH[7wiUs#"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="vC3tOvv+vwtnqY^-oVd,"> + <field name="NUM">2</field> + </block> + </value> </block> </value> - <value name="AT"> - <block type="math_number" id="vC3tOvv+vwtnqY^-oVd,"> - <field name="NUM">2</field> + <value name="B"> + <block type="variables_get" id="Pu,Rl$nTFT,nE2be^LM2"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> </block> </value> - <value name="B"> - <block type="variables_get" id="Pu,Rl$nTFT,nE2be^LM2"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="@$;_yG?U8opM|/]Of75$"> + <mutation name="turnBallRight"/> </block> - </value> - </block> - </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="@$;_yG?U8opM|/]Of75$"> - <mutation name="turnBallRight"/> - </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id="Y-@u6Td#HTIS8}mNdpK3"> - <field name="OP">GT</field> - <value name="A"> - <block type="lists_getIndex" id="d]*F5d_Lln-:DXn6cPxb"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="%ykvuZ~kV2+~os0o2k{?"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </statement> + <value name="IF1"> + <block type="logic_compare" id="Y-@u6Td#HTIS8}mNdpK3"> + <field name="OP">GT</field> + <value name="A"> + <block type="lists_getIndex" id="d]*F5d_Lln-:DXn6cPxb"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="%ykvuZ~kV2+~os0o2k{?"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id=";]Yk({gn.(Ha3=/nM5`]"> + <field name="NUM">2</field> + </block> + </value> </block> </value> - <value name="AT"> - <block type="math_number" id=";]Yk({gn.(Ha3=/nM5`]"> - <field name="NUM">2</field> + <value name="B"> + <block type="variables_get" id="=$ulk!vkDhWA^fYK?b*b"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> </block> </value> + <statement name="DO1"> + <block type="procedures_callnoreturn" id="0il^Cdoc`7I6eVmi6htz"> + <mutation name="turnBallLeft"/> + </block> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="Vc$f(+c;1~P{_)XVhUsj"> + <mutation name="stop"/> + </block> + </statement> + </block> + </statement> + <value name="IF2"> + <block type="logic_compare" id="faLX{cmn%m5GLE$Qa$jP"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="p/ukr6sWeNnUPhQlK[{B"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> <value name="B"> - <block type="variables_get" id="=$ulk!vkDhWA^fYK?b*b"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="variables_get" id="}Tawuqa_TE/qeAVT.RC5"> + <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> </block> </value> </block> </value> - <statement name="DO1"> - <block type="procedures_callnoreturn" id="0il^Cdoc`7I6eVmi6htz"> - <mutation name="turnBallLeft"/> + <statement name="DO2"> + <block type="procedures_callnoreturn" id="$Z+:;,t[mQ]aaUe_UNhM" inline="true"> + <mutation name="bwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="|eX:`Adtu3l.8ZaYcgJF"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> </block> </statement> <statement name="ELSE"> - <block type="procedures_callnoreturn" id="Vc$f(+c;1~P{_)XVhUsj"> + <block type="procedures_callnoreturn" id="bi9hG~0MI@s}v(fCd[tp"> <mutation name="stop"/> </block> </statement> </block> - </statement> - <value name="IF2"> - <block type="logic_compare" id="faLX{cmn%m5GLE$Qa$jP"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id="p/ukr6sWeNnUPhQlK[{B"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="}Tawuqa_TE/qeAVT.RC5"> - <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> - </block> - </value> - </block> - </value> - <statement name="DO2"> - <block type="procedures_callnoreturn" id="$Z+:;,t[mQ]aaUe_UNhM" inline="true"> - <mutation name="bwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="|eX:`Adtu3l.8ZaYcgJF"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> - </block> - </value> - </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="bi9hG~0MI@s}v(fCd[tp"> - <mutation name="stop"/> - </block> - </statement> + </next> </block> - </next> - </block> - </statement> - <value name="IF3"> - <block type="logic_operation" id="ohFi[Z{Xu0.EXNHvg7!|" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_operation" id="JDmD0uu$,6*6XI.*8Y=T" inline="false"> + </statement> + <value name="IF3"> + <block type="logic_operation" id="ohFi[Z{Xu0.EXNHvg7!|" inline="false"> <field name="OP">AND</field> <value name="A"> - <block type="logic_compare" id="JvLUnlLulIk{o},vW~}y"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="variables_get" id="$-jleAiV2GHR%[$RfY4I"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id="TvSq3M9?{oeuq~TW*ihg"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="9/b,vDMaH:m,r{gleX7O"> - <field name="OP">NEQ</field> + <block type="logic_operation" id="JDmD0uu$,6*6XI.*8Y=T" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="F!:=i0jN5fR[{l7EwBYG"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="logic_compare" id="JvLUnlLulIk{o},vW~}y"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="$-jleAiV2GHR%[$RfY4I"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="TvSq3M9?{oeuq~TW*ihg"/> + </value> </block> </value> <value name="B"> - <block type="logic_null" id="lP$*f:B}Uv4E]8^Ao)y2"/> - </value> - </block> - </value> - </block> - </value> - <value name="B"> - <block type="logic_operation" id="V+@.6tZ~:.0S4;fVjGa/" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="[y%,{E^TI)LH+?|meGy_"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="lists_getIndex" id="!WgYF}aMS$sC-.xB$JAg"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id=",+(z.@/%C`r?(v8{Xk6?"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="9/b,vDMaH:m,r{gleX7O"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="variables_get" id="F!:=i0jN5fR[{l7EwBYG"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="l]wQ?}.TM,m@sJl.9c$4"> - <field name="NUM">1</field> - </block> + <value name="B"> + <block type="logic_null" id="lP$*f:B}Uv4E]8^Ao)y2"/> </value> </block> </value> - <value name="B"> - <block type="logic_null" id="%PXc[::|r[K5tThFGgi."/> - </value> </block> </value> <value name="B"> - <block type="logic_compare" id="RoSQV[2xNmOan/JtAO~{"> - <field name="OP">NEQ</field> + <block type="logic_operation" id="V+@.6tZ~:.0S4;fVjGa/" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="lists_getIndex" id="jw),#3VHMem^tEQX|.;1"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="k9g4HbL]=_@lVwgYM*{e"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="[y%,{E^TI)LH+?|meGy_"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="lists_getIndex" id="!WgYF}aMS$sC-.xB$JAg"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id=",+(z.@/%C`r?(v8{Xk6?"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="l]wQ?}.TM,m@sJl.9c$4"> + <field name="NUM">1</field> + </block> + </value> </block> </value> - <value name="AT"> - <block type="math_number" id="lm,[gP|qh0[95%Rr2M|@"> - <field name="NUM">2</field> - </block> + <value name="B"> + <block type="logic_null" id="%PXc[::|r[K5tThFGgi."/> </value> </block> </value> <value name="B"> - <block type="logic_null" id="aboD!(qALukkFe}v6#WN"/> - </value> - </block> - </value> - </block> - </value> - </block> - </value> - <statement name="DO3"> - <block type="variables_set" id="?=|7j%BS8lgVb|CMk2`B"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="Y4VWl.KGLr*CB@5lWqMT"> - <field name="TEXT">BALL_AND_GOAL_BOTH</field> - </block> - </value> - <next> - <block type="controls_if" id="mBr6R|Ld1(7@wFK@LEc%"> - <mutation elseif="2" else="1"/> - <value name="IF0"> - <block type="logic_compare" id="Ef@EH~LEo9ldV~aTkL)v"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id="eNn.jAQuZB`.!|a-}8Bm"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="Vn}:ap@@leJ;ERn5!ulQ"> - <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> - </block> - </value> - </block> - </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="ug]~pSocMN6aC`I.!9FY" inline="true"> - <mutation name="fwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="3-Iarkq=#yiSq^]Squ6+"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> - </block> - </value> - </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id="Gm+JczBwo$*$lI1hn(bE"> - <field name="OP">LTE</field> - <value name="A"> - <block type="variables_get" id="}m|a8Yo5TtRP74mP_mv`"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="variables_get" id="$#D6FdXJ6/Dl!OW3tB3d"> - <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> - </block> - </value> - </block> - </value> - <statement name="DO1"> - <block type="controls_if" id="u:~b5-PiU+[pu_1,Xa98"> - <mutation elseif="2" else="1"/> - <value name="IF0"> - <block type="logic_operation" id="aA(*kb?~twOr6-H-5Y6L" inline="false"> - <field name="OP">AND</field> + <block type="logic_compare" id="RoSQV[2xNmOan/JtAO~{"> + <field name="OP">NEQ</field> <value name="A"> - <block type="logic_compare" id="s@[Z^y:V@HE1Rj;{0kMC"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="i5K6*S_7LI]YP*oc?o#("> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="lists_getIndex" id="jw),#3VHMem^tEQX|.;1"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="k9g4HbL]=_@lVwgYM*{e"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> - <value name="B"> - <block type="lists_getIndex" id="Gk1Ni~yuA0xqGVB)m$,r"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="2.y#4B,;Y:6:KX.dWY!e"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> - </block> - </value> - <value name="AT"> - <block type="math_number" id="Yjz]w]~(6fa5M=#WKCa0"> - <field name="NUM">1</field> - </block> - </value> + <value name="AT"> + <block type="math_number" id="lm,[gP|qh0[95%Rr2M|@"> + <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> - <block type="logic_compare" id="pj/D#[B!S_nEJX02j9b`"> - <field name="OP">LT</field> - <value name="A"> - <block type="variables_get" id="$R,CQ$q_:mge?X159P8L"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="B"> - <block type="lists_getIndex" id="7$6J3IxJ7|`Pjsi)y#ph"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="-/6oVeveklwv!S}e852|"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> - </block> - </value> - <value name="AT"> - <block type="math_number" id="oJ]4?$gJ]C@;,f%ql6dR"> - <field name="NUM">2</field> - </block> - </value> - </block> - </value> + <block type="logic_null" id="aboD!(qALukkFe}v6#WN"/> + </value> + </block> + </value> + </block> + </value> + </block> + </value> + <statement name="DO3"> + <block type="variables_set" id="?=|7j%BS8lgVb|CMk2`B"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="Y4VWl.KGLr*CB@5lWqMT"> + <field name="TEXT">BALL_GOAL_BOTH</field> + </block> + </value> + <next> + <block type="controls_if" id="mBr6R|Ld1(7@wFK@LEc%"> + <mutation elseif="2" else="1"/> + <value name="IF0"> + <block type="logic_compare" id="Ef@EH~LEo9ldV~aTkL)v"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="eNn.jAQuZB`.!|a-}8Bm"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="Vn}:ap@@leJ;ERn5!ulQ"> + <field name="VAR" id="}*jl@)UA_Hjh5rc,Gt)c">y_ball_far</field> </block> </value> </block> </value> <statement name="DO0"> - <block type="procedures_callnoreturn" id="sZ-Q381UDm_7-@_=u,Nb" inline="true"> + <block type="procedures_callnoreturn" id="ug]~pSocMN6aC`I.!9FY" inline="true"> <mutation name="fwd_v"> <arg name="v"/> </mutation> <value name="ARG0"> - <block type="variables_get" id="EZ7O-Q%B5i4/XcO)EWY*"> + <block type="variables_get" id="3-Iarkq=#yiSq^]Squ6+"> <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> </block> </statement> <value name="IF1"> - <block type="logic_operation" id="y1toQcQ?JoXNUk]#BWyd" inline="false"> - <field name="OP">AND</field> + <block type="logic_compare" id="Gm+JczBwo$*$lI1hn(bE"> + <field name="OP">LTE</field> <value name="A"> - <block type="logic_compare" id=".p%vg@`T{)!T6f3i$rO9"> - <field name="OP">LT</field> + <block type="variables_get" id="}m|a8Yo5TtRP74mP_mv`"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="$#D6FdXJ6/Dl!OW3tB3d"> + <field name="VAR" id="09n]XF2CKURQs)nHOfam">y_ball_near</field> + </block> + </value> + </block> + </value> + <statement name="DO1"> + <block type="controls_if" id="u:~b5-PiU+[pu_1,Xa98"> + <mutation elseif="2" else="1"/> + <value name="IF0"> + <block type="logic_operation" id="aA(*kb?~twOr6-H-5Y6L" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="V2_?}A{Yt7$iai=yCSJ)"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="logic_compare" id="s@[Z^y:V@HE1Rj;{0kMC"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="i5K6*S_7LI]YP*oc?o#("> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="lists_getIndex" id="Gk1Ni~yuA0xqGVB)m$,r"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="2.y#4B,;Y:6:KX.dWY!e"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="Yjz]w]~(6fa5M=#WKCa0"> + <field name="NUM">1</field> + </block> + </value> + </block> + </value> </block> </value> <value name="B"> - <block type="lists_getIndex" id="m?]jjfWt9tUIy,F_m%}i"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="awS7kY(J(0{xSv!/NOei"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="pj/D#[B!S_nEJX02j9b`"> + <field name="OP">LT</field> + <value name="A"> + <block type="variables_get" id="$R,CQ$q_:mge?X159P8L"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="rMzpQD@SM~G/b$@x(bzw"> - <field name="NUM">1</field> + <value name="B"> + <block type="lists_getIndex" id="7$6J3IxJ7|`Pjsi)y#ph"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="-/6oVeveklwv!S}e852|"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="oJ]4?$gJ]C@;,f%ql6dR"> + <field name="NUM">2</field> + </block> + </value> </block> </value> </block> </value> </block> </value> - <value name="B"> - <block type="logic_compare" id="-I~|7,G,H7p/(=+cA3L}"> - <field name="OP">LT</field> - <value name="A"> - <block type="variables_get" id="g-:OONj{*4WfXZ](X!%a"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="sZ-Q381UDm_7-@_=u,Nb" inline="true"> + <mutation name="fwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="EZ7O-Q%B5i4/XcO)EWY*"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> - <value name="B"> - <block type="lists_getIndex" id="H3fd}ZOe,bwQPX(LV4rW"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="O4%TBS/MO3[pyE`r5us3"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </statement> + <value name="IF1"> + <block type="logic_operation" id="y1toQcQ?JoXNUk]#BWyd" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_compare" id=".p%vg@`T{)!T6f3i$rO9"> + <field name="OP">LT</field> + <value name="A"> + <block type="variables_get" id="V2_?}A{Yt7$iai=yCSJ)"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="m)e`~6DTp@f%oR$^?1@u"> - <field name="NUM">2</field> + <value name="B"> + <block type="lists_getIndex" id="m?]jjfWt9tUIy,F_m%}i"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="awS7kY(J(0{xSv!/NOei"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="rMzpQD@SM~G/b$@x(bzw"> + <field name="NUM">1</field> + </block> + </value> </block> </value> </block> </value> - </block> - </value> - </block> - </value> - <statement name="DO1"> - <block type="procedures_callnoreturn" id="fs3R{xW/!NZ+huwii|WQ"> - <mutation name="turnBallLeft"/> - </block> - </statement> - <value name="IF2"> - <block type="logic_operation" id="}V=E{bot4=a@4;{W:Eqi" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="Z{tUKy/pPWJWfeWiqZqa"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="1MDI2fR,ALRZOi}FccVJ"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> <value name="B"> - <block type="lists_getIndex" id="{/rW*q)WC4YJAc_{6zEv"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="[=.-l*d|=LkB@kx^g=zQ"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="-I~|7,G,H7p/(=+cA3L}"> + <field name="OP">LT</field> + <value name="A"> + <block type="variables_get" id="g-:OONj{*4WfXZ](X!%a"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="*X%si/+l#z3E95A1SS{L"> - <field name="NUM">1</field> + <value name="B"> + <block type="lists_getIndex" id="H3fd}ZOe,bwQPX(LV4rW"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="O4%TBS/MO3[pyE`r5us3"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="m)e`~6DTp@f%oR$^?1@u"> + <field name="NUM">2</field> + </block> + </value> </block> </value> </block> </value> </block> </value> - <value name="B"> - <block type="logic_compare" id="FkJHQ#CLjJp,s#{H{pha"> - <field name="OP">GT</field> + <statement name="DO1"> + <block type="procedures_callnoreturn" id="fs3R{xW/!NZ+huwii|WQ"> + <mutation name="turnBallLeft"/> + </block> + </statement> + <value name="IF2"> + <block type="logic_operation" id="}V=E{bot4=a@4;{W:Eqi" inline="false"> + <field name="OP">AND</field> <value name="A"> - <block type="variables_get" id="(Dk1+3wh2]HCao.dq?PS"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + <block type="logic_compare" id="Z{tUKy/pPWJWfeWiqZqa"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="1MDI2fR,ALRZOi}FccVJ"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="lists_getIndex" id="{/rW*q)WC4YJAc_{6zEv"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="[=.-l*d|=LkB@kx^g=zQ"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="*X%si/+l#z3E95A1SS{L"> + <field name="NUM">1</field> + </block> + </value> + </block> + </value> </block> </value> <value name="B"> - <block type="lists_getIndex" id="b*n2dt}`Z4Ea^z3!_-k#"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="ag@C3!BdIHxH`fg9pah1"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="logic_compare" id="FkJHQ#CLjJp,s#{H{pha"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="(Dk1+3wh2]HCao.dq?PS"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="ZI-BpoG=~}GC}.1GY4L?"> - <field name="NUM">2</field> + <value name="B"> + <block type="lists_getIndex" id="b*n2dt}`Z4Ea^z3!_-k#"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="ag@C3!BdIHxH`fg9pah1"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="ZI-BpoG=~}GC}.1GY4L?"> + <field name="NUM">2</field> + </block> + </value> </block> </value> </block> </value> </block> </value> + <statement name="DO2"> + <block type="procedures_callnoreturn" id="`g//e~_r%pQ[)DUR;?`F"> + <mutation name="turnBallRight"/> + </block> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="Xa4Y={.L=QNVSnwr3E|_"> + <mutation name="stop"/> + </block> + </statement> + </block> + </statement> + <value name="IF2"> + <block type="logic_compare" id="cn5,`k@5*q#XXj0ugN64"> + <field name="OP">LTE</field> + <value name="A"> + <block type="variables_get" id="%s03s#6dgd9,gsBFI%jB"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="variables_get" id="[p/x;`ab/;Bg4Kn8589%"> + <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> + </block> + </value> </block> </value> <statement name="DO2"> - <block type="procedures_callnoreturn" id="`g//e~_r%pQ[)DUR;?`F"> - <mutation name="turnBallRight"/> + <block type="procedures_callnoreturn" id="0`3ax3Vh.zGnD9];Yb=W" inline="true"> + <mutation name="bwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="@%~/x=Q=6h3dYJ8NF`SF"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> </block> </statement> <statement name="ELSE"> - <block type="procedures_callnoreturn" id="Xa4Y={.L=QNVSnwr3E|_"> + <block type="procedures_callnoreturn" id="=56A!T,|yxe![pQgmxd5"> <mutation name="stop"/> </block> </statement> </block> - </statement> - <value name="IF2"> - <block type="logic_compare" id="cn5,`k@5*q#XXj0ugN64"> - <field name="OP">LTE</field> + </next> + </block> + </statement> + <value name="IF4"> + <block type="logic_operation" id="awUXoJ:Avy=jfaq3Lnw2" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_compare" id="yh3|ZUJR1=Q-QK;7j4Vq"> + <field name="OP">NEQ</field> <value name="A"> - <block type="variables_get" id="%s03s#6dgd9,gsBFI%jB"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + <block type="lists_getIndex" id="a2r-4w=%vQYhSHM`~eZ]"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="T$V8$ZEi|{};;VR5guWF"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="CkEN:gECzR=^Fe$@:9TJ"> + <field name="NUM">1</field> + </block> + </value> </block> </value> <value name="B"> - <block type="variables_get" id="[p/x;`ab/;Bg4Kn8589%"> - <field name="VAR" id="xjf5O*w9;IZf$n55ytVF">y_ball_touch</field> - </block> + <block type="logic_null" id="o5dj.]+Z)07l-FMKaT%{"/> </value> </block> </value> - <statement name="DO2"> - <block type="procedures_callnoreturn" id="0`3ax3Vh.zGnD9];Yb=W" inline="true"> - <mutation name="bwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="@%~/x=Q=6h3dYJ8NF`SF"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> - </block> - </value> - </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="=56A!T,|yxe![pQgmxd5"> - <mutation name="stop"/> - </block> - </statement> - </block> - </next> - </block> - </statement> - <value name="IF4"> - <block type="logic_operation" id="awUXoJ:Avy=jfaq3Lnw2" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="yh3|ZUJR1=Q-QK;7j4Vq"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="lists_getIndex" id="a2r-4w=%vQYhSHM`~eZ]"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="T$V8$ZEi|{};;VR5guWF"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <value name="B"> + <block type="logic_compare" id="L1~%)SdSHa$uo6A.8#6f"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="lists_getIndex" id=",]].`)eldGT-g}09Z7B-"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="KhabrJ}B*?4SNA*zG(2v"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="km]HFZtzI)v+!+!)*q`7"> + <field name="NUM">2</field> + </block> + </value> </block> </value> - <value name="AT"> - <block type="math_number" id="CkEN:gECzR=^Fe$@:9TJ"> - <field name="NUM">1</field> - </block> + <value name="B"> + <block type="logic_null" id="_D1?^^LL[mra-s}9x67K"/> </value> </block> </value> - <value name="B"> - <block type="logic_null" id="o5dj.]+Z)07l-FMKaT%{"/> - </value> </block> </value> - <value name="B"> - <block type="logic_compare" id="L1~%)SdSHa$uo6A.8#6f"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="lists_getIndex" id=",]].`)eldGT-g}09Z7B-"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="KhabrJ}B*?4SNA*zG(2v"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <statement name="DO4"> + <block type="variables_set" id="u#?[x*W2[}s=7T+@kGX3"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="Gi1v,-rKbpMdik!jz5aA"> + <field name="TEXT">NO_BALL_GOAL_BOTH</field> + </block> + </value> + <next> + <block type="controls_if" id="ip*`sP8:b(5pR4)~R_an"> + <mutation elseif="2" else="1"/> + <value name="IF0"> + <block type="logic_operation" id="fn=DRPVeg$aV~zkMY*tl" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_compare" id="2Q5e3vZ!5/=nainF0od+"> + <field name="OP">LT</field> + <value name="A"> + <block type="math_arithmetic" id="stzng{bs`Stm,oBHUX4!" inline="false"> + <field name="OP">MINUS</field> + <value name="A"> + <block type="lists_getIndex" id="F)PC`z6pXXfHV8yp+0wg"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="-dLwf7e|7vM#7`Euo5:Y"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id=":L~QVzvDi@-0k$E#ST]q"> + <field name="NUM">2</field> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="lists_getIndex" id="oV|[T86~]QE#t,i.$w||"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="T_7UifGjb/lr2J{Ts/T0"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="z+~r?hm,C-QOOBj55O`="> + <field name="NUM">1</field> + </block> + </value> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="variables_get" id="cR*DIW$3$NL#u11S8#v,"> + <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="logic_compare" id="c(LuogB[ECxBtM-6/r4b"> + <field name="OP">GT</field> + <value name="A"> + <block type="math_arithmetic" id="4Y=iZrdYGWmqI3n^Qia^" inline="false"> + <field name="OP">MINUS</field> + <value name="A"> + <block type="lists_getIndex" id="1ChGpLd?q.BTzqaV^%Kd"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="$3]ihsX$QqGH0*uM8$0}"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="!`XkfPY{Xf%.#?+~LDkZ"> + <field name="NUM">2</field> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="lists_getIndex" id="^h3?BJeP34MIrWaZ9@rY"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="4[dCFY5H/eN@cFMa{f^Y"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="b@F!?=;Ry:$m$S6*-q%?"> + <field name="NUM">1</field> + </block> + </value> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="variables_get" id=")0O+HGV1!`X_dJGq4=yZ"> + <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> + </block> + </value> + </block> + </value> </block> </value> - <value name="AT"> - <block type="math_number" id="km]HFZtzI)v+!+!)*q`7"> - <field name="NUM">2</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="Hv;PVkTzhtVls=i_!Gc@" inline="true"> + <mutation name="fwd_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="]RO~:%x7+T~!YzQ5FD:C"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> </block> - </value> - </block> - </value> - <value name="B"> - <block type="logic_null" id="_D1?^^LL[mra-s}9x67K"/> - </value> - </block> - </value> - </block> - </value> - <statement name="DO4"> - <block type="variables_set" id="u#?[x*W2[}s=7T+@kGX3"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="Gi1v,-rKbpMdik!jz5aA"> - <field name="TEXT">ONLY_GOAL</field> - </block> - </value> - <next> - <block type="controls_if" id="ip*`sP8:b(5pR4)~R_an"> - <mutation elseif="2" else="1"/> - <value name="IF0"> - <block type="logic_operation" id="fn=DRPVeg$aV~zkMY*tl" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_compare" id="2Q5e3vZ!5/=nainF0od+"> + </statement> + <value name="IF1"> + <block type="logic_compare" id="(H+T:yEGNo[y%GO7P;Dz"> <field name="OP">LT</field> <value name="A"> - <block type="math_arithmetic" id="stzng{bs`Stm,oBHUX4!" inline="false"> + <block type="math_arithmetic" id="Ai7:`$F~9O2YGCqE}7]%" inline="false"> <field name="OP">MINUS</field> <value name="A"> - <block type="lists_getIndex" id="F)PC`z6pXXfHV8yp+0wg"> + <block type="lists_getIndex" id=";}IGw$j4`qR]-V6y1F{C"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="-dLwf7e|7vM#7`Euo5:Y"> + <block type="variables_get" id="qeaIcn2J!s[tLnzs1-TD"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id=":L~QVzvDi@-0k$E#ST]q"> + <block type="math_number" id="$@C}!!6KJsxT:/2%*qFq"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> - <block type="lists_getIndex" id="oV|[T86~]QE#t,i.$w||"> + <block type="lists_getIndex" id="R=vnD6%qBZ6oMp]rsnuD"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="T_7UifGjb/lr2J{Ts/T0"> + <block type="variables_get" id="4$hv.8aI05y@,%h(#M!|"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="z+~r?hm,C-QOOBj55O`="> + <block type="math_number" id="ATE$C[5@_7i#/$0#A=C,"> <field name="NUM">1</field> </block> </value> @@ -1659,47 +1780,59 @@ </block> </value> <value name="B"> - <block type="variables_get" id="cR*DIW$3$NL#u11S8#v,"> + <block type="variables_get" id="kw^gNGg!Q00uE[+DZwGg"> <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> </block> </value> </block> </value> - <value name="B"> - <block type="logic_compare" id="c(LuogB[ECxBtM-6/r4b"> + <statement name="DO1"> + <block type="procedures_callnoreturn" id="xH1rS2h$??lsC(b5|}S%" inline="true"> + <mutation name="left_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="J/%Oa`9f,Y13y_bOs_ef"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + </block> + </statement> + <value name="IF2"> + <block type="logic_compare" id="VxyB%0*)9[A{wCi_b~$0"> <field name="OP">GT</field> <value name="A"> - <block type="math_arithmetic" id="4Y=iZrdYGWmqI3n^Qia^" inline="false"> + <block type="math_arithmetic" id="|7Z%Ki.3uN~;7c7dD[@e" inline="false"> <field name="OP">MINUS</field> <value name="A"> - <block type="lists_getIndex" id="1ChGpLd?q.BTzqaV^%Kd"> + <block type="lists_getIndex" id="#uNz,SfO~+zP4,sS`C6;"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="$3]ihsX$QqGH0*uM8$0}"> + <block type="variables_get" id="kQ1V6dYMl=T|wiWBB:yK"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="!`XkfPY{Xf%.#?+~LDkZ"> + <block type="math_number" id="=oK,TS$D{KF$),BuO%b-"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> - <block type="lists_getIndex" id="^h3?BJeP34MIrWaZ9@rY"> + <block type="lists_getIndex" id="jeo$Tn_DQK0@K|6xywSs"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="4[dCFY5H/eN@cFMa{f^Y"> + <block type="variables_get" id="YHmHsZ0^]EkM`Q2Ii*yl"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="b@F!?=;Ry:$m$S6*-q%?"> + <block type="math_number" id="t,gX6}8J!Fj1f.N[r~Zp"> <field name="NUM">1</field> </block> </value> @@ -1708,443 +1841,440 @@ </block> </value> <value name="B"> - <block type="variables_get" id=")0O+HGV1!`X_dJGq4=yZ"> + <block type="variables_get" id="?q##-)hY2%F2{Lx*2U0U"> <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> </block> </value> </block> </value> + <statement name="DO2"> + <block type="procedures_callnoreturn" id="jYQXBtRHSn.adQq~G7@Z" inline="true"> + <mutation name="right_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="nCzWllccVaUk{$/gd9*b"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </block> + </value> + </block> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="txDc~?FC/.mMwB2ftP!t"> + <mutation name="stop"/> + </block> + </statement> </block> - </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="Hv;PVkTzhtVls=i_!Gc@" inline="true"> - <mutation name="fwd_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="]RO~:%x7+T~!YzQ5FD:C"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + </next> + </block> + </statement> + <value name="IF5"> + <block type="logic_operation" id="n;fJ-X=w7VQ~lqJ!9izM" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_operation" id="NFf.9WuEcFjGpo|he2Lq" inline="false"> + <field name="OP">OR</field> + <value name="A"> + <block type="logic_compare" id="R$,3LHh`g+6Wa:m#*[Ys"> + <field name="OP">EQ</field> + <value name="A"> + <block type="variables_get" id="rwEBIEg)#f$fNY):g16?"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="9d:a29Y`@{YMRdTLZH|W"/> + </value> + </block> + </value> + <value name="B"> + <block type="logic_compare" id="chjUw+0f?gW,C~KalQZQ"> + <field name="OP">EQ</field> + <value name="A"> + <block type="variables_get" id="J;t`p`a%Tr`zE:+/Lx%x"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="tsl[NONq~[]^~}KRpNQy"/> + </value> </block> </value> </block> - </statement> - <value name="IF1"> - <block type="logic_compare" id="(H+T:yEGNo[y%GO7P;Dz"> - <field name="OP">LT</field> + </value> + <value name="B"> + <block type="logic_operation" id="w[--Ee4II.j.3yFUzaHC" inline="false"> + <field name="OP">OR</field> <value name="A"> - <block type="math_arithmetic" id="Ai7:`$F~9O2YGCqE}7]%" inline="false"> - <field name="OP">MINUS</field> + <block type="logic_compare" id="O{Tccxva=xl#e:%Ta#cj"> + <field name="OP">NEQ</field> <value name="A"> - <block type="lists_getIndex" id=";}IGw$j4`qR]-V6y1F{C"> + <block type="lists_getIndex" id="0+*2|0;-#|/B`S;lfIBC"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="qeaIcn2J!s[tLnzs1-TD"> + <block type="variables_get" id="XnSX|A;Vc=7XtVTPe;II"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="$@C}!!6KJsxT:/2%*qFq"> - <field name="NUM">2</field> + <block type="math_number" id="m3$DlVvf.(6%$hkU0F]c"> + <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> - <block type="lists_getIndex" id="R=vnD6%qBZ6oMp]rsnuD"> + <block type="logic_null" id="fWFBJEE}YZGKJY)tiNyv"/> + </value> + </block> + </value> + <value name="B"> + <block type="logic_compare" id="w[W/2lkK6=`$]ikD=RR|"> + <field name="OP">EQ</field> + <value name="A"> + <block type="lists_getIndex" id="gUheL@#H`cAt{|@b[l96"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="4$hv.8aI05y@,%h(#M!|"> + <block type="variables_get" id="iFZABdWa@-#A}|Mrf?Fz"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="ATE$C[5@_7i#/$0#A=C,"> - <field name="NUM">1</field> + <block type="math_number" id="-X+nB:-/Qb=rz:Dh_h8H"> + <field name="NUM">2</field> </block> </value> </block> </value> - </block> - </value> - <value name="B"> - <block type="variables_get" id="kw^gNGg!Q00uE[+DZwGg"> - <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> + <value name="B"> + <block type="logic_null" id="@Is_#Ked]NGd$K2MW-N^"/> + </value> </block> </value> </block> </value> - <statement name="DO1"> - <block type="procedures_callnoreturn" id="xH1rS2h$??lsC(b5|}S%" inline="true"> - <mutation name="left_v"> + </block> + </value> + <statement name="DO5"> + <block type="variables_set" id="qjHV]^:Wo)#J|x`[z9Dw"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="0tLy^$!b-,Fdll2TwLa0"> + <field name="TEXT">NO_BALL_GOAL_LEFT</field> + </block> + </value> + <next> + <block type="procedures_callnoreturn" id="Vzc:}E8,Hsc_h7}a.*Sh" inline="true"> + <mutation name="right_v"> <arg name="v"/> </mutation> <value name="ARG0"> - <block type="variables_get" id="J/%Oa`9f,Y13y_bOs_ef"> + <block type="variables_get" id="p@Lz?df8Zva_P-,/=ix9"> <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> </block> - </statement> - <value name="IF2"> - <block type="logic_compare" id="VxyB%0*)9[A{wCi_b~$0"> - <field name="OP">GT</field> + </next> + </block> + </statement> + <value name="IF6"> + <block type="logic_operation" id="@A84Nx^IpXz%LCYDf+3a" inline="false"> + <field name="OP">AND</field> + <value name="A"> + <block type="logic_operation" id="9{.L1,^dK`cx%gkekh((" inline="false"> + <field name="OP">OR</field> + <value name="A"> + <block type="logic_compare" id="B.4G5j0lpHiK^%Co:jY("> + <field name="OP">EQ</field> + <value name="A"> + <block type="variables_get" id="N|{6x7I=]/-FV.9c}m6;"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="_]3{l!O7]TQml!/!$`],"/> + </value> + </block> + </value> + <value name="B"> + <block type="logic_compare" id="1rtp?f;WQuGueC0!fsF1"> + <field name="OP">EQ</field> + <value name="A"> + <block type="variables_get" id="P)7_c}h5-WzhIT2+Sm!3"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> + </block> + </value> + <value name="B"> + <block type="logic_null" id="6|946y1Dt?3;v$m7}3b#"/> + </value> + </block> + </value> + </block> + </value> + <value name="B"> + <block type="logic_operation" id="/CB,rxMtGbnS.o4@P$H9" inline="false"> + <field name="OP">OR</field> <value name="A"> - <block type="math_arithmetic" id="|7Z%Ki.3uN~;7c7dD[@e" inline="false"> - <field name="OP">MINUS</field> + <block type="logic_compare" id="5}=h$U=O8]*WCIA_=(9a"> + <field name="OP">EQ</field> <value name="A"> - <block type="lists_getIndex" id="#uNz,SfO~+zP4,sS`C6;"> + <block type="lists_getIndex" id="rFSJLYcW!+@P?N?y|r7f"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="kQ1V6dYMl=T|wiWBB:yK"> + <block type="variables_get" id="wmkBU3vd)/J=a~DAmk#]"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="=oK,TS$D{KF$),BuO%b-"> - <field name="NUM">2</field> + <block type="math_number" id="K.RepJQLnfVsjvX78zRj"> + <field name="NUM">1</field> </block> </value> </block> </value> <value name="B"> - <block type="lists_getIndex" id="jeo$Tn_DQK0@K|6xywSs"> + <block type="logic_null" id="wSe^9aT1?BoFCiEZ)67i"/> + </value> + </block> + </value> + <value name="B"> + <block type="logic_compare" id="E}DH@Yb00(X!:w660oS^"> + <field name="OP">NEQ</field> + <value name="A"> + <block type="lists_getIndex" id="p!/e={0EJkLtZyh?3PC$"> <mutation statement="false" at="true"/> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> - <block type="variables_get" id="YHmHsZ0^]EkM`Q2Ii*yl"> + <block type="variables_get" id="i@GB;88$3cms~;*_]d*C"> <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> <value name="AT"> - <block type="math_number" id="t,gX6}8J!Fj1f.N[r~Zp"> - <field name="NUM">1</field> + <block type="math_number" id="neYV=.Td3fuL+NU,#Tfy"> + <field name="NUM">2</field> </block> </value> </block> </value> - </block> - </value> - <value name="B"> - <block type="variables_get" id="?q##-)hY2%F2{Lx*2U0U"> - <field name="VAR" id="Ym/+Qo0YZe25;%N1d!*f">x_min</field> + <value name="B"> + <block type="logic_null" id="_]zY;9N^B,D_VA;,OV8_"/> + </value> </block> </value> </block> </value> - <statement name="DO2"> - <block type="procedures_callnoreturn" id="jYQXBtRHSn.adQq~G7@Z" inline="true"> - <mutation name="right_v"> + </block> + </value> + <statement name="DO6"> + <block type="variables_set" id="zX@s(@}$N7L6cM*{mc:{"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="Zw4*=firw67G(Xw@?.}|"> + <field name="TEXT">NO_BALL_GOAL_RIGHT</field> + </block> + </value> + <next> + <block type="procedures_callnoreturn" id="#IIK^*qJGd9$K|c1_i9*" inline="true"> + <mutation name="left_v"> <arg name="v"/> </mutation> <value name="ARG0"> - <block type="variables_get" id="nCzWllccVaUk{$/gd9*b"> + <block type="variables_get" id="S4bwFlwPS0iZ(K5:^)mj"> <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="txDc~?FC/.mMwB2ftP!t"> - <mutation name="stop"/> - </block> - </statement> - </block> - </next> - </block> - </statement> - <value name="IF5"> - <block type="logic_operation" id="n;fJ-X=w7VQ~lqJ!9izM" inline="false"> - <field name="OP">AND</field> - <value name="A"> - <block type="logic_operation" id="NFf.9WuEcFjGpo|he2Lq" inline="false"> - <field name="OP">OR</field> - <value name="A"> - <block type="logic_compare" id="R$,3LHh`g+6Wa:m#*[Ys"> - <field name="OP">EQ</field> - <value name="A"> - <block type="variables_get" id="rwEBIEg)#f$fNY):g16?"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id="9d:a29Y`@{YMRdTLZH|W"/> - </value> - </block> - </value> - <value name="B"> - <block type="logic_compare" id="chjUw+0f?gW,C~KalQZQ"> - <field name="OP">EQ</field> - <value name="A"> - <block type="variables_get" id="J;t`p`a%Tr`zE:+/Lx%x"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="B"> - <block type="logic_null" id="tsl[NONq~[]^~}KRpNQy"/> - </value> - </block> - </value> + </next> </block> - </value> - <value name="B"> - <block type="logic_operation" id="w[--Ee4II.j.3yFUzaHC" inline="false"> - <field name="OP">OR</field> - <value name="A"> - <block type="logic_compare" id="O{Tccxva=xl#e:%Ta#cj"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="lists_getIndex" id="0+*2|0;-#|/B`S;lfIBC"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="XnSX|A;Vc=7XtVTPe;II"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> - </block> - </value> - <value name="AT"> - <block type="math_number" id="m3$DlVvf.(6%$hkU0F]c"> - <field name="NUM">1</field> - </block> - </value> - </block> - </value> - <value name="B"> - <block type="logic_null" id="fWFBJEE}YZGKJY)tiNyv"/> - </value> + </statement> + <statement name="ELSE"> + <block type="variables_set" id="50o[ObTwzWD=aupUSv#W"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <value name="VALUE"> + <block type="text" id="BaG@T;!/Smm@WZeM1+h#"> + <field name="TEXT">NONE</field> </block> </value> - <value name="B"> - <block type="logic_compare" id="w[W/2lkK6=`$]ikD=RR|"> - <field name="OP">NEQ</field> - <value name="A"> - <block type="lists_getIndex" id="gUheL@#H`cAt{|@b[l96"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="iFZABdWa@-#A}|Mrf?Fz"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> - </block> - </value> - <value name="AT"> - <block type="math_number" id="-X+nB:-/Qb=rz:Dh_h8H"> - <field name="NUM">2</field> - </block> - </value> + <next> + <block type="procedures_callnoreturn" id="_X-|0l5pe^4k**|RuSSZ" inline="true"> + <mutation name="search_ball_rot"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="q9XrN{.:T$USmI[ZR79Q"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> - <value name="B"> - <block type="logic_null" id="@Is_#Ked]NGd$K2MW-N^"/> - </value> - </block> - </value> - </block> - </value> - </block> - </value> - <statement name="DO5"> - <block type="variables_set" id="qjHV]^:Wo)#J|x`[z9Dw"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="0tLy^$!b-,Fdll2TwLa0"> - <field name="TEXT">NO_BALL</field> - </block> - </value> - </block> - </statement> - <statement name="ELSE"> - <block type="variables_set" id="50o[ObTwzWD=aupUSv#W"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> - <value name="VALUE"> - <block type="text" id="BaG@T;!/Smm@WZeM1+h#"> - <field name="TEXT">NONE</field> - </block> - </value> - <next> - <block type="procedures_callnoreturn" id="#E=7[4AYmaML!W*#TS*q" inline="true"> - <mutation name="search_ball_rot"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="S4bwFlwPS0iZ(K5:^)mj"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> - </value> + </next> </block> - </next> + </statement> </block> </statement> <next> - <block type="util_wait_until" id="O|8(q6;n0}n@CgSBRQCl"> - <value name="value"> - <block type="logic_negate" id="g4~%p~r;1tU)2+XmU,@N"> - <value name="BOOL"> - <block type="sound_is_playing_audiofile" id="kaPo^8PCo^/;@S8JJp^2"/> - </value> - </block> - </value> - </block> - </next> - </block> - </statement> - <next> - <block type="display_set_label_text" id="QDZ)v?E3iW-Liq4HKvUn"> - <field name="instance_name">txt_label_ball</field> - <value name="value"> - <shadow type="text" id="B`M|)AOBioxQGjue#9y^"> - <field name="TEXT">abc</field> - </shadow> - <block type="text_format" id="bMzX7EzL+}J^dowK5pv|"> - <mutation items="2"/> - <value name="value"> - <shadow type="text" id="(C2/oN~6=q7Bw[A5`Pz)"> - <field name="TEXT">x:{}, y:{}</field> - </shadow> - </value> - <value name="ADD0"> - <block type="variables_get" id="N3bK$!XutDL@t?7tqOnB"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="ADD1"> - <block type="variables_get" id="CIUI@k|{^~}vfJeTSYP2"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - </block> - </value> - <next> - <block type="display_set_label_text" id="2Ac72_SmdOYaC#|w[dk%"> - <field name="instance_name">txt_label_goal</field> + <block type="display_set_label_text" id="QDZ)v?E3iW-Liq4HKvUn"> + <field name="instance_name">txt_label_ball</field> <value name="value"> - <shadow type="text"> + <shadow type="text" id="B`M|)AOBioxQGjue#9y^"> <field name="TEXT">abc</field> </shadow> - <block type="text_format" id="xXJlH+s%1,D1WcfOkt#6"> - <mutation items="1"/> + <block type="text_format" id="bMzX7EzL+}J^dowK5pv|"> + <mutation items="2"/> <value name="value"> - <shadow type="text" id=":(AhX7mg_fQeOGz*xR@g"> - <field name="TEXT">x:{}</field> + <shadow type="text" id="(C2/oN~6=q7Bw[A5`Pz)"> + <field name="TEXT">x:{}, y:{}</field> </shadow> </value> <value name="ADD0"> - <block type="variables_get" id="ppSdz+]@cvkJ)r-5HdD^"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <block type="variables_get" id="N3bK$!XutDL@t?7tqOnB"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="ADD1"> + <block type="variables_get" id="CIUI@k|{^~}vfJeTSYP2"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> </block> </value> <next> - <block type="display_set_label_text" id="Fn{?O{el^_@qD+)BLOev"> - <field name="instance_name">txt_label_counters</field> + <block type="display_set_label_text" id="2Ac72_SmdOYaC#|w[dk%"> + <field name="instance_name">txt_label_goal</field> <value name="value"> <shadow type="text"> <field name="TEXT">abc</field> </shadow> - <block type="text_format" id="XRX)WXoaE,9N}4t?YAI#"> + <block type="text_format" id="xXJlH+s%1,D1WcfOkt#6"> <mutation items="1"/> <value name="value"> - <shadow type="text" id="UlS|}~2{uOl01S@(ahiE"> - <field name="TEXT">{}</field> + <shadow type="text" id=":(AhX7mg_fQeOGz*xR@g"> + <field name="TEXT">x:{}</field> </shadow> </value> <value name="ADD0"> - <block type="variables_get" id="XdyZ*L#*0E`A`0/3UYf~"> - <field name="VAR" id="5@U(%o_ghQ1;jiB#odH8">counters</field> + <block type="variables_get" id="ppSdz+]@cvkJ)r-5HdD^"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> </block> </value> </block> </value> <next> - <block type="text_print" id="##1hG%c^2!NKjN~e1lyg"> - <value name="TEXT"> - <shadow type="text" id="p_E`2=Fj^pN,D}gxPEvW"> - <field name="TEXT"/> + <block type="display_set_label_text" id="Fn{?O{el^_@qD+)BLOev"> + <field name="instance_name">txt_label_counters</field> + <value name="value"> + <shadow type="text"> + <field name="TEXT">abc</field> </shadow> - <block type="text_format" id="mB*d7.SSna@S_Ds5Y4[o"> - <mutation items="7"/> + <block type="text_format" id="XRX)WXoaE,9N}4t?YAI#"> + <mutation items="1"/> <value name="value"> - <shadow type="text" id="a{L7ErJR}=Flx|}3~+X4"> - <field name="TEXT">{}: GOAL_x: {}, {} BALL_pos:{},{} v_x:{} v_y:{}</field> + <shadow type="text" id="UlS|}~2{uOl01S@(ahiE"> + <field name="TEXT">{}</field> </shadow> </value> <value name="ADD0"> - <block type="variables_get" id="wVt[k#I:X+:T`RVkRf]K"> - <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> + <block type="variables_get" id="XdyZ*L#*0E`A`0/3UYf~"> + <field name="VAR" id="5@U(%o_ghQ1;jiB#odH8">counters</field> </block> </value> - <value name="ADD1"> - <block type="lists_getIndex" id=";CdZ:9!xf(3gc%Mh;He0"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="+?O{K7(C)vw`Y6!T4L(o"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <next> + <block type="text_print" id="##1hG%c^2!NKjN~e1lyg"> + <value name="TEXT"> + <shadow type="text" id="p_E`2=Fj^pN,D}gxPEvW"> + <field name="TEXT"/> + </shadow> + <block type="text_format" id="mB*d7.SSna@S_Ds5Y4[o"> + <mutation items="8"/> + <value name="value"> + <shadow type="text" id="a{L7ErJR}=Flx|}3~+X4"> + <field name="TEXT">{}:{} GOAL_x: {}, {} BALL_pos:{},{} v_x:{} v_y:{}</field> + </shadow> + </value> + <value name="ADD0"> + <block type="variables_get" id="UGc[vu*b~9D^!p.3?7mo"> + <field name="VAR" id="vH;^OzJY7dOdepMScU1s">state</field> </block> </value> - <value name="AT"> - <block type="math_number" id="Vn9o7R1/1Q!=L_;i9X4o"> - <field name="NUM">1</field> + <value name="ADD1"> + <block type="variables_get" id="wVt[k#I:X+:T`RVkRf]K"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> </block> </value> - </block> - </value> - <value name="ADD2"> - <block type="lists_getIndex" id="a4ca)9;+OLbvk6YkfibR"> - <mutation statement="false" at="true"/> - <field name="MODE">GET</field> - <field name="WHERE">FROM_START</field> - <value name="VALUE"> - <block type="variables_get" id="/(B3zJewppd~EofXj-kV"> - <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + <value name="ADD2"> + <block type="lists_getIndex" id=";CdZ:9!xf(3gc%Mh;He0"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="+?O{K7(C)vw`Y6!T4L(o"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="Vn9o7R1/1Q!=L_;i9X4o"> + <field name="NUM">1</field> + </block> + </value> + </block> + </value> + <value name="ADD3"> + <block type="lists_getIndex" id="a4ca)9;+OLbvk6YkfibR"> + <mutation statement="false" at="true"/> + <field name="MODE">GET</field> + <field name="WHERE">FROM_START</field> + <value name="VALUE"> + <block type="variables_get" id="/(B3zJewppd~EofXj-kV"> + <field name="VAR" id="=2ARo+;2DS07SU~j29Fk">posx_goal</field> + </block> + </value> + <value name="AT"> + <block type="math_number" id="EqI.1mGPgXG[7av.gZ71"> + <field name="NUM">2</field> + </block> + </value> + </block> + </value> + <value name="ADD4"> + <block type="variables_get" id="sPxj5C*ZzYUH*$WCe4|q"> + <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> + </block> + </value> + <value name="ADD5"> + <block type="variables_get" id="~vY0WPr#jWq#SxvDb1@n"> + <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> </block> </value> - <value name="AT"> - <block type="math_number" id="EqI.1mGPgXG[7av.gZ71"> - <field name="NUM">2</field> + <value name="ADD6"> + <block type="variables_get" id="r!O8lsSDk:Xs*=-;)LRu"> + <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </block> + </value> + <value name="ADD7"> + <block type="variables_get" id="`fG05b:bzq8[q?bquCg6"> + <field name="VAR" id=";S3?%3)**s[[l~Aq3*,{">v_var_ball_ypos</field> </block> </value> </block> </value> - <value name="ADD3"> - <block type="variables_get" id="sPxj5C*ZzYUH*$WCe4|q"> - <field name="VAR" id="S4.mduNQC(va3iR{oSdB">posx_ball</field> - </block> - </value> - <value name="ADD4"> - <block type="variables_get" id="~vY0WPr#jWq#SxvDb1@n"> - <field name="VAR" id="q#H`+Gwt~43Dh@fu;G-D">posy_ball</field> - </block> - </value> - <value name="ADD5"> - <block type="variables_get" id="r!O8lsSDk:Xs*=-;)LRu"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> - </block> - </value> - <value name="ADD6"> - <block type="variables_get" id="`fG05b:bzq8[q?bquCg6"> - <field name="VAR" id=";S3?%3)**s[[l~Aq3*,{">v_var_ball_ypos</field> + <next> + <block type="util_wait_for" id="U4XL;U0gG@tD~]*kp|L{"> + <field name="format">ms</field> + <value name="value"> + <shadow type="math_number" id="E9K@*OZ(Ftp5CGt}.9cT"> + <field name="NUM">70</field> + </shadow> + </value> </block> - </value> - </block> - </value> - <next> - <block type="util_wait_for" id="U4XL;U0gG@tD~]*kp|L{"> - <field name="format">ms</field> - <value name="value"> - <shadow type="math_number" id="E9K@*OZ(Ftp5CGt}.9cT"> - <field name="NUM">80</field> - </shadow> - </value> + </next> </block> </next> </block> @@ -2156,9 +2286,9 @@ </block> </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </next> </block> @@ -2206,7 +2336,7 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="N2EC5uK:$~0ERXAdK0!y" x="0" y="5763"> + <block type="procedures_defnoreturn" id="N2EC5uK:$~0ERXAdK0!y" x="0" y="6071"> <field name="NAME">checkTimeouts</field> <statement name="STACK"> <block type="controls_if" id="o.;j7*F0}TW}ju0E18(_"> @@ -2352,7 +2482,7 @@ </block> </statement> </block> - <block type="camera_on_ball_detected" id="dgC*A|KHMC_R5S#ZRk}d" x="0" y="6216"> + <block type="camera_on_ball_detected" id="dgC*A|KHMC_R5S#ZRk}d" x="0" y="6524"> <field name="instance_name">ball_detector</field> <statement name="statement"> <block type="variables_set" id="=2/,IQfcLO{_5PNd3UK~"> @@ -2553,7 +2683,7 @@ </block> </statement> </block> - <block type="camera_on_ball_detected" id="Rg2Gt(0WT:J2|Us~[j.3" x="0" y="6883"> + <block type="camera_on_ball_detected" id="Rg2Gt(0WT:J2|Us~[j.3" x="0" y="7191"> <field name="instance_name">ball_detector_goal_left</field> <statement name="statement"> <block type="variables_set" id="kvK,D4e%04[?+!jq*Lch"> @@ -2633,7 +2763,7 @@ </block> </statement> </block> - <block type="camera_on_ball_detected" id="(?slhGsN^:d1`vP{j9#|" x="0" y="7186"> + <block type="camera_on_ball_detected" id="(?slhGsN^:d1`vP{j9#|" x="0" y="7494"> <field name="instance_name">ball_detector_goal_right</field> <statement name="statement"> <block type="variables_set" id="0!1?#@4|tcM8+U6E[$Tl"> @@ -2713,7 +2843,7 @@ </block> </statement> </block> - <block type="counter_event" id="T^aHOKaV|bU#ZeZfn[GJ" x="0" y="7489"> + <block type="counter_event" id="T^aHOKaV|bU#ZeZfn[GJ" x="0" y="7797"> <value name="condition"> <shadow type="counter_if_value" id="9`P*eh,|:Wnytp?G[|;{"> <field name="instance_name">TXT_M_C1_motor_step_counter</field> @@ -2761,7 +2891,7 @@ </block> </statement> </block> - <block type="counter_event" id="7wA~J+BkZ5~nV6aI|fLZ" x="0" y="7636"> + <block type="counter_event" id="7wA~J+BkZ5~nV6aI|fLZ" x="0" y="7944"> <value name="condition"> <shadow type="counter_if_value" id="RDF|2PoXWvG^_k{FB37U"> <field name="instance_name">TXT_M_C2_motor_step_counter</field> @@ -2809,7 +2939,7 @@ </block> </statement> </block> - <block type="counter_event" id="Nv;e.HwUkTK/=(qEs~82" x="0" y="7783"> + <block type="counter_event" id="Nv;e.HwUkTK/=(qEs~82" x="0" y="8091"> <value name="condition"> <shadow type="counter_if_value" id="05ihu;VYh*tmqA78pJQL"> <field name="instance_name">TXT_M_C3_motor_step_counter</field> @@ -2857,7 +2987,7 @@ </block> </statement> </block> - <block type="counter_event" id="j|Pz^uHewb7]si9}3az3" x="0" y="7930"> + <block type="counter_event" id="j|Pz^uHewb7]si9}3az3" x="0" y="8238"> <value name="condition"> <shadow type="counter_if_value" id="N9]b*Kn_Nxk}[I9e!^Z."> <field name="instance_name">TXT_M_C4_motor_step_counter</field> @@ -2905,7 +3035,7 @@ </block> </statement> </block> - <block type="input_event" id="j(TuhJ0G}{^qGSq:26FY" x="0" y="8077"> + <block type="input_event" id="j(TuhJ0G}{^qGSq:26FY" x="0" y="8385"> <value name="condition"> <block type="input_photo_transistor_if_state" id="dX]-jf`=2/tNnEnHfKvx"> <field name="instance_name">TXT_M_I8_photo_transistor</field> @@ -2928,101 +3058,122 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="RyK*td9aN5aR;@gw4f)+" x="0" y="8214"> + <block type="procedures_defnoreturn" id="RyK*td9aN5aR;@gw4f)+" x="0" y="8522"> <field name="NAME">shotBall</field> <statement name="STACK"> - <block type="servomotor_set_position" id="9C*rGH2+bsy8H4Xzz#gk"> - <field name="instance_name">TXT_M_S1_servomotor</field> - <value name="position"> - <shadow type="servomotor_number" id="3#vdOeDe(0MHgYPRG0eb"> - <field name="SERVOMOTOR_NUM">400</field> - </shadow> + <block type="variables_set" id="l,2u2WF|]I#%kDS#5O7-"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="l_yV|$i~!JH96.HW9?@("> + <field name="TEXT">shotBall</field> + </block> </value> <next> - <block type="encodermotor_set_values" id="F+hDM}p/#t|XH]+z~~$B"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CCW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number" id="64D3bb)L:IYB~nq!(4hR"> - <field name="MOTOR_NUM">512</field> - </shadow> - </value> - <value name="distance"> - <shadow type="math_number" id="!vn0#[@_$kjeevcKcnqF"> - <field name="NUM">100</field> + <block type="servomotor_set_position" id="9C*rGH2+bsy8H4Xzz#gk"> + <field name="instance_name">TXT_M_S1_servomotor</field> + <value name="position"> + <shadow type="servomotor_number" id="3#vdOeDe(0MHgYPRG0eb"> + <field name="SERVOMOTOR_NUM">400</field> </shadow> </value> <next> - <block type="util_wait_for" id="m3t4v%1!lE[H3:*p2qXE"> - <field name="format">ms</field> - <value name="value"> - <shadow type="math_number" id="[f5FG@r=T8wETvhgPjR#"> - <field name="NUM">50</field> + <block type="encodermotor_set_values" id="F+hDM}p/#t|XH]+z~~$B"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CCW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number" id="64D3bb)L:IYB~nq!(4hR"> + <field name="MOTOR_NUM">512</field> + </shadow> + </value> + <value name="distance"> + <shadow type="math_number" id="!vn0#[@_$kjeevcKcnqF"> + <field name="NUM">100</field> </shadow> </value> <next> - <block type="servomotor_set_position" id="[6Fc9E204i$BHgyH9F-W"> - <field name="instance_name">TXT_M_S1_servomotor</field> - <value name="position"> - <shadow type="servomotor_number" id="i.IOaM[DE:d3D.IL`53*"> - <field name="SERVOMOTOR_NUM">256</field> + <block type="util_wait_for" id="m3t4v%1!lE[H3:*p2qXE"> + <field name="format">ms</field> + <value name="value"> + <shadow type="math_number" id="[f5FG@r=T8wETvhgPjR#"> + <field name="NUM">50</field> </shadow> </value> <next> - <block type="util_wait_until" id="kEY!lgl3*DfU:CB]K2{%"> - <value name="value"> - <block type="encodermotor_position_read" id="bi9}0jIIDM*S92db?fO["> - <field name="instance_name">TXT_M_M1_encodermotor</field> - </block> + <block type="servomotor_set_position" id="[6Fc9E204i$BHgyH9F-W"> + <field name="instance_name">TXT_M_S1_servomotor</field> + <value name="position"> + <shadow type="servomotor_number" id="i.IOaM[DE:d3D.IL`53*"> + <field name="SERVOMOTOR_NUM">256</field> + </shadow> </value> <next> - <block type="encodermotor_set_values" id="ZqZiW,6J)cdL38}.8Dp6"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number" id="Q(^TrT!sMN6[NB-$y!`U"> - <field name="MOTOR_NUM">512</field> - </shadow> - </value> - <value name="distance"> - <shadow type="math_number" id="vv:iZ6tXN]M@jx0UY]0T"> - <field name="NUM">40</field> - </shadow> + <block type="util_wait_until" id="kEY!lgl3*DfU:CB]K2{%"> + <value name="value"> + <block type="encodermotor_position_read" id="bi9}0jIIDM*S92db?fO["> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> </value> <next> - <block type="util_wait_until" id="S:|a({u_(UrXi*)+(pyx"> - <value name="value"> - <block type="encodermotor_position_read" id="9n59:FNrXDFp`7c!3gb+"> - <field name="instance_name">TXT_M_M1_encodermotor</field> - </block> + <block type="encodermotor_set_values" id="ZqZiW,6J)cdL38}.8Dp6"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number" id="Q(^TrT!sMN6[NB-$y!`U"> + <field name="MOTOR_NUM">512</field> + </shadow> + </value> + <value name="distance"> + <shadow type="math_number" id="vv:iZ6tXN]M@jx0UY]0T"> + <field name="NUM">40</field> + </shadow> </value> <next> - <block type="sound_play_audio_file" id="-8bCV.(5yrq.DB#~[_}@"> - <field name="soundfile_name">26_Augenzwinkern.wav</field> - <field name="checkbox">FALSE</field> + <block type="util_wait_until" id="S:|a({u_(UrXi*)+(pyx"> + <value name="value"> + <block type="encodermotor_position_read" id="9n59:FNrXDFp`7c!3gb+"> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> + </value> <next> - <block type="display_set_switch_checked" id=")N/~DtYFy8cPbOpo-I50"> - <field name="instance_name">txt_switch_active</field> - <field name="property_name">checked</field> - <value name="value"> - <shadow type="logic_boolean" id="@Yk!SDjWfHi4@-ozuu_d"> - <field name="BOOL">FALSE</field> - </shadow> - </value> + <block type="sound_play_audio_file" id="-8bCV.(5yrq.DB#~[_}@"> + <field name="soundfile_name">26_Augenzwinkern.wav</field> + <field name="checkbox">FALSE</field> + <next> + <block type="display_set_switch_checked" id=")N/~DtYFy8cPbOpo-I50"> + <field name="instance_name">txt_switch_active</field> + <field name="property_name">checked</field> + <value name="value"> + <shadow type="logic_boolean" id="@Yk!SDjWfHi4@-ozuu_d"> + <field name="BOOL">FALSE</field> + </shadow> + </value> + <next> + <block type="util_wait_until" id="O|8(q6;n0}n@CgSBRQCl"> + <value name="value"> + <block type="logic_negate" id="g4~%p~r;1tU)2+XmU,@N"> + <value name="BOOL"> + <block type="sound_is_playing_audiofile" id="kaPo^8PCo^/;@S8JJp^2"/> + </value> + </block> + </value> + </block> + </next> + </block> + </next> </block> </next> </block> @@ -3042,245 +3193,270 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="+FKt%DE[[q%Zp0T.Fn}d" collapsed="true" x="0" y="8772"> + <block type="procedures_defnoreturn" id="+FKt%DE[[q%Zp0T.Fn}d" x="0" y="9136"> <field name="NAME">stop</field> <statement name="STACK"> - <block type="encodermotor_stop" id="}]1#.xeDc*.k9aGX5P?4"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <block type="variables_set" id="0lb+=KDkMxl8Q(.f(!U4"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="[STGuKU5$?TCkTMnB@dh"> + <field name="TEXT">stop</field> + </block> + </value> + <next> + <block type="encodermotor_stop" id="}]1#.xeDc*.k9aGX5P?4"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + </block> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="/pGK)WReTLfX`L_7oAMD" x="0" y="8839"> + <block type="procedures_defnoreturn" id="/pGK)WReTLfX`L_7oAMD" x="0" y="9357"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="{M*n_!I)eN0.4..0Bzo#"/> </mutation> <field name="NAME">fwd_v</field> <field name="{M*n_!I)eN0.4..0Bzo#">v</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="ah7YO6/{vwtV1B9-5][Z"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CCW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number" id="se]mq?calLw6d0oaOQ#q"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="F2VdZTX[?#t@xpXe5PGZ"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <block type="variables_set" id="k4%B2_)cuM/0XAejS?6,"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="h[B[wN${qL8]9fVs;wQ#"> + <field name="TEXT">fwd_v</field> </block> </value> <next> - <block type="text_print" id="Jqo/.TFo--ru@,tx{!Q."> - <value name="TEXT"> - <shadow type="text" id="rAokm(cf}=y_BMu%W5k="> - <field name="TEXT">fwd</field> + <block type="encodermotor_set_speed" id="ah7YO6/{vwtV1B9-5][Z"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CCW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number" id="se]mq?calLw6d0oaOQ#q"> + <field name="MOTOR_NUM">512</field> </shadow> + <block type="variables_get" id="F2VdZTX[?#t@xpXe5PGZ"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> </value> </block> </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="qX~e_RBh^tj];fOb=cq6" x="0" y="9088"> + <block type="procedures_defnoreturn" id="qX~e_RBh^tj];fOb=cq6" x="0" y="9606"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="{M*n_!I)eN0.4..0Bzo#"/> </mutation> <field name="NAME">bwd_v</field> <field name="{M*n_!I)eN0.4..0Bzo#">v</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="YS-=5/?xzHBymyv(0~I["> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id=":=uFcASeChn[[mZmP=JV"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <block type="variables_set" id="rjgb/wZ.G(d1q*MvVWyS"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="K8QD$0jHA+Dm+{RRS8:n"> + <field name="TEXT">bwd_v</field> </block> </value> <next> - <block type="text_print" id="D2d~Hp;Jlb7#MaresYw0"> - <value name="TEXT"> - <shadow type="text" id="=W}FcdDcT6{+Y3$kjQ=?"> - <field name="TEXT">bwd</field> + <block type="encodermotor_set_speed" id="YS-=5/?xzHBymyv(0~I["> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> </shadow> + <block type="variables_get" id=":=uFcASeChn[[mZmP=JV"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> </value> </block> </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="!zD7YDZ.5n?En8cYle4R" x="0" y="9337"> + <block type="procedures_defnoreturn" id="!zD7YDZ.5n?En8cYle4R" x="0" y="9855"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> <field name="NAME">left_v</field> <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="`gfvLl$(n`J_k.%k4:;$"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CCW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id=")YRj9Ls`3L]5*jDTk**X"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <block type="variables_set" id="9UC$F$BrPjk6CDy%BB]f"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="SIyo}OztKoVxJ[=D8clt"> + <field name="TEXT">left_v</field> </block> </value> <next> - <block type="text_print" id="RrSmtF]e9ree4{^+fY!I"> - <value name="TEXT"> - <shadow type="text" id="[SUX^1hN]oaBQw8IAmoL"> - <field name="TEXT">left</field> + <block type="encodermotor_set_speed" id="`gfvLl$(n`J_k.%k4:;$"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CCW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> </shadow> + <block type="variables_get" id=")YRj9Ls`3L]5*jDTk**X"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> </value> </block> </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="}KXL0=RKLgCT~yQ];aw:" x="0" y="9586"> + <block type="procedures_defnoreturn" id="}KXL0=RKLgCT~yQ];aw:" x="0" y="10104"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> <field name="NAME">right_v</field> <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="nx1gdpc@IPQ^`H:CbI[*"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="$@n1C^pw7z*pgx,V+kbX"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <block type="variables_set" id="_%oPi#@c!;(F[8p]QAd!"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="1Tn,Qoec1k.1M0YT4?=."> + <field name="TEXT">right_v</field> </block> </value> <next> - <block type="text_print" id="e[d[4KXka]Md=`?_uuLL"> - <value name="TEXT"> - <shadow type="text" id="T4bM;!0fS+0pCd{a-O[g"> - <field name="TEXT">right</field> + <block type="encodermotor_set_speed" id="nx1gdpc@IPQ^`H:CbI[*"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> </shadow> + <block type="variables_get" id="$@n1C^pw7z*pgx,V+kbX"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> </value> </block> </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="0R.p||vBpkt08x[mI=z[" x="0" y="9835"> + <block type="procedures_defnoreturn" id="0R.p||vBpkt08x[mI=z[" x="0" y="10353"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> <field name="NAME">search_ball_rot</field> <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> <statement name="STACK"> - <block type="controls_if" id=":j7vG?8C4FXZdB[+V7Nl"> - <mutation elseif="0" else="1"/> - <value name="IF0"> - <block type="variables_get" id="~Y@!W9td!8kYdIc/kMkw"> - <field name="VAR" id="2Lkg^#Z.uZy(%Nr[26)6">search_dir_left</field> + <block type="variables_set" id="K}2j!Hz/RYuBz+(~Gi59"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="_l(?USQWVcXo!=EeZ!l$"> + <field name="TEXT">search_ball_rot</field> </block> </value> - <statement name="DO0"> - <block type="procedures_callnoreturn" id="YvX.x.^TrWBOPLSlBiLf" inline="true"> - <mutation name="left_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="o6~j-n7ex}.$nbH/Nw,l"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <next> + <block type="controls_if" id=":j7vG?8C4FXZdB[+V7Nl"> + <mutation elseif="0" else="1"/> + <value name="IF0"> + <block type="variables_get" id="~Y@!W9td!8kYdIc/kMkw"> + <field name="VAR" id="2Lkg^#Z.uZy(%Nr[26)6">search_dir_left</field> </block> </value> - </block> - </statement> - <statement name="ELSE"> - <block type="procedures_callnoreturn" id="4M:.8icq7AlRrzRTyTKi" inline="true"> - <mutation name="right_v"> - <arg name="v"/> - </mutation> - <value name="ARG0"> - <block type="variables_get" id="@.9?uHc%LEgenn6]q98Q"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <statement name="DO0"> + <block type="procedures_callnoreturn" id="YvX.x.^TrWBOPLSlBiLf" inline="true"> + <mutation name="left_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="o6~j-n7ex}.$nbH/Nw,l"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> </block> - </value> + </statement> + <statement name="ELSE"> + <block type="procedures_callnoreturn" id="4M:.8icq7AlRrzRTyTKi" inline="true"> + <mutation name="right_v"> + <arg name="v"/> + </mutation> + <value name="ARG0"> + <block type="variables_get" id="@.9?uHc%LEgenn6]q98Q"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + </block> + </statement> </block> - </statement> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="UFM0X7|X:*ja#f+^7kz;" x="0" y="10076"> + <block type="procedures_defnoreturn" id="UFM0X7|X:*ja#f+^7kz;" x="0" y="10622"> <field name="NAME">turnBallLeft</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="I[S{vjf1EdjHVhk32Irr"> - <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number" id="KbM1XwSZ`0p4OfObK%2d"> - <field name="MOTOR_NUM">100</field> - </shadow> - <block type="variables_get" id="lwr0*WN{do?Zo1A69t):"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + <block type="variables_set" id="nf?K,a/5MLaj.5?J/IGs"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="?Di@nJ_~eE%u(u]_u-7U"> + <field name="TEXT">turnBallLeft</field> </block> </value> <next> - <block type="encodermotor_set_speed" id="?-}PDl2[=K?(SrBgJg-U"> + <block type="encodermotor_set_speed" id="I[S{vjf1EdjHVhk32Irr"> <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M3_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M4_encodermotor</field> - <field name="direction_1">Motor.CCW</field> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> <value name="speed"> - <shadow type="motor_number" id="=efoF`lj-~A7g]Ka]qr."> - <field name="MOTOR_NUM">512</field> + <shadow type="motor_number" id="KbM1XwSZ`0p4OfObK%2d"> + <field name="MOTOR_NUM">100</field> </shadow> - <block type="variables_get" id="Oj^O^)OdFOvbsTw`%^dM"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + <block type="variables_get" id="lwr0*WN{do?Zo1A69t):"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> <next> - <block type="text_print" id="5IBCFbH]V/gIWh:B3!5Y"> - <value name="TEXT"> - <shadow type="text" id="GaS,I)E|S%roIN*FN4L%"> - <field name="TEXT">turnBallLeft</field> + <block type="encodermotor_set_speed" id="?-}PDl2[=K?(SrBgJg-U"> + <mutation syncBlocks="1"/> + <field name="instance_name_0">TXT_M_M3_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M4_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number" id="=efoF`lj-~A7g]Ka]qr."> + <field name="MOTOR_NUM">512</field> </shadow> + <block type="variables_get" id="Oj^O^)OdFOvbsTw`%^dM"> + <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </block> </value> </block> </next> @@ -3289,44 +3465,45 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="*i[s2YTWD*g9HS4dxkPq" x="0" y="10297"> + <block type="procedures_defnoreturn" id="*i[s2YTWD*g9HS4dxkPq" x="0" y="10843"> <field name="NAME">turnBallRight</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="c8~SXys:o35ETKj;GX?m"> - <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number" id="dD.1u9Pwx-^rnKZyWQx/"> - <field name="MOTOR_NUM">100</field> - </shadow> - <block type="variables_get" id="C-Nw|[v}V:YO:/o4e*z4"> - <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> + <block type="variables_set" id="$K=E,g/}k}au~ZyqB!+S"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="Zx@baj[/7x8~`_@h3IgQ"> + <field name="TEXT">turnBallRight</field> </block> </value> <next> - <block type="encodermotor_set_speed" id="b:w42I;ulm2~l(S-#ER("> + <block type="encodermotor_set_speed" id="c8~SXys:o35ETKj;GX?m"> <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M3_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M4_encodermotor</field> - <field name="direction_1">Motor.CW</field> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> <value name="speed"> - <shadow type="motor_number" id=";zG8,Fnh@=jNAT#Br68/"> - <field name="MOTOR_NUM">512</field> + <shadow type="motor_number" id="dD.1u9Pwx-^rnKZyWQx/"> + <field name="MOTOR_NUM">100</field> </shadow> - <block type="variables_get" id="pyJ,6!X~/k?JFRr+Yg{E"> - <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + <block type="variables_get" id="C-Nw|[v}V:YO:/o4e*z4"> + <field name="VAR" id=")rK_fR,m=]b(j[{.CtBj">v_slow</field> </block> </value> <next> - <block type="text_print" id="MhojqF%*dZtJ^Xgaks}J"> - <value name="TEXT"> - <shadow type="text" id="Dk#/M-2Ba^~JbxtI-@FD"> - <field name="TEXT">turnBallRight</field> + <block type="encodermotor_set_speed" id="b:w42I;ulm2~l(S-#ER("> + <mutation syncBlocks="1"/> + <field name="instance_name_0">TXT_M_M3_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M4_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number" id=";zG8,Fnh@=jNAT#Br68/"> + <field name="MOTOR_NUM">512</field> </shadow> + <block type="variables_get" id="pyJ,6!X~/k?JFRr+Yg{E"> + <field name="VAR" id="O=Lc:FQ[]f3iuM/V@.mv">v_var_ball_xpos</field> + </block> </value> </block> </next> @@ -3335,129 +3512,159 @@ </block> </statement> </block> - <block type="procedures_defnoreturn" id="dhS+rZWE[`RZz:fU3A)e" collapsed="true" x="0" y="10518"> + <block type="procedures_defnoreturn" id="dhS+rZWE[`RZz:fU3A)e" x="0" y="11064"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> <field name="NAME">sideleft_v</field> <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id="pLk^0]/}JZa5O5XBdTkw"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="+]RiX%o.`5?mErIL~B$V"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + <block type="variables_set" id="Z|I9(D/4o;Yt|2OG8_^J"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="%iArgA`4D!~E(#KoW3aD"> + <field name="TEXT">sideleft_v</field> </block> </value> + <next> + <block type="encodermotor_set_speed" id="pLk^0]/}JZa5O5XBdTkw"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id="+]RiX%o.`5?mErIL~B$V"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + </block> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id=")G33?J{l2sdl+nL3hpBp" collapsed="true" x="0" y="10585"> + <block type="procedures_defnoreturn" id=")G33?J{l2sdl+nL3hpBp" x="0" y="11313"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid=",q%qjDTJ~Z@[BoMwORuq"/> </mutation> <field name="NAME">sideright_v</field> <field name=",q%qjDTJ~Z@[BoMwORuq">v</field> <statement name="STACK"> - <block type="encodermotor_set_speed" id=".Q|g7PUDAM--?pT[,-S?"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CCW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="sT@qtvgDFZk]Mn$EU:M1"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - </block> - </statement> - </block> - <block type="procedures_defnoreturn" id="oSa9Ly*^-c^M{$gkMZt1" collapsed="true" x="0" y="10652"> - <mutation> - <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="K)Z,8|d5@gck+Q]pnW01"/> - <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="(Id`t]O(jxfZJay}20X{"/> - </mutation> - <field name="NAME">fwd</field> - <field name="K)Z,8|d5@gck+Q]pnW01">v</field> - <field name="(Id`t]O(jxfZJay}20X{">ticks</field> - <statement name="STACK"> - <block type="controls_if" id="}6GMVKI!7)8iWzn?N8eh"> - <value name="IF0"> - <block type="logic_compare" id="N{,H09?n%LxG(t2{;y3["> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="5=|v_JXiQ3|FSb0o#e*T"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> - </block> - </value> - <value name="B"> - <block type="math_number" id=";4t3pp,?qIG*SjzMC$xM"> - <field name="NUM">0</field> - </block> - </value> + <block type="variables_set" id="/SeF0|Du}.hszV$AbihP"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="-6KPTh{PdFj4P7D[u2z`"> + <field name="TEXT">sideright_v</field> </block> </value> - <statement name="DO0"> - <block type="encodermotor_set_values" id="h`rI5tcW8bV[ng-XqR+F"> + <next> + <block type="encodermotor_set_speed" id=".Q|g7PUDAM--?pT[,-S?"> <mutation syncBlocks="3"/> <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> + <field name="direction_0">Motor.CW</field> <field name="instance_name_1">TXT_M_M2_encodermotor</field> <field name="direction_1">Motor.CCW</field> <field name="instance_name_2">TXT_M_M3_encodermotor</field> <field name="direction_2">Motor.CCW</field> <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> + <field name="direction_3">Motor.CW</field> <value name="speed"> - <shadow type="motor_number" id="y!~DpIP^n6^9GI3yv~vX"> + <shadow type="motor_number"> <field name="MOTOR_NUM">512</field> </shadow> - <block type="variables_get" id="PrGj:Othm~v7+9B?TiW^"> + <block type="variables_get" id="sT@qtvgDFZk]Mn$EU:M1"> <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> </block> </value> - <value name="distance"> - <shadow type="math_number" id="Rgy(U7MkO+G_=P8602Om"> - <field name="NUM">100</field> - </shadow> - <block type="variables_get" id="dqk+S=/_/`2Xn;ZJNL$e"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </next> + </block> + </statement> + </block> + <block type="procedures_defnoreturn" id="oSa9Ly*^-c^M{$gkMZt1" x="0" y="11562"> + <mutation> + <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="K)Z,8|d5@gck+Q]pnW01"/> + <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="(Id`t]O(jxfZJay}20X{"/> + </mutation> + <field name="NAME">fwd</field> + <field name="K)Z,8|d5@gck+Q]pnW01">v</field> + <field name="(Id`t]O(jxfZJay}20X{">ticks</field> + <statement name="STACK"> + <block type="variables_set" id="fZZMg]?r@^C..$=E:;2|"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="=fOE/_;R4RCIA)$YSbM6"> + <field name="TEXT">fwd</field> + </block> + </value> + <next> + <block type="controls_if" id="}6GMVKI!7)8iWzn?N8eh"> + <value name="IF0"> + <block type="logic_compare" id="N{,H09?n%LxG(t2{;y3["> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="5=|v_JXiQ3|FSb0o#e*T"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id=";4t3pp,?qIG*SjzMC$xM"> + <field name="NUM">0</field> + </block> + </value> </block> </value> - <next> - <block type="util_wait_until" id="t(Mr-0xjyOCn%$K){u]G"> - <value name="value"> - <block type="encodermotor_position_read" id="^a$}*h^GoB`6_qX5.-cG"> - <field name="instance_name">TXT_M_M1_encodermotor</field> + <statement name="DO0"> + <block type="encodermotor_set_values" id="h`rI5tcW8bV[ng-XqR+F"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CCW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number" id="y!~DpIP^n6^9GI3yv~vX"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id="PrGj:Othm~v7+9B?TiW^"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + <value name="distance"> + <shadow type="math_number" id="Rgy(U7MkO+G_=P8602Om"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="dqk+S=/_/`2Xn;ZJNL$e"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> </block> </value> + <next> + <block type="util_wait_until" id="t(Mr-0xjyOCn%$K){u]G"> + <value name="value"> + <block type="encodermotor_position_read" id="^a$}*h^GoB`6_qX5.-cG"> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> + </value> + </block> + </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="G@]xamrhDPW$7uQ6oPo#" collapsed="true" x="0" y="10719"> + <block type="procedures_defnoreturn" id="G@]xamrhDPW$7uQ6oPo#" x="0" y="11947"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="_mFFsmoZwL{(llRvf-eW"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="aNHXtqe[T`=Y[mqp`ZDN"/> @@ -3466,64 +3673,74 @@ <field name="_mFFsmoZwL{(llRvf-eW">v</field> <field name="aNHXtqe[T`=Y[mqp`ZDN">ticks</field> <statement name="STACK"> - <block type="controls_if" id="+CQwW92VB+7[9JkLba3m"> - <value name="IF0"> - <block type="logic_compare" id="c@lZ^[Jxt_h1Hw_.}+{R"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="vEU_WSa{;D=G]]q!@#el"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> - </block> - </value> - <value name="B"> - <block type="math_number" id="TE]og4kshy?@X*N=vQxJ"> - <field name="NUM">0</field> - </block> - </value> + <block type="variables_set" id="uQ8KGKp*}~8cn|Ep`}m="> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="v`bqBCWN23K.WD-X90@0"> + <field name="TEXT">bwd</field> </block> </value> - <statement name="DO0"> - <block type="encodermotor_set_values" id="b,~hF{XLP3G).D!V.f$w"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="2?Q:/)fc+~~-vYsN|Kaz"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - <value name="distance"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - <block type="variables_get" id="L,xjSXq}9!iIn9F{aLcM"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + <next> + <block type="controls_if" id="+CQwW92VB+7[9JkLba3m"> + <value name="IF0"> + <block type="logic_compare" id="c@lZ^[Jxt_h1Hw_.}+{R"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="vEU_WSa{;D=G]]q!@#el"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id="TE]og4kshy?@X*N=vQxJ"> + <field name="NUM">0</field> + </block> + </value> </block> </value> - <next> - <block type="util_wait_until" id="A7[tL`uR`6t`3_wuZ/XW"> - <value name="value"> - <block type="encodermotor_position_read" id="xH5QrXG~gs2Ssq8`o?od"> - <field name="instance_name">TXT_M_M1_encodermotor</field> + <statement name="DO0"> + <block type="encodermotor_set_values" id="b,~hF{XLP3G).D!V.f$w"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id="2?Q:/)fc+~~-vYsN|Kaz"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="L,xjSXq}9!iIn9F{aLcM"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> </block> </value> + <next> + <block type="util_wait_until" id="A7[tL`uR`6t`3_wuZ/XW"> + <value name="value"> + <block type="encodermotor_position_read" id="xH5QrXG~gs2Ssq8`o?od"> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> + </value> + </block> + </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="5Hv=PFtVvPQA=IZrkJfU" x="0" y="10786"> + <block type="procedures_defnoreturn" id="5Hv=PFtVvPQA=IZrkJfU" x="0" y="12332"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="~d8Z+AHZ!wz|G]JHW0lQ"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="jRMx@L,Ya|zd@/bBb#1T"/> @@ -3532,64 +3749,74 @@ <field name="~d8Z+AHZ!wz|G]JHW0lQ">v</field> <field name="jRMx@L,Ya|zd@/bBb#1T">ticks</field> <statement name="STACK"> - <block type="controls_if" id="ru=4O_U5AHiXk(bAH~.*"> - <value name="IF0"> - <block type="logic_compare" id="85MxtAjA5dlu;2C_S1R#"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="-$H$Lx#iW.cRG)R1R{%#"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> - </block> - </value> - <value name="B"> - <block type="math_number" id="ki98?zabGRpGF2Xh@B0."> - <field name="NUM">0</field> - </block> - </value> + <block type="variables_set" id="e]VGa@|MGbbGzKB:9K,u"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="~LP?,`6xSHnWI(4/6{+]"> + <field name="TEXT">left</field> </block> </value> - <statement name="DO0"> - <block type="encodermotor_set_values" id="|M/VTYb;b8V1A[.;/eAw"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CCW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CCW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id=")r{t`v`m]d=vC}q967/Q"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - <value name="distance"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - <block type="variables_get" id="QIp$ojpfrha`@tf*(!fr"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + <next> + <block type="controls_if" id="ru=4O_U5AHiXk(bAH~.*"> + <value name="IF0"> + <block type="logic_compare" id="85MxtAjA5dlu;2C_S1R#"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="-$H$Lx#iW.cRG)R1R{%#"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id="ki98?zabGRpGF2Xh@B0."> + <field name="NUM">0</field> + </block> + </value> </block> </value> - <next> - <block type="util_wait_until" id="M/Ed}ZBN$huF.DtKohf6"> - <value name="value"> - <block type="encodermotor_position_read" id="H$PiTicZVJ~flfj]cQLR"> - <field name="instance_name">TXT_M_M1_encodermotor</field> + <statement name="DO0"> + <block type="encodermotor_set_values" id="|M/VTYb;b8V1A[.;/eAw"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CCW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CCW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id=")r{t`v`m]d=vC}q967/Q"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> </block> </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="QIp$ojpfrha`@tf*(!fr"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <next> + <block type="util_wait_until" id="M/Ed}ZBN$huF.DtKohf6"> + <value name="value"> + <block type="encodermotor_position_read" id="H$PiTicZVJ~flfj]cQLR"> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> + </value> + </block> + </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="0yb4y~)e=F^~rds6/HYd" x="0" y="11143"> + <block type="procedures_defnoreturn" id="0yb4y~)e=F^~rds6/HYd" x="0" y="12717"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="~d8Z+AHZ!wz|G]JHW0lQ"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="jRMx@L,Ya|zd@/bBb#1T"/> @@ -3598,69 +3825,70 @@ <field name="~d8Z+AHZ!wz|G]JHW0lQ">v</field> <field name="jRMx@L,Ya|zd@/bBb#1T">ticks</field> <statement name="STACK"> - <block type="controls_if" id="o}S)]f3}2XEN7MUlYw$u"> - <value name="IF0"> - <block type="logic_compare" id="/{eGv/K=g!(^C:9P6$xv"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="}$zB71Q]4`P@feibL2fu"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> - </block> - </value> - <value name="B"> - <block type="math_number" id=",[,X9TSiPq4iUUtrUmK`"> - <field name="NUM">0</field> - </block> - </value> + <block type="variables_set" id="A]{I6TpDT17JbK|7n6=a"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="%ih=tz@Th_ON![?}E),L"> + <field name="TEXT">left2</field> </block> </value> - <statement name="DO0"> - <block type="encodermotor_set_values" id="+;!!Z=]w_K!uA/Xr8|S9"> - <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M2_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M4_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="p;kkWp~F[]J`zNw|vvtD"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - <value name="distance"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - <block type="variables_get" id="u77Xwm,Q_bZ~tZ0@BLBn"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + <next> + <block type="controls_if" id="o}S)]f3}2XEN7MUlYw$u"> + <value name="IF0"> + <block type="logic_compare" id="/{eGv/K=g!(^C:9P6$xv"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="}$zB71Q]4`P@feibL2fu"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id=",[,X9TSiPq4iUUtrUmK`"> + <field name="NUM">0</field> + </block> + </value> </block> </value> - <next> - <block type="util_wait_until" id=";XC@(3f=D+v6lmnb_QuP"> - <value name="value"> - <block type="encodermotor_position_read" id="MYE]zy/B%RxZ2xKvlDUB"> - <field name="instance_name">TXT_M_M2_encodermotor</field> + <statement name="DO0"> + <block type="encodermotor_set_values" id="+;!!Z=]w_K!uA/Xr8|S9"> + <mutation syncBlocks="1"/> + <field name="instance_name_0">TXT_M_M2_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M4_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id="p;kkWp~F[]J`zNw|vvtD"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="u77Xwm,Q_bZ~tZ0@BLBn"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> </block> </value> <next> - <block type="text_print" id="Wb]$Cc5^}s:pDYFNs81K"> - <value name="TEXT"> - <shadow type="text" id="RZRjBUJ5J3nPpeC#IW5H"> - <field name="TEXT">right2</field> - </shadow> + <block type="util_wait_until" id=";XC@(3f=D+v6lmnb_QuP"> + <value name="value"> + <block type="encodermotor_position_read" id="MYE]zy/B%RxZ2xKvlDUB"> + <field name="instance_name">TXT_M_M2_encodermotor</field> + </block> </value> </block> </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="[S@[MO!Z/cNt:Jsg4dd}" x="0" y="11472"> + <block type="procedures_defnoreturn" id="[S@[MO!Z/cNt:Jsg4dd}" x="0" y="13046"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="8Z2n_ZVA.)85]V7j%3;7"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="J(gJ~*9ZJJa,[V1)[xn#"/> @@ -3669,64 +3897,74 @@ <field name="8Z2n_ZVA.)85]V7j%3;7">v</field> <field name="J(gJ~*9ZJJa,[V1)[xn#">ticks</field> <statement name="STACK"> - <block type="controls_if" id="39e*D=YEL(1q(LD_RSW~"> - <value name="IF0"> - <block type="logic_compare" id="Jg6_Yhvqvg5CkB6L^{Ob"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="hS@CNKx9jiT$$M=6?`@C"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> - </block> - </value> - <value name="B"> - <block type="math_number" id="W+,G1525Tt!%_S*tpXtP"> - <field name="NUM">0</field> - </block> - </value> + <block type="variables_set" id="`ngB0F2FnMQ*EgqbtK@?"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="1XTwRFMI78X)o|:=-T8a"> + <field name="TEXT">right</field> </block> </value> - <statement name="DO0"> - <block type="encodermotor_set_values" id="~3+Emzx77Kgy^8c_O*]K"> - <mutation syncBlocks="3"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M2_encodermotor</field> - <field name="direction_1">Motor.CCW</field> - <field name="instance_name_2">TXT_M_M3_encodermotor</field> - <field name="direction_2">Motor.CW</field> - <field name="instance_name_3">TXT_M_M4_encodermotor</field> - <field name="direction_3">Motor.CCW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="D_l{lsbzk};@:z!ZrKp+"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - <value name="distance"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - <block type="variables_get" id="*eo}?f6B#r`aR::n}Ev@"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + <next> + <block type="controls_if" id="39e*D=YEL(1q(LD_RSW~"> + <value name="IF0"> + <block type="logic_compare" id="Jg6_Yhvqvg5CkB6L^{Ob"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="hS@CNKx9jiT$$M=6?`@C"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id="W+,G1525Tt!%_S*tpXtP"> + <field name="NUM">0</field> + </block> + </value> </block> </value> - <next> - <block type="util_wait_until" id="PLN$5RIPrD%I0T|eF`)w"> - <value name="value"> - <block type="encodermotor_position_read" id="C+pGU3f{|3!mz{V*UyDs"> - <field name="instance_name">TXT_M_M1_encodermotor</field> + <statement name="DO0"> + <block type="encodermotor_set_values" id="~3+Emzx77Kgy^8c_O*]K"> + <mutation syncBlocks="3"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M2_encodermotor</field> + <field name="direction_1">Motor.CCW</field> + <field name="instance_name_2">TXT_M_M3_encodermotor</field> + <field name="direction_2">Motor.CW</field> + <field name="instance_name_3">TXT_M_M4_encodermotor</field> + <field name="direction_3">Motor.CCW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id="D_l{lsbzk};@:z!ZrKp+"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> + </block> + </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="*eo}?f6B#r`aR::n}Ev@"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> </block> </value> + <next> + <block type="util_wait_until" id="PLN$5RIPrD%I0T|eF`)w"> + <value name="value"> + <block type="encodermotor_position_read" id="C+pGU3f{|3!mz{V*UyDs"> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> + </value> + </block> + </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </statement> </block> - <block type="procedures_defnoreturn" id="qiCJ8lc,P.U`J8k0us:C" x="0" y="11829"> + <block type="procedures_defnoreturn" id="qiCJ8lc,P.U`J8k0us:C" x="0" y="13431"> <mutation> <arg name="v" varid="DfDz@$]?^P=(6r:%^xC*" argid="8Z2n_ZVA.)85]V7j%3;7"/> <arg name="ticks" varid="l9lR0!)Laya}3RYVW(ZQ" argid="J(gJ~*9ZJJa,[V1)[xn#"/> @@ -3735,56 +3973,66 @@ <field name="8Z2n_ZVA.)85]V7j%3;7">v</field> <field name="J(gJ~*9ZJJa,[V1)[xn#">ticks</field> <statement name="STACK"> - <block type="controls_if" id="lp~ks}%o(L5|/7T|.OjC"> - <value name="IF0"> - <block type="logic_compare" id="sO)7$Q2lYogwSoKBo1wg"> - <field name="OP">GT</field> - <value name="A"> - <block type="variables_get" id="+A)3lC*iL0Z74oq;{]:z"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> - </block> - </value> - <value name="B"> - <block type="math_number" id="kb1Pk8v*VCf8Xe3@+.qk"> - <field name="NUM">0</field> - </block> - </value> + <block type="variables_set" id="SPlhff?DiY*F*7h3x,}V"> + <field name="VAR" id="fPH`.@]riH+=v{,A)bP5">cmd</field> + <value name="VALUE"> + <block type="text" id="Yge$doWr+Gl4j73DnbYO"> + <field name="TEXT">right2</field> </block> </value> - <statement name="DO0"> - <block type="encodermotor_set_values" id="XXyKv68yF}^:dH:;lOCp"> - <mutation syncBlocks="1"/> - <field name="instance_name_0">TXT_M_M1_encodermotor</field> - <field name="direction_0">Motor.CW</field> - <field name="instance_name_1">TXT_M_M3_encodermotor</field> - <field name="direction_1">Motor.CW</field> - <value name="speed"> - <shadow type="motor_number"> - <field name="MOTOR_NUM">512</field> - </shadow> - <block type="variables_get" id="E1^{iI#Z0F1VibDTtiuR"> - <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> - </block> - </value> - <value name="distance"> - <shadow type="math_number"> - <field name="NUM">100</field> - </shadow> - <block type="variables_get" id="~aVmZ51ntm~OA:X=Iu0M"> - <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + <next> + <block type="controls_if" id="lp~ks}%o(L5|/7T|.OjC"> + <value name="IF0"> + <block type="logic_compare" id="sO)7$Q2lYogwSoKBo1wg"> + <field name="OP">GT</field> + <value name="A"> + <block type="variables_get" id="+A)3lC*iL0Z74oq;{]:z"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <value name="B"> + <block type="math_number" id="kb1Pk8v*VCf8Xe3@+.qk"> + <field name="NUM">0</field> + </block> + </value> </block> </value> - <next> - <block type="util_wait_until" id="@c8|rKBWD1*xgH{JbtQy"> - <value name="value"> - <block type="encodermotor_position_read" id="M-]LhjAT~p$Nfe`JXqlc"> - <field name="instance_name">TXT_M_M1_encodermotor</field> + <statement name="DO0"> + <block type="encodermotor_set_values" id="XXyKv68yF}^:dH:;lOCp"> + <mutation syncBlocks="1"/> + <field name="instance_name_0">TXT_M_M1_encodermotor</field> + <field name="direction_0">Motor.CW</field> + <field name="instance_name_1">TXT_M_M3_encodermotor</field> + <field name="direction_1">Motor.CW</field> + <value name="speed"> + <shadow type="motor_number"> + <field name="MOTOR_NUM">512</field> + </shadow> + <block type="variables_get" id="E1^{iI#Z0F1VibDTtiuR"> + <field name="VAR" id="DfDz@$]?^P=(6r:%^xC*">v</field> </block> </value> + <value name="distance"> + <shadow type="math_number"> + <field name="NUM">100</field> + </shadow> + <block type="variables_get" id="~aVmZ51ntm~OA:X=Iu0M"> + <field name="VAR" id="l9lR0!)Laya}3RYVW(ZQ">ticks</field> + </block> + </value> + <next> + <block type="util_wait_until" id="@c8|rKBWD1*xgH{JbtQy"> + <value name="value"> + <block type="encodermotor_position_read" id="M-]LhjAT~p$Nfe`JXqlc"> + <field name="instance_name">TXT_M_M1_encodermotor</field> + </block> + </value> + </block> + </next> </block> - </next> + </statement> </block> - </statement> + </next> </block> </statement> </block> diff --git a/omniwheels_x4_soccer_goal.py b/omniwheels_x4_soccer_goal.py index ae99daa..c2fc77a 100644 --- a/omniwheels_x4_soccer_goal.py +++ b/omniwheels_x4_soccer_goal.py @@ -13,16 +13,17 @@ factor_x = None ts_ball = None ts_goal_left = None ts_goal_right = None +cmd = None factor_y = None posx_ball = None -v_slow = None counters = None -search_dir_left = None factor_ball_rot = None posy_ball = None posx_goal = None -v_var_ball_xpos = None +search_dir_left = None +v_slow = None x_min = None +v_var_ball_xpos = None x_max = None v_var_ball_ypos = None y_ball_far = None @@ -31,7 +32,7 @@ y_ball_touch = None v_fast = None state = None def checkTimeouts(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state if (time.time() * 1000) - ts_ball > 500: posx_ball = None posy_ball = None @@ -43,7 +44,7 @@ def checkTimeouts(): def ball_callback(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state ts_ball = (time.time() * 1000) posx_ball = event.value.x posy_ball = event.value.y @@ -56,7 +57,7 @@ ball_detector.add_detection_listener(ball_callback) def ball_callback2(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state ts_goal_left = (time.time() * 1000) posx_goal[0] = event.value.x if False: @@ -66,7 +67,7 @@ ball_detector_goal_left.add_detection_listener(ball_callback2) def ball_callback23(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state ts_goal_right = (time.time() * 1000) posx_goal[1] = event.value.x if False: @@ -76,7 +77,7 @@ ball_detector_goal_right.add_detection_listener(ball_callback23) def callback(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state if TXT_M_C1_motor_step_counter.get_count() >= 0: counters[0] = TXT_M_C1_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -86,7 +87,7 @@ TXT_M_C1_motor_step_counter.add_change_listener("count", callback) def callback2(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state if TXT_M_C2_motor_step_counter.get_count() >= 0: counters[1] = TXT_M_C2_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -96,7 +97,7 @@ TXT_M_C2_motor_step_counter.add_change_listener("count", callback2) def callback3(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state if TXT_M_C3_motor_step_counter.get_count() >= 0: counters[2] = TXT_M_C3_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -106,7 +107,7 @@ TXT_M_C3_motor_step_counter.add_change_listener("count", callback3) def callback4(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state if TXT_M_C4_motor_step_counter.get_count() >= 0: counters[3] = TXT_M_C4_motor_step_counter.get_count() display.set_attr("txt_label_counters.text", str(counters)) @@ -116,7 +117,7 @@ TXT_M_C4_motor_step_counter.add_change_listener("count", callback4) def callback5(event): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state if TXT_M_I8_photo_transistor.is_dark(): shotBall() time.sleep(5) @@ -126,7 +127,8 @@ TXT_M_I8_photo_transistor.add_change_listener("dark", callback5) def shotBall(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'shotBall' TXT_M_S1_servomotor.set_position(int(400)) TXT_M_M1_encodermotor.set_speed(int(512), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(512), Motor.CCW) @@ -150,55 +152,61 @@ def shotBall(): time.sleep(0.010) TXT_M.get_loudspeaker().play("26_Augenzwinkern.wav", False) display.set_attr("txt_switch_active.checked", str(False).lower()) + while True: + if (not (TXT_M.get_loudspeaker().is_playing())): + break + time.sleep(0.010) def stop(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'stop' TXT_M_M1_encodermotor.stop_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) def fwd_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'fwd_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M4_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) - print('fwd') def bwd_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'bwd_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M4_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) - print('bwd') def left_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'left_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M4_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) - print('left') def right_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'right_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M4_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor, TXT_M_M3_encodermotor, TXT_M_M4_encodermotor) - print('right') def search_ball_rot(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'search_ball_rot' if search_dir_left: left_v(v) else: @@ -206,29 +214,30 @@ def search_ball_rot(v): def turnBallLeft(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'turnBallLeft' TXT_M_M1_encodermotor.set_speed(int(v_slow), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v_slow), Motor.CW) TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor) TXT_M_M3_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CW) TXT_M_M4_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CCW) TXT_M_M3_encodermotor.start_sync(TXT_M_M4_encodermotor) - print('turnBallLeft') def turnBallRight(): - global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global v, ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'turnBallRight' TXT_M_M1_encodermotor.set_speed(int(v_slow), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v_slow), Motor.CCW) TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor) TXT_M_M3_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CCW) TXT_M_M4_encodermotor.set_speed(int(v_var_ball_xpos), Motor.CW) TXT_M_M3_encodermotor.start_sync(TXT_M_M4_encodermotor) - print('turnBallRight') def sideleft_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'sideleft_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CW) @@ -237,7 +246,8 @@ def sideleft_v(v): def sideright_v(v): - global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global ticks, factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'sideright_v' TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CCW) @@ -246,7 +256,8 @@ def sideright_v(v): def fwd(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'fwd' if ticks > 0: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) @@ -260,7 +271,8 @@ def fwd(v, ticks): def bwd(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'bwd' if ticks > 0: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) @@ -274,7 +286,8 @@ def bwd(v, ticks): def left(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'left' if ticks > 0: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CCW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) @@ -288,7 +301,8 @@ def left(v, ticks): def left2(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'left2' if ticks > 0: TXT_M_M2_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M4_encodermotor.set_speed(int(v), Motor.CW) @@ -297,11 +311,11 @@ def left2(v, ticks): if (not TXT_M_M2_encodermotor.is_running()): break time.sleep(0.010) - print('right2') def right(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'right' if ticks > 0: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M2_encodermotor.set_speed(int(v), Motor.CCW) @@ -315,7 +329,8 @@ def right(v, ticks): def right2(v, ticks): - global factor_x, ts_ball, ts_goal_left, ts_goal_right, factor_y, posx_ball, v_slow, counters, search_dir_left, factor_ball_rot, posy_ball, posx_goal, v_var_ball_xpos, x_min, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + global factor_x, ts_ball, ts_goal_left, ts_goal_right, cmd, factor_y, posx_ball, counters, factor_ball_rot, posy_ball, posx_goal, search_dir_left, v_slow, x_min, v_var_ball_xpos, x_max, v_var_ball_ypos, y_ball_far, y_ball_near, y_ball_touch, v_fast, state + cmd = 'right2' if ticks > 0: TXT_M_M1_encodermotor.set_speed(int(v), Motor.CW) TXT_M_M3_encodermotor.set_speed(int(v), Motor.CW) @@ -347,12 +362,13 @@ ts_goal_left = (time.time() * 1000) ts_goal_right = (time.time() * 1000) search_dir_left = True state = 'NONE' +cmd = 'NONE' time.sleep(2) while True: checkTimeouts() if display.get_attr("txt_switch_active.checked"): if posx_ball != None and posy_ball != None and posx_goal[0] == None and posx_goal[1] == None: - state = 'ONLY_BALL' + state = 'BALL_NO_GOAL' if posx_ball >= x_min and posx_ball <= x_max: if posy_ball <= y_ball_far: fwd_v(v_fast) @@ -371,7 +387,7 @@ while True: else: stop() elif posx_ball != None and posy_ball != None and posx_goal[0] != None and posx_goal[1] == None: - state = 'BALL_AND_GOAL_LEFT' + state = 'BALL_GOAL_LEFT' if posy_ball <= y_ball_far: fwd_v(v_slow) elif posy_ball <= y_ball_near: @@ -386,7 +402,7 @@ while True: else: stop() elif posx_ball != None and posy_ball != None and posx_goal[0] == None and posx_goal[1] != None: - state = 'BALL_AND_GOAL_RIGHT' + state = 'BALL_GOAL_RIGHT' if posy_ball <= y_ball_far: fwd_v(v_slow) elif posy_ball <= y_ball_near: @@ -401,7 +417,7 @@ while True: else: stop() elif posx_ball != None and posy_ball != None and posx_goal[0] != None and posx_goal[1] != None: - state = 'BALL_AND_GOAL_BOTH' + state = 'BALL_GOAL_BOTH' if posy_ball <= y_ball_far: fwd_v(v_slow) elif posy_ball <= y_ball_near: @@ -418,7 +434,7 @@ while True: else: stop() elif posx_goal[0] != None and posx_goal[1] != None: - state = 'ONLY_GOAL' + state = 'NO_BALL_GOAL_BOTH' if posx_goal[1] - posx_goal[0] < x_min and posx_goal[1] - posx_goal[0] > x_min: fwd_v(v_slow) elif posx_goal[1] - posx_goal[0] < x_min: @@ -427,19 +443,19 @@ while True: right_v(v_slow) else: stop() - elif (posx_ball == None or posy_ball == None) and (posx_goal[0] != None or posx_goal[1] != None): - state = 'NO_BALL' + elif (posx_ball == None or posy_ball == None) and (posx_goal[0] != None or posx_goal[1] == None): + state = 'NO_BALL_GOAL_LEFT' + right_v(v_slow) + elif (posx_ball == None or posy_ball == None) and (posx_goal[0] == None or posx_goal[1] != None): + state = 'NO_BALL_GOAL_RIGHT' + left_v(v_slow) else: state = 'NONE' search_ball_rot(v_slow) - while True: - if (not (TXT_M.get_loudspeaker().is_playing())): - break - time.sleep(0.010) display.set_attr("txt_label_ball.text", str('x:{}, y:{}'.format(posx_ball, posy_ball))) display.set_attr("txt_label_goal.text", str('x:{}'.format(posx_goal))) display.set_attr("txt_label_counters.text", str('{}'.format(counters))) - print('{}: GOAL_x: {}, {} BALL_pos:{},{} v_x:{} v_y:{}'.format(state, posx_goal[0], posx_goal[1], posx_ball, posy_ball, v_var_ball_xpos, v_var_ball_ypos)) - time.sleep(0.08) + print('{}:{} GOAL_x: {}, {} BALL_pos:{},{} v_x:{} v_y:{}'.format(state, cmd, posx_goal[0], posx_goal[1], posx_ball, posy_ball, v_var_ball_xpos, v_var_ball_ypos)) + time.sleep(0.07) -- GitLab