mirror of
https://github.com/minetest/minetest.git
synced 2025-01-07 22:07:30 +01:00
Fix situation around aabbox3d default constructor (#15586)
Co-authored-by: JosiahWI <41302989+JosiahWI@users.noreply.github.com>
This commit is contained in:
parent
cca65fde08
commit
f2b1cc3e61
@ -134,7 +134,7 @@ public:
|
|||||||
//! Index buffer
|
//! Index buffer
|
||||||
SIndexBuffer *Indices;
|
SIndexBuffer *Indices;
|
||||||
//! Bounding box of this meshbuffer.
|
//! Bounding box of this meshbuffer.
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox{{0, 0, 0}};
|
||||||
//! Primitive type used for rendering (triangles, lines, ...)
|
//! Primitive type used for rendering (triangles, lines, ...)
|
||||||
E_PRIMITIVE_TYPE PrimitiveType;
|
E_PRIMITIVE_TYPE PrimitiveType;
|
||||||
};
|
};
|
||||||
|
@ -108,7 +108,7 @@ public:
|
|||||||
if (!mesh)
|
if (!mesh)
|
||||||
return true;
|
return true;
|
||||||
bool result = true;
|
bool result = true;
|
||||||
core::aabbox3df bufferbox;
|
core::aabbox3df bufferbox{{0, 0, 0}};
|
||||||
for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
|
for (u32 i = 0; i < mesh->getMeshBufferCount(); ++i) {
|
||||||
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
|
result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate);
|
||||||
if (boundingBoxUpdate) {
|
if (boundingBoxUpdate) {
|
||||||
@ -136,7 +136,7 @@ protected:
|
|||||||
if (!buffer)
|
if (!buffer)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
core::aabbox3df bufferbox;
|
core::aabbox3df bufferbox{{0, 0, 0}};
|
||||||
for (u32 i = 0; i < buffer->getVertexCount(); ++i) {
|
for (u32 i = 0; i < buffer->getVertexCount(); ++i) {
|
||||||
switch (buffer->getVertexType()) {
|
switch (buffer->getVertexType()) {
|
||||||
case video::EVT_STANDARD: {
|
case video::EVT_STANDARD: {
|
||||||
|
@ -154,7 +154,7 @@ struct SAnimatedMesh final : public IAnimatedMesh
|
|||||||
std::vector<IMesh *> Meshes;
|
std::vector<IMesh *> Meshes;
|
||||||
|
|
||||||
//! The bounding box of this mesh
|
//! The bounding box of this mesh
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box{{0.0f, 0.0f, 0.0f}};
|
||||||
|
|
||||||
//! Default animation speed of this mesh.
|
//! Default animation speed of this mesh.
|
||||||
f32 FramesPerSecond;
|
f32 FramesPerSecond;
|
||||||
|
@ -133,7 +133,7 @@ struct SMesh final : public IMesh
|
|||||||
std::vector<u32> TextureSlots;
|
std::vector<u32> TextureSlots;
|
||||||
|
|
||||||
//! The bounding box of this mesh
|
//! The bounding box of this mesh
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox{{0, 0, 0}};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
|
@ -228,7 +228,7 @@ public:
|
|||||||
video::SMaterial Material;
|
video::SMaterial Material;
|
||||||
video::E_VERTEX_TYPE VertexType;
|
video::E_VERTEX_TYPE VertexType;
|
||||||
|
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox{{0, 0, 0}};
|
||||||
|
|
||||||
//! Primitive type used for rendering (triangles, lines, ...)
|
//! Primitive type used for rendering (triangles, lines, ...)
|
||||||
E_PRIMITIVE_TYPE PrimitiveType;
|
E_PRIMITIVE_TYPE PrimitiveType;
|
||||||
|
@ -117,7 +117,7 @@ struct SViewFrustum
|
|||||||
core::plane3d<f32> planes[VF_PLANE_COUNT];
|
core::plane3d<f32> planes[VF_PLANE_COUNT];
|
||||||
|
|
||||||
//! bounding box around the view frustum
|
//! bounding box around the view frustum
|
||||||
core::aabbox3d<f32> boundingBox;
|
core::aabbox3d<f32> boundingBox{{0, 0, 0}};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Hold a copy of important transform matrices
|
//! Hold a copy of important transform matrices
|
||||||
|
@ -137,7 +137,7 @@ public:
|
|||||||
//! Moves the mesh into static position.
|
//! Moves the mesh into static position.
|
||||||
void resetAnimation();
|
void resetAnimation();
|
||||||
|
|
||||||
virtual void updateBoundingBox();
|
void updateBoundingBox();
|
||||||
|
|
||||||
//! Recovers the joints from the mesh
|
//! Recovers the joints from the mesh
|
||||||
void recoverJointsFromMesh(std::vector<IBoneSceneNode *> &jointChildSceneNodes);
|
void recoverJointsFromMesh(std::vector<IBoneSceneNode *> &jointChildSceneNodes);
|
||||||
@ -370,7 +370,7 @@ protected:
|
|||||||
// doesn't allow taking a reference to individual elements.
|
// doesn't allow taking a reference to individual elements.
|
||||||
std::vector<std::vector<char>> Vertices_Moved;
|
std::vector<std::vector<char>> Vertices_Moved;
|
||||||
|
|
||||||
core::aabbox3d<f32> BoundingBox;
|
core::aabbox3d<f32> BoundingBox{{0, 0, 0}};
|
||||||
|
|
||||||
f32 EndFrame;
|
f32 EndFrame;
|
||||||
f32 FramesPerSecond;
|
f32 FramesPerSecond;
|
||||||
|
@ -20,9 +20,7 @@ template <class T>
|
|||||||
class aabbox3d
|
class aabbox3d
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Default Constructor.
|
constexpr aabbox3d() = delete;
|
||||||
constexpr aabbox3d() :
|
|
||||||
MinEdge(-1, -1, -1), MaxEdge(1, 1, 1) {}
|
|
||||||
//! Constructor with min edge and max edge.
|
//! Constructor with min edge and max edge.
|
||||||
constexpr aabbox3d(const vector3d<T> &min, const vector3d<T> &max) :
|
constexpr aabbox3d(const vector3d<T> &min, const vector3d<T> &max) :
|
||||||
MinEdge(min), MaxEdge(max) {}
|
MinEdge(min), MaxEdge(max) {}
|
||||||
|
@ -145,7 +145,7 @@ private:
|
|||||||
void beginTransition();
|
void beginTransition();
|
||||||
|
|
||||||
core::array<video::SMaterial> Materials;
|
core::array<video::SMaterial> Materials;
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box{{0.0f, 0.0f, 0.0f}};
|
||||||
IAnimatedMesh *Mesh;
|
IAnimatedMesh *Mesh;
|
||||||
|
|
||||||
f32 StartFrame;
|
f32 StartFrame;
|
||||||
|
@ -104,7 +104,7 @@ private:
|
|||||||
/** Note that we can't use the real boundingbox for culling because at that point
|
/** Note that we can't use the real boundingbox for culling because at that point
|
||||||
the camera which is used to calculate the billboard is not yet updated. So we only
|
the camera which is used to calculate the billboard is not yet updated. So we only
|
||||||
know the real boundingbox after rendering - which is too late for culling. */
|
know the real boundingbox after rendering - which is too late for culling. */
|
||||||
core::aabbox3d<f32> BBoxSafe;
|
core::aabbox3d<f32> BBoxSafe{{0.0f, 0.0f, 0.0f}};
|
||||||
|
|
||||||
scene::SMeshBuffer *Buffer;
|
scene::SMeshBuffer *Buffer;
|
||||||
};
|
};
|
||||||
|
@ -60,7 +60,7 @@ private:
|
|||||||
|
|
||||||
u32 BoneIndex;
|
u32 BoneIndex;
|
||||||
|
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box{-1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
|
||||||
E_BONE_ANIMATION_MODE AnimationMode;
|
E_BONE_ANIMATION_MODE AnimationMode;
|
||||||
E_BONE_SKINNING_SPACE SkinningSpace;
|
E_BONE_SKINNING_SPACE SkinningSpace;
|
||||||
|
@ -48,7 +48,7 @@ private:
|
|||||||
void setPosition(const core::vector3df &newpos) override;
|
void setPosition(const core::vector3df &newpos) override;
|
||||||
|
|
||||||
core::matrix4 RelativeTransformationMatrix;
|
core::matrix4 RelativeTransformationMatrix;
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box{{0, 0, 0}};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
|
@ -33,7 +33,7 @@ public:
|
|||||||
ISceneNode *clone(ISceneNode *newParent = 0, ISceneManager *newManager = 0) override;
|
ISceneNode *clone(ISceneNode *newParent = 0, ISceneManager *newManager = 0) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box{{0, 0, 0}};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace scene
|
} // end namespace scene
|
||||||
|
@ -72,7 +72,7 @@ protected:
|
|||||||
void copyMaterials();
|
void copyMaterials();
|
||||||
|
|
||||||
core::array<video::SMaterial> Materials;
|
core::array<video::SMaterial> Materials;
|
||||||
core::aabbox3d<f32> Box;
|
core::aabbox3d<f32> Box{{0, 0, 0}};
|
||||||
video::SMaterial ReadOnlyMaterial;
|
video::SMaterial ReadOnlyMaterial;
|
||||||
|
|
||||||
IMesh *Mesh;
|
IMesh *Mesh;
|
||||||
|
@ -307,7 +307,7 @@ const core::aabbox3d<f32> &CSceneManager::getBoundingBox() const
|
|||||||
{
|
{
|
||||||
_IRR_DEBUG_BREAK_IF(true) // Bounding Box of Scene Manager should never be used.
|
_IRR_DEBUG_BREAK_IF(true) // Bounding Box of Scene Manager should never be used.
|
||||||
|
|
||||||
static const core::aabbox3d<f32> dummy;
|
static const core::aabbox3d<f32> dummy{{0.0f, 0.0f, 0.0f}};
|
||||||
return dummy;
|
return dummy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,7 +573,7 @@ SkinnedMesh *SkinnedMeshBuilder::finalize()
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkinnedMesh::updateBoundingBox(void)
|
void SkinnedMesh::updateBoundingBox()
|
||||||
{
|
{
|
||||||
if (!SkinningBuffers)
|
if (!SkinningBuffers)
|
||||||
return;
|
return;
|
||||||
|
@ -101,7 +101,7 @@ std::vector<DistanceSortedActiveObject> ActiveObjectMgr::getActiveSelectableObje
|
|||||||
if (!obj)
|
if (!obj)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
aabb3f selection_box;
|
aabb3f selection_box{{0.0f, 0.0f, 0.0f}};
|
||||||
if (!obj->getSelectionBox(&selection_box))
|
if (!obj->getSelectionBox(&selection_box))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -430,7 +430,7 @@ void ClientEnvironment::getSelectedActiveObjects(
|
|||||||
|
|
||||||
for (const auto &allObject : allObjects) {
|
for (const auto &allObject : allObjects) {
|
||||||
ClientActiveObject *obj = allObject.obj;
|
ClientActiveObject *obj = allObject.obj;
|
||||||
aabb3f selection_box;
|
aabb3f selection_box{{0.0f, 0.0f, 0.0f}};
|
||||||
if (!obj->getSelectionBox(&selection_box))
|
if (!obj->getSelectionBox(&selection_box))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ private:
|
|||||||
// Was the mesh ever generated?
|
// Was the mesh ever generated?
|
||||||
bool m_mesh_valid = false;
|
bool m_mesh_valid = false;
|
||||||
|
|
||||||
aabb3f m_box;
|
aabb3f m_box{{0.0f, 0.0f, 0.0f}};
|
||||||
v2f m_origin;
|
v2f m_origin;
|
||||||
u16 m_cloud_radius_i;
|
u16 m_cloud_radius_i;
|
||||||
u32 m_seed;
|
u32 m_seed;
|
||||||
|
@ -3200,7 +3200,7 @@ PointedThing Game::updatePointedThing(
|
|||||||
hud->pointing_at_object = true;
|
hud->pointing_at_object = true;
|
||||||
|
|
||||||
runData.selected_object = client->getEnv().getActiveObject(result.object_id);
|
runData.selected_object = client->getEnv().getActiveObject(result.object_id);
|
||||||
aabb3f selection_box;
|
aabb3f selection_box{{0.0f, 0.0f, 0.0f}};
|
||||||
if (show_entity_selectionbox && runData.selected_object->doShowSelectionBox() &&
|
if (show_entity_selectionbox && runData.selected_object->doShowSelectionBox() &&
|
||||||
runData.selected_object->getSelectionBox(&selection_box)) {
|
runData.selected_object->getSelectionBox(&selection_box)) {
|
||||||
v3f pos = runData.selected_object->getPosition();
|
v3f pos = runData.selected_object->getPosition();
|
||||||
|
@ -75,10 +75,8 @@ static aabb3f getNodeBoundingBox(const std::vector<aabb3f> &nodeboxes)
|
|||||||
if (nodeboxes.empty())
|
if (nodeboxes.empty())
|
||||||
return aabb3f(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
return aabb3f(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
aabb3f b_max;
|
auto it = nodeboxes.begin();
|
||||||
|
aabb3f b_max(it->MinEdge, it->MaxEdge);
|
||||||
std::vector<aabb3f>::const_iterator it = nodeboxes.begin();
|
|
||||||
b_max = aabb3f(it->MinEdge, it->MaxEdge);
|
|
||||||
|
|
||||||
++it;
|
++it;
|
||||||
for (; it != nodeboxes.end(); ++it)
|
for (; it != nodeboxes.end(); ++it)
|
||||||
|
@ -105,8 +105,7 @@ void scaleMesh(scene::IMesh *mesh, v3f scale)
|
|||||||
if (mesh == NULL)
|
if (mesh == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aabb3f bbox;
|
aabb3f bbox{{0.0f, 0.0f, 0.0f}};
|
||||||
bbox.reset(0, 0, 0);
|
|
||||||
|
|
||||||
u32 mc = mesh->getMeshBufferCount();
|
u32 mc = mesh->getMeshBufferCount();
|
||||||
for (u32 j = 0; j < mc; j++) {
|
for (u32 j = 0; j < mc; j++) {
|
||||||
@ -134,8 +133,7 @@ void translateMesh(scene::IMesh *mesh, v3f vec)
|
|||||||
if (mesh == NULL)
|
if (mesh == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
aabb3f bbox;
|
aabb3f bbox{{0.0f, 0.0f, 0.0f}};
|
||||||
bbox.reset(0, 0, 0);
|
|
||||||
|
|
||||||
u32 mc = mesh->getMeshBufferCount();
|
u32 mc = mesh->getMeshBufferCount();
|
||||||
for (u32 j = 0; j < mc; j++) {
|
for (u32 j = 0; j < mc; j++) {
|
||||||
@ -296,8 +294,7 @@ void rotateMeshBy6dFacedir(scene::IMesh *mesh, u8 facedir)
|
|||||||
|
|
||||||
void recalculateBoundingBox(scene::IMesh *src_mesh)
|
void recalculateBoundingBox(scene::IMesh *src_mesh)
|
||||||
{
|
{
|
||||||
aabb3f bbox;
|
aabb3f bbox{{0.0f, 0.0f, 0.0f}};
|
||||||
bbox.reset(0,0,0);
|
|
||||||
for (u16 j = 0; j < src_mesh->getMeshBufferCount(); j++) {
|
for (u16 j = 0; j < src_mesh->getMeshBufferCount(); j++) {
|
||||||
scene::IMeshBuffer *buf = src_mesh->getMeshBuffer(j);
|
scene::IMeshBuffer *buf = src_mesh->getMeshBuffer(j);
|
||||||
buf->recalculateBoundingBox();
|
buf->recalculateBoundingBox();
|
||||||
|
@ -619,15 +619,22 @@ const core::aabbox3df &ParticleBuffer::getBoundingBox() const
|
|||||||
if (!m_bounding_box_dirty)
|
if (!m_bounding_box_dirty)
|
||||||
return m_mesh_buffer->BoundingBox;
|
return m_mesh_buffer->BoundingBox;
|
||||||
|
|
||||||
core::aabbox3df box;
|
core::aabbox3df box{{0, 0, 0}};
|
||||||
|
bool first = true;
|
||||||
for (u16 i = 0; i < m_count; i++) {
|
for (u16 i = 0; i < m_count; i++) {
|
||||||
// check if this index is used
|
// check if this index is used
|
||||||
static_assert(quad_indices[1] != 0);
|
static_assert(quad_indices[1] != 0);
|
||||||
if (m_mesh_buffer->getIndices()[6 * i + 1] == 0)
|
if (m_mesh_buffer->getIndices()[6 * i + 1] == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (u16 j = 0; j < 4; j++)
|
for (u16 j = 0; j < 4; j++) {
|
||||||
box.addInternalPoint(m_mesh_buffer->getPosition(i * 4 + j));
|
const auto pos = m_mesh_buffer->getPosition(i * 4 + j);
|
||||||
|
if (first)
|
||||||
|
box.reset(pos);
|
||||||
|
else
|
||||||
|
box.addInternalPoint(pos);
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_mesh_buffer->BoundingBox = box;
|
m_mesh_buffer->BoundingBox = box;
|
||||||
|
@ -50,8 +50,6 @@ Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShade
|
|||||||
m_seed = (u64)myrand() << 32 | myrand();
|
m_seed = (u64)myrand() << 32 | myrand();
|
||||||
|
|
||||||
setAutomaticCulling(scene::EAC_OFF);
|
setAutomaticCulling(scene::EAC_OFF);
|
||||||
m_box.MaxEdge.set(0, 0, 0);
|
|
||||||
m_box.MinEdge.set(0, 0, 0);
|
|
||||||
|
|
||||||
m_sky_params = SkyboxDefaults::getSkyDefaults();
|
m_sky_params = SkyboxDefaults::getSkyDefaults();
|
||||||
m_sun_params = SkyboxDefaults::getSunDefaults();
|
m_sun_params = SkyboxDefaults::getSunDefaults();
|
||||||
|
@ -122,7 +122,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
aabb3f m_box;
|
aabb3f m_box{{0.0f, 0.0f, 0.0f}};
|
||||||
video::SMaterial m_materials[SKY_MATERIAL_COUNT];
|
video::SMaterial m_materials[SKY_MATERIAL_COUNT];
|
||||||
// How much sun & moon transition should affect horizon color
|
// How much sun & moon transition should affect horizon color
|
||||||
float m_horizon_blend()
|
float m_horizon_blend()
|
||||||
|
@ -195,8 +195,7 @@ WieldMeshSceneNode::WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id):
|
|||||||
else
|
else
|
||||||
g_extrusion_mesh_cache->grab();
|
g_extrusion_mesh_cache->grab();
|
||||||
|
|
||||||
// Disable bounding box culling for this scene node
|
// This class doesn't render anything, so disable culling.
|
||||||
// since we won't calculate the bounding box.
|
|
||||||
setAutomaticCulling(scene::EAC_OFF);
|
setAutomaticCulling(scene::EAC_OFF);
|
||||||
|
|
||||||
// Create the child scene node
|
// Create the child scene node
|
||||||
|
@ -134,7 +134,7 @@ private:
|
|||||||
// Bounding box culling is disabled for this type of scene node,
|
// Bounding box culling is disabled for this type of scene node,
|
||||||
// so this variable is just required so we can implement
|
// so this variable is just required so we can implement
|
||||||
// getBoundingBox() and is set to an empty box.
|
// getBoundingBox() and is set to an empty box.
|
||||||
aabb3f m_bounding_box;
|
aabb3f m_bounding_box{{0, 0, 0}};
|
||||||
|
|
||||||
ShadowRenderer *m_shadow;
|
ShadowRenderer *m_shadow;
|
||||||
};
|
};
|
||||||
|
@ -262,7 +262,7 @@ static void add_object_boxes(Environment *env,
|
|||||||
{
|
{
|
||||||
auto process_object = [&cinfo] (ActiveObject *object) {
|
auto process_object = [&cinfo] (ActiveObject *object) {
|
||||||
if (object && object->collideWithObjects()) {
|
if (object && object->collideWithObjects()) {
|
||||||
aabb3f box;
|
aabb3f box{{0.0f, 0.0f, 0.0f}};
|
||||||
if (object->getCollisionBox(&box))
|
if (object->getCollisionBox(&box))
|
||||||
cinfo.emplace_back(object, 0, box);
|
cinfo.emplace_back(object, 0, box);
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ void NodeBox::deSerialize(std::istream &is)
|
|||||||
case NODEBOX_LEVELED: {
|
case NODEBOX_LEVELED: {
|
||||||
u16 fixed_count = readU16(is);
|
u16 fixed_count = readU16(is);
|
||||||
while(fixed_count--) {
|
while(fixed_count--) {
|
||||||
aabb3f box;
|
aabb3f box{{0.0f, 0.0f, 0.0f}};
|
||||||
box.MinEdge = readV3F32(is);
|
box.MinEdge = readV3F32(is);
|
||||||
box.MaxEdge = readV3F32(is);
|
box.MaxEdge = readV3F32(is);
|
||||||
fixed.push_back(box);
|
fixed.push_back(box);
|
||||||
|
@ -115,9 +115,9 @@ struct NodeBox
|
|||||||
// NODEBOX_FIXED
|
// NODEBOX_FIXED
|
||||||
std::vector<aabb3f> fixed;
|
std::vector<aabb3f> fixed;
|
||||||
// NODEBOX_WALLMOUNTED
|
// NODEBOX_WALLMOUNTED
|
||||||
aabb3f wall_top;
|
aabb3f wall_top = dummybox;
|
||||||
aabb3f wall_bottom;
|
aabb3f wall_bottom = dummybox;
|
||||||
aabb3f wall_side; // being at the -X side
|
aabb3f wall_side = dummybox; // being at the -X side
|
||||||
// NODEBOX_CONNECTED
|
// NODEBOX_CONNECTED
|
||||||
// (kept externally to not bloat the structure)
|
// (kept externally to not bloat the structure)
|
||||||
std::shared_ptr<NodeBoxConnected> connected;
|
std::shared_ptr<NodeBoxConnected> connected;
|
||||||
@ -139,6 +139,10 @@ struct NodeBox
|
|||||||
void reset();
|
void reset();
|
||||||
void serialize(std::ostream &os, u16 protocol_version) const;
|
void serialize(std::ostream &os, u16 protocol_version) const;
|
||||||
void deSerialize(std::istream &is);
|
void deSerialize(std::istream &is);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// @note the actual defaults are in reset(), see nodedef.cpp
|
||||||
|
static constexpr aabb3f dummybox = aabb3f({0, 0, 0});
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MapNode;
|
struct MapNode;
|
||||||
@ -810,14 +814,14 @@ private:
|
|||||||
* The union of all nodes' selection boxes.
|
* The union of all nodes' selection boxes.
|
||||||
* Might be larger if big nodes are removed from the manager.
|
* Might be larger if big nodes are removed from the manager.
|
||||||
*/
|
*/
|
||||||
aabb3f m_selection_box_union;
|
aabb3f m_selection_box_union{{0.0f, 0.0f, 0.0f}};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* The smallest box in integer node coordinates that
|
* The smallest box in integer node coordinates that
|
||||||
* contains all nodes' selection boxes.
|
* contains all nodes' selection boxes.
|
||||||
* Might be larger if big nodes are removed from the manager.
|
* Might be larger if big nodes are removed from the manager.
|
||||||
*/
|
*/
|
||||||
core::aabbox3d<s16> m_selection_box_int_union;
|
core::aabbox3d<s16> m_selection_box_int_union{{0, 0, 0}};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* NodeResolver instances to notify once node registration has finished.
|
* NodeResolver instances to notify once node registration has finished.
|
||||||
|
@ -302,7 +302,7 @@ private:
|
|||||||
v3s16 m_start; /**< source position */
|
v3s16 m_start; /**< source position */
|
||||||
v3s16 m_destination; /**< destination position */
|
v3s16 m_destination; /**< destination position */
|
||||||
|
|
||||||
core::aabbox3d<s16> m_limits; /**< position limits in real map coordinates */
|
core::aabbox3d<s16> m_limits{{0, 0, 0}}; /**< position limits in real map coordinates */
|
||||||
|
|
||||||
/** contains all map data already collected and analyzed.
|
/** contains all map data already collected and analyzed.
|
||||||
Access it via the getIndexElement/getIdxElem methods. */
|
Access it via the getIndexElement/getIdxElem methods. */
|
||||||
|
@ -326,7 +326,8 @@ bool is_color_table(lua_State *L, int index)
|
|||||||
|
|
||||||
aabb3f read_aabb3f(lua_State *L, int index, f32 scale)
|
aabb3f read_aabb3f(lua_State *L, int index, f32 scale)
|
||||||
{
|
{
|
||||||
aabb3f box;
|
// default value for accidental/historical reasons
|
||||||
|
aabb3f box{-1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
if(lua_istable(L, index)){
|
if(lua_istable(L, index)){
|
||||||
lua_rawgeti(L, index, 1);
|
lua_rawgeti(L, index, 1);
|
||||||
box.MinEdge.X = lua_tonumber(L, -1) * scale;
|
box.MinEdge.X = lua_tonumber(L, -1) * scale;
|
||||||
|
@ -85,7 +85,19 @@ bool read_color (lua_State *L, int index,
|
|||||||
video::SColor *color);
|
video::SColor *color);
|
||||||
bool is_color_table (lua_State *L, int index);
|
bool is_color_table (lua_State *L, int index);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a floating-point axis-aligned box from Lua.
|
||||||
|
*
|
||||||
|
* @param L the Lua state
|
||||||
|
* @param index the index of the Lua variable to read the box from. The
|
||||||
|
* variable must contain a table of the form
|
||||||
|
* {minx, miny, minz, maxx, maxy, maxz}.
|
||||||
|
* @param scale factor to scale the bounding box by
|
||||||
|
*
|
||||||
|
* @return the box corresponding to lua table
|
||||||
|
*/
|
||||||
aabb3f read_aabb3f (lua_State *L, int index, f32 scale);
|
aabb3f read_aabb3f (lua_State *L, int index, f32 scale);
|
||||||
|
|
||||||
v3s16 read_v3s16 (lua_State *L, int index);
|
v3s16 read_v3s16 (lua_State *L, int index);
|
||||||
std::vector<aabb3f> read_aabb3f_vector (lua_State *L, int index, f32 scale);
|
std::vector<aabb3f> read_aabb3f_vector (lua_State *L, int index, f32 scale);
|
||||||
size_t read_stringlist (lua_State *L, int index,
|
size_t read_stringlist (lua_State *L, int index,
|
||||||
|
@ -1847,7 +1847,7 @@ void ServerEnvironment::getSelectedActiveObjects(
|
|||||||
auto process = [&] (ServerActiveObject *obj) -> bool {
|
auto process = [&] (ServerActiveObject *obj) -> bool {
|
||||||
if (obj->isGone())
|
if (obj->isGone())
|
||||||
return false;
|
return false;
|
||||||
aabb3f selection_box;
|
aabb3f selection_box{{0.0f, 0.0f, 0.0f}};
|
||||||
if (!obj->getSelectionBox(&selection_box))
|
if (!obj->getSelectionBox(&selection_box))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user