aboutsummaryrefslogtreecommitdiff
path: root/sword2/mouse.h
diff options
context:
space:
mode:
authorTorbjörn Andersson2005-02-19 14:02:16 +0000
committerTorbjörn Andersson2005-02-19 14:02:16 +0000
commit43cfe01f3d8d2307a23933920cce43740871f367 (patch)
treefe56072f944bc980981d5f0cfe1683116645d076 /sword2/mouse.h
parent0de5fa2f33147529edcf4dccd24a2750b23a2867 (diff)
downloadscummvm-rg350-43cfe01f3d8d2307a23933920cce43740871f367.tar.gz
scummvm-rg350-43cfe01f3d8d2307a23933920cce43740871f367.tar.bz2
scummvm-rg350-43cfe01f3d8d2307a23933920cce43740871f367.zip
This is the second part of the BS2 restructuring. There are two new
classes: Screen and Mouse. Screen handles most of the drawing, except the mouse cursor and in-game menus. The old Graphics class is no more. I've also fixed some "reverse stereo" regressions from the first part of the restructuring. I'm not sure what the next step will be, but hopefully it will be smaller than this one was. svn-id: r16812
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