anchor.diff:  
   [source,java]
   ----
  -public interface ManualControl extends Control {    
  -    public void steerX(float value);    
  -    public void steerY(float value);    
  -    public void moveX(float value);    
  -    public void moveY(float value);    
  -    public void moveZ(float value);   
  +public interface ManualControl extends Control {   
  +    public void steerX(float value);   
  +    public void steerY(float value);   
  +    public void moveX(float value);   
  +    public void moveY(float value);   
  +    public void moveZ(float value);  
       ...
   }
   ----
  
positive.code: 
  Use <<jme3/advanced/custom_controls#,Controls>> to implement the _behaviour of types of game entities_.
  
  *  Use Controls to add a type of behaviour (that is, methods and fields) to individual Spatials. 
  *  Each Control has its own `update()` loop that hooks into `simpleUpdate()`. Use Controls to move blocks of code out of the `simpleUpdate()` loop.
  *  One Spatial can be influenced by several Controls. (Very powerful and modular!) 
  *  Each Spatial needs its own instance of the Control. 
  *  A Control only has access to and control over the Spatial it is attached to.
  *  Controls can be saved as .j3o file together with a Spatial. 
  
  Examples: You can write
  
  *  A WalkerNavControl, SwimmerNavControl, FlyerNavControl… that defines how a type of NPC finds their way around. All NPCs can walk, some can fly, others can swim, and some can all three, etc.
  *  A PlayerNavControl that is steered by user-configurable keyboard and mouse input.
  *  A generic animation control that acts as a common interface that triggers animations (walk, stand, attack, defend) for various entities.
  *  A DefensiveBehaviourControl that remote-controls NPC behaviour in fight situations. 
  *  An IdleBehaviourControl that remote-controls NPC behaviour in neutral situations. 
  *  A DestructionControl that automatically replaces a structure with an appropriate piece of debris after collision with a projectile… 
  
  The possibilities are endless. emoji:smiley
  
  
negative.code: 
  The AbstractControl can be found under `com.jme3.scene.control.AbstractControl`. This is a default abstract class that implements the Control interface.
  
  *  You have access to a boolean `isEnabled()`.
  *  You have access to the Spatial object `spatial`.
  *  You override the `controlUpdate()` method to implement the Spatial's behaviour.
  *  You have access to a `setEnabled(boolean)` method. This activates or deactivates this Control's behaviour in this spatial temporarily. While the AbstractControl is toggled to be disabled, the `controlUpdate()` loop is no longer executed.
  +
  For example, you disable your IdleBehaviourControl when you enable your DefensiveBehaviourControl in a spatial.
  
  Usage: Your custom subclass implements the three methods `controlUpdate()`, `controlRender()`, `setSpatial()`, and `cloneForSpatial()` as shown here:
  
  [source,java]
  ----
  public class MyControl extends AbstractControl implements Savable, Cloneable { 
      private int index; // can have custom fields -- example    
  
      public MyControl(){} // empty serialization constructor   
  
      /** Optional custom constructor with arguments that can init custom fields.   
        * Note: you cannot modify the spatial here yet!
        */ 
      public MyControl(int i){    
          // index=i; // example  
      }    
  
      /** This method is called when the control is added to the spatial,   
        * and when the control is removed from the spatial (setting a null value).   
        * It can be used for both initialization and cleanup.
        */     
      @Override 
      public void setSpatial(Spatial spatial) {   
          super.setSpatial(spatial);   
          /* Example:   
          if (spatial != null){       
              // initialize   
          }else{       
              // cleanup   
          }   
          */ 
      }
   
      /** Implement your spatial's behaviour here.   
        * From here you can modify the scene graph and the spatial   
        * (transform them, get and set userdata, etc).   
        * This loop controls the spatial while the Control is enabled.
        */ 
      @Override 
      protected void controlUpdate(float tpf){   
          if(spatial != null) {     
              // spatial.rotate(tpf,tpf,tpf); // example behaviour   
          } 
      }   
  
      @Override 
      public Control cloneForSpatial(Spatial spatial){   
          final MyControl control = new MyControl();   
          /* Optional: use setters to copy userdata into the cloned control */   
          // control.setIndex(i); // example   
          control.setSpatial(spatial);   
          return control; 
      }   
  
      @Override 
      protected void controlRender(RenderManager rm, ViewPort vp){    
          /* Optional: rendering manipulation (for advanced users) */ 
      }   
  
      @Override 
      public void read(JmeImporter im) throws IOException {     
          super.read(im);     
          // im.getCapsule(this).read(...); 
      }   
  
      @Override 
      public void write(JmeExporter ex) throws IOException {     
          super.write(ex);     
          // ex.getCapsule(this).write(...); 
      } 
  }
  ----
  
  See also:
  
  *  To learn more about `write()` and `read()`, see <<jme3/advanced/save_and_load#,Save and Load>>
  *  To learn more about `setUserData()`, see <<jme3/advanced/spatial#,Spatial>>.
  
  
  == The Control Interface
  