diff options
author | jak1 <jak1@themanaworld.org> | 2024-02-16 14:50:14 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2024-02-18 00:31:12 -0300 |
commit | d36cb0eb4b7bba79b2b654c0e5f91f16726bdc68 (patch) | |
tree | d4279a38b763cefd033cfbf4d1ec2ff13c5e5dd2 /src/progs/manaverse/gui/viewport.h | |
parent | 775392e472933be8d1d76619894efc0671f0c02d (diff) | |
download | mv-d36cb0eb4b7bba79b2b654c0e5f91f16726bdc68.tar.gz mv-d36cb0eb4b7bba79b2b654c0e5f91f16726bdc68.tar.bz2 mv-d36cb0eb4b7bba79b2b654c0e5f91f16726bdc68.tar.xz mv-d36cb0eb4b7bba79b2b654c0e5f91f16726bdc68.zip |
Rename the program from ManaPlus to ManaVerse.jesusalva/renameprog
Diffstat (limited to 'src/progs/manaverse/gui/viewport.h')
-rw-r--r-- | src/progs/manaverse/gui/viewport.h | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/src/progs/manaverse/gui/viewport.h b/src/progs/manaverse/gui/viewport.h new file mode 100644 index 000000000..781f4255f --- /dev/null +++ b/src/progs/manaverse/gui/viewport.h @@ -0,0 +1,250 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2020 The ManaPlus Developers + * Copyright (C) 2020-2023 The ManaVerse Developers + * + * This file is part of The ManaPlus Client. + * + * 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 2 of the License, or + * 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/>. + */ + +#ifndef PROGS_MANAVERSE_GUI_VIEWPORT_H +#define PROGS_MANAVERSE_GUI_VIEWPORT_H + +#include "position.h" + +#include "enums/simpletypes/beingid.h" + +#include "gui/widgets/windowcontainer.h" + +#include "listeners/mouselistener.h" + +class ActorSprite; +class Being; +class FloorItem; +class Graphics; +class Map; +class MapItem; + +/** + * The viewport on the map. Displays the current map and handles mouse input + * and the popup menu. + */ +class Viewport final : public WindowContainer, + public MouseListener, + public ConfigListener +{ + public: + /** + * Constructor. + */ + Viewport(); + + A_DELETE_COPY(Viewport) + + /** + * Destructor. + */ + ~Viewport() override final; + + /** + * Sets the map displayed by the viewport. + */ + void setMap(Map *const map); + + /** + * Draws the viewport. + */ + void draw(Graphics *const graphics) override final A_NONNULL(2); + + void safeDraw(Graphics *const graphics) override final A_NONNULL(2); + + /** + * Implements player to keep following mouse. + */ + void logic() override final; + + /** + * Toggles whether the path debug graphics are shown. normal, + * debug with all images and grid, debug with out big images + * and with out grid. + */ + void toggleMapDrawType(); + + void toggleCameraMode(); + + /** + * Handles mouse press on map. + */ + void mousePressed(MouseEvent &event) override final; + + /** + * Handles mouse move on map + */ + void mouseDragged(MouseEvent &event) override final; + + /** + * Handles mouse button release on map. + */ + void mouseReleased(MouseEvent &event) override final; + + /** + * Handles mouse move on map. + */ + void mouseMoved(MouseEvent &event) override final; + + /** + * A relevant config option changed. + */ + void optionChanged(const std::string &name) override final; + + /** + * Returns camera x offset in pixels. + */ + int getCameraX() const noexcept2 A_WARN_UNUSED + { return mPixelViewX; } + + /** + * Returns camera y offset in pixels. + */ + int getCameraY() const noexcept2 A_WARN_UNUSED + { return mPixelViewY; } + + /** + * Changes viewpoint by relative pixel coordinates. + */ + void scrollBy(const int x, const int y) + { mPixelViewX += x; mPixelViewY += y; } + + /** + * Clear all hover item, being etc + */ + void cleanHoverItems(); + + Map *getMap() const noexcept2 A_WARN_UNUSED + { return mMap; } + + void moveCamera(const int dx, const int dy); + + int getCameraRelativeX() const noexcept2 A_WARN_UNUSED + { return mCameraRelativeX; } + + int getCameraRelativeY() const noexcept2 A_WARN_UNUSED + { return mCameraRelativeY; } + + void setCameraRelativeX(const int n) + { mCameraRelativeX = n; updateMidVars(); } + + void setCameraRelativeY(const int n) + { mCameraRelativeY = n; updateMidVars(); } + + void moveCameraToActor(const BeingId actorId, + const int x, + const int y); + + void moveCameraToPosition(const int x, const int y); + + void moveCameraRelative(const int x, const int y); + + void returnCamera(); + + void getMouseTile(int &destX, int &destY) const; + + void videoResized(); + + int mMouseX; /**< Current mouse position in pixels. */ + int mMouseY; /**< Current mouse position in pixels. */ + + protected: + friend class ActorManager; + + /// Clears any matching hovers + void clearHover(const ActorSprite *const actor); + + void updateMidVars(); + + void updateMaxVars(); + + static void validateSpeed(); + + private: + /** + * Finds a path from the player to the mouse, and draws it. This is for + * debug purposes. + */ + void drawDebugPath(Graphics *const graphics) A_NONNULL(2); + + /** + * Draws the given path. + */ + void drawPath(Graphics *const graphics, + const Path &path, + const Color &color) + const A_NONNULL(2); + + bool leftMouseAction(); + + bool openContextMenu(const MouseEvent &event); + + void walkByMouse(const MouseEvent &event); + + void getMouseTile(const int x, + const int y, + int &destX, + int &destY) const; + + /** + * Make the player go to the mouse position. + */ + void followMouse(); + + Map *mMap; /**< The current map. */ + + Being *mHoverBeing; /**< Being mouse is currently over. */ + FloorItem *mHoverItem; /**< FloorItem mouse is currently over. */ + MapItem *mHoverSign; /**< Map sign mouse is currently over. */ + + int mScrollRadius; + int mScrollLaziness; + int mScrollCenterOffsetX; + int mScrollCenterOffsetY; + int mMousePressX; + int mMousePressY; + int mPixelViewX; /**< Current viewpoint in pixels. */ + int mPixelViewY; /**< Current viewpoint in pixels. */ + int mMidTileX; + int mMidTileY; + int mViewXmax; + int mViewYmax; + + time_t mLocalWalkTime; + + int mCameraRelativeX; + int mCameraRelativeY; + + bool mShowBeingPopup; + bool mSelfMouseHeal; + bool mEnableLazyScrolling; + bool mMouseDirectionMove; + bool mLongMouseClick; + bool mAllowMoveByMouse; + bool mMouseClicked; + bool mPlayerFollowMouse; +}; + +extern Viewport *viewport; /**< The viewport. */ + +#endif // PROGS_MANAVERSE_GUI_VIEWPORT_H |