<!---  Produced by FS2LSL (Flash Scratch to LSL),  John K. Bennett,  ATLAS Institute, University of Colorado at Boulder,  http://redwood.colorado.edu/jkb/fs2lsl/  -->
<program>
  <globvars>
    <stack x="10" y="5">
      <block spec="Declare Global Variables"/>
      <block spec="global comment: %s">
        <blockarg val="Listing 2.10: WalkAO —Why Walk When You Can Float?"/>
      </block>
      <block spec="global comment: %s">
        <blockarg val="the animation we're going to override"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="AN_TRIGGER"/>
        <blockarg val="string"/>
        <blockarg val="&quot;Walking&quot;"/>
      </block>
      <block spec="global comment: %s">
        <blockarg val="which animation are we overriding walking with?"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="AN_OVERRIDE"/>
        <blockarg val="string"/>
        <blockarg val="&quot;yoga_float&quot;"/>
      </block>
      <block spec="global comment: %s">
        <blockarg val="are we running the override right now?"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="gOverriding"/>
        <blockarg val="integer"/>
        <blockarg val="FALSE"/>
      </block>
      <block spec="global comment: %s">
        <blockarg val="did we get permission yet?"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="gHasPermission"/>
        <blockarg val="integer"/>
        <blockarg val="FALSE"/>
      </block>
      <block spec="global comment: %s">
        <blockarg val="is the AO on?"/>
      </block>
      <block spec="create global var: %g type: %m value: %t">
        <blockarg val="gEnabled"/>
        <blockarg val="integer"/>
        <blockarg val="TRUE"/>
      </block>
    </stack>
  </globvars>
  <functions>
    <func>
      <stack x="15" y="318">
        <block funcSpec="void animOverride()"/>
        <block spec="if %b">
          <block varName="gHasPermission" varScope="global"/>
          <stack>
            <block spec="create local var: %g type: %m value: %t">
              <blockarg val="curAnimState"/>
              <blockarg val="string"/>
              <block spec="get animation of avatar %s">
                <block spec="owner"/>
              </block>
            </block>
            <block spec="ifelse %b">
              <block spec=" %n %Q %n ">
                <block spec=" %n %Q %n ">
                  <block varName="curAnimState" varScope="local"/>
                  <blockarg val="=="/>
                  <block varName="AN_TRIGGER" varScope="global"/>
                </block>
                <blockarg val="&amp;&amp; (Logical AND)"/>
                <block varName="gEnabled" varScope="global"/>
              </block>
              <stack>
                <block spec="comment: %s">
                  <blockarg val="already overriding? skip"/>
                </block>
                <block spec="if %b">
                  <block spec="not %b">
                    <block varName="gOverriding" varScope="global"/>
                  </block>
                  <stack>
                    <block spec="set %s = %n">
                      <block varName="gOverriding" varScope="global"/>
                      <block spec="true"/>
                    </block>
                    <block spec="start animation  %s">
                      <block varName="AN_OVERRIDE" varScope="global"/>
                    </block>
                  </stack>
                </block>
              </stack>
              <stack>
                <block spec="if %b">
                  <block varName="gOverriding" varScope="global"/>
                  <stack>
                    <block spec="stop animation  %s">
                      <block varName="AN_OVERRIDE" varScope="global"/>
                    </block>
                    <block spec="set %s = %n">
                      <block varName="gOverriding" varScope="global"/>
                      <block spec="false"/>
                    </block>
                  </stack>
                </block>
              </stack>
            </block>
          </stack>
        </block>
      </stack>
    </func>
  </functions>
  <states>
    <state>
      <stacks>
        <stack x="20" y="717">
          <block spec="state %s">
            <blockarg val="default"/>
          </block>
          <block spec="when I enter this state"/>
          <block spec="set %s = %n">
            <block varName="gOverriding" varScope="global"/>
            <block spec="false"/>
          </block>
          <block spec="set %s = %n">
            <block varName="gHasPermission" varScope="global"/>
            <block spec="false"/>
          </block>
          <block spec="set %s = %n">
            <block varName="gEnabled" varScope="global"/>
            <block spec="true"/>
          </block>
          <block spec="if %b">
            <block spec="variable %s as a boolean">
              <block spec="where attached on avatar"/>
            </block>
            <stack>
              <block spec="request avatar: %s for permissions: %X">
                <block spec="owner"/>
                <blockarg val="PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION"/>
              </block>
            </stack>
          </block>
          <block spec="set a timer for %n secs">
            <blockarg val="1"/>
          </block>
        </stack>
        <stack x="440" y="762">
          <block spec="when I am created"/>
          <block spec="reset script"/>
        </stack>
        <stack x="28" y="981">
          <block spec="when permission is granted"/>
          <block spec="if %b">
            <block spec=" %n %Q %n ">
              <block spec="granted permissions"/>
              <blockarg val="=="/>
              <block spec="permissions: %X">
                <blockarg val="PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION"/>
              </block>
            </block>
            <stack>
              <block spec="take controls: %K accept: %u pass_on: %u">
                <blockarg val="CONTROL_LEFT | CONTROL_FWD | CONTROL_RIGHT | CONTROL_BACK | CONTROL_UP | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_DOWN"/>
                <blockarg val="TRUE"/>
                <blockarg val="TRUE"/>
              </block>
              <block spec="set %s = %n">
                <block varName="gHasPermission" varScope="global"/>
                <block spec="true"/>
              </block>
            </stack>
          </block>
        </stack>
        <stack x="28" y="1133">
          <block spec="when attached or detached"/>
          <block spec="if %b">
            <block spec=" %n %Q %n ">
              <block spec="avatar to which attached"/>
              <blockarg val="!="/>
              <block spec="null key"/>
            </block>
            <stack>
              <block spec="request avatar: %s for permissions: %X">
                <block spec="owner"/>
                <blockarg val="PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION"/>
              </block>
            </stack>
          </block>
        </stack>
        <stack x="20" y="1262">
          <block spec="when control input received"/>
          <block fCallSpec="animOverride()" funcName="animOverride" numArgs="0"/>
        </stack>
        <stack x="14" y="1337">
          <block spec="when timer triggers"/>
          <block fCallSpec="animOverride()" funcName="animOverride" numArgs="0"/>
        </stack>
      </stacks>
    </state>
  </states>
</program>