Guest User

Untitled

a guest
Jun 20th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. //
  2. // fsStateMachine.h
  3. // fuzzspaces
  4. //
  5. // Created by fuzzimac4 on 6/4/09.
  6. // Copyright 2009 __MyCompanyName__. All rights reserved.
  7. //
  8.  
  9. #import "sio2.h"
  10.  
  11. // How many previous positions to record for a touch
  12. #define FS_TOUCH_LAST_POSITIONS ((unsigned int) 10)
  13.  
  14. // Time until a touch is considered to be held (in seconds)
  15. #define FS_TOUCH_IS_HELD_AFTER ((NSTimeInterval) 1.0)
  16.  
  17. // Total distance for touch to have moved to qualify as dragging (sensitivity in pixels)
  18. #define FS_TOUCH_IS_DRAGGED_AFTER ((double) 20.0)
  19.  
  20. // Which state register are we in?
  21. #define FS_STATE_REGISTER_ENVIRONMENT ((unsigned short) (1 << 0))
  22. #define FS_STATE_REGISTER_MENU ((unsigned short) (1 << 1))
  23. #define FS_STATE_REGISTER_TOOL ((unsigned short) (1 << 2))
  24. #define FS_STATE_REGISTER_VIEW ((unsigned short) (1 << 3))
  25. #define FS_STATE_REGISTER_TOUCH ((unsigned short) (1 << 4))
  26. #define FS_STATE_REGISTER_MULTITOUCH ((unsigned short) (1 << 5))
  27.  
  28. // Environment state register
  29. #define FS_STATE_START ((unsigned short) (1 << 0))
  30. #define FS_STATE_ERROR ((unsigned short) (1 << 1))
  31. #define FS_STATE_DEBUG ((unsigned short) (1 << 2))
  32. #define FS_STATE_SCREEN_TOUCH ((unsigned short) (1 << 3))
  33. #define FS_STATE_SCREEN_MULTITOUCH ((unsigned short) (1 << 4))
  34. #define FS_STATE_MENU_IS_CONTEXT_SENSITIVE ((unsigned short) (1 << 5))
  35. #define FS_STATE_MENU_IS_ALWAYS_ENABLED ((unsigned short) (1 << 6))
  36. #define FS_STATE_NO_SELECTION ((unsigned short) (1 << 7))
  37. #define FS_STATE_OBJECT_SELECTION ((unsigned short) (1 << 8))
  38. #define FS_STATE_FACET_SELECTION ((unsigned short) (1 << 9))
  39.  
  40. // Menu state register
  41. #define FS_STATE_MENU_MODIFY ((unsigned short) (1 << 0))
  42. #define FS_STATE_MENU_TRANSFORM ((unsigned short) (1 << 1))
  43. #define FS_STATE_MENU_CREATE ((unsigned short) (1 << 2))
  44. #define FS_STATE_MENU_VIEW ((unsigned short) (1 << 3))
  45.  
  46. // Tool state register
  47. #define FS_STATE_TOOL_EXTRUDE ((unsigned short) (1 << 0))
  48. #define FS_STATE_TOOL_TRANSLATE ((unsigned short) (1 << 1))
  49. #define FS_STATE_TOOL_ROTATE ((unsigned short) (1 << 2))
  50. #define FS_STATE_TOOL_SCALE ((unsigned short) (1 << 3))
  51. #define FS_STATE_TOOL_POLY_SQUARE ((unsigned short) (1 << 4))
  52.  
  53. // View state register
  54. #define FS_STATE_VIEW_PAN ((unsigned short) (1 << 0))
  55. #define FS_STATE_VIEW_ROTATE ((unsigned short) (1 << 1))
  56. #define FS_STATE_VIEW_MOVE ((unsigned short) (1 << 2))
  57.  
  58. // Touch state register
  59. #define FS_STATE_SCREEN_TOUCH_DRAG ((unsigned short) (1 << 0))
  60. #define FS_STATE_SCREEN_TOUCH_HOLD ((unsigned short) (1 << 1))
  61.  
  62. // Multitouch state register
  63. #define FS_STATE_SCREEN_MULTITOUCH_PINCH_IN ((unsigned short) (1 << 0))
  64. #define FS_STATE_SCREEN_MULTITOUCH_PINCH_OUT ((unsigned short) (1 << 1))
  65. #define FS_STATE_SCREEN_MULTITOUCH_ROTATE ((unsigned short) (1 << 2))
  66.  
  67. struct fsInputState {
  68. unsigned short registerEnvironment;
  69. unsigned short registerMenu;
  70. unsigned short registerTool;
  71. unsigned short registerView;
  72. unsigned short registerTouch;
  73. unsigned short registerMultitouch;
  74. };
  75. typedef struct fsInputState fsInputState;
  76.  
  77. struct fsInputStateDiff {
  78. fsInputState unsetStates;
  79. fsInputState setStates;
  80. fsInputState testStates;
  81. unsigned short clearRegisters;
  82. };
  83. typedef struct fsInputStateDiff fsInputStateDiff;
  84.  
  85. @interface fsStateMachine : NSObject {
  86. fsInputState *inputState;
  87. unsigned int touchAccumulator;
  88. NSTimer *touchTimer;
  89. NSRunLoop *mainRunLoop;
  90. vec2 *touchPositions;
  91. vec2 *touch2Positions;
  92. void (*currentStateCallback)(void);
  93. }
  94.  
  95. @property unsigned int touchAccumulator;
  96. @property (retain) NSTimer *touchTimer;
  97. @property vec2 *touchPositions;
  98. @property vec2 *touch2Positions;
  99.  
  100. - (fsStateMachine *) init;
  101. - (void) dealloc;
  102.  
  103. - (unsigned short *) registerOffsetFor:(unsigned short)stateRegister;
  104. - (void) setState:(unsigned short)stateFlag inRegister:(unsigned short)stateRegister;
  105. - (BOOL) isState:(unsigned short)stateFlag inRegister:(unsigned short)stateRegister;
  106. - (void) resetState:(unsigned short)stateFlag inRegister:(unsigned short)stateRegister;
  107. - (void) resetRegister:(unsigned short)stateRegister;
  108. - (void) applyStateDiff:(fsInputStateDiff *)stateDiff;
  109.  
  110. - (void) updateTouchesForWindow:(SIO2window *)_SIO2window;
  111. - (void) updateWithMoveForWindow:(SIO2window *)_SIO2window;
  112. - (void) updateWithAccelerometer:(SIO2window *)_SIO2window;
  113.  
  114. - (BOOL) areToolsInMenuEnabled;
  115.  
  116. @end
Add Comment
Please, Sign In to add comment