summaryrefslogtreecommitdiff
path: root/src/actorsprite.h
AgeCommit message (Collapse)AuthorFilesLines
2025-02-26Use ResourceRef for all resource typesThorbjørn Lindeijer1-2/+1
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.
2025-02-25Replaced ParticleContainer with a ParticleHandleThorbjørn Lindeijer1-2/+2
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.
2025-02-21Made ActorSprite aggregate instead of subclass CompoundSpriteThorbjørn Lindeijer1-5/+7
Also, CompoundSprite itself no longer derives from Sprite. This simplifies the class hierarchies and avoids the compiler warning about Being::setDirection shadowing Sprite::setDirection.
2025-02-21Moved stun and status effect handling from ActorSprite to BeingThorbjørn Lindeijer1-60/+1
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.
2025-02-13Support changing being base typeThorbjørn Lindeijer1-1/+2
The GM command @class (alias @charclass) can be used by GMs to change their character class (also referred to as job, race, base or species). Changes of the class are now supported, even supporting switching between appearing as player, monster or NPC. Part of https://git.themanaworld.org/mana/mana/-/issues/92
2025-01-21Replaced include guards with #pragma onceThorbjørn Lindeijer1-4/+1
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.
2024-10-08Do a single logic update each frameThorbjørn Lindeijer1-2/+0
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.
2024-04-09Removed unused duplicate parsing of effects.xmlThorbjørn Lindeijer1-20/+0
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.
2024-02-13General code cleanupsThorbjørn Lindeijer1-4/+3
* 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 ""
2024-01-26Apply C++11 fixitsThorbjørn Lindeijer1-9/+9
modernize-use-auto modernize-use-nullptr modernize-use-override modernize-use-using
2012-02-12Fixes to actor drawing orderThorbjørn Lindeijer1-0/+2
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
2012-01-26Updated copyrights to 2012Thorbjørn Lindeijer1-1/+1
2011-10-23Fixed a certain class of Doxygen warningsThorbjørn Lindeijer1-1/+1
All cases of documentation for non-existing parameters are now fixed. Also marked a few getters as 'const', removed some superfluous 'inline' keywords and removed the unused 'forceQuantity' option from ItemContainer. Reviewed-by: Yohann Ferreira
2011-06-03Replace SDL_types.h with cstdintJared Adams1-4/+3
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>
2010-08-16Move more to the event systemJared Adams1-15/+0
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
2010-07-08Fix crash in picking up an item that no longer existsremoitnane1-0/+16
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
2010-06-13Merge remote branch '1.0/1.0'Jared Adams1-0/+2
Conflicts: data/graphics/CMakeLists.txt data/graphics/Makefile.am src/client.cpp
2010-06-10Merge BeingManager and FloorItemManager as ActorSpriteManagerJared Adams1-0/+6
No need for two different classes to manage ActorSprites. Reviewed-by: Chuck Miller
2010-05-09Move target cursor management into ActorSpriteJared Adams1-1/+33
This simplifies handling of target cursors, centralizing their logic into a single class, instead of two. Also make them more flexible and move the image files outside of the theme so servers can can control them and give them better names. Reviewed-by: Thorbjørn Lindeijer
2010-05-06Add support for floor item spritesJared Adams1-0/+192
This commit adds a sprite hierarchy (Sprite->ImageSprite,AnimatedSprite,CompundSprite; CompoundSprite,Actor->ActorSprite;ActorSprite->Being,FloorItem) to collect common functionailty into new base classes which will make other Mantis tickets easier to do. Also allows monsters to use particle effects. Reviewed-by: Bertram