|
|
|
@ -35,24 +35,46 @@ import com.jme3.app.Application; |
|
|
|
|
import com.jme3.renderer.RenderManager; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* AppState represents a continously executing code inside the main loop. |
|
|
|
|
* AppState represents continously executing code inside the main loop. |
|
|
|
|
* |
|
|
|
|
* An <code>AppState</code> can track when it is attached to the |
|
|
|
|
* {@link AppStateManager} or when it is detached. <br/><code>AppState</code>s |
|
|
|
|
* are initialized in the render thread, upon a call to {@link AppState#initialize(com.jme3.app.state.AppStateManager, com.jme3.app.Application) } |
|
|
|
|
* {@link AppStateManager} or when it is detached. |
|
|
|
|
* |
|
|
|
|
* <br/><code>AppState</code>s are initialized in the render thread, upon a call to |
|
|
|
|
* {@link AppState#initialize(com.jme3.app.state.AppStateManager, com.jme3.app.Application) } |
|
|
|
|
* and are de-initialized upon a call to {@link AppState#cleanup()}. |
|
|
|
|
* Implementations should return the correct value with a call to |
|
|
|
|
* {@link AppState#isInitialized() } as specified above.<br/> |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* <ul> |
|
|
|
|
* <li>If a detached AppState is attached then <code>initialize()</code> will be called |
|
|
|
|
* on the following render pass. |
|
|
|
|
* </li> |
|
|
|
|
* <li>If an attached AppState is detached then <code>cleanup()</code> will be called |
|
|
|
|
* on the following render pass. |
|
|
|
|
* </li> |
|
|
|
|
* <li>If you attach an already-attached <code>AppState</code> then the second attach |
|
|
|
|
* is a no-op and will return false. |
|
|
|
|
* </li> |
|
|
|
|
* <li>If you both attach and detach an <code>AppState</code> within one frame then |
|
|
|
|
* neither <code>initialize()</code> or <code>cleanup()</code> will be called, |
|
|
|
|
* although if either is called both will be. |
|
|
|
|
* </li> |
|
|
|
|
* <li>If you both detach and then re-attach an <code>AppState</code> within one frame |
|
|
|
|
* then on the next update pass its <code>cleanup()</code> and <code>initialize()</code> |
|
|
|
|
* methods will be called in that order. |
|
|
|
|
* </li> |
|
|
|
|
* </ul> |
|
|
|
|
* @author Kirill Vainer |
|
|
|
|
*/ |
|
|
|
|
public interface AppState { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Called to initialize the AppState. |
|
|
|
|
* Called to initialize the <code>AppState</code>. This method is called |
|
|
|
|
* in the next render pass after the <code>AppState</code> is attached. |
|
|
|
|
* |
|
|
|
|
* @param stateManager The state manager |
|
|
|
|
* @param app |
|
|
|
|
* @param app The application |
|
|
|
|
*/ |
|
|
|
|
public void initialize(AppStateManager stateManager, Application app); |
|
|
|
|
|
|
|
|
@ -77,22 +99,28 @@ public interface AppState { |
|
|
|
|
* @see AppState#setEnabled(boolean) |
|
|
|
|
*/ |
|
|
|
|
public boolean isEnabled(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Called when the state was attached. |
|
|
|
|
* Called when the state was attached. Most implementations should do little |
|
|
|
|
* or nothing in this method. In particular any scene graph changes need to |
|
|
|
|
* be made in <code>initialize()</code>. |
|
|
|
|
* |
|
|
|
|
* @param stateManager State manager to which the state was attached to. |
|
|
|
|
*/ |
|
|
|
|
public void stateAttached(AppStateManager stateManager); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Called when the state was detached. |
|
|
|
|
* Called when the state was detached. Most implementations should do little |
|
|
|
|
* or nothing in this method. In particular any scene graph changes need to |
|
|
|
|
* be made in <code>cleanup()</code>. |
|
|
|
|
* |
|
|
|
|
* @param stateManager The state manager from which the state was detached from. |
|
|
|
|
*/ |
|
|
|
|
public void stateDetached(AppStateManager stateManager); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Called to update the state. |
|
|
|
|
* Called to update the <code>AppState</code>. This method will be called |
|
|
|
|
* every render pass if the <code>AppState</code> is both attached and enabled. |
|
|
|
|
* |
|
|
|
|
* @param tpf Time per frame. |
|
|
|
|
*/ |
|
|
|
@ -111,7 +139,12 @@ public interface AppState { |
|
|
|
|
public void postRender(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Cleanup the game state. |
|
|
|
|
* Called to clean up the <code>AppState</code> after it has been removed. This |
|
|
|
|
* method is called the following render pass after the <code>AppState</code> has |
|
|
|
|
* been detached and is always called once and only once for each time |
|
|
|
|
* <code>initialize()</code> is called. Either when the <code>AppState</code> |
|
|
|
|
* is detached or when the application terminates (if it terminates normally). |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
public void cleanup(); |
|
|
|
|
|
|
|
|
|