From 1ead48c58b316b376e02d135a9a043201a72b41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Thu, 30 Oct 2025 17:34:45 +0100 Subject: [PATCH] Refactor: Remove obsolete `IAnimatedMeshSceneNode` interface (#16631) --- .../AnimatedMeshSceneNode.h} | 176 ++++++++++-------- irr/{src => include}/CBoneSceneNode.h | 0 irr/include/IAnimatedMeshSceneNode.h | 133 ------------- irr/include/IBoneSceneNode.h | 2 +- irr/include/IDummyTransformationSceneNode.h | 2 +- irr/include/ISceneManager.h | 4 +- irr/include/SkinnedMesh.h | 4 +- ...ceneNode.cpp => AnimatedMeshSceneNode.cpp} | 85 ++++----- irr/src/CMakeLists.txt | 3 +- irr/src/CNullDriver.cpp | 4 +- irr/src/CSceneManager.cpp | 8 +- irr/src/CSceneManager.h | 2 +- irr/src/SkinnedMesh.cpp | 4 - src/client/clientobject.h | 4 +- src/client/content_cao.cpp | 6 +- src/client/content_cao.h | 6 +- src/client/game.cpp | 4 +- src/client/game_internal.h | 4 +- src/client/mesh.cpp | 2 - src/gui/guiFormSpecMenu.cpp | 2 +- src/gui/guiScene.cpp | 4 +- src/gui/guiScene.h | 6 +- 22 files changed, 171 insertions(+), 294 deletions(-) rename irr/{src/CAnimatedMeshSceneNode.h => include/AnimatedMeshSceneNode.h} (66%) rename irr/{src => include}/CBoneSceneNode.h (100%) delete mode 100644 irr/include/IAnimatedMeshSceneNode.h rename irr/src/{CAnimatedMeshSceneNode.cpp => AnimatedMeshSceneNode.cpp} (88%) diff --git a/irr/src/CAnimatedMeshSceneNode.h b/irr/include/AnimatedMeshSceneNode.h similarity index 66% rename from irr/src/CAnimatedMeshSceneNode.h rename to irr/include/AnimatedMeshSceneNode.h index ee87db38b4..89235dc6eb 100644 --- a/irr/src/CAnimatedMeshSceneNode.h +++ b/irr/include/AnimatedMeshSceneNode.h @@ -5,7 +5,7 @@ #pragma once #include "CBoneSceneNode.h" -#include "IAnimatedMeshSceneNode.h" +#include "ISceneNode.h" #include "IAnimatedMesh.h" #include "SkinnedMesh.h" @@ -16,20 +16,17 @@ namespace scene { -class CAnimatedMeshSceneNode : public IAnimatedMeshSceneNode +class AnimatedMeshSceneNode : public ISceneNode { public: //! constructor - CAnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent, ISceneManager *mgr, s32 id, + AnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent, ISceneManager *mgr, s32 id, const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0), const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)); //! destructor - virtual ~CAnimatedMeshSceneNode(); - - //! sets the current frame. from now on the animation is played from this frame. - void setCurrentFrame(f32 frame) override; + virtual ~AnimatedMeshSceneNode(); //! frame void OnRegisterSceneNode() override; @@ -43,31 +40,6 @@ public: //! returns the axis aligned bounding box of this node const core::aabbox3d &getBoundingBox() const override; - //! sets the frames between the animation is looped. - //! the default is 0 - MaximalFrameCount of the mesh. - //! NOTE: setMesh will also change this value and set it to the full range of animations of the mesh - bool setFrameLoop(f32 begin, f32 end) override; - - //! Sets looping mode which is on by default. If set to false, - //! animations will not be looped. - void setLoopMode(bool playAnimationLooped) override; - - //! returns the current loop mode - bool getLoopMode() const override; - - void setOnAnimateCallback( - const std::function &cb) override - { - OnAnimateCallback = cb; - } - - //! sets the speed with which the animation is played - //! NOTE: setMesh will also change this value and set it to the default speed of the mesh - void setAnimationSpeed(f32 framesPerSecond) override; - - //! gets the speed with which the animation is played - f32 getAnimationSpeed() const override; - //! returns the material based on the zero based index i. To get the amount //! of materials used by this scene node, use getMaterialCount(). //! This function is needed for inserting the node into the scene hierarchy on a @@ -78,68 +50,112 @@ public: //! returns amount of materials used by this scene node. u32 getMaterialCount() const override; - //! Returns a pointer to a child node, which has the same transformation as - //! the corresponding joint, if the mesh in this scene node is a skinned mesh. - IBoneSceneNode *getJointNode(const c8 *jointName) override; - - //! same as getJointNode(const c8* jointName), but based on id - IBoneSceneNode *getJointNode(u32 jointID) override; - - //! Gets joint count. - u32 getJointCount() const override; - //! Removes a child from this scene node. //! Implemented here, to be able to remove the shadow properly, if there is one, //! or to remove attached child. bool removeChild(ISceneNode *child) override; - //! Returns the current displayed frame number. - f32 getFrameNr() const override; - //! Returns the current start frame number. - f32 getStartFrame() const override; - //! Returns the current end frame number. - f32 getEndFrame() const override; - - //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. - /* In this way it is possible to change the materials a mesh causing all mesh scene nodes - referencing this mesh to change too. */ - void setReadOnlyMaterials(bool readonly) override; - - //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style - bool isReadOnlyMaterials() const override; - - //! Sets a new mesh - void setMesh(IAnimatedMesh *mesh) override; - - //! Returns the current mesh - IAnimatedMesh *getMesh(void) override { return Mesh; } - //! Returns type of the scene node ESCENE_NODE_TYPE getType() const override { return ESNT_ANIMATED_MESH; } - //! updates the absolute position based on the relative and the parents position - void updateAbsolutePosition() override; - - //! Sets the transition time in seconds (note: This needs to enable joints) - //! you must call animateJoints(), or the mesh will not animate - void setTransitionTime(f32 Time) override; - - void updateJointSceneNodes(const std::vector &transforms); - - //! updates the joint positions of this mesh - void animateJoints() override; - - void addJoints(); - - //! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected) - void setRenderFromIdentity(bool On) override; - //! Creates a clone of this scene node and its children. /** \param newParent An optional new parent. \param newManager An optional new scene manager. \return The newly created clone of this node. */ ISceneNode *clone(ISceneNode *newParent = 0, ISceneManager *newManager = 0) override; + //! Sets the current frame number. + /** From now on the animation is played from this frame. + \param frame: Number of the frame to let the animation be started from. + The frame number must be a valid frame number of the IMesh used by this + scene node. Set IAnimatedMesh::getMesh() for details. */ + void setCurrentFrame(f32 frame); + + //! Sets the frame numbers between the animation is looped. + /** The default is 0 to getMaxFrameNumber() of the mesh. + Number of played frames is end-start. + It interpolates toward the last frame but stops when it is reached. + It does not interpolate back to start even when looping. + Looping animations should ensure last and first frame-key are identical. + \param begin: Start frame number of the loop. + \param end: End frame number of the loop. + \return True if successful, false if not. */ + //! NOTE: setMesh will also change this value and set it to the full range of animations of the mesh + bool setFrameLoop(f32 begin, f32 end); + + //! Sets looping mode which is on by default. If set to false, + //! animations will not be looped. + void setLoopMode(bool playAnimationLooped); + + //! returns the current loop mode + bool getLoopMode() const; + + //! Will be called right after the joints have been animated, + //! but before the transforms have been propagated recursively to children. + void setOnAnimateCallback( + const std::function &cb) + { + OnAnimateCallback = cb; + } + + //! Sets the speed with which the animation is played. + /** \param framesPerSecond: Frames per second played. */ + void setAnimationSpeed(f32 framesPerSecond); + + //! Gets the speed with which the animation is played. + /** \return Frames per second played. */ + f32 getAnimationSpeed() const; + + //! Returns a pointer to a child node (nullptr if not found), + //! which has the same transformation as + //! the corresponding joint, if the mesh in this scene node is a skinned mesh. + //! This can be used to attach children. + IBoneSceneNode *getJointNode(const c8 *jointName); + + //! same as getJointNode(const c8* jointName), but based on id + IBoneSceneNode *getJointNode(u32 jointID); + + //! Gets joint count. + u32 getJointCount() const; + + //! Returns the currently displayed frame number. + f32 getFrameNr() const; + //! Returns the current start frame number. + f32 getStartFrame() const; + //! Returns the current end frame number. + f32 getEndFrame() const; + + //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. + /* In this way it is possible to change the materials a mesh causing all mesh scene nodes + referencing this mesh to change too. */ + void setReadOnlyMaterials(bool readonly); + + //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style + bool isReadOnlyMaterials() const; + + //! Sets a new mesh + void setMesh(IAnimatedMesh *mesh); + + //! Returns the current mesh + IAnimatedMesh *getMesh(void) { return Mesh; } + + //! updates the absolute position based on the relative and the parents position + void updateAbsolutePosition() override; + + //! Sets the transition time in seconds (note: This needs to enable joints) + //! you must call animateJoints(), or the mesh will not animate + void setTransitionTime(f32 Time); + + void updateJointSceneNodes(const std::vector &transforms); + + //! Updates the joint positions of this mesh, taking into accoutn transitions + void animateJoints(); + + void addJoints(); + + //! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected) + void setRenderFromIdentity(bool On); + private: //! Get a static mesh for the current frame of this animated mesh IMesh *getMeshForCurrentFrame(); diff --git a/irr/src/CBoneSceneNode.h b/irr/include/CBoneSceneNode.h similarity index 100% rename from irr/src/CBoneSceneNode.h rename to irr/include/CBoneSceneNode.h diff --git a/irr/include/IAnimatedMeshSceneNode.h b/irr/include/IAnimatedMeshSceneNode.h deleted file mode 100644 index 908516d308..0000000000 --- a/irr/include/IAnimatedMeshSceneNode.h +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#pragma once - -#include "ISceneNode.h" -#include "IBoneSceneNode.h" -#include "IAnimatedMesh.h" - -namespace scene -{ -class IAnimatedMeshSceneNode; - -//! Scene node capable of displaying an animated mesh. -class IAnimatedMeshSceneNode : public ISceneNode -{ -public: - //! Constructor - IAnimatedMeshSceneNode(ISceneNode *parent, ISceneManager *mgr, s32 id, - const core::vector3df &position = core::vector3df(0, 0, 0), - const core::vector3df &rotation = core::vector3df(0, 0, 0), - const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f)) : - ISceneNode(parent, mgr, id, position, rotation, scale) {} - - //! Destructor - virtual ~IAnimatedMeshSceneNode() {} - - //! Sets the current frame number. - /** From now on the animation is played from this frame. - \param frame: Number of the frame to let the animation be started from. - The frame number must be a valid frame number of the IMesh used by this - scene node. Set IAnimatedMesh::getMesh() for details. */ - virtual void setCurrentFrame(f32 frame) = 0; - - //! Sets the frame numbers between the animation is looped. - /** The default is 0 to getMaxFrameNumber() of the mesh. - Number of played frames is end-start. - It interpolates toward the last frame but stops when it is reached. - It does not interpolate back to start even when looping. - Looping animations should ensure last and first frame-key are identical. - \param begin: Start frame number of the loop. - \param end: End frame number of the loop. - \return True if successful, false if not. */ - virtual bool setFrameLoop(f32 begin, f32 end) = 0; - - //! Sets the speed with which the animation is played. - /** \param framesPerSecond: Frames per second played. */ - virtual void setAnimationSpeed(f32 framesPerSecond) = 0; - - //! Gets the speed with which the animation is played. - /** \return Frames per second played. */ - virtual f32 getAnimationSpeed() const = 0; - - //! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh). - /** With this method it is possible to attach scene nodes to - joints for example possible to attach a weapon to the left hand - of an animated model. This example shows how: - \code - ISceneNode* hand = - yourAnimatedMeshSceneNode->getJointNode("LeftHand"); - hand->addChild(weaponSceneNode); - \endcode - Please note that the joint returned by this method may not exist - before this call and the joints in the node were created by it. - \param jointName: Name of the joint. - \return Pointer to the scene node which represents the joint - with the specified name. Returns 0 if the contained mesh is not - an skinned mesh or the name of the joint could not be found. */ - virtual IBoneSceneNode *getJointNode(const c8 *jointName) = 0; - - //! same as getJointNode(const c8* jointName), but based on id - virtual IBoneSceneNode *getJointNode(u32 jointID) = 0; - - //! Gets joint count. - /** \return Amount of joints in the mesh. */ - virtual u32 getJointCount() const = 0; - - //! Returns the currently displayed frame number. - virtual f32 getFrameNr() const = 0; - //! Returns the current start frame number. - virtual f32 getStartFrame() const = 0; - //! Returns the current end frame number. - virtual f32 getEndFrame() const = 0; - - //! Sets looping mode which is on by default. - /** If set to false, animations will not be played looped. */ - virtual void setLoopMode(bool playAnimationLooped) = 0; - - //! returns the current loop mode - /** When true the animations are played looped */ - virtual bool getLoopMode() const = 0; - - //! Will be called right after the joints have been animated, - //! but before the transforms have been propagated recursively to children. - virtual void setOnAnimateCallback( - const std::function &cb) = 0; - - //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. - /** In this way it is possible to change the materials a mesh - causing all mesh scene nodes referencing this mesh to change - too. */ - virtual void setReadOnlyMaterials(bool readonly) = 0; - - //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style - virtual bool isReadOnlyMaterials() const = 0; - - //! Sets a new mesh - virtual void setMesh(IAnimatedMesh *mesh) = 0; - - //! Returns the current mesh - virtual IAnimatedMesh *getMesh() = 0; - - //! Sets the transition time in seconds - /** Note: You must call animateJoints(), or the mesh will not animate. */ - virtual void setTransitionTime(f32 Time) = 0; - - //! animates the joints in the mesh based on the current frame. - /** Also takes in to account transitions. */ - virtual void animateJoints() = 0; - - //! render mesh ignoring its transformation. - /** Culling is unaffected. */ - virtual void setRenderFromIdentity(bool On) = 0; - - //! Creates a clone of this scene node and its children. - /** \param newParent An optional new parent. - \param newManager An optional new scene manager. - \return The newly created clone of this node. */ - virtual ISceneNode *clone(ISceneNode *newParent = 0, ISceneManager *newManager = 0) = 0; -}; - -} // end namespace scene diff --git a/irr/include/IBoneSceneNode.h b/irr/include/IBoneSceneNode.h index 6ead34636b..274bda6cbf 100644 --- a/irr/include/IBoneSceneNode.h +++ b/irr/include/IBoneSceneNode.h @@ -10,7 +10,7 @@ namespace scene { //! Interface for bones used for skeletal animation. -/** Used with SkinnedMesh and IAnimatedMeshSceneNode. */ +/** Used with SkinnedMesh and AnimatedMeshSceneNode. */ class IBoneSceneNode : public ISceneNode { public: diff --git a/irr/include/IDummyTransformationSceneNode.h b/irr/include/IDummyTransformationSceneNode.h index efe0eee0a1..4b1a03d6ee 100644 --- a/irr/include/IDummyTransformationSceneNode.h +++ b/irr/include/IDummyTransformationSceneNode.h @@ -14,7 +14,7 @@ namespace scene set/getRotation and set/getScale. Its just a simple scene node that takes a matrix as relative transformation, making it possible to insert any transformation anywhere into the scene graph. -This scene node is for example used by the IAnimatedMeshSceneNode for emulating +This scene node is for example used by the AnimatedMeshSceneNode for emulating joint scene nodes when playing skeletal animations. */ class IDummyTransformationSceneNode : public ISceneNode diff --git a/irr/include/ISceneManager.h b/irr/include/ISceneManager.h index c4fff3c6af..00e13795a8 100644 --- a/irr/include/ISceneManager.h +++ b/irr/include/ISceneManager.h @@ -71,7 +71,7 @@ enum E_SCENE_NODE_RENDER_PASS }; class IAnimatedMesh; -class IAnimatedMeshSceneNode; +class AnimatedMeshSceneNode; class IBillboardSceneNode; class ICameraSceneNode; class IDummyTransformationSceneNode; @@ -133,7 +133,7 @@ public: \param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed. \return Pointer to the created scene node. This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ - virtual IAnimatedMeshSceneNode *addAnimatedMeshSceneNode(IAnimatedMesh *mesh, + virtual AnimatedMeshSceneNode *addAnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent = 0, s32 id = -1, const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0), diff --git a/irr/include/SkinnedMesh.h b/irr/include/SkinnedMesh.h index c09f18413c..91ecda7212 100644 --- a/irr/include/SkinnedMesh.h +++ b/irr/include/SkinnedMesh.h @@ -24,7 +24,7 @@ namespace scene { -class IAnimatedMeshSceneNode; +class AnimatedMeshSceneNode; class IBoneSceneNode; class ISceneManager; @@ -151,7 +151,7 @@ public: //! Creates an array of joints from this mesh as children of node std::vector addJoints( - IAnimatedMeshSceneNode *node, ISceneManager *smgr); + AnimatedMeshSceneNode *node, ISceneManager *smgr); //! A vertex weight struct SWeight diff --git a/irr/src/CAnimatedMeshSceneNode.cpp b/irr/src/AnimatedMeshSceneNode.cpp similarity index 88% rename from irr/src/CAnimatedMeshSceneNode.cpp rename to irr/src/AnimatedMeshSceneNode.cpp index cfcf2289f9..219adba5e5 100644 --- a/irr/src/CAnimatedMeshSceneNode.cpp +++ b/irr/src/AnimatedMeshSceneNode.cpp @@ -2,8 +2,9 @@ // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h -#include "CAnimatedMeshSceneNode.h" +#include "AnimatedMeshSceneNode.h" #include "CBoneSceneNode.h" +#include "ISceneNode.h" #include "IVideoDriver.h" #include "ISceneManager.h" #include "S3DVertex.h" @@ -29,12 +30,12 @@ namespace scene { //! constructor -CAnimatedMeshSceneNode::CAnimatedMeshSceneNode(IAnimatedMesh *mesh, +AnimatedMeshSceneNode::AnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent, ISceneManager *mgr, s32 id, const core::vector3df &position, const core::vector3df &rotation, const core::vector3df &scale) : - IAnimatedMeshSceneNode(parent, mgr, id, position, rotation, scale), + ISceneNode(parent, mgr, id, position, rotation, scale), Mesh(nullptr), StartFrame(0), EndFrame(0), FramesPerSecond(0.025f), CurrentFrameNr(0.f), LastTimeMs(0), @@ -47,14 +48,14 @@ CAnimatedMeshSceneNode::CAnimatedMeshSceneNode(IAnimatedMesh *mesh, } //! destructor -CAnimatedMeshSceneNode::~CAnimatedMeshSceneNode() +AnimatedMeshSceneNode::~AnimatedMeshSceneNode() { if (Mesh) Mesh->drop(); } //! Sets the current frame. From now on the animation is played from this frame. -void CAnimatedMeshSceneNode::setCurrentFrame(f32 frame) +void AnimatedMeshSceneNode::setCurrentFrame(f32 frame) { // if you pass an out of range value, we just clamp it CurrentFrameNr = core::clamp(frame, (f32)StartFrame, (f32)EndFrame); @@ -63,13 +64,13 @@ void CAnimatedMeshSceneNode::setCurrentFrame(f32 frame) } //! Returns the currently displayed frame number. -f32 CAnimatedMeshSceneNode::getFrameNr() const +f32 AnimatedMeshSceneNode::getFrameNr() const { return CurrentFrameNr; } //! Get CurrentFrameNr and update transiting settings -void CAnimatedMeshSceneNode::buildFrameNr(u32 timeMs) +void AnimatedMeshSceneNode::buildFrameNr(u32 timeMs) { if (Transiting != 0.f) { TransitingBlend += (f32)(timeMs)*Transiting; @@ -106,7 +107,7 @@ void CAnimatedMeshSceneNode::buildFrameNr(u32 timeMs) } } -void CAnimatedMeshSceneNode::OnRegisterSceneNode() +void AnimatedMeshSceneNode::OnRegisterSceneNode() { if (IsVisible && Mesh) { // because this node supports rendering of mixed mode meshes consisting of @@ -146,7 +147,7 @@ void CAnimatedMeshSceneNode::OnRegisterSceneNode() } } -IMesh *CAnimatedMeshSceneNode::getMeshForCurrentFrame() +IMesh *AnimatedMeshSceneNode::getMeshForCurrentFrame() { if (Mesh->getMeshType() != EAMT_SKINNED) { return Mesh; @@ -164,7 +165,7 @@ IMesh *CAnimatedMeshSceneNode::getMeshForCurrentFrame() } //! OnAnimate() is called just before rendering the whole scene. -void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs) +void AnimatedMeshSceneNode::OnAnimate(u32 timeMs) { if (LastTimeMs == 0) { // first frame LastTimeMs = timeMs; @@ -186,7 +187,7 @@ void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs) if (OnAnimateCallback) OnAnimateCallback(dtimeMs / 1000.0f); - IAnimatedMeshSceneNode::OnAnimate(timeMs); + ISceneNode::OnAnimate(timeMs); if (auto *skinnedMesh = dynamic_cast(Mesh)) { for (u16 i = 0; i < PerJoint.SceneNodes.size(); ++i) @@ -200,7 +201,7 @@ void CAnimatedMeshSceneNode::OnAnimate(u32 timeMs) } //! renders the node. -void CAnimatedMeshSceneNode::render() +void AnimatedMeshSceneNode::render() { video::IVideoDriver *driver = SceneManager->getVideoDriver(); @@ -312,20 +313,20 @@ void CAnimatedMeshSceneNode::render() } //! Returns the current start frame number. -f32 CAnimatedMeshSceneNode::getStartFrame() const +f32 AnimatedMeshSceneNode::getStartFrame() const { return StartFrame; } //! Returns the current start frame number. -f32 CAnimatedMeshSceneNode::getEndFrame() const +f32 AnimatedMeshSceneNode::getEndFrame() const { return EndFrame; } //! sets the frames between the animation is looped. //! the default is 0 - MaximalFrameCount of the mesh. -bool CAnimatedMeshSceneNode::setFrameLoop(f32 begin, f32 end) +bool AnimatedMeshSceneNode::setFrameLoop(f32 begin, f32 end) { const f32 maxFrame = Mesh->getMaxFrameNumber(); if (end < begin) { @@ -344,24 +345,24 @@ bool CAnimatedMeshSceneNode::setFrameLoop(f32 begin, f32 end) } //! sets the speed with witch the animation is played -void CAnimatedMeshSceneNode::setAnimationSpeed(f32 framesPerSecond) +void AnimatedMeshSceneNode::setAnimationSpeed(f32 framesPerSecond) { FramesPerSecond = framesPerSecond * 0.001f; } -f32 CAnimatedMeshSceneNode::getAnimationSpeed() const +f32 AnimatedMeshSceneNode::getAnimationSpeed() const { return FramesPerSecond * 1000.f; } //! returns the axis aligned bounding box of this node -const core::aabbox3d &CAnimatedMeshSceneNode::getBoundingBox() const +const core::aabbox3d &AnimatedMeshSceneNode::getBoundingBox() const { return Box; } //! returns the material based on the zero based index i. -video::SMaterial &CAnimatedMeshSceneNode::getMaterial(u32 i) +video::SMaterial &AnimatedMeshSceneNode::getMaterial(u32 i) { if (i >= Materials.size()) return ISceneNode::getMaterial(i); @@ -370,14 +371,14 @@ video::SMaterial &CAnimatedMeshSceneNode::getMaterial(u32 i) } //! returns amount of materials used by this scene node. -u32 CAnimatedMeshSceneNode::getMaterialCount() const +u32 AnimatedMeshSceneNode::getMaterialCount() const { return Materials.size(); } //! Returns a pointer to a child node, which has the same transformation as //! the corresponding joint, if the mesh in this scene node is a skinned mesh. -IBoneSceneNode *CAnimatedMeshSceneNode::getJointNode(const c8 *jointName) +IBoneSceneNode *AnimatedMeshSceneNode::getJointNode(const c8 *jointName) { if (!Mesh || Mesh->getMeshType() != EAMT_SKINNED) { os::Printer::log("No mesh, or mesh not of skinned mesh type", ELL_WARNING); @@ -405,7 +406,7 @@ IBoneSceneNode *CAnimatedMeshSceneNode::getJointNode(const c8 *jointName) //! Returns a pointer to a child node, which has the same transformation as //! the corresponding joint, if the mesh in this scene node is a skinned mesh. -IBoneSceneNode *CAnimatedMeshSceneNode::getJointNode(u32 jointID) +IBoneSceneNode *AnimatedMeshSceneNode::getJointNode(u32 jointID) { if (!Mesh || Mesh->getMeshType() != EAMT_SKINNED) { os::Printer::log("No mesh, or mesh not of skinned mesh type", ELL_WARNING); @@ -423,7 +424,7 @@ IBoneSceneNode *CAnimatedMeshSceneNode::getJointNode(u32 jointID) } //! Gets joint count. -u32 CAnimatedMeshSceneNode::getJointCount() const +u32 AnimatedMeshSceneNode::getJointCount() const { if (!Mesh || Mesh->getMeshType() != EAMT_SKINNED) return 0; @@ -436,7 +437,7 @@ u32 CAnimatedMeshSceneNode::getJointCount() const //! Removes a child from this scene node. //! Implemented here, to be able to remove the shadow properly, if there is one, //! or to remove attached childs. -bool CAnimatedMeshSceneNode::removeChild(ISceneNode *child) +bool AnimatedMeshSceneNode::removeChild(ISceneNode *child) { if (ISceneNode::removeChild(child)) { if (JointsUsed) { // stop weird bugs caused while changing parents as the joints are being created @@ -455,31 +456,31 @@ bool CAnimatedMeshSceneNode::removeChild(ISceneNode *child) //! Sets looping mode which is on by default. If set to false, //! animations will not be looped. -void CAnimatedMeshSceneNode::setLoopMode(bool playAnimationLooped) +void AnimatedMeshSceneNode::setLoopMode(bool playAnimationLooped) { Looping = playAnimationLooped; } //! returns the current loop mode -bool CAnimatedMeshSceneNode::getLoopMode() const +bool AnimatedMeshSceneNode::getLoopMode() const { return Looping; } //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. -void CAnimatedMeshSceneNode::setReadOnlyMaterials(bool readonly) +void AnimatedMeshSceneNode::setReadOnlyMaterials(bool readonly) { ReadOnlyMaterials = readonly; } //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style -bool CAnimatedMeshSceneNode::isReadOnlyMaterials() const +bool AnimatedMeshSceneNode::isReadOnlyMaterials() const { return ReadOnlyMaterials; } //! Sets a new mesh -void CAnimatedMeshSceneNode::setMesh(IAnimatedMesh *mesh) +void AnimatedMeshSceneNode::setMesh(IAnimatedMesh *mesh) { if (!mesh) return; // won't set null mesh @@ -520,14 +521,14 @@ void CAnimatedMeshSceneNode::setMesh(IAnimatedMesh *mesh) } //! updates the absolute position based on the relative and the parents position -void CAnimatedMeshSceneNode::updateAbsolutePosition() +void AnimatedMeshSceneNode::updateAbsolutePosition() { - IAnimatedMeshSceneNode::updateAbsolutePosition(); + ISceneNode::updateAbsolutePosition(); } //! Sets the transition time in seconds (note: This needs to enable joints) //! you must call animateJoints(), or the mesh will not animate -void CAnimatedMeshSceneNode::setTransitionTime(f32 time) +void AnimatedMeshSceneNode::setTransitionTime(f32 time) { const u32 ttime = (u32)core::floor32(time * 1000.0f); if (TransitionTime == ttime) @@ -536,12 +537,12 @@ void CAnimatedMeshSceneNode::setTransitionTime(f32 time) } //! render mesh ignoring its transformation. Used with ragdolls. (culling is unaffected) -void CAnimatedMeshSceneNode::setRenderFromIdentity(bool enable) +void AnimatedMeshSceneNode::setRenderFromIdentity(bool enable) { RenderFromIdentity = enable; } -void CAnimatedMeshSceneNode::addJoints() +void AnimatedMeshSceneNode::addJoints() { const auto &joints = static_cast(Mesh)->getAllJoints(); PerJoint.setN(joints.size()); @@ -561,7 +562,7 @@ void CAnimatedMeshSceneNode::addJoints() } } -void CAnimatedMeshSceneNode::updateJointSceneNodes( +void AnimatedMeshSceneNode::updateJointSceneNodes( const std::vector &transforms) { for (size_t i = 0; i < transforms.size(); ++i) { @@ -578,7 +579,7 @@ void CAnimatedMeshSceneNode::updateJointSceneNodes( } //! updates the joint positions of this mesh -void CAnimatedMeshSceneNode::animateJoints() +void AnimatedMeshSceneNode::animateJoints() { if (!Mesh || Mesh->getMeshType() != EAMT_SKINNED) return; @@ -603,7 +604,7 @@ void CAnimatedMeshSceneNode::animateJoints() } } -void CAnimatedMeshSceneNode::checkJoints() +void AnimatedMeshSceneNode::checkJoints() { if (!Mesh || Mesh->getMeshType() != EAMT_SKINNED) return; @@ -617,7 +618,7 @@ void CAnimatedMeshSceneNode::checkJoints() } } -void CAnimatedMeshSceneNode::copyOldTransforms() +void AnimatedMeshSceneNode::copyOldTransforms() { for (u32 i = 0; i < PerJoint.SceneNodes.size(); ++i) { if (!PerJoint.SceneNodes[i]->Matrix) { @@ -628,7 +629,7 @@ void CAnimatedMeshSceneNode::copyOldTransforms() } } -void CAnimatedMeshSceneNode::beginTransition() +void AnimatedMeshSceneNode::beginTransition() { if (!JointsUsed) return; @@ -639,15 +640,15 @@ void CAnimatedMeshSceneNode::beginTransition() TransitingBlend = 0.f; } -ISceneNode *CAnimatedMeshSceneNode::clone(ISceneNode *newParent, ISceneManager *newManager) +ISceneNode *AnimatedMeshSceneNode::clone(ISceneNode *newParent, ISceneManager *newManager) { if (!newParent) newParent = Parent; if (!newManager) newManager = SceneManager; - CAnimatedMeshSceneNode *newNode = - new CAnimatedMeshSceneNode(Mesh, NULL, newManager, ID, RelativeTranslation, + AnimatedMeshSceneNode *newNode = + new AnimatedMeshSceneNode(Mesh, NULL, newManager, ID, RelativeTranslation, RelativeRotation, RelativeScale); if (newParent) { diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index aabdf9c944..247e44e595 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -251,11 +251,10 @@ set(IRRMESHLOADER add_library(IRRMESHOBJ OBJECT CMeshSceneNode.h - CAnimatedMeshSceneNode.h SkinnedMesh.cpp CMeshSceneNode.cpp - CAnimatedMeshSceneNode.cpp + AnimatedMeshSceneNode.cpp ${IRRMESHLOADER} ) diff --git a/irr/src/CNullDriver.cpp b/irr/src/CNullDriver.cpp index bd11b236bf..dac840669d 100644 --- a/irr/src/CNullDriver.cpp +++ b/irr/src/CNullDriver.cpp @@ -12,7 +12,7 @@ #include "IImageLoader.h" #include "IImageWriter.h" #include "IMaterialRenderer.h" -#include "IAnimatedMeshSceneNode.h" +#include "AnimatedMeshSceneNode.h" #include "CMeshManipulator.h" #include "CColorConverter.h" #include "IReferenceCounted.h" @@ -1244,7 +1244,7 @@ void CNullDriver::addOcclusionQuery(scene::ISceneNode *node, const scene::IMesh else if (node->getType() == scene::ESNT_MESH) mesh = static_cast(node)->getMesh(); else - mesh = static_cast(node)->getMesh(); + mesh = static_cast(node)->getMesh(); if (!mesh) return; } diff --git a/irr/src/CSceneManager.cpp b/irr/src/CSceneManager.cpp index d5b992e624..7afe05c616 100644 --- a/irr/src/CSceneManager.cpp +++ b/irr/src/CSceneManager.cpp @@ -22,7 +22,7 @@ #include "CB3DMeshFileLoader.h" #include "CGLTFMeshFileLoader.h" #include "CBillboardSceneNode.h" -#include "CAnimatedMeshSceneNode.h" +#include "AnimatedMeshSceneNode.h" #include "CCameraSceneNode.h" #include "CMeshSceneNode.h" #include "CDummyTransformationSceneNode.h" @@ -177,7 +177,7 @@ IMeshSceneNode *CSceneManager::addMeshSceneNode(IMesh *mesh, ISceneNode *parent, } //! adds a scene node for rendering an animated mesh model -IAnimatedMeshSceneNode *CSceneManager::addAnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent, s32 id, +AnimatedMeshSceneNode *CSceneManager::addAnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent, s32 id, const core::vector3df &position, const core::vector3df &rotation, const core::vector3df &scale, bool alsoAddIfMeshPointerZero) { @@ -187,8 +187,8 @@ IAnimatedMeshSceneNode *CSceneManager::addAnimatedMeshSceneNode(IAnimatedMesh *m if (!parent) parent = this; - IAnimatedMeshSceneNode *node = - new CAnimatedMeshSceneNode(mesh, parent, this, id, position, rotation, scale); + auto *node = + new AnimatedMeshSceneNode(mesh, parent, this, id, position, rotation, scale); node->drop(); return node; diff --git a/irr/src/CSceneManager.h b/irr/src/CSceneManager.h index 057ef01805..8a9d6b6a9a 100644 --- a/irr/src/CSceneManager.h +++ b/irr/src/CSceneManager.h @@ -40,7 +40,7 @@ public: video::IVideoDriver *getVideoDriver() override; //! adds a scene node for rendering an animated mesh model - virtual IAnimatedMeshSceneNode *addAnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent = 0, s32 id = -1, + virtual AnimatedMeshSceneNode *addAnimatedMeshSceneNode(IAnimatedMesh *mesh, ISceneNode *parent = 0, s32 id = -1, const core::vector3df &position = core::vector3df(0, 0, 0), const core::vector3df &rotation = core::vector3df(0, 0, 0), const core::vector3df &scale = core::vector3df(1.0f, 1.0f, 1.0f), diff --git a/irr/src/SkinnedMesh.cpp b/irr/src/SkinnedMesh.cpp index d37d7a306a..b03e0c2746 100644 --- a/irr/src/SkinnedMesh.cpp +++ b/irr/src/SkinnedMesh.cpp @@ -3,13 +3,9 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "SkinnedMesh.h" -#include "IBoneSceneNode.h" -#include "CBoneSceneNode.h" -#include "IAnimatedMeshSceneNode.h" #include "SSkinMeshBuffer.h" #include "Transform.h" #include "aabbox3d.h" -#include "irrMath.h" #include "matrix4.h" #include "os.h" #include "vector3d.h" diff --git a/src/client/clientobject.h b/src/client/clientobject.h index 3f065f90b1..84b1091cff 100644 --- a/src/client/clientobject.h +++ b/src/client/clientobject.h @@ -18,7 +18,7 @@ struct ItemStack; namespace scene { - class IAnimatedMeshSceneNode; + class AnimatedMeshSceneNode; class ISceneNode; class ISceneManager; } @@ -41,7 +41,7 @@ public: virtual const v3f getVelocity() const { return v3f(0.0f); } // in BS-space virtual scene::ISceneNode *getSceneNode() const { return NULL; } - virtual scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode() const + virtual scene::AnimatedMeshSceneNode *getAnimatedMeshSceneNode() const { return NULL; } virtual bool isLocalPlayer() const { return false; } diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 3cbd2b1495..0aab95f87e 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include "client/client.h" #include "client/renderingengine.h" @@ -400,7 +400,7 @@ scene::ISceneNode *GenericCAO::getSceneNode() const return NULL; } -scene::IAnimatedMeshSceneNode *GenericCAO::getAnimatedMeshSceneNode() const +scene::AnimatedMeshSceneNode *GenericCAO::getAnimatedMeshSceneNode() const { return m_animated_meshnode; } @@ -1437,7 +1437,7 @@ void GenericCAO::updateAttachments() { parent->updateAttachments(); scene::ISceneNode *parent_node = parent->getSceneNode(); - scene::IAnimatedMeshSceneNode *parent_animated_mesh_node = + scene::AnimatedMeshSceneNode *parent_animated_mesh_node = parent->getAnimatedMeshSceneNode(); if (parent_animated_mesh_node && !m_attachment_bone.empty()) { parent_node = parent_animated_mesh_node->getJointNode(m_attachment_bone.c_str()); diff --git a/src/client/content_cao.h b/src/client/content_cao.h index 140d25e57c..c6f31bb236 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -14,12 +14,12 @@ #include "itemgroup.h" #include "client/tile.h" #include -#include #include namespace scene { class IMeshSceneNode; class IBillboardSceneNode; + class AnimatedMeshSceneNode; } class Client; @@ -89,7 +89,7 @@ private: // Visuals scene::IMeshSceneNode *m_meshnode = nullptr; - scene::IAnimatedMeshSceneNode *m_animated_meshnode = nullptr; + scene::AnimatedMeshSceneNode *m_animated_meshnode = nullptr; WieldMeshSceneNode *m_wield_meshnode = nullptr; scene::IBillboardSceneNode *m_spritenode = nullptr; scene::IDummyTransformationSceneNode *m_matrixnode = nullptr; @@ -191,7 +191,7 @@ public: scene::ISceneNode *getSceneNode() const override; - scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode() const override; + scene::AnimatedMeshSceneNode *getAnimatedMeshSceneNode() const override; // m_matrixnode controls the position and rotation of the child node // for all scene nodes, as a workaround for an Irrlicht problem with diff --git a/src/client/game.cpp b/src/client/game.cpp index 24cd31d3ea..c92735f189 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -45,7 +45,7 @@ #include "version.h" #include "script/scripting_client.h" #include "hud.h" -#include +#include #include "util/tracy_wrapper.h" #include "item_visuals_manager.h" @@ -2226,7 +2226,7 @@ static void pauseNodeAnimation(PausedNodesList &paused, scene::ISceneNode *node) pauseNodeAnimation(paused, child); if (node->getType() != scene::ESNT_ANIMATED_MESH) return; - auto animated_node = static_cast(node); + auto animated_node = static_cast(node); float speed = animated_node->getAnimationSpeed(); if (!speed) return; diff --git a/src/client/game_internal.h b/src/client/game_internal.h index ceb9fed4db..bd420db837 100644 --- a/src/client/game_internal.h +++ b/src/client/game_internal.h @@ -6,7 +6,7 @@ #include "game.h" -#include +#include #include #include #include "camera.h" @@ -83,7 +83,7 @@ struct ClientEventHandler void (Game::*handler)(ClientEvent *, CameraOrientation *); }; -using PausedNodesList = std::vector, float>>; +using PausedNodesList = std::vector, float>>; /* This is not intended to be a public class. If a public class becomes * desirable then it may be better to create another 'wrapper' class that diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp index b9e819236d..e4da3ae045 100644 --- a/src/client/mesh.cpp +++ b/src/client/mesh.cpp @@ -8,9 +8,7 @@ #include "debug.h" #include "log.h" #include -#include #include -#include #include "S3DVertex.h" #include #include "CMeshBuffer.h" diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 94e3dcb872..0b35b5cbcd 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include "client/renderingengine.h" #include "client/joystick_controller.h" #include "log.h" diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index 75e57210d5..7e1756aa92 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -5,7 +5,7 @@ #include "guiScene.h" #include -#include +#include #include #include #include "porting.h" @@ -29,7 +29,7 @@ GUIScene::~GUIScene() m_smgr->drop(); } -scene::IAnimatedMeshSceneNode *GUIScene::setMesh(scene::IAnimatedMesh *mesh) +scene::AnimatedMeshSceneNode *GUIScene::setMesh(scene::IAnimatedMesh *mesh) { if (m_mesh) { m_mesh->remove(); diff --git a/src/gui/guiScene.h b/src/gui/guiScene.h index a96fbe36fb..eae1e5e5d7 100644 --- a/src/gui/guiScene.h +++ b/src/gui/guiScene.h @@ -6,7 +6,7 @@ #include "ICameraSceneNode.h" #include "StyleSpec.h" -#include +#include #include #include @@ -19,7 +19,7 @@ public: ~GUIScene(); - scene::IAnimatedMeshSceneNode *setMesh(scene::IAnimatedMesh *mesh = nullptr); + scene::AnimatedMeshSceneNode *setMesh(scene::IAnimatedMesh *mesh = nullptr); void setTexture(u32 idx, video::ITexture *texture); void setBackgroundColor(const video::SColor &color) noexcept { m_bgcolor = color; }; void setFrameLoop(f32 begin, f32 end); @@ -49,7 +49,7 @@ private: video::IVideoDriver *m_driver; scene::ICameraSceneNode *m_cam; scene::ISceneNode *m_target = nullptr; - scene::IAnimatedMeshSceneNode *m_mesh = nullptr; + scene::AnimatedMeshSceneNode *m_mesh = nullptr; f32 m_cam_distance = 50.f;