summaryrefslogtreecommitdiff
path: root/src/gui/viewport.cpp
AgeCommit message (Collapse)AuthorFilesLines
2025-07-14Various small cleanupsThorbjørn Lindeijer1-1/+1
* Fixed doxygen comment on KeyFunction struct * Use SDL_BUTTON_LMASK instead of SDL_BUTTON(1) * Removed unused include
2025-04-02Use a consistent naming style for enum class valuesThorbjørn Lindeijer1-5/+5
Sometimes I've used CamelCase and sometimes SNAKE_CASE for these values. Since "enum class" values are always prefixed with the enum name, which uses CamelCase, I find it more fitting to use it for the values as well. Also fixes compilation on Windows where 'ERROR' was conflicting with a define.
2025-02-25Added tooltips to status effect iconsThorbjørn Lindeijer1-6/+0
Based on the name attributes in the status-effect XML elements. Also cleanup the code a little. Since the MiniStatusWindow now adjust its size to respect the status icons, those icons no longer have to be drawn from the Viewport.
2025-02-25Some code cleanups related to status iconsThorbjørn Lindeijer1-0/+2
Fixed leaking of Sprite instances.
2025-01-20Made client config statically typedThorbjørn Lindeijer1-28/+13
This makes accessing the config values much faster, since it no longer needs to do a lookup nor string conversion, which means we could remove some needless copying of the values. Overall it makes it easier to find out where settings are used and it puts the defaults along with the declaration. Options with default values are no longer saved to the config file. This does not include unrecognized options, which are kept around to provide some compatibility with older clients. While most basic options have kept the same name, more complicated settings like window geometry, shortcuts, outfits, etc. now have their own XML elements. Older clients will ignore these and erase them when saving the configuration.
2024-10-18Avoid accessing static members through instancesThorbjørn Lindeijer1-2/+2
Fixed with clang-tidy `readability-static-accessed-through-instance` check.
2024-10-08Restore the screen shake effectThorbjørn Lindeijer1-30/+31
Now the experience mightes better with what it was before the logic update change (59a7d5c58f8b3af21b3e19d4e78f5653bf011bfb). The per-frame effect is reduced and less constant, based on a sine wave. The effect is no longer applied directly to the mPixelViewX/Y values, but is rather only taken into account when rendering the view.
2024-10-08Smoother being movementThorbjørn Lindeijer1-13/+11
There was a slight stutter in being movement, since each time a being reached the next position along its path, it would only continue to the following position with the next logic tick. Now the logic has been adjusted to keep moving until all the time for the current frame was used up, or the path was exhausted. A slight stutter remains for keyboard movement, as well as broken walk animation playback, since it will only set a new path once the current one is finished (see e554d9b2be1ec2fcb15065ae70151302adeef602). Also simplified some logic in Viewport::draw and removed some obsolete code in LocalPlayer::startWalking.
2024-10-08Added convenient and efficient Timer classThorbjørn Lindeijer1-49/+51
The Timer is efficient because it does not depend on incrementing a counter to keep track of time, nor does it call SDL_GetTicks every time its state is checked (this happens once per frame instead). Along with global functions Time::absoluteTimeMs() and Time::deltaTimeMs(), this replaces previous globals tick_time, cur_time and get_elapsed_time(). For now, there is still a fixed 100 times per second logic call rate, but the new Time::deltaTimeMs() function should allow getting rid of this.
2024-10-04Removed useless LocalPlayer::mUpdateNameThorbjørn Lindeijer1-7/+1
Maybe it once had a use, but a change in the "Show own name" setting is already handled by LocalPlayer::event.
2024-04-18Fixed mouse path debug when graphics are scaledThorbjørn Lindeijer1-3/+0
This SDL_GetMouseState call did not adjust the result to the graphics scale. Fortunately it could just be removed, since mMouseX and mMouseY are anyway updated each Viewport::logic.
2024-04-08Added UI debug drawingThorbjørn Lindeijer1-1/+1
Shows outlines of visible widgets as well as highlighting modal focus, modal mouse focus and regular focus. Can currently only be toggled in the Debug window, so needs source code modification to be used during login sequence for now.
2024-04-02General code cleanupsThorbjørn Lindeijer1-2/+1
* Removed some unused includes * Removed unused ListBox::mFont * Removed wrong cast to SDL_Scancode * Removed superfluous .c_str() * Removed superfluous explicit std::string construction * Removed unused variable * Use more emplace_back * Turned FindBeingFunctor into a lambda * Avoid needless pointer references for ambient layers and use a vector
2024-03-22Added support for scaling the outputThorbjørn Lindeijer1-9/+10
* Added "Scale" user option, which can either by "Auto" or an explicit scaling factor. Its maximum value depends on the current resolution. The "Auto" factor is based on keeping the logical resolution on at least 800x600, wheres the maximum scale is based on keeping the logical resolution on at least 640x480. * Enabled support for High DPI. This means the rendering target can now have a different resolution than the window size, which can happen on macOS, Windows and Wayland. The resulting scale is multiplied by the above user-controlled scale. Currently, this looks ugly for non-integer scales, which are not used on macOS and can only be configured on some Wayland compositors. Has not been tested on Windows. * Simplified OpenGL initialization (moved out of _beginDraw). * Made sure _beginDraw/_endDraw sets a clip area also for SDLGraphics.
2024-03-02Changed server type to "enum class"Thorbjørn Lindeijer1-3/+3
2024-03-02Added support for customizing NPC and Monster hover cursorThorbjørn Lindeijer1-7/+2
To match support for this in M+, since TMW uses this functionality on two of its NPCs.
2024-03-02Updated mouse cursors to latest versionThorbjørn Lindeijer1-5/+5
The new cursor types are not used yet for now.
2024-02-09C++11: Use default member initializersThorbjørn Lindeijer1-11/+1
This patch is not exhaustive.
2024-01-29Apply C++11 fixitsThorbjørn Lindeijer1-19/+13
modernize-loop-convert modernize-deprecated-headers
2024-01-29Fixed another crash due to incomplete SDL2 upgradeThorbjørn Lindeijer1-1/+1
SDL_GetKeyboardState array needs to be indexed by scan codes.
2024-01-26Apply C++11 fixitsThorbjørn Lindeijer1-14/+14
modernize-use-auto modernize-use-nullptr modernize-use-override modernize-use-using
2024-01-25Ported to SDL2Thorbjørn Lindeijer1-1/+1
2012-08-02Add a checkbox to the debugging window to show being ids.Stefan Beller1-1/+21
Reviewed-by: Ablu
2012-03-18Fixed issues with rendering very small mapsjurkan1-24/+38
Added a black background for maps that are smaller than the screen resolution and centered them on screen. Reviewed-by: Thorbjørn Lindeijer Mantis-issue: 193
2012-02-03Simplified and made generic the way the pickup is handled.Yohann Ferreira1-2/+7
I also made the range be taken from the server type as for the pickup and npc talk ranges. Last but no least, I fixed the parameters sent with PGMSG_PICKUP to send the (item) position where to pickup at as described in the manaserv protocol. The pickup is still not 100% functional due certainly to two problems: 1. The client item coordinates might not be the exact same as in the server. 2. The client seems to try to pick up the item a bit too soon, probably for the reason given in 1. I'll investigate this in another patch. Reviewed-by: Thorbjørn Lindeijer, Erik Schilling.
2012-01-26Updated copyrights to 2012Thorbjørn Lindeijer1-1/+1
2012-01-16Renamed some file names for consistency with the class namesThorbjørn Lindeijer1-1/+1
This was already done by ManaPlus. It's a good idea anyway and it makes comparing the code a little easier. Reviewed-by: Yohann Ferreira
2012-01-10player_node -> local_playerYohann Ferreira1-20/+20
Reviewed-by: Ablu
2011-09-16Renamed Map::DebugFlags enumeratorsThorbjørn Lindeijer1-5/+5
Their name is a bit more clear with DEBUG prefix rather than MAP prefix. They're already scoped in the Map class anyway. MAP_NORMAL was changed to DEBUG_NONE to represent no debug flags. Acked-by: Bertram
2011-08-30Made the popup-menu work again for equip/unequip processes.Yohann Ferreira1-2/+2
I disabled the drop from equipment window since it was more simple to implement, and because it seemed useless or even bad for the user experience to me.
2011-06-17First pass on removing tile hard coded values.Yohann Ferreira1-1/+2
Every files has been checked against the hard coded 32 values except the map.cpp file. I also added convenience functions in the Game class, centralized the default item icon size, and removed two unused defines in being.cpp.
2011-05-25Refining switches in the debug viewStefan Dombrowski1-63/+68
Reviewed-by: Bjorn
2011-05-20Removing KEY_PATHFIND and moving its function into the debug windowStefan Dombrowski1-7/+3
* The f-key is no longer used. That means new players are less likely to get into trouble by accidentally activating the debug mode. * The debug mode can now be activated in a new tab in the debug window. * The main advantage of using a gui is its extensibility. At the moment the debug mode does show too much information at once. In a follow-up patch the user should get more choices. Reviewed-by: Bjorn
2011-05-04Made the client show much more path debug information.Yohann Ferreira1-31/+68
First of all, the mouse path is only computed when necessary, This will save a bit of CPU when in debug view. Secondly, every being paths, collision radius, and position are graphically represented now. This will help code and content developers when checking their sprite offsets. Reviewed-by: CodyMartin.
2011-04-26Made the client use a unique kind of movement code.Yohann Ferreira1-78/+56
This is fixng many issues and (hopefully) will make the movement rendering much smoother. Merge branch 'master' of gitorious.org:~bertram/mana/mana-movement-code-merge Conflicts: src/being.cpp src/net/manaserv/beinghandler.cpp Resolves: TMW-Mantis #946. Reviewed-by: Thorbjorn.
2011-04-09Removed the Mana namespaceThorbjørn Lindeijer1-7/+7
It's just an annoyance when it's only applied to a few classes. Either we place everything in this namespace or nothing, and at the moment I don't see any rationale for placing everything in a Mana namespace. Acked-by: Jared Adams
2011-04-09Moved Channels to Mana::Event::ChannelThorbjørn Lindeijer1-5/+5
Acked-by: Jared Adams
2011-04-09Moved Events to Mana::Event::TypeThorbjørn Lindeijer1-2/+3
Acked-by: Jared Adams
2011-03-17Now the client centers the pixel positions when using tA.Yohann Ferreira1-6/+33
I made it so that the behaviour can be changed with only a boolean setting in the playerhandler.
2011-03-15Implemented a screen shake effect system in the viewport class.Philipp Sehmisch1-1/+37
The screen can either be "nudged" in a random direction with a specific intensity or you can define an exact x and y intensity, decay factor and duration. On a tmwAthena server an effect is triggered when the player character dies. A method for stopping all shake effects is also implemented, but not used yet. I added a netcode message for Manaserv to trigger an effect server-sided. Because our protocol has currently no way to transport floating point values, the decay is transported as a fixed point value with 4 decimals which is entirely sufficient for this purpose.
2011-03-15Basically merged the two movement algorithms into one.Yohann Ferreira1-84/+35
This was made in favour of the manaserv way of doing things. I also added a way to keep the original server speed value so the pixel value can be recomputed at each map change, as this was necessary since the speed is given before the first map is loaded. The code is much more simpler now about movement handling, and we can already see improvements on other characters movements in The Mana World with this. Everything can't be perfect the first time; here are bugs identified so far: - Monsters direction isn't updated on TmwAthena for obscure reasons. - Remote players walking animation is sometimes reset on each steps. - When changing map, the local player sometimes walks randomly until the player reacts. Stay tuned!
2010-11-13Replace config listeners with the event systemChuck Miller1-9/+11
Reviewed-by: Jared Adams
2010-11-11Replace Event names with enums instead of stringsChuck Miller1-1/+1
2010-11-11Have the event system channels use enums instead of stringsChuck Miller1-3/+3
Reviewed-by: Freeyorp
2010-11-07Convert the emote system to use particlesChuck Miller1-1/+0
Reviewed-by: Jared Adams
2010-11-01Merge branch '0.5' of gitorious.org:mana/manaYohann Ferreira1-4/+14
Conflicts: src/being.cpp src/client.cpp src/commandhandler.cpp src/gui/setup_video.cpp src/gui/socialwindow.cpp src/gui/viewport.cpp src/gui/widgets/browserbox.cpp src/gui/widgets/itemcontainer.cpp src/imageparticle.cpp src/localplayer.cpp src/localplayer.h src/map.cpp src/net/tmwa/beinghandler.cpp src/particle.cpp src/particle.h src/player.cpp src/player.h
2010-10-08Remove the following systemStefan Dombrowski1-1/+0
Removed due to unresolved social issues. In master it had been already removed by Kage in commit 89f192b9039f9c000515f0a12f4bb9fb55c4691c.
2010-10-06Fixing movement with the mouseStefan Dombrowski1-4/+2
When a player clicked on a tile in order to go to it, then he went to the wrong tile. Trivial fix.
2010-10-04Remove the following systemChuck Miller1-1/+0
The implamentation is poor, and this is something that would be better handled by the addon engine later down the road. Reviewed-By: Freeyorp < Freeyorp101@hotmail.com >
2010-10-03Fixing segmentation fault and updating the cursor type after mouse pressStefan Dombrowski1-0/+13
Until now the being was only set after a mouse move. If the mouse was pressed after the being was out of sight or dead, then a segmentation fault happened. Furthermore, pressing the mouse now updates the cursor type and sets the being popup invisible. Reviewed-by: Thorbjorn