mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-02 16:38:41 +00:00
added new entity style irregular_cube
This commit is contained in:
parent
0c78767754
commit
3454e67793
3 changed files with 71 additions and 0 deletions
|
@ -1811,6 +1811,15 @@ public:
|
||||||
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
||||||
mesh->drop();
|
mesh->drop();
|
||||||
|
|
||||||
|
m_meshnode->setScale(v3f(1));
|
||||||
|
// Will be shown when we know the brightness
|
||||||
|
m_meshnode->setVisible(false);
|
||||||
|
} else if (m_prop->visual == "cube_disorted") {
|
||||||
|
infostream<<"LuaEntityCAO::addToScene(): irregular_cube"<<std::endl;
|
||||||
|
scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS), m_prop->collisionbox);
|
||||||
|
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
||||||
|
mesh->drop();
|
||||||
|
|
||||||
m_meshnode->setScale(v3f(1));
|
m_meshnode->setScale(v3f(1));
|
||||||
// Will be shown when we know the brightness
|
// Will be shown when we know the brightness
|
||||||
m_meshnode->setVisible(false);
|
m_meshnode->setVisible(false);
|
||||||
|
|
53
src/mesh.cpp
53
src/mesh.cpp
|
@ -82,6 +82,59 @@ scene::IAnimatedMesh* createCubeMesh(v3f scale)
|
||||||
return anim_mesh;
|
return anim_mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scene::IAnimatedMesh* createCubeMesh(v3f scale,core::aabbox3d<f32> box)
|
||||||
|
{
|
||||||
|
video::SColor c(255,255,255,255);
|
||||||
|
video::S3DVertex vertices[24] =
|
||||||
|
{
|
||||||
|
// Up
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MaxEdge.Y,box.MinEdge.Z, 0,1,0, c, 0,1),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MaxEdge.Y,box.MaxEdge.Z, 0,1,0, c, 0,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MaxEdge.Y,box.MaxEdge.Z, 0,1,0, c, 1,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MaxEdge.Y,box.MinEdge.Z, 0,1,0, c, 1,1),
|
||||||
|
// Down
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MinEdge.Y,box.MinEdge.Z, 0,-1,0, c, 0,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MinEdge.Y,box.MinEdge.Z, 0,-1,0, c, 1,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MinEdge.Y,box.MaxEdge.Z, 0,-1,0, c, 1,1),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MinEdge.Y,box.MaxEdge.Z, 0,-1,0, c, 0,1),
|
||||||
|
// Right
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MinEdge.Y,box.MinEdge.Z, 1,0,0, c, 0,1),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MaxEdge.Y,box.MinEdge.Z, 1,0,0, c, 0,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MaxEdge.Y,box.MaxEdge.Z, 1,0,0, c, 1,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MinEdge.Y,box.MaxEdge.Z, 1,0,0, c, 1,1),
|
||||||
|
// Left
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MinEdge.Y,box.MinEdge.Z, -1,0,0, c, 1,1),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MinEdge.Y,box.MaxEdge.Z, -1,0,0, c, 0,1),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MaxEdge.Y,box.MaxEdge.Z, -1,0,0, c, 0,0),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MaxEdge.Y,box.MinEdge.Z, -1,0,0, c, 1,0),
|
||||||
|
// Back
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MinEdge.Y,box.MaxEdge.Z, 0,0,1, c, 1,1),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MinEdge.Y,box.MaxEdge.Z, 0,0,1, c, 0,1),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MaxEdge.Y,box.MaxEdge.Z, 0,0,1, c, 0,0),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MaxEdge.Y,box.MaxEdge.Z, 0,0,1, c, 1,0),
|
||||||
|
// Front
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MinEdge.Y,box.MinEdge.Z, 0,0,-1, c, 0,1),
|
||||||
|
video::S3DVertex(box.MinEdge.X,box.MaxEdge.Y,box.MinEdge.Z, 0,0,-1, c, 0,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MaxEdge.Y,box.MinEdge.Z, 0,0,-1, c, 1,0),
|
||||||
|
video::S3DVertex(box.MaxEdge.X,box.MinEdge.Y,box.MinEdge.Z, 0,0,-1, c, 1,1),
|
||||||
|
};
|
||||||
|
|
||||||
|
u16 indices[6] = {0,1,2,2,3,0};
|
||||||
|
|
||||||
|
scene::SMesh *mesh = new scene::SMesh();
|
||||||
|
for (u32 i=0; i<6; ++i)
|
||||||
|
{
|
||||||
|
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
|
||||||
|
buf->append(vertices + 4 * i, 4, indices, 6);
|
||||||
|
mesh->addMeshBuffer(buf);
|
||||||
|
buf->drop();
|
||||||
|
}
|
||||||
|
scene::SAnimatedMesh *anim_mesh = new scene::SAnimatedMesh(mesh);
|
||||||
|
mesh->drop();
|
||||||
|
scaleMesh(anim_mesh, scale); // also recalculates bounding box
|
||||||
|
return anim_mesh;
|
||||||
|
}
|
||||||
|
|
||||||
scene::IAnimatedMesh* createPlantMesh(v3f scale)
|
scene::IAnimatedMesh* createPlantMesh(v3f scale)
|
||||||
{
|
{
|
||||||
video::SColor c(255,255,255,255);
|
video::SColor c(255,255,255,255);
|
||||||
|
|
|
@ -31,6 +31,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
*/
|
*/
|
||||||
scene::IAnimatedMesh* createCubeMesh(v3f scale);
|
scene::IAnimatedMesh* createCubeMesh(v3f scale);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Create a new cube mesh not linked to mapnode size.
|
||||||
|
Vertices are defined by given box.
|
||||||
|
|
||||||
|
The resulting mesh has 6 materials (up, down, right, left, back, front)
|
||||||
|
which must be defined by the caller.
|
||||||
|
*/
|
||||||
|
scene::IAnimatedMesh* createCubeMesh(v3f scale,core::aabbox3d<f32> box);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Create a new extruded mesh from a texture.
|
Create a new extruded mesh from a texture.
|
||||||
Maximum bounding box is (+-scale.X/2, +-scale.Y/2, +-scale.Z).
|
Maximum bounding box is (+-scale.X/2, +-scale.Y/2, +-scale.Z).
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue