ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / iPhone / FreeFlight / Classes / Menus / FiniteStateMachine.h
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/iPhone/FreeFlight/Classes/Menus/FiniteStateMachine.h b/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/iPhone/FreeFlight/Classes/Menus/FiniteStateMachine.h
new file mode 100644 (file)
index 0000000..db3680d
--- /dev/null
@@ -0,0 +1,80 @@
+//
+//  FiniteStateMachine.h
+//  ArDroneGameLib
+//
+//  Created by clement choquereau on 5/4/11.
+//  Copyright 2011 Parrot. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#define NO_STATE (-1)
+
+@class FSMXMLParsing;
+
+@interface FiniteStateMachine : NSObject <NSXMLParserDelegate>
+{
+    id delegate;
+    
+    unsigned int statesCount;
+    unsigned int actionsCount;
+    unsigned int currentState;
+    
+    NSMutableDictionary *objects;
+    NSMutableDictionary *enterCallbacks;
+    NSMutableDictionary *quitCallbacks;
+    NSMutableDictionary *stateActions;
+       
+       // should always be nil:
+       FSMXMLParsing *xml;
+}
+
+@property (nonatomic, retain) id delegate;
+@property (readonly) id currentObject;
+
+@property (readonly) unsigned int statesCount;
+@property (readonly) unsigned int actionsCount;
+@property unsigned int currentState;
+
+/*
+ * You can create a FSM with a XML file:
+ * (For element 'state', attributes 'enter-callback', 'quit-callback' and 'object' aren't mandatory.)
+ *
+ * <?xml version="1.0"?>
+ * <fsm>
+ *     <states>
+ *         <state name="myState" enter-callback="onEnterState:" quit-callback="onQuitState:" object="aStringObject" />
+ *         ...
+ *     </states>
+ *     <actions>
+ *         <action name="myAction" />
+ *         ...
+ *     </actions>
+ *     <associations>
+ *         <association from-state="aState" action="anAction" to-state="anotherState" />
+ *     </associations>
+ * </fsm>
+ */
++ (id) fsm;
++ (id) fsmWithXML:(NSString *)fileName;
+
+// Managing states:
+- (unsigned int) createState;
+- (void) createStates:(unsigned int)count inArray:(unsigned int *)states;
+- (void) setObject:(id)object forState:(unsigned int)state;
+- (void) setEnterStateCallback:(SEL)enter forState:(unsigned int)state;
+- (void) setQuitStateCallback:(SEL)quit forState:(unsigned int)state;
+
+- (unsigned int) createStateWithObject:(id)object andEnterStateCallback:(SEL)enter andQuitStateCallback:(SEL)quit;
+- (void) createStates:(unsigned int)count withObjects:(id *)items andEnterStateCallbacks:(SEL *)enters andQuitStateCallbacks:(SEL *)quits inArray:(unsigned int *)states;
+
+// Managing actions:
+- (unsigned int) createAction;
+- (void) createActions:(unsigned int)count inArray:(unsigned int *)actions;
+
+// Associations:
+- (void) createAssociationFromState:(unsigned int)start withAction:(unsigned int)action toState:(unsigned int)end;
+- (void) createAssociationFromState:(unsigned int)start withActions:(unsigned int *)actions toStates:(unsigned int *)ends andNumAssociations:(unsigned int)count;
+- (void) doAction:(unsigned int)action;
+
+@end