1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-22 17:18:39 +00:00

Soft node overlay (#5186)

This commit adds node overlays, which are tiles that are drawn on top of
other tiles.
This commit is contained in:
Dániel Juhász 2017-04-21 15:34:59 +02:00 committed by Zeno-
parent 2ad74a9e8b
commit 1ffb180868
18 changed files with 763 additions and 467 deletions

View file

@ -26,17 +26,41 @@ with this program; if not, write to the Free Software Foundation, Inc.,
struct ItemStack;
class Client;
class ITextureSource;
struct TileSpec;
struct ContentFeatures;
/*!
* Holds color information of an item mesh's buffer.
*/
struct ItemPartColor {
/*!
* If this is false, the global base color of the item
* will be used instead of the specific color of the
* buffer.
*/
bool override_base;
/*!
* The color of the buffer.
*/
video::SColor color;
ItemPartColor():
override_base(false),
color(0)
{}
ItemPartColor(bool override, video::SColor color):
override_base(override),
color(color)
{}
};
struct ItemMesh
{
scene::IMesh *mesh;
/*!
* Stores the color of each mesh buffer.
* If the boolean is true, the color is fixed, else
* palettes can modify it.
*/
std::vector<std::pair<bool, video::SColor> > buffer_colors;
std::vector<ItemPartColor> buffer_colors;
ItemMesh() : mesh(NULL), buffer_colors() {}
};
@ -51,7 +75,8 @@ public:
s32 id = -1, bool lighting = false);
virtual ~WieldMeshSceneNode();
void setCube(const TileSpec tiles[6], v3f wield_scale, ITextureSource *tsrc);
void setCube(const ContentFeatures &f, v3f wield_scale,
ITextureSource *tsrc);
void setExtruded(const std::string &imagename, v3f wield_scale,
ITextureSource *tsrc, u8 num_frames);
void setItem(const ItemStack &item, Client *client);
@ -84,7 +109,12 @@ private:
* Stores the colors of the mesh's mesh buffers.
* This does not include lighting.
*/
std::vector<video::SColor> m_colors;
std::vector<ItemPartColor> m_colors;
/*!
* The base color of this mesh. This is the default
* for all mesh buffers.
*/
video::SColor m_base_color;
// Bounding box culling is disabled for this type of scene node,
// so this variable is just required so we can implement
@ -94,5 +124,16 @@ private:
void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result);
scene::IMesh *getExtrudedMesh(ITextureSource *tsrc, const std::string &imagename);
scene::SMesh *getExtrudedMesh(ITextureSource *tsrc, const std::string &imagename);
/*!
* Applies overlays, textures and optionally materials to the given mesh and
* extracts tile colors for colorization.
* \param mattype overrides the buffer's material type, but can also
* be NULL to leave the original material.
* \param colors returns the colors of the mesh buffers in the mesh.
*/
void postProcessNodeMesh(scene::SMesh *mesh, const ContentFeatures &f,
bool use_shaders, bool set_material, video::E_MATERIAL_TYPE *mattype,
std::vector<ItemPartColor> *colors);
#endif