Age | Commit message (Collapse) | Author | Files | Lines |
|
The only use of ImageSprite was for FloorItem instances, which now just
draw the item icon in FloorItem::draw.
This leaves only one Sprite subclass, AnimatedSprite, which means we can
remove the entire virtual Sprite interface.
|
|
Emotes just need an image to be represented in the UI, so we don't need
to use ImageSprite.
|
|
AnimatedSprite works with delta time since 7de0b165f196cb0c1f983b6d2a.
Adjusted some parameter names for clarity.
Closes https://git.themanaworld.org/mana/mana/-/issues/94
|
|
* Wrapped remaining PhysFS API calls and set PHYSFS_DEPRECATED to
suppress deprecation warnings for PHYSFS_getUserDir, since no
alternative is available for now.
* Removed support for decompressing .gz files, since it has been unused
for years and doesn't seem useful when updates are anyway served in an
archive.
* Use SDL_LoadFile and SDL_LoadFile_RW convenience functions (raises
minimum SDL version to 2.0.10).
* Removed ResourceManager::copyFile, since it was unused and will likely
stay unused.
* Removed ResourceManager::loadTextFile. Instead, split up the string in
BrowserBox::addRows without making additional copies.
|
|
* Most direct PhysFS calls now contained within a single header file.
* File class that automatically closes.
* Files class allows iterating files with range-based for.
* Use std::optional to force error handling where applicable.
|
|
This appears to have been a regression in
f405849b49614254f42eb3ee6147434458978623, which for some reason erased
the port (and any trailing parts) from not just the update directory but
also from the update URL.
Unfortunately we can't access Mana-Mantis #381 at the moment, but
presumably the port was removed due to the colon being a problematic
character. Instead, now the colon (and other special characters) are
replaced by _ when determining the update directory.
Closes https://git.themanaworld.org/mana/mana/-/issues/80
|
|
Thanks to https://github.com/cgmb/guardonce and a follow-up replace to
remove duplicated newlines at end of file:
find src -type f -name '*.h' -exec \
sed --in-place -e :a -e '/^\n*$/{$d;N;};/\n$/ba' {} \;
Source: https://unix.stackexchange.com/questions/81685/how-to-remove-multiple-newlines-at-eof
Fixes compile on macOS, which appears to have been due to the EVENT_H
include guard.
|
|
No need to wait for Apply for this option.
Using `ConfigOptionChanged` event rather than direct call into
`ActorSpriteManager::updatePlayerNames`.
|
|
With the statically typed config we no longer get an event for each
changed config value. Where relevant, this is now done through
`setConfigValue`.
The `Event` now uses a `std::any`, which for `ConfigOptionChanged`
events is set to the changed `Config` member. This allows for a
type-safe check on which config value was changed.
|
|
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.
|
|
Slightly more ergonomic and this eliminates direct libxml2 usage from
many places.
|
|
Less code to achieve the same thing (strong type and namespaced values).
The permissions related values have been moved to a PlayerPermissions
struct, which is also a bit less confusing.
|
|
Previous implementation was O(n^2), doing lots of work (saving file and
updating UI) for each removed player.
|
|
* Don't use `PlayerRelation*` in `mRelations`, but just store the value.
* Pass `std::vector<PlayerIgnoreStrategy *>` by reference instead of
pointer.
* Return player list in `PlayerRelationsManager::getPlayers` by value
instead of pointer.
Overall these changes simplify the code, making it less prone to errors.
|
|
There were some inconsistencies between the values set up in
`Client::initConfiguration` and those in `getConfigDefaults`. These
duplicates have now been removed.
For some of these settings the code getting the values had to be
adjusted to use getBoolValue, to actually rely on the provided default
instead of one provided as a parameter.
|
|
Seems to be no point in using a macro here.
|
|
Mostly adjustments based on feedback from the Finnish translator.
|
|
The Shortcuts window could no longer be moved since adding support for
resizing windows at the top edge. Now there is again a bit of space
where the window can be grabbed.
Included some related cleanups.
|
|
Fixed with clang-tidy `readability-static-accessed-through-instance`
check.
|
|
|
|
Based on MV commit db452921bafb2dd322b52c1e5d03e5e713849dd0.
|
|
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.
|
|
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.
|
|
The logic update now uses Time::deltaTimeMs() where needed to make it
framerate-independent. This means there will no longer be multiple logic
calls per frame (as was usually the case with logic ticking at 100 fps
whereas the game would generally run at 60 fps).
At the same time, the game can be more precise at higher framerates and
should now run smoother at 144 Hz, for example. Previously the game would
sometimes skip logic ticks at that rate.
This change affects:
* Updating of animations
* Being movement speed
* More moving of manual time variables to Timer
Notoriously, the particle system still does 100 ticks/second.
|
|
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.
|
|
Maybe it once had a use, but a change in the "Show own name" setting is
already handled by LocalPlayer::event.
|
|
Because "xmlChildrenNode" is a macro defined for compatibility with
libxml1, which we don't support.
|
|
Made the class and the code in general more readable by removing all
the needless getters and setters.
|
|
The new XML::Children class enables using a C++11 range-based for loop
to iterate over the children of an xmlNodePtr.
|
|
InputEvent::mIsConsumed is used to tell the Window it should not change
the mouse cursor as well.
This change also adds a closed hand mouse cursor, though this is unused
for now (might be useful when dragging stuff around).
The new cursors are by meway.
|
|
And removed the manual space character at the start of each line...
|
|
This was already done in the log, when responding to the --version
parameter and for the label on the Desktop widget, but not in the Setup
window. Now it is consistently part of the FULL_VERSION define.
|
|
This was already the case for each newly added line, but when the entire
layout was redone previous selected colors would spill over to the next
line.
|
|
* Apply indentation after wrapping only in NPC dialogs and chat window,
since we don't want this in the updater window / news.
* Added some margin around the text in the updater window and NPC
dialogs, using gcn::Widget::setFrameSize.
* Cosmetic changes to BrowserBox implementation.
|
|
If a text contained for example "##3##B", expected behavior was to
switch to blue color and bold font. Instead, due to there being no
actual text in between the markers, the layouting code was aborting
prematurely here:
if (mMode == AUTO_WRAP && partWidth == 0)
break;
As far as I could judge, this check is actually not necessary anyway,
but I've kept it for now since the wrapping code looks so problematic.
Instead, a while loop now makes sure we process all consecutive
formatting markers.
Closes #75
|
|
(cherry picked from M+ commit 13b9ff5baf1f6d31cc6bfa5bd30bacd45b80539c)
|
|
For new characters (and in general, when logging in with a character
that had nothing equipped), the equipment backend wasn't being
initialized. This resulted in the equipment not being visible in the
Equipment window.
Fixes #83
|
|
|
|
Nobody cared for the events that were emitted when NPC related network
messages had been sent.
|
|
|
|
Less code duplication.
|
|
The online list refreshes every 18 seconds, which matches ManaVerse
behavior. It's not ideal, but to improve this would mean diving into
TMWA.
The client version was bumped to 8 to get a SMSG_ONLINE_LIST reply.
Further changes needed related to the client version are tracked by #71.
This also changes the TabbedArea to take into account the frame size for
its tab widgets, to make sure those frames are not clipped by the
TabbedArea widget (as happened in the Social window).
The horizontal scroll bar is now disabled in all social tabs, with the
vertical one appearing only when necessary.
Closes #61
|
|
This reverts part of 087babc2525ddb89e5b31f240a08739d9a3029a9.
It's unclear to me why big words should be split (chat window
force-wraps when necessary anyway) and it's causing issues by adding
spaces in the middle of links, for example.
|
|
(cherry picked from commit 0192d44d46dcf948ab26371862753f4baf5aae4e)
|
|
Use BrowserBox in NpcDialog to enable the use of text formatting and
links in NPC texts.
This change is roughly based on ManaPlus commit
94f11a223e03c6845e7ce6e9fe67c0e9fa7061f4.
|
|
##B switches font to bold, ##b switches font to normal. Each line starts
with the normal font.
This change is roughly based on ManaPlus commit
6c4c6ca877c336e17c0378131a0a139792012a99.
|
|
Previously, the top edge of windows could not be dragged. Now you can also
resize windows by their top edge, as well as the top-left and top-right
corners.
|
|
Normally the popup follows the mouse, but when the mouse is moved down
such that it is on top of the popup, the popup would seem to get stuck.
When the BeingPopup is a mouse listener, the default behavior of Popup
hiding the BeingPopup when the mouse moves over them kicks in.
Hiding of the BeingPopup by Popup and Window when they are hovered in
general is a workaround which might be necessary because there is
currently no way for the Viewport to determine whether the mouse is
above the map view or over a piece of UI.
|
|
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.
|
|
It appears that either SDL or the system is already taking care of
scaling the cursor to the display scale (observed on both macOS and
Wayland). Hence, we should only scale the cursor by the user scale and
not by both.
Follow-up to 6eca1b485dba7355d827745284ed2f0072f9e370.
|