]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
GUIScene: Clear depth buffer + replace deprecated clearZBuffer calls
authorJean-Patrick Guerrero <kilbith@users.noreply.github.com>
Tue, 16 Mar 2021 22:28:16 +0000 (23:28 +0100)
committerGitHub <noreply@github.com>
Tue, 16 Mar 2021 22:28:16 +0000 (23:28 +0100)
doc/lua_api.txt
src/client/camera.cpp
src/client/hud.cpp
src/client/render/anaglyph.cpp
src/gui/guiFormSpecMenu.cpp
src/gui/guiScene.cpp
src/gui/guiScene.h

index c09578a15aed170eb74cd510e54308b078253d9a..abbe88f80f2c7a1ee157d14ed238aa9004746b4b 100644 (file)
@@ -2299,7 +2299,7 @@ Elements
 * `frame duration`: Milliseconds between each frame. `0` means the frames don't advance.
 * `frame start` (Optional): The index of the frame to start on. Default `1`.
 
-### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>]`
+### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>;<animation speed>]`
 
 * Show a mesh model.
 * `name`: Element name that can be used for styling
@@ -2313,6 +2313,7 @@ Elements
 * `frame loop range` (Optional): Range of the animation frames.
     * Defaults to the full range of all available frames.
     * Syntax: `<begin>,<end>`
+* `animation speed` (Optional): Sets the animation speed. Default 0 FPS.
 
 ### `item_image[<X>,<Y>;<W>,<H>;<item name>]`
 
index 350b685e19b073b2ac740061184ac795b67612a0..5158d0dd19f94beaef1b87bd4cc95e22acb65207 100644 (file)
@@ -664,7 +664,7 @@ void Camera::wield(const ItemStack &item)
 void Camera::drawWieldedTool(irr::core::matrix4* translation)
 {
        // Clear Z buffer so that the wielded tool stays in front of world geometry
-       m_wieldmgr->getVideoDriver()->clearZBuffer();
+       m_wieldmgr->getVideoDriver()->clearBuffers(video::ECBF_DEPTH);
 
        // Draw the wielded node (in a separate scene manager)
        scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera();
index 46736b325d1dc05877539a28d27731b9d5d0a28e..74c1828e34cfcf499936fee289e975e79a420c41 100644 (file)
@@ -950,7 +950,7 @@ void drawItemStack(
 
        if (imesh && imesh->mesh) {
                scene::IMesh *mesh = imesh->mesh;
-               driver->clearZBuffer();
+               driver->clearBuffers(video::ECBF_DEPTH);
                s32 delta = 0;
                if (rotation_kind < IT_ROT_NONE) {
                        MeshTimeInfo &ti = rotation_time_infos[rotation_kind];
index 9ba4464a2fc2ef77e48c12cad5b4d8762e142df7..153e774002afac89a499095d9bdb14fedb775fb7 100644 (file)
@@ -40,7 +40,7 @@ void RenderingCoreAnaglyph::setupMaterial(int color_mask)
 void RenderingCoreAnaglyph::useEye(bool right)
 {
        RenderingCoreStereo::useEye(right);
-       driver->clearZBuffer();
+       driver->clearBuffers(video::ECBF_DEPTH);
        setupMaterial(right ? video::ECP_GREEN | video::ECP_BLUE : video::ECP_RED);
 }
 
index 5aa6dc9ae668c7e4fe0f911c4321e06481ea26f3..5d763a4beeec5cdf8e6652215081fdb7b6896d40 100644 (file)
@@ -2746,7 +2746,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
 {
        std::vector<std::string> parts = split(element, ';');
 
-       if (parts.size() < 5 || (parts.size() > 9 &&
+       if (parts.size() < 5 || (parts.size() > 10 &&
                        m_formspec_version <= FORMSPEC_API_VERSION)) {
                errorstream << "Invalid model element (" << parts.size() << "): '" << element
                        << "'" << std::endl;
@@ -2766,6 +2766,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
        bool inf_rotation = is_yes(parts[6]);
        bool mousectrl = is_yes(parts[7]) || parts[7].empty(); // default true
        std::vector<std::string> frame_loop = split(parts[8], ',');
+       std::string speed = unescape_string(parts[9]);
 
        MY_CHECKPOS("model", 0);
        MY_CHECKGEOM("model", 1);
@@ -2825,6 +2826,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
        }
 
        e->setFrameLoop(frame_loop_begin, frame_loop_end);
+       e->setAnimationSpeed(stof(speed));
 
        auto style = getStyleForElement("model", spec.fname);
        e->setStyles(style);
index 5f4c50b9116f993a807d99049460875a8c67b372..f0cfbec5efc7ac22cbf96f1fb7a592ca91bf0776 100644 (file)
@@ -34,9 +34,6 @@ GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr,
        m_cam = m_smgr->addCameraSceneNode(0, v3f(0.f, 0.f, -100.f), v3f(0.f));
        m_cam->setFOV(30.f * core::DEGTORAD);
 
-       scene::ILightSceneNode *light = m_smgr->addLightSceneNode(m_cam);
-       light->setRadius(1000.f);
-
        m_smgr->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);
 }
 
@@ -60,6 +57,7 @@ scene::IAnimatedMeshSceneNode *GUIScene::setMesh(scene::IAnimatedMesh *mesh)
        m_mesh = m_smgr->addAnimatedMeshSceneNode(mesh);
        m_mesh->setPosition(-m_mesh->getBoundingBox().getCenter());
        m_mesh->animateJoints();
+
        return m_mesh;
 }
 
@@ -73,10 +71,13 @@ void GUIScene::setTexture(u32 idx, video::ITexture *texture)
        material.setFlag(video::EMF_FOG_ENABLE, true);
        material.setFlag(video::EMF_BILINEAR_FILTER, false);
        material.setFlag(video::EMF_BACK_FACE_CULLING, false);
+       material.setFlag(video::EMF_ZWRITE_ENABLE, true);
 }
 
 void GUIScene::draw()
 {
+       m_driver->clearBuffers(video::ECBF_DEPTH);
+
        // Control rotation speed based on time
        u64 new_time = porting::getTimeMs();
        u64 dtime_ms = 0;
@@ -161,6 +162,14 @@ void GUIScene::setFrameLoop(s32 begin, s32 end)
                m_mesh->setFrameLoop(begin, end);
 }
 
+/**
+ * Sets the animation speed (FPS) for the mesh
+ */
+void GUIScene::setAnimationSpeed(f32 speed)
+{
+       m_mesh->setAnimationSpeed(speed);
+}
+
 /* Camera control functions */
 
 inline void GUIScene::calcOptimalDistance()
index 08eb7f3506022a80e499dc794f54c184a8e92c28..0f5f3a89178aec59061cb5ca918b6f4517833aea 100644 (file)
@@ -37,6 +37,7 @@ class GUIScene : public gui::IGUIElement
        void setTexture(u32 idx, video::ITexture *texture);
        void setBackgroundColor(const video::SColor &color) noexcept { m_bgcolor = color; };
        void setFrameLoop(s32 begin, s32 end);
+       void setAnimationSpeed(f32 speed);
        void enableMouseControl(bool enable) noexcept { m_mouse_ctrl = enable; };
        void setRotation(v2f rot) noexcept { m_custom_rot = rot; };
        void enableContinuousRotation(bool enable) noexcept { m_inf_rot = enable; };