Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // fsStateMachine.h
- // fuzzspaces
- //
- // Created by fuzzimac4 on 6/4/09.
- // Copyright 2009 __MyCompanyName__. All rights reserved.
- //
- #import "sio2.h"
- // How many previous positions to record for a touch
- #define FS_TOUCH_LAST_POSITIONS ((unsigned int) 10)
- // Time until a touch is considered to be held (in seconds)
- #define FS_TOUCH_IS_HELD_AFTER ((NSTimeInterval) 1.0)
- // Total distance for touch to have moved to qualify as dragging (sensitivity in pixels)
- #define FS_TOUCH_IS_DRAGGED_AFTER ((double) 20.0)
- // Which state register are we in?
- #define FS_STATE_REGISTER_ENVIRONMENT ((unsigned short) (1 << 0))
- #define FS_STATE_REGISTER_MENU ((unsigned short) (1 << 1))
- #define FS_STATE_REGISTER_TOOL ((unsigned short) (1 << 2))
- #define FS_STATE_REGISTER_VIEW ((unsigned short) (1 << 3))
- #define FS_STATE_REGISTER_TOUCH ((unsigned short) (1 << 4))
- #define FS_STATE_REGISTER_MULTITOUCH ((unsigned short) (1 << 5))
- // Environment state register
- #define FS_STATE_START ((unsigned short) (1 << 0))
- #define FS_STATE_ERROR ((unsigned short) (1 << 1))
- #define FS_STATE_DEBUG ((unsigned short) (1 << 2))
- #define FS_STATE_SCREEN_TOUCH ((unsigned short) (1 << 3))
- #define FS_STATE_SCREEN_MULTITOUCH ((unsigned short) (1 << 4))
- #define FS_STATE_MENU_IS_CONTEXT_SENSITIVE ((unsigned short) (1 << 5))
- #define FS_STATE_MENU_IS_ALWAYS_ENABLED ((unsigned short) (1 << 6))
- #define FS_STATE_NO_SELECTION ((unsigned short) (1 << 7))
- #define FS_STATE_OBJECT_SELECTION ((unsigned short) (1 << 8))
- #define FS_STATE_FACET_SELECTION ((unsigned short) (1 << 9))
- // Menu state register
- #define FS_STATE_MENU_MODIFY ((unsigned short) (1 << 0))
- #define FS_STATE_MENU_TRANSFORM ((unsigned short) (1 << 1))
- #define FS_STATE_MENU_CREATE ((unsigned short) (1 << 2))
- #define FS_STATE_MENU_VIEW ((unsigned short) (1 << 3))
- // Tool state register
- #define FS_STATE_TOOL_EXTRUDE ((unsigned short) (1 << 0))
- #define FS_STATE_TOOL_TRANSLATE ((unsigned short) (1 << 1))
- #define FS_STATE_TOOL_ROTATE ((unsigned short) (1 << 2))
- #define FS_STATE_TOOL_SCALE ((unsigned short) (1 << 3))
- #define FS_STATE_TOOL_POLY_SQUARE ((unsigned short) (1 << 4))
- // View state register
- #define FS_STATE_VIEW_PAN ((unsigned short) (1 << 0))
- #define FS_STATE_VIEW_ROTATE ((unsigned short) (1 << 1))
- #define FS_STATE_VIEW_MOVE ((unsigned short) (1 << 2))
- // Touch state register
- #define FS_STATE_SCREEN_TOUCH_DRAG ((unsigned short) (1 << 0))
- #define FS_STATE_SCREEN_TOUCH_HOLD ((unsigned short) (1 << 1))
- // Multitouch state register
- #define FS_STATE_SCREEN_MULTITOUCH_PINCH_IN ((unsigned short) (1 << 0))
- #define FS_STATE_SCREEN_MULTITOUCH_PINCH_OUT ((unsigned short) (1 << 1))
- #define FS_STATE_SCREEN_MULTITOUCH_ROTATE ((unsigned short) (1 << 2))
- struct fsInputState {
- unsigned short registerEnvironment;
- unsigned short registerMenu;
- unsigned short registerTool;
- unsigned short registerView;
- unsigned short registerTouch;
- unsigned short registerMultitouch;
- };
- typedef struct fsInputState fsInputState;
- struct fsInputStateDiff {
- fsInputState unsetStates;
- fsInputState setStates;
- fsInputState testStates;
- unsigned short clearRegisters;
- };
- typedef struct fsInputStateDiff fsInputStateDiff;
- @interface fsStateMachine : NSObject {
- fsInputState *inputState;
- unsigned int touchAccumulator;
- NSTimer *touchTimer;
- NSRunLoop *mainRunLoop;
- vec2 *touchPositions;
- vec2 *touch2Positions;
- void (*currentStateCallback)(void);
- }
- @property unsigned int touchAccumulator;
- @property (retain) NSTimer *touchTimer;
- @property vec2 *touchPositions;
- @property vec2 *touch2Positions;
- - (fsStateMachine *) init;
- - (void) dealloc;
- - (unsigned short *) registerOffsetFor:(unsigned short)stateRegister;
- - (void) setState:(unsigned short)stateFlag inRegister:(unsigned short)stateRegister;
- - (BOOL) isState:(unsigned short)stateFlag inRegister:(unsigned short)stateRegister;
- - (void) resetState:(unsigned short)stateFlag inRegister:(unsigned short)stateRegister;
- - (void) resetRegister:(unsigned short)stateRegister;
- - (void) applyStateDiff:(fsInputStateDiff *)stateDiff;
- - (void) updateTouchesForWindow:(SIO2window *)_SIO2window;
- - (void) updateWithMoveForWindow:(SIO2window *)_SIO2window;
- - (void) updateWithAccelerometer:(SIO2window *)_SIO2window;
- - (BOOL) areToolsInMenuEnabled;
- @end
Add Comment
Please, Sign In to add comment