From 36e1bdab1053bd2dd3ca8a46c98795afe0091600 Mon Sep 17 00:00:00 2001 From: Mads Buvik Sandvei Date: Sat, 27 Jan 2024 18:57:51 +0100 Subject: [PATCH] Use a smaller integer type instead of dealing with casting issues. --- apps/openmw/mwbase/luamanager.hpp | 2 +- apps/openmw/mwbase/mechanicsmanager.hpp | 6 ++--- apps/openmw/mwlua/animationbindings.cpp | 4 +-- apps/openmw/mwlua/luamanagerimp.cpp | 2 +- apps/openmw/mwlua/luamanagerimp.hpp | 3 ++- apps/openmw/mwmechanics/actors.cpp | 4 +-- apps/openmw/mwmechanics/actors.hpp | 6 ++--- apps/openmw/mwmechanics/character.cpp | 25 ++++++++++--------- apps/openmw/mwmechanics/character.hpp | 6 ++--- .../mwmechanics/mechanicsmanagerimp.cpp | 4 +-- .../mwmechanics/mechanicsmanagerimp.hpp | 6 ++--- apps/openmw/mwmechanics/objects.cpp | 6 ++--- apps/openmw/mwmechanics/objects.hpp | 4 +-- apps/openmw/mwrender/animation.cpp | 2 +- apps/openmw/mwrender/animation.hpp | 4 +-- apps/openmw/mwscript/animationextensions.cpp | 2 +- 16 files changed, 44 insertions(+), 42 deletions(-) diff --git a/apps/openmw/mwbase/luamanager.hpp b/apps/openmw/mwbase/luamanager.hpp index 0503fcec9e..57886d5399 100644 --- a/apps/openmw/mwbase/luamanager.hpp +++ b/apps/openmw/mwbase/luamanager.hpp @@ -64,7 +64,7 @@ namespace MWBase virtual void animationTextKey(const MWWorld::Ptr& actor, const std::string& key) = 0; virtual void playAnimation(const MWWorld::Ptr& object, const std::string& groupname, const MWRender::AnimPriority& priority, int blendMask, bool autodisable, float speedmult, - std::string_view start, std::string_view stop, float startpoint, size_t loops, bool loopfallback) + std::string_view start, std::string_view stop, float startpoint, uint32_t loops, bool loopfallback) = 0; virtual void exteriorCreated(MWWorld::CellStore& cell) = 0; virtual void actorDied(const MWWorld::Ptr& actor) = 0; diff --git a/apps/openmw/mwbase/mechanicsmanager.hpp b/apps/openmw/mwbase/mechanicsmanager.hpp index 532100af7a..d7e377a0eb 100644 --- a/apps/openmw/mwbase/mechanicsmanager.hpp +++ b/apps/openmw/mwbase/mechanicsmanager.hpp @@ -171,7 +171,7 @@ namespace MWBase ///< Forces an object to refresh its animation state. virtual bool playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number = 1, bool scripted = false) + const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number = 1, bool scripted = false) = 0; ///< Run animation for a MW-reference. Calls to this function for references that are currently not /// in the scene should be ignored. @@ -180,8 +180,8 @@ namespace MWBase /// \param number How many times the animation should be run /// \param scripted Whether the animation should be treated as a scripted animation. /// \return Success or error - virtual bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, float speed, - std::string_view startKey, std::string_view stopKey, bool forceLoop) + virtual bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, + float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop) = 0; ///< Lua variant of playAnimationGroup. The mode parameter is omitted /// and forced to 0. modes 1 and 2 can be emulated by doing clearAnimationQueue() and diff --git a/apps/openmw/mwlua/animationbindings.cpp b/apps/openmw/mwlua/animationbindings.cpp index 272685dc11..ecd1e96dbb 100644 --- a/apps/openmw/mwlua/animationbindings.cpp +++ b/apps/openmw/mwlua/animationbindings.cpp @@ -249,7 +249,7 @@ namespace MWLua // Extended variant of MWScript's PlayGroup and LoopGroup api["playQueued"] = sol::overload( [mechanics](const sol::object& object, const std::string& groupname, const sol::table& options) { - int numberOfLoops = options.get_or("loops", std::numeric_limits::max()); + uint32_t numberOfLoops = options.get_or("loops", std::numeric_limits::max()); float speed = options.get_or("speed", 1.f); std::string startKey = options.get_or("startkey", "start"); std::string stopKey = options.get_or("stopkey", "stop"); @@ -265,7 +265,7 @@ namespace MWLua }); api["playBlended"] = [](const sol::object& object, std::string_view groupname, const sol::table& options) { - int loops = options.get_or("loops", 0); + uint32_t loops = options.get_or("loops", 0u); MWRender::Animation::AnimPriority priority = getPriorityArgument(options); BlendMask blendMask = options.get_or("blendmask", BlendMask::BlendMask_All); bool autoDisable = options.get_or("autodisable", true); diff --git a/apps/openmw/mwlua/luamanagerimp.cpp b/apps/openmw/mwlua/luamanagerimp.cpp index 89402a6008..ac5ae60f7d 100644 --- a/apps/openmw/mwlua/luamanagerimp.cpp +++ b/apps/openmw/mwlua/luamanagerimp.cpp @@ -373,7 +373,7 @@ namespace MWLua void LuaManager::playAnimation(const MWWorld::Ptr& actor, const std::string& groupname, const MWRender::AnimPriority& priority, int blendMask, bool autodisable, float speedmult, - std::string_view start, std::string_view stop, float startpoint, size_t loops, bool loopfallback) + std::string_view start, std::string_view stop, float startpoint, uint32_t loops, bool loopfallback) { sol::table options = mLua.newTable(); options["blendmask"] = blendMask; diff --git a/apps/openmw/mwlua/luamanagerimp.hpp b/apps/openmw/mwlua/luamanagerimp.hpp index 7556abad5d..a539d04348 100644 --- a/apps/openmw/mwlua/luamanagerimp.hpp +++ b/apps/openmw/mwlua/luamanagerimp.hpp @@ -82,7 +82,8 @@ namespace MWLua void animationTextKey(const MWWorld::Ptr& actor, const std::string& key) override; void playAnimation(const MWWorld::Ptr& actor, const std::string& groupname, const MWRender::AnimPriority& priority, int blendMask, bool autodisable, float speedmult, - std::string_view start, std::string_view stop, float startpoint, size_t loops, bool loopfallback) override; + std::string_view start, std::string_view stop, float startpoint, uint32_t loops, + bool loopfallback) override; void exteriorCreated(MWWorld::CellStore& cell) override { mEngineEvents.addToQueue(EngineEvents::OnNewExterior{ cell }); diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 92f8a212c9..a4e7168b0f 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -2005,7 +2005,7 @@ namespace MWMechanics } bool Actors::playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number, bool scripted) const + const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number, bool scripted) const { const auto iter = mIndex.find(ptr.mRef); if (iter != mIndex.end()) @@ -2020,7 +2020,7 @@ namespace MWMechanics } } - bool Actors::playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, float speed, + bool Actors::playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop) { const auto iter = mIndex.find(ptr.mRef); diff --git a/apps/openmw/mwmechanics/actors.hpp b/apps/openmw/mwmechanics/actors.hpp index 3ead5f069a..fe9f37511a 100644 --- a/apps/openmw/mwmechanics/actors.hpp +++ b/apps/openmw/mwmechanics/actors.hpp @@ -112,9 +112,9 @@ namespace MWMechanics void forceStateUpdate(const MWWorld::Ptr& ptr) const; - bool playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number, bool scripted = false) const; - bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, float speed, + bool playAnimationGroup(const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number, + bool scripted = false) const; + bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop); void enableLuaAnimations(const MWWorld::Ptr& ptr, bool enable); void skipAnimation(const MWWorld::Ptr& ptr) const; diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 5533cb578b..08a476631c 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -483,7 +483,8 @@ namespace MWMechanics return; } - playBlendedAnimation(mCurrentHit, priority, MWRender::BlendMask_All, true, 1, startKey, stopKey, 0.0f, ~0ul); + playBlendedAnimation(mCurrentHit, priority, MWRender::BlendMask_All, true, 1, startKey, stopKey, 0.0f, + std::numeric_limits::max()); } void CharacterController::refreshJumpAnims(JumpingState jump, bool force) @@ -521,7 +522,7 @@ namespace MWMechanics mCurrentJump = jumpAnimName; if (mJumpState == JumpState_InAir) playBlendedAnimation(jumpAnimName, Priority_Jump, jumpmask, false, 1.0f, - startAtLoop ? "loop start" : "start", "stop", 0.f, ~0ul); + startAtLoop ? "loop start" : "start", "stop", 0.f, std::numeric_limits::max()); else if (mJumpState == JumpState_Landing) playBlendedAnimation(jumpAnimName, Priority_Jump, jumpmask, true, 1.0f, "loop stop", "stop", 0.0f, 0); } @@ -749,8 +750,8 @@ namespace MWMechanics } } - playBlendedAnimation( - mCurrentMovement, Priority_Movement, movemask, false, 1.f, "start", "stop", startpoint, ~0ul, true); + playBlendedAnimation(mCurrentMovement, Priority_Movement, movemask, false, 1.f, "start", "stop", startpoint, + std::numeric_limits::max(), true); } void CharacterController::refreshIdleAnims(CharacterState idle, bool force) @@ -778,7 +779,7 @@ namespace MWMechanics } MWRender::Animation::AnimPriority priority = getIdlePriority(mIdleState); - size_t numLoops = std::numeric_limits::max(); + size_t numLoops = std::numeric_limits::max(); // Only play "idleswim" or "idlesneak" if they exist. Otherwise, fallback to // "idle"+weapon or "idle". @@ -1192,8 +1193,8 @@ namespace MWMechanics if (!animPlaying) { int mask = MWRender::BlendMask_Torso | MWRender::BlendMask_RightArm; - playBlendedAnimation( - "idlestorm", Priority_Storm, mask, true, 1.0f, "start", "stop", 0.0f, ~0ul, true); + playBlendedAnimation("idlestorm", Priority_Storm, mask, true, 1.0f, "start", "stop", 0.0f, + std::numeric_limits::max(), true); } else { @@ -1326,7 +1327,7 @@ namespace MWMechanics mAnimation->disable("shield"); playBlendedAnimation("torch", Priority_Torch, MWRender::BlendMask_LeftArm, false, 1.0f, "start", "stop", - 0.0f, std::numeric_limits::max(), true); + 0.0f, std::numeric_limits::max(), true); } else if (mAnimation->isPlaying("torch")) { @@ -2548,7 +2549,7 @@ namespace MWMechanics groupname, priority, blendMask, autodisable, speedmult, start, stop, startpoint, loops, loopfallback); } - bool CharacterController::playGroup(std::string_view groupname, int mode, int count, bool scripted) + bool CharacterController::playGroup(std::string_view groupname, int mode, uint32_t count, bool scripted) { if (!mAnimation || !mAnimation->hasAnimation(groupname)) return false; @@ -2585,7 +2586,7 @@ namespace MWMechanics // exactly x times, while non-actors will loop x+1 instead. if (mPtr.getClass().isActor()) count--; - count = std::max(count, 0); + count = std::max(count, 0u); AnimationQueueEntry entry; entry.mGroup = groupname; @@ -2620,7 +2621,7 @@ namespace MWMechanics } bool CharacterController::playGroupLua(std::string_view groupname, float speed, std::string_view startKey, - std::string_view stopKey, int loops, bool forceLoop) + std::string_view stopKey, uint32_t loops, bool forceLoop) { // Note: In mwscript, "idle" is a special case used to clear the anim queue. // In lua we offer an explicit clear method instead so this method does not treat "idle" special. @@ -2632,7 +2633,7 @@ namespace MWMechanics entry.mGroup = groupname; // Note: MWScript gives one less loop to actors than non-actors. // But this is the Lua version. We don't need to reproduce this weirdness here. - entry.mLoopCount = std::max(loops, 0); + entry.mLoopCount = std::max(loops, 0u); entry.mStartKey = startKey; entry.mStopKey = stopKey; entry.mLooping = mAnimation->isLoopingAnimation(groupname) || forceLoop; diff --git a/apps/openmw/mwmechanics/character.hpp b/apps/openmw/mwmechanics/character.hpp index a507c73743..7146baeb0e 100644 --- a/apps/openmw/mwmechanics/character.hpp +++ b/apps/openmw/mwmechanics/character.hpp @@ -134,7 +134,7 @@ namespace MWMechanics struct AnimationQueueEntry { std::string mGroup; - size_t mLoopCount; + uint32_t mLoopCount; float mTime; bool mLooping; bool mScripted; @@ -277,9 +277,9 @@ namespace MWMechanics void playBlendedAnimation(const std::string& groupname, const MWRender::AnimPriority& priority, int blendMask, bool autodisable, float speedmult, std::string_view start, std::string_view stop, float startpoint, size_t loops, bool loopfallback = false) const; - bool playGroup(std::string_view groupname, int mode, int count, bool scripted = false); + bool playGroup(std::string_view groupname, int mode, uint32_t count, bool scripted = false); bool playGroupLua(std::string_view groupname, float speed, std::string_view startKey, std::string_view stopKey, - int loops, bool forceLoop); + uint32_t loops, bool forceLoop); void enableLuaAnimations(bool enable); void skipAnim(); bool isAnimPlaying(std::string_view groupName) const; diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp index 5323f7e65c..9fd1b3ff8d 100644 --- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp +++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp @@ -749,14 +749,14 @@ namespace MWMechanics } bool MechanicsManager::playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number, bool scripted) + const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number, bool scripted) { if (ptr.getClass().isActor()) return mActors.playAnimationGroup(ptr, groupName, mode, number, scripted); else return mObjects.playAnimationGroup(ptr, groupName, mode, number, scripted); } - bool MechanicsManager::playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, + bool MechanicsManager::playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop) { if (ptr.getClass().isActor()) diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp index 93c1fa3dc2..029d974ac2 100644 --- a/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp +++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.hpp @@ -141,9 +141,9 @@ namespace MWMechanics /// Attempt to play an animation group /// @return Success or error - bool playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number, bool scripted = false) override; - bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, float speed, + bool playAnimationGroup(const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number, + bool scripted = false) override; + bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop) override; void enableLuaAnimations(const MWWorld::Ptr& ptr, bool enable) override; void skipAnimation(const MWWorld::Ptr& ptr) override; diff --git a/apps/openmw/mwmechanics/objects.cpp b/apps/openmw/mwmechanics/objects.cpp index 32d484df2f..12d342666b 100644 --- a/apps/openmw/mwmechanics/objects.cpp +++ b/apps/openmw/mwmechanics/objects.cpp @@ -99,7 +99,7 @@ namespace MWMechanics } bool Objects::playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number, bool scripted) + const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number, bool scripted) { const auto iter = mIndex.find(ptr.mRef); if (iter != mIndex.end()) @@ -114,8 +114,8 @@ namespace MWMechanics } } - bool Objects::playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, float speed, - std::string_view startKey, std::string_view stopKey, bool forceLoop) + bool Objects::playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, + float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop) { const auto iter = mIndex.find(ptr.mRef); if (iter != mIndex.end()) diff --git a/apps/openmw/mwmechanics/objects.hpp b/apps/openmw/mwmechanics/objects.hpp index 1fe43530b0..31c2768b1b 100644 --- a/apps/openmw/mwmechanics/objects.hpp +++ b/apps/openmw/mwmechanics/objects.hpp @@ -46,8 +46,8 @@ namespace MWMechanics void onClose(const MWWorld::Ptr& ptr); bool playAnimationGroup( - const MWWorld::Ptr& ptr, std::string_view groupName, int mode, int number, bool scripted = false); - bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, int loops, float speed, + const MWWorld::Ptr& ptr, std::string_view groupName, int mode, uint32_t number, bool scripted = false); + bool playAnimationGroupLua(const MWWorld::Ptr& ptr, std::string_view groupName, uint32_t loops, float speed, std::string_view startKey, std::string_view stopKey, bool forceLoop); void enableLuaAnimations(const MWWorld::Ptr& ptr, bool enable); void skipAnimation(const MWWorld::Ptr& ptr); diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index 581d2843ab..9cdbb19a98 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -805,7 +805,7 @@ namespace MWRender } void Animation::play(std::string_view groupname, const AnimPriority& priority, int blendMask, bool autodisable, - float speedmult, std::string_view start, std::string_view stop, float startpoint, size_t loops, + float speedmult, std::string_view start, std::string_view stop, float startpoint, uint32_t loops, bool loopfallback) { if (!mObjectRoot || mAnimSources.empty()) diff --git a/apps/openmw/mwrender/animation.hpp b/apps/openmw/mwrender/animation.hpp index dae81592b3..a2226a3054 100644 --- a/apps/openmw/mwrender/animation.hpp +++ b/apps/openmw/mwrender/animation.hpp @@ -153,7 +153,7 @@ namespace MWRender bool mPlaying; bool mLoopingEnabled; - size_t mLoopCount; + uint32_t mLoopCount; AnimPriority mPriority; int mBlendMask; @@ -379,7 +379,7 @@ namespace MWRender * the "start" and "stop" keys for looping? */ void play(std::string_view groupname, const AnimPriority& priority, int blendMask, bool autodisable, - float speedmult, std::string_view start, std::string_view stop, float startpoint, size_t loops, + float speedmult, std::string_view start, std::string_view stop, float startpoint, uint32_t loops, bool loopfallback = false); /** Adjust the speed multiplier of an already playing animation. diff --git a/apps/openmw/mwscript/animationextensions.cpp b/apps/openmw/mwscript/animationextensions.cpp index 8d439ec82b..16c1f5a134 100644 --- a/apps/openmw/mwscript/animationextensions.cpp +++ b/apps/openmw/mwscript/animationextensions.cpp @@ -56,7 +56,7 @@ namespace MWScript } MWBase::Environment::get().getMechanicsManager()->playAnimationGroup( - ptr, group, mode, std::numeric_limits::max(), true); + ptr, group, mode, std::numeric_limits::max(), true); } };