summaryrefslogtreecommitdiff
path: root/src/wieldmesh.h
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2014-11-02 03:47:43 +0100
committerKahrl <kahrl@gmx.net>2014-11-08 23:11:57 +0100
commit9b551d5cbcaf71a8c39bbf7e886290649aed4799 (patch)
tree8eb68e4c9a7a006ec6c406da4760403c6748848e /src/wieldmesh.h
parentcc8d7b86404f2830bcf09d04468e8041db276b98 (diff)
downloadminetest-9b551d5cbcaf71a8c39bbf7e886290649aed4799.tar.gz
minetest-9b551d5cbcaf71a8c39bbf7e886290649aed4799.tar.bz2
minetest-9b551d5cbcaf71a8c39bbf7e886290649aed4799.zip
Implement WieldMeshSceneNode which improves wield mesh rendering
- Don't create and cache an extruded mesh for every (non-node) item. Instead use a single one per image resolution. - For cubic nodes reuse a single wield mesh too - Improve lighting of the wielded item - Increase far value of wield mesh scene camera, fixes #1770 - Also includes some minor refactorings of Camera and GenericCAO.
Diffstat (limited to 'src/wieldmesh.h')
-rw-r--r--src/wieldmesh.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/wieldmesh.h b/src/wieldmesh.h
new file mode 100644
index 000000000..7761fd51b
--- /dev/null
+++ b/src/wieldmesh.h
@@ -0,0 +1,71 @@
+/*
+Minetest
+Copyright (C) 2010-2014 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef WIELDMESH_HEADER
+#define WIELDMESH_HEADER
+
+#include "irrlichttypes_extrabloated.h"
+#include <string>
+
+class ItemStack;
+class IGameDef;
+class ITextureSource;
+struct TileSpec;
+
+/*
+ Wield item scene node, renders the wield mesh of some item
+*/
+class WieldMeshSceneNode: public scene::ISceneNode
+{
+public:
+ WieldMeshSceneNode(scene::ISceneNode *parent, scene::ISceneManager *mgr,
+ s32 id = -1, bool lighting = false);
+ virtual ~WieldMeshSceneNode();
+
+ void setCube(const TileSpec tiles[6],
+ v3f wield_scale, ITextureSource *tsrc);
+ void setExtruded(const std::string &imagename,
+ v3f wield_scale, ITextureSource *tsrc);
+ void setItem(const ItemStack &item, IGameDef *gamedef);
+
+ // Sets the vertex color of the wield mesh.
+ // Must only be used if the constructor was called with lighting = false
+ void setColor(video::SColor color);
+
+ virtual void render();
+
+ virtual const core::aabbox3d<f32>& getBoundingBox() const
+ { return m_bounding_box; }
+
+private:
+ void changeToMesh(scene::IMesh *mesh);
+
+ // Child scene node with the current wield mesh
+ scene::IMeshSceneNode *m_meshnode;
+
+ // True if EMF_LIGHTING should be enabled.
+ bool m_lighting;
+
+ // Bounding box culling is disabled for this type of scene node,
+ // so this variable is just required so we can implement
+ // getBoundingBox() and is set to an empty box.
+ core::aabbox3d<f32> m_bounding_box;
+};
+
+#endif