//

ned, derived from generic Improv Actors applet

import improv.actor.*;
import improv.actor.behavior.*;
import improv.util.*;
public class ned extends Actors
{
   private Layer background,layer1;

   public void addActors() {

      Actor ned = addActor("Ned");

// Create Channels;

      SFRotationChannel bodyRot          = (SFRotationChannel) addChannel("Body","set_rotation");
      SFRotationChannel headRot          = (SFRotationChannel) addChannel("Head","set_rotation");
      SFRotationChannel leftEyeRot       = (SFRotationChannel) addChannel("LeftEye","set_rotation");
      SFRotationChannel leftEyeStalkRot  = (SFRotationChannel) addChannel("LeftEyeStalk","set_rotation");
      SFVec3fChannel    leftPupilScale   = (SFVec3fChannel)    addChannel("LeftPupil","set_scale");
      SFRotationChannel rightEyeRot      = (SFRotationChannel) addChannel("RightEye","set_rotation");
      SFRotationChannel rightEyeStalkRot = (SFRotationChannel) addChannel("RightEyeStalk","set_rotation");
      SFVec3fChannel    rightPupilScale  = (SFVec3fChannel)    addChannel("RightPupil","set_scale");
      SFRotationChannel rootRot          = (SFRotationChannel) addChannel("ROOT","set_rotation");
      SFVec3fChannel    rootTrans        = (SFVec3fChannel)    addChannel("ROOT","set_translation");

// Add the layers & states

      State bg,lookLeft,lookRight,forward,eyesIn,eyesLeft,eyesRight;

      background = ned.addLayer("Background");

         background.addBehavior(bg = new State("Background"));

            bg.addFilter(new SFVec3fFilter(rootTrans,0,0,0));
            bg.addFilter(new SFRotationFilter(rootRot,0,0,0));
            bg.addFilter(new SFRotationFilter(bodyRot,0,0,0));
            bg.addFilter(new SFRotationFilter(headRot,0,0,0));
            bg.addFilter(new SFRotationFilter(leftEyeStalkRot,0,0,0));
            bg.addFilter(new SFRotationFilter(rightEyeStalkRot,0,0,0));
            bg.addFilter(new SFRotationFilter(leftEyeRot,0,0,0));
            bg.addFilter(new SFRotationFilter(rightEyeRot,0,0,0));
            bg.addFilter(new SFVec3fFilter(leftPupilScale,1,1,1));
            bg.addFilter(new SFVec3fFilter(rightPupilScale,1,1,1));

      layer1 = ned.addLayer("Layer 1");

         layer1.addBehavior(new State("Default - Layer 1"));

         layer1.addBehavior(lookLeft = new State("Look Left"));

            lookLeft.addFilter(new SFRotationFilter(headRot,0,45,0));
               NoiseCurve nx1 = new NoiseCurve(-20,20,1);
               NoiseCurve nz1 = new NoiseCurve(20,-20,1);
            lookLeft.addFilter(new SFRotationFilter(leftEyeStalkRot,nx1,null,nz1));
               NoiseCurve nx2 = new NoiseCurve(20,-20,1);
                 nx2.setOffset(.3);
               NoiseCurve nz2 = new NoiseCurve(-20,20,1);
                 nz2.setOffset(.3);
            lookLeft.addFilter(new SFRotationFilter(rightEyeStalkRot,nx2,null,nz2));

         layer1.addBehavior(lookRight = new State("Look Right"));

            lookRight.addFilter(new SFRotationFilter(headRot,0,-45,0));
            lookRight.addFilter(new SFRotationFilter(leftEyeStalkRot,nx2,null,nz2));
            lookRight.addFilter(new SFRotationFilter(rightEyeStalkRot,nx1,null,nz1));
   }
}