Age | Commit message (Collapse) | Author | Files | Lines |
|
For historical reasons, sprites get a 16 pixel offset by default, which
is used to position them correctly on their tile.
When pixel-based movement was added, actors are now positioned on the
middle of a tile and the built-in offset was removed. Servers that use
sprites that do not rely on this offset can now set the spriteOffsetY
option to 0.
|
|
All ResourceManager functions that load resources now return respective
ResourceRef values, which helps to make sure resources are properly
cleaned up.
The Sound class was cleaned up and now also allows SoundEffect resources
to be unloaded.
The Animation class now keeps its ImageSet loaded only as long as
necessary. Previously, SimpleAnimation and ParticleEmitter would keep
the ImageSet loaded indefinitely by never decreasing its reference
count.
Reduced duplicated animation loading code between SimpleAnimation and
ParticleEmitter.
|
|
The main feature of the ParticleContainer seemed to be to provide
persistent access to particles, even though they are generally owned by
their parent particle. This allowed particles to be moved along with the
ActorSprite and to be killed explicitly when they were no longer wanted.
The ParticleHandle now takes care of disabling automatic deletion and of
killing the particle along with the handle. It allows the particle
references to be stored in whatever container is suitable, like a vector
for general ActorSprite particle effects, separate vectors for equipment
based particles and finally a map for status effect particles.
Moving the particles along with the ActorSprite does need to happen more
explicitly now, but overall it's a nice cleanup.
|
|
With AnimatedSprite being the only implementation of the Sprite
interface, there was no longer a point in separating these.
|
|
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.
|
|
Also, CompoundSprite itself no longer derives from Sprite.
This simplifies the class hierarchies and avoids the compiler warning
about Being::setDirection shadowing Sprite::setDirection.
|
|
Since this stuff is only relevant for Being instances and not for
FloorItem instances.
Also removed the virtual getWidth/getHeight from Actor, since they were
not actually used.
|
|
It was trying to call a virtual method for cleanup with the intention of
doing cleanup in its subclasses, but that doesn't work in a destructor.
Could simplify ActorSprite destructor as a result.
|
|
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.
|
|
The effect is also there when the equipment is dropped, because it uses
the same field as the floor item.
Removed unused ItemInfo::particle.
Based roughly on M+ commit 44e5d8bcb7fea443ca9ed3844454b11ac6e4dbed.
Closes #85
|
|
The loading of effects.xml has ended up being duplicated, with an
implementation in getEffectDescription in actorsprite.cpp as well as in
EffectManager. But the one in actorsprite.cpp was actually never used.
|
|
Rewrote the tile animation loading code based on XML tags, replacing
the code that loaded tile animations from tile properties.
Also made a number of code simplifications and optimizations:
* Replaced a number of pointer members with value members.
* Pass around Animation and TileAnimation by value, using std::move to
avoid allocating copies.
* push -> emplace
* push_front -> emplace_front
* push_back -> emplace_back
* Use range-based for loops
* Use std::vector instead of std::list for storing affected tiles
(less fragmentation)
* Avoid string copies and allocations while parsing CSV layer data.
* Replaced xmlNodeGetContent with directly accessing 'content'.
|
|
|
|
* Use default member initializers
* Use range-based loops
* Don't use 'else' after 'return'
* Removed some unused includes
* Construct empty strings with std::string() instead of ""
* Clear strings with .clear() instead of assigning ""
* Check whether strings are empty with .empty() instead of comparing to ""
* Removed redundant initializations
|
|
* Removing unused includes
* Use member initialization
* Use range-based for loops
* Use nullptr
* Removed no longer used aliases
* Use override
* Don't use else after return
* Use '= delete' to remove implicit members
* Use std::string::empty instead of comparing to ""
|
|
These checks are unnecessary as deleting a null pointer has no effect.
|
|
modernize-loop-convert
modernize-deprecated-headers
|
|
modernize-use-auto
modernize-use-nullptr
modernize-use-override
modernize-use-using
|
|
On the fringe layer, actors are drawn 'sorted' together with the tiles. When
the sorting order was separated from the actual Y position of the actor, the
tile drawing loop was not adapted to take this drawOrder into account rather
than the plain Y position.
Also, ActorSprite::draw was applying a half-tile offset to position the sprite
at the bottom while the logical position of the actor is at the center of the
tile. However, it failed to override getDrawOrder to account for this offset,
causing actors to get drawn earlier than they should (and thus being overlapped
by fringe layer tiles when they actually shouldn't).
This fixes drawing glitches with the paths around Hurnscald and reduces the
glitches when walking up/down through grass.
Reviewed-by: Erik Schilling
|
|
|
|
This happened when an NPC, monster or item couldn't be found and it had
to fall back on Being::Unknown. This instance was bugged since it had a
0 pointer in its sprites list, because when the Being::Unknown was
created, the SpriteDef::Empty was not initialized yet (since both were
global static variables, the initialization order was not well
defined).
Fixed it by removing SpriteDef::Empty and instead creating it in the
BeingInfo constructor. I've also changed the SpriteReference instances
to be inline values rather than instances on the heap, since they're
quite small. That also fixed a leak since those instances were never
getting deleted.
Reviewed-by: Yohann Ferreira
|
|
Replaced the switch statements with static lookup arrays.
Reviewed-by: Yohann Ferreira
|
|
Reviewed-by: Ablu
|
|
Conflicts:
src/actorsprite.cpp
|
|
This means that the order point of the sprites relative to the
particles is no longer the lowest point of the image but
instead a point which is approximately between the feet of
the characters.
The intent of the latest commits to treat sprites as perpendicular to the
ground instead of perpendicular to the view line is retained by this
approach.
I tested this with various particle effects and it results in exactly the
expected behavior. Note that this does NOT fix the current problems on TMW
with the snail slime effect, because the TMW content team accidently placed
this one 10px in the air. Sorry, garbage in, garbage out.
getDrawPixelY was re-renamed to getPixelY to be consistent with getPixelX,
while getPixelY was renamed to getDrawOrder, to make its purpose clear.
Further, particles are no longer drawn when behind other objects. This
is implemented by adding a drawnWhenBehind member function to Actor,
which currently returns true for everything except particles and compound-
sprites with more than one sub-sprites (the later case is consistent with
the previous behavior of them).
An exception are text particles which are excempt from this exception and
whose drawing order is also biased by 16 pixels south instead of north
to make them more visible.
Plus some minor changes from Bertram.
Reviewed-by: Bertram.
Resolves: Mana-Mantis #362.
|
|
Now the death animation is set to the minimum of 1.5 seconds
just as in the older versions, but permit longer sequences
as well.
I didn't put a maximum hard cap on it as it may be a burden
for the maintainers whatever the hard cap would be,
and as it isn't vital to set one anyway.
Resolves: Mana-Mantis #364.
Reviewed-by: bjorn, Jaxad0127.
|
|
Particles were being drawn with wrong positions due to their Z coordinate
being taken into account when sorting actors. Z is now only taken into account
when drawing them.
Reviewed-by: Bertram
|
|
This required moving to C++0x, so it does that too, and fixes a few errors with
that.
Reviewed-by: Thorbjørn Lindeijer <thorbjorn@lindeijer.nl>
|
|
Reviewed-by: Jaxad0127.
Resolves issue: #345.
|
|
Also fix position of being names.
Reviewed-by: Bertram
|
|
This, instead, of <being-effects>, which is irrelevant, as
effects aren't only used for beings.
|
|
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.
|
|
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
|
|
Acked-by: Jared Adams
|
|
Acked-by: Jared Adams
|
|
- Fixed bogus documentation.
- Fixed Vector parameters to const Vector& where releavant.
- Removed a false comment.
- Removed superfluous headers in src/net/tmwa/beinghandler.h.
- Optimize a bit the tmwa::beingHandler::getPixelsPerTickMoveSpeed()
function.
|
|
The code was simplified a bit, too.
|
|
Resolves: Mana-Mantis #265.
Trivial fix.
|
|
|
|
Reviewed-by: Freeyorp
|
|
Most of Net::InventoryHandler is now done through events. The
ActorSpriteManager was also replaced by events. A few odds and
ends were taken care of too.
Reviewed-by: Bertram
|
|
EventManager has been merged into Event, with some new convinience methods
added.
Reviewed-by: Chuck Miller
|
|
Reviewed-by: Yohann Ferreira
|
|
Reviewed-by: Freeyorp
|
|
Adds ActorSpriteListener to manage ActorSprite destruction as
recommended by Jaxad0127. This likewise includes the changes made by
Bertram.
Reviewed-by: Jaxad0127, Bertram.
Resolves: Manasource Mantis #160
|
|
Also it should optimize it a bit since it
only updates used target cursors instead of
all target cursors.
Reviewed-by: Freeyorp
|
|
Conflicts:
data/graphics/CMakeLists.txt
data/graphics/Makefile.am
src/client.cpp
|
|
It no longer crashes, but will write to the log file instead
Also added checks so it does not crash elsewhere when the
target cursors are unloaded
The game is still playable without the target cursor
because the display name of a being changes when it
gets targetted... so no need to be a fatel error.
Reviewed-by: Thorbjørn Lindeijer
|
|
This improves framerate and allows transparent overlay for complex
sprites. Two copies of the buffer are kept, one at full opacity,
one with variable opactiy, to reduce calls to setAlpha.
Reviewed-by: Bertram
|