Browse Source

Merge pull request #965 from Ali-RS/Ali-RS-patch-1

Added AppStateManager.getState(class, failOnMiss)
Paul Speed 6 years ago
parent
commit
f44fdb35e6

+ 16 - 0
jme3-core/src/main/java/com/jme3/app/state/AppStateManager.java

@@ -210,6 +210,18 @@ public class AppStateManager {
      * @return First attached state that is an instance of stateClass
      */
     public <T extends AppState> T getState(Class<T> stateClass){
+        return getState(stateClass, false);
+    }
+    
+    /**
+     * Returns the first state that is an instance of subclass of the specified class.
+     * @param <T>
+     * @param stateClass
+     * @param failOnMiss 
+     * @return First attached state that is an instance of stateClass. If failOnMiss is true 
+     * then an IllegalArgumentException is thrown if the state is not attached.
+     */
+    public <T extends AppState> T getState(Class<T> stateClass, boolean failOnMiss){
         synchronized (states){
             AppState[] array = getStates();
             for (AppState state : array) {
@@ -229,6 +241,10 @@ public class AppStateManager {
                 }
             }
         }
+        
+        if(failOnMiss) {
+            throw new IllegalArgumentException("State not found for:" + stateClass);
+        }    
         return null;
     }
 

+ 5 - 1
jme3-core/src/main/java/com/jme3/app/state/BaseAppState.java

@@ -142,7 +142,11 @@ public abstract class BaseAppState implements AppState {
     }
 
     public final <T extends AppState> T getState( Class<T> type ) {
-        return getStateManager().getState(type);
+        return getState( type, false );
+    }
+    
+    public final <T extends AppState> T getState( Class<T> type, boolean failOnMiss ) {
+        return getStateManager().getState( type, failOnMiss );
     }
 
     @Override