anchor.diff:  = jMonkeyEngine SDK -- The Scene
  -:author: 
  -:revnumber: 
  -:revdate: 2016/03/17 20:48
  -:relfileprefix: ../../
  -:imagesdir: ../..
  -ifdef::env-github,env-browser[:outfilesuffix: .adoc]
  +:revnumber: 2.0
  +:revdate: 2020/07/10
   
   
  -To reduce system overhead the jMonkeyEngine SDK Core supplies one scene/jme3 application that is shared between plugins. Furthermore there's the “SceneExplorer that shows a visual representation of the scenegraph and its objects properties across plugins.
  +To reduce system overhead the jMonkeyEngine SDK Core supplies one scene/jme3 application that is shared between plugins. Furthermore there's the "`SceneExplorer`" that shows a visual representation of the scenegraph and its objects properties across plugins.
   
   
   == How to access the Scene
  
positive.code: If your plugin wants to use the scene by itself, it first has to implement SceneListener and register at the scene and then send a SceneRequest to the SceneApplication. When the SceneRequest has been approved and the current Scene has been closed, the SceneListener (your class) is called with its own SceneRequest as a parameter. When another plugin sends a SceneRequest it is also reported to you and its a hint that your RootNode has been removed from the Scene and you are no longer in control of it. You could also hook into the SceneRequests of other plugins to see if/when they are activated to display add-on plugins for that plugin.
  
  +
  The SceneRequest object has to contain several things. A thing that you must supply is a jme “Node wrapped into a “JmeNode object. This is your rootNode that you use to display and build your scene. As soon as you control the scene, you will have to control the camera etc. yourself.
  
  [source,java]
  ----
  
negative.code: [source,java]
  ----
  
  Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
  
  @Override
  public void sceneUndo() {
      //undo stuff in scene here
  }
  
  @Override
  public void sceneRedo() {
      //redo stuff in scene here
  }
  
  @Override
  public void awtUndo() {
      //undo stuff on awt thread here (updating of visual nodes etc, called post scene edit)
  }
  
  @Override
  public void awtRedo() {
      //redo stuff on awt thread here
  }
  });
  
  ----
  