| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- ///////////////////////////////////////////////////////////////////////////////////////
- //
- // MouseMgr.H
- //
- // Class declarations for managing different mouse modes;
- //
- #ifndef __MOUSEMGR_H
- #define __MOUSEMGR_H
- #include "refcount.h"
- #include "utils.h"
- #include "rendobj.h"
- #include "assetmgr.h"
- #include "cameramgr.h"
- class WaypathNodeClass;
- class ZoneInstanceClass;
- class TransitionInstanceClass;
- ///////////////////////////////////////////////////////////////
- //
- // MouseModeClass
- //
- ///////////////////////////////////////////////////////////////
- class MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MouseModeClass (void)
- : m_bUpdate (false) { }
- virtual ~MouseModeClass (void) { }
-
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Dblclk (UINT flags, CPoint point) { }
- virtual void Handle_LButton_Down (UINT flags, CPoint point);
- virtual void Handle_LButton_Up (UINT flags, CPoint point);
- virtual void Handle_RButton_Down (UINT flags, CPoint point);
- virtual void Handle_RButton_Up (UINT flags, CPoint point);
- virtual void Handle_Mouse_Move (UINT flags, CPoint point);
- //
- // Misc virtuals
- //
- virtual void On_Mode_Set (void) {}
- virtual void On_Mode_Exit (void) {}
- protected:
- friend class MouseMgrClass;
- ///////////////////////////////////////////////////
- // Protected member data
- ///////////////////////////////////////////////////
-
- CPoint m_LastMousePoint;
- CPoint m_MousePoint;
- bool m_bUpdate;
- CameraMgr::CAMERA_MODE m_LButtonMode;
- CameraMgr::CAMERA_MODE m_RButtonMode;
- CameraMgr::CAMERA_MODE m_BothButtonMode;
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMCameraDefaultClass
- //
- ///////////////////////////////////////////////////////////////
- class MMCameraDefaultClass : public MouseModeClass
- {
- public:
- /////////////////////////////////////////////////////
- // Public constructors/destructors
- /////////////////////////////////////////////////////
- MMCameraDefaultClass (void)
- {
- m_LButtonMode = CameraMgr::MODE_ROTATE_FREE;
- m_RButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_BothButtonMode = CameraMgr::MODE_MOVE_UPDOWN;
- }
- virtual ~MMCameraDefaultClass (void) { }
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMCameraWalkClass
- //
- ///////////////////////////////////////////////////////////////
- class MMCameraWalkClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMCameraWalkClass (void)
- {
- m_LButtonMode = CameraMgr::MODE_WALK_THROUGH;
- m_RButtonMode = CameraMgr::MODE_WALK_THROUGH;
- m_BothButtonMode = CameraMgr::MODE_WALK_THROUGH;
- }
- virtual ~MMCameraWalkClass (void) { }
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- virtual void On_Mode_Set (void) { } //::Get_Camera_Mgr ()->Set_Camera_Mode (CameraMgr::MODE_WALK_THROUGH); }
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMCameraFlyClass
- //
- //
- class MMCameraFlyClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMCameraFlyClass (void)
- {
- m_LButtonMode = CameraMgr::MODE_FLY_THROUGH;
- m_RButtonMode = CameraMgr::MODE_FLY_THROUGH;
- m_BothButtonMode = CameraMgr::MODE_FLY_THROUGH;
- }
- virtual ~MMCameraFlyClass (void) {}
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMCameraOrbitClass
- //
- ///////////////////////////////////////////////////////////////
- class MMCameraOrbitClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMCameraOrbitClass (void)
- {
- m_LButtonMode = CameraMgr::MODE_ORBIT;
- m_RButtonMode = CameraMgr::MODE_ORBIT;
- m_BothButtonMode = CameraMgr::MODE_ORBIT;
- }
- virtual ~MMCameraOrbitClass (void) {}
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMHeightfieldEditClass
- //
- ///////////////////////////////////////////////////////////////
- class MMHeightfieldEditClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMHeightfieldEditClass (void)
- {
- m_LButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_RButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_BothButtonMode = CameraMgr::MODE_MOVE_PLANE;
- }
- virtual ~MMHeightfieldEditClass (void) {}
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Down (UINT flags, CPoint point);
- virtual void Handle_LButton_Up (UINT flags, CPoint point);
- virtual void Handle_RButton_Down (UINT flags, CPoint point);
- virtual void Handle_RButton_Up (UINT flags, CPoint point);
- virtual void On_Mode_Set (void);
- virtual void On_Mode_Exit (void);
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMObjectDropClass
- //
- /////////////////////////////////////////////////////////////////
- class MMObjectDropClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMObjectDropClass (void) { }
- virtual ~MMObjectDropClass (void) { }
-
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Down (UINT flags, CPoint point) { }
- virtual void Handle_LButton_Up (UINT flags, CPoint point) { }
- virtual void Handle_RButton_Down (UINT flags, CPoint point) { }
- virtual void Handle_RButton_Up (UINT flags, CPoint point) { }
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMObjectManipulateClass
- //
- //
- ///////////////////////////////////////////////////////////////
- class MMObjectManipulateClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMObjectManipulateClass (void)
- : m_ObjectMode (MODE_NONE),
- m_ForceDropToGround (false),
- m_CurrentMovePos (0, 0, 0),
- m_IntersectPoint (0, 0, 0)
- {
- m_LButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_RButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_BothButtonMode = CameraMgr::MODE_MOVE_PLANE;
- }
- virtual ~MMObjectManipulateClass (void) { }
-
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Dblclk (UINT flags, CPoint point);
- virtual void Handle_LButton_Down (UINT flags, CPoint point);
- virtual void Handle_LButton_Up (UINT flags, CPoint point);
- virtual void Handle_RButton_Down (UINT flags, CPoint point);
- virtual void Handle_RButton_Up (UINT flags, CPoint point);
- virtual void Handle_Mouse_Move (UINT flags, CPoint point);
- virtual void On_Mode_Set (void);
- void Set_Move_Nodes_Mode (void);
- protected:
- ///////////////////////////////////////////////////
- // Public data types
- ///////////////////////////////////////////////////
- typedef enum
- {
- MODE_NONE = -1,
- MODE_SELECT = 0,
- MODE_LINK,
- MODE_MOVE,
- MODE_ROTATE,
- MODE_COUNT
- } OBJECT_MODE;
- ///////////////////////////////////////////////////
- // Protected methods
- ///////////////////////////////////////////////////
- void Move_Selection (CPoint point);
- void Rotate_Selection (CPoint point);
- void Link_Item_Hit_Test (CPoint point);
- void On_Link_Begin (CPoint point);
- void On_Link_End (CPoint point, bool cancelled = false);
- void Change_Operation (OBJECT_MODE type);
- private:
- ///////////////////////////////////////////////////
- // Private member data
- ///////////////////////////////////////////////////
- OBJECT_MODE m_ObjectMode;
- Vector3 m_CurrentMovePos;
- Vector3 m_IntersectPoint;
- bool m_ForceDropToGround;
- //class LinkLineClass ** m_pLinkLines;
- //int m_iLinkLineCount;
- //BOOL m_bValidLink;
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMObjectSelectClass
- //
- ///////////////////////////////////////////////////////////////
- class MMObjectSelectClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMObjectSelectClass (void) {}
- virtual ~MMObjectSelectClass (void) {}
-
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Down (UINT flags, CPoint point) { }
- virtual void Handle_LButton_Up (UINT flags, CPoint point) { }
- virtual void Handle_RButton_Down (UINT flags, CPoint point) { }
- virtual void Handle_RButton_Up (UINT flags, CPoint point) { }
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMWaypathEditClass
- //
- ///////////////////////////////////////////////////////////////
- class MMWaypathEditClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMWaypathEditClass (void)
- : m_CurrentPoint (-1),
- m_Waypath (NULL)
- {
- m_LButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_RButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_BothButtonMode = CameraMgr::MODE_MOVE_PLANE;
- }
- virtual ~MMWaypathEditClass (void) { }
-
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Down (UINT flags, CPoint point);
- virtual void Handle_LButton_Up (UINT flags, CPoint point);
- virtual void Handle_RButton_Down (UINT flags, CPoint point);
- virtual void Handle_RButton_Up (UINT flags, CPoint point);
- virtual void Handle_Mouse_Move (UINT flags, CPoint point);
- virtual void On_Mode_Set (void);
- virtual void On_Mode_Exit (void);
- virtual void Set_Waypath (WaypathNodeClass *waypath, int index = 0) { m_Waypath = waypath; m_CurrentPoint = index; }
- protected:
- ///////////////////////////////////////////////////
- // Protected methods
- ///////////////////////////////////////////////////
- void Exit_Mode (void);
- private:
- ///////////////////////////////////////////////////
- // Private member data
- ///////////////////////////////////////////////////
- WaypathNodeClass * m_Waypath;
- int m_CurrentPoint;
- };
- ///////////////////////////////////////////////////////////////
- //
- // MMGrabHandleDragClass
- //
- ///////////////////////////////////////////////////////////////
- class MMGrabHandleDragClass : public MouseModeClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MMGrabHandleDragClass (void)
- : m_Node (NULL),
- m_Vertex (0)
- {
- m_LButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_RButtonMode = CameraMgr::MODE_MOVE_PLANE;
- m_BothButtonMode = CameraMgr::MODE_MOVE_PLANE;
- }
- virtual ~MMGrabHandleDragClass (void) {}
-
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- //
- // Mouse message handlers
- //
- virtual void Handle_LButton_Dblclk (UINT flags, CPoint point) {}
- virtual void Handle_LButton_Down (UINT flags, CPoint point) {}
- virtual void Handle_LButton_Up (UINT flags, CPoint point);
- virtual void Handle_RButton_Down (UINT flags, CPoint point) {}
- virtual void Handle_RButton_Up (UINT flags, CPoint point) {}
- virtual void Handle_Mouse_Move (UINT flags, CPoint point);
- virtual void On_Mode_Set (void) { m_Node = NULL; }
- //
- // Specific methods
- //
- void Set_Node_Info (NodeClass *node, int vertex_index);
- private:
- ///////////////////////////////////////////////////
- // Private member data
- ///////////////////////////////////////////////////
- NodeClass * m_Node;
- int m_Vertex;
- };
- ///////////////////////////////////////////////////////////////
- //
- // MouseMgrClass
- //
- ///////////////////////////////////////////////////////////////
- class MouseMgrClass
- {
- public:
- ///////////////////////////////////////////////////
- // Public constructors/destructors
- ///////////////////////////////////////////////////
- MouseMgrClass (void);
- virtual ~MouseMgrClass (void);
- ///////////////////////////////////////////////////
- // Public data types
- ///////////////////////////////////////////////////
- typedef enum
- {
- MODE_CAMERA_DEFAULT = 0,
- MODE_CAMERA_WALK,
- MODE_CAMERA_FLY,
- MODE_CAMERA_ORBIT,
- MODE_OBJECT_DROP,
- MODE_OBJECT_MANIPULATE,
- MODE_OBJECT_SELECT,
- MODE_GRABHANDLE_DRAG,
- MODE_WAYPATH_EDIT,
- MODE_HEIGHTFIELD_EDIT,
- MODE_COUNT
- } MOUSE_MODE;
- ///////////////////////////////////////////////////
- // Public methods
- ///////////////////////////////////////////////////
- MouseMgrClass::MOUSE_MODE Get_Mouse_Mode (void) const { return m_MouseMode; }
- void Set_Mouse_Mode (MOUSE_MODE new_mode);
- MouseModeClass * Get_Mode_Mgr (void) { return m_pModeObjects[m_MouseMode]; }
- //
- // Mouse message handlers
- //
- void Handle_LButton_Dblclk (UINT flags, CPoint point) { m_pModeObjects[m_MouseMode]->Handle_LButton_Dblclk (flags, point); }
- void Handle_LButton_Down (UINT flags, CPoint point) { m_pModeObjects[m_MouseMode]->Handle_LButton_Down (flags, point); IsLButtonDown = true; }
- void Handle_LButton_Up (UINT flags, CPoint point) { m_pModeObjects[m_MouseMode]->Handle_LButton_Up (flags, point); IsLButtonDown = false; }
- void Handle_RButton_Down (UINT flags, CPoint point) { m_pModeObjects[m_MouseMode]->Handle_RButton_Down (flags, point); IsRButtonDown = true; }
- void Handle_RButton_Up (UINT flags, CPoint point) { m_pModeObjects[m_MouseMode]->Handle_RButton_Up (flags, point); IsRButtonDown = false; }
- void Handle_Mouse_Move (UINT flags, CPoint point) { m_pModeObjects[m_MouseMode]->Handle_Mouse_Move (flags, point); }
- //
- // Mouse point methods
- //
- CPoint Get_Mouse_Point (void) const { return m_pModeObjects[m_MouseMode]->m_MousePoint; }
- CPoint Get_Last_Mouse_Point (void) const { return m_pModeObjects[m_MouseMode]->m_LastMousePoint; }
- //
- // Object manipulation methods
- //
- void Move_Node (NodeClass *node);
- //
- // Button access
- //
- bool Is_LButton_Down (void) const { return IsLButtonDown; }
- bool Is_RButton_Down (void) const { return IsRButtonDown; }
- private:
- ///////////////////////////////////////////////////
- // Private member data
- ///////////////////////////////////////////////////
- class MouseModeClass * m_pModeObjects[MOUSE_MODE::MODE_COUNT];
- MOUSE_MODE m_MouseMode;
- bool IsLButtonDown;
- bool IsRButtonDown;
- };
- #endif //__MOUSEMGR_H
|