aboutsummaryrefslogtreecommitdiff
path: root/sword2/mouse.h
diff options
context:
space:
mode:
Diffstat (limited to 'sword2/mouse.h')
-rw-r--r--sword2/mouse.h159
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