diff options
Diffstat (limited to 'sword2/mouse.h')
-rw-r--r-- | sword2/mouse.h | 159 |
1 files changed, 151 insertions, 8 deletions
diff --git a/sword2/mouse.h b/sword2/mouse.h index be39df6c44..e304db086b 100644 --- a/sword2/mouse.h +++ b/sword2/mouse.h @@ -21,17 +21,30 @@ #ifndef MOUSE_H #define MOUSE_H -#define TOTAL_mouse_list 50 +#define TOTAL_mouse_list 50 namespace Sword2 { -enum { - MOUSE_normal = 0, // normal in game - MOUSE_menu = 1, // menu chooser - MOUSE_drag = 2, // dragging luggage - MOUSE_system_menu = 3, // system menu chooser - MOUSE_holding = 4 // special -}; +struct ObjectMouse; +struct BuildUnit; + +#if !defined(__GNUC__) + #pragma START_PACK_STRUCTS +#endif + +struct MouseAnim { + uint8 runTimeComp; // type of runtime compression used for the + // frame data + uint8 noAnimFrames; // number of frames in the anim + int8 xHotSpot; + int8 yHotSpot; + uint8 mousew; + uint8 mouseh; +} GCC_PACK; + +#if !defined(__GNUC__) + #pragma END_PACK_STRUCTS +#endif // The MOUSE_holding mode is entered when the conversation menu is closed, and // exited when the mouse cursor moves off that menu area. I don't know why yet. @@ -68,6 +81,136 @@ struct MouseUnit { int32 pointer_text; }; +class Mouse { +private: + Sword2Engine *_vm; + + Common::Point _pos; + + MouseUnit _mouseList[TOTAL_mouse_list]; + uint32 _curMouse; + + MenuObject _tempList[TOTAL_engine_pockets]; + uint32 _totalTemp; + + MenuObject _masterMenuList[TOTAL_engine_pockets]; + uint32 _totalMasters; + + uint8 _menuStatus[2]; + byte *_icons[2][RDMENU_MAXPOCKETS]; + uint8 _pocketStatus[2][RDMENU_MAXPOCKETS]; + + uint8 _iconCount; + + // If it's NORMAL_MOUSE_ID (ie. normal pointer) then it's over a floor + // area (or hidden hot-zone) + + uint32 _mousePointerRes; + + struct MouseAnim *_mouseAnim; + struct MouseAnim *_luggageAnim; + + uint8 _mouseFrame; + byte *_mouseSprite; + int32 *_mouseOffsets; + int32 *_luggageOffset; + + uint32 _mouseMode; + + bool _mouseStatus; // Human 0 on/1 off + bool _mouseModeLocked; // 0 not !0 mode cannot be changed from + // normal mouse to top menu (i.e. when + // carrying big objects) + uint32 _realLuggageItem; // Last minute for pause mode + uint32 _currentLuggageResource; + uint32 _oldButton; // For the re-click stuff - must be + // the same button you see + uint32 _buttonClick; + uint32 _pointerTextBlocNo; + uint32 _playerActivityDelay; // Player activity delay counter + + bool _examiningMenuIcon; + + // Set by checkMouseList() + uint32 _mouseTouching; + uint32 _oldMouseTouching; + + uint32 _menuSelectedPos; + + void decompressMouse(byte *decomp, byte *comp, int width, int height, int pitch, int xOff = 0, int yOff = 0); + + int32 setMouseAnim(byte *ma, int32 size, int32 mouseFlash); + int32 setLuggageAnim(byte *la, int32 size); + + void clearIconArea(int menu, int pocket, Common::Rect *r); + +public: + Mouse(Sword2Engine *vm); + ~Mouse(); + + void getPos(int &x, int &y); + void setPos(int x, int y); + + bool getMouseStatus() { return _mouseStatus; } + uint32 getMouseTouching() { return _mouseTouching; } + void setMouseTouching(uint32 touching) { _mouseTouching = touching; } + + void pauseGame(); + void unpauseGame(); + + void setMouse(uint32 res); + void setLuggage(uint32 res); + + void setObjectHeld(uint32 res); + + void resetMouseList(); + + void registerMouse(ObjectMouse *ob_mouse, BuildUnit *build_unit); + void registerPointerText(int32 text_id); + + void createPointerText(uint32 text_id, uint32 pointer_res); + void clearPointerText(); + + void drawMouse(); + int32 animateMouse(); + + void processMenu(); + + void addMenuObject(MenuObject *obj); + void buildMenu(); + void buildSystemMenu(); + + int32 showMenu(uint8 menu); + int32 hideMenu(uint8 menu); + int32 setMenuIcon(uint8 menu, uint8 pocket, byte *icon); + + void closeMenuImmediately(); + + void refreshInventory(); + + void startConversation(); + void endConversation(); + + void hideMouse(); + void noHuman(); + void addHuman(); + + void resetPlayerActivityDelay() { _playerActivityDelay = 0; } + void monitorPlayerActivity(); + void checkPlayerActivity(uint32 seconds); + + void mouseOnOff(); + uint32 checkMouseList(); + void mouseEngine(); + + void normalMouse(); + void menuMouse(); + void dragMouse(); + void systemMenuMouse(); + + int menuClick(int menu_items); +}; + } // End of namespace Sword2 #endif |