ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / iPhone / FreeFlight / Classes / Menus / FiniteStateMachine.h
1 //
2 //  FiniteStateMachine.h
3 //  ArDroneGameLib
4 //
5 //  Created by clement choquereau on 5/4/11.
6 //  Copyright 2011 Parrot. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 #define NO_STATE (-1)
12
13 @class FSMXMLParsing;
14
15 @interface FiniteStateMachine : NSObject <NSXMLParserDelegate>
16 {
17     id delegate;
18     
19     unsigned int statesCount;
20     unsigned int actionsCount;
21     unsigned int currentState;
22     
23     NSMutableDictionary *objects;
24     NSMutableDictionary *enterCallbacks;
25     NSMutableDictionary *quitCallbacks;
26     NSMutableDictionary *stateActions;
27         
28         // should always be nil:
29         FSMXMLParsing *xml;
30 }
31
32 @property (nonatomic, retain) id delegate;
33 @property (readonly) id currentObject;
34
35 @property (readonly) unsigned int statesCount;
36 @property (readonly) unsigned int actionsCount;
37 @property unsigned int currentState;
38
39 /*
40  * You can create a FSM with a XML file:
41  * (For element 'state', attributes 'enter-callback', 'quit-callback' and 'object' aren't mandatory.)
42  *
43  * <?xml version="1.0"?>
44  * <fsm>
45  *     <states>
46  *         <state name="myState" enter-callback="onEnterState:" quit-callback="onQuitState:" object="aStringObject" />
47  *         ...
48  *     </states>
49  *     <actions>
50  *         <action name="myAction" />
51  *         ...
52  *     </actions>
53  *     <associations>
54  *         <association from-state="aState" action="anAction" to-state="anotherState" />
55  *     </associations>
56  * </fsm>
57  */
58 + (id) fsm;
59 + (id) fsmWithXML:(NSString *)fileName;
60
61 // Managing states:
62 - (unsigned int) createState;
63 - (void) createStates:(unsigned int)count inArray:(unsigned int *)states;
64 - (void) setObject:(id)object forState:(unsigned int)state;
65 - (void) setEnterStateCallback:(SEL)enter forState:(unsigned int)state;
66 - (void) setQuitStateCallback:(SEL)quit forState:(unsigned int)state;
67
68 - (unsigned int) createStateWithObject:(id)object andEnterStateCallback:(SEL)enter andQuitStateCallback:(SEL)quit;
69 - (void) createStates:(unsigned int)count withObjects:(id *)items andEnterStateCallbacks:(SEL *)enters andQuitStateCallbacks:(SEL *)quits inArray:(unsigned int *)states;
70
71 // Managing actions:
72 - (unsigned int) createAction;
73 - (void) createActions:(unsigned int)count inArray:(unsigned int *)actions;
74
75 // Associations:
76 - (void) createAssociationFromState:(unsigned int)start withAction:(unsigned int)action toState:(unsigned int)end;
77 - (void) createAssociationFromState:(unsigned int)start withActions:(unsigned int *)actions toStates:(unsigned int *)ends andNumAssociations:(unsigned int)count;
78 - (void) doAction:(unsigned int)action;
79
80 @end