Fixes for using std:vector in ABMHander and further perf improvements
This commit is contained in:
parent
ad10b8b762
commit
ca3629637c
|
@ -827,7 +827,7 @@ public:
|
||||||
{
|
{
|
||||||
content_t c = *k;
|
content_t c = *k;
|
||||||
if (c >= m_aabms.size())
|
if (c >= m_aabms.size())
|
||||||
m_aabms.resize(c + 256, (std::vector<ActiveABM> *) NULL);
|
m_aabms.resize(c + 256, NULL);
|
||||||
if (!m_aabms[c])
|
if (!m_aabms[c])
|
||||||
m_aabms[c] = new std::vector<ActiveABM>;
|
m_aabms[c] = new std::vector<ActiveABM>;
|
||||||
m_aabms[c]->push_back(aabm);
|
m_aabms[c]->push_back(aabm);
|
||||||
|
@ -872,7 +872,7 @@ public:
|
||||||
}
|
}
|
||||||
void apply(MapBlock *block)
|
void apply(MapBlock *block)
|
||||||
{
|
{
|
||||||
if(m_aabms.empty())
|
if(m_aabms.empty() || block->isDummy())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ServerMap *map = &m_env->getServerMap();
|
ServerMap *map = &m_env->getServerMap();
|
||||||
|
@ -886,13 +886,13 @@ public:
|
||||||
for(p0.Y=0; p0.Y<MAP_BLOCKSIZE; p0.Y++)
|
for(p0.Y=0; p0.Y<MAP_BLOCKSIZE; p0.Y++)
|
||||||
for(p0.Z=0; p0.Z<MAP_BLOCKSIZE; p0.Z++)
|
for(p0.Z=0; p0.Z<MAP_BLOCKSIZE; p0.Z++)
|
||||||
{
|
{
|
||||||
MapNode n = block->getNodeNoEx(p0);
|
const MapNode &n = block->getNodeUnsafe(p0);
|
||||||
content_t c = n.getContent();
|
content_t c = n.getContent();
|
||||||
v3s16 p = p0 + block->getPosRelative();
|
|
||||||
|
|
||||||
if (!m_aabms[c])
|
if (c >= m_aabms.size() || !m_aabms[c])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
v3s16 p = p0 + block->getPosRelative();
|
||||||
for(std::vector<ActiveABM>::iterator
|
for(std::vector<ActiveABM>::iterator
|
||||||
i = m_aabms[c]->begin(); i != m_aabms[c]->end(); ++i) {
|
i = m_aabms[c]->begin(); i != m_aabms[c]->end(); ++i) {
|
||||||
if(myrand() % i->chance != 0)
|
if(myrand() % i->chance != 0)
|
||||||
|
|
|
@ -305,8 +305,7 @@ public:
|
||||||
inline MapNode getNodeNoEx(v3s16 p)
|
inline MapNode getNodeNoEx(v3s16 p)
|
||||||
{
|
{
|
||||||
bool is_valid;
|
bool is_valid;
|
||||||
MapNode node = getNode(p.X, p.Y, p.Z, &is_valid);
|
return getNode(p.X, p.Y, p.Z, &is_valid);
|
||||||
return is_valid ? node : MapNode(CONTENT_IGNORE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void setNode(s16 x, s16 y, s16 z, MapNode & n)
|
inline void setNode(s16 x, s16 y, s16 z, MapNode & n)
|
||||||
|
@ -341,6 +340,22 @@ public:
|
||||||
return getNodeNoCheck(p.X, p.Y, p.Z, valid_position);
|
return getNodeNoCheck(p.X, p.Y, p.Z, valid_position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////
|
||||||
|
//// Non-checking, unsafe variants of the above
|
||||||
|
//// MapBlock must be loaded by another function in the same scope/function
|
||||||
|
//// Caller must ensure that this is not a dummy block (by calling isDummy())
|
||||||
|
////
|
||||||
|
|
||||||
|
inline const MapNode &getNodeUnsafe(s16 x, s16 y, s16 z)
|
||||||
|
{
|
||||||
|
return data[z * zstride + y * ystride + x];
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const MapNode &getNodeUnsafe(v3s16 &p)
|
||||||
|
{
|
||||||
|
return getNodeUnsafe(p.X, p.Y, p.Z);
|
||||||
|
}
|
||||||
|
|
||||||
inline void setNodeNoCheck(s16 x, s16 y, s16 z, MapNode & n)
|
inline void setNodeNoCheck(s16 x, s16 y, s16 z, MapNode & n)
|
||||||
{
|
{
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
|
@ -512,7 +527,6 @@ public:
|
||||||
|
|
||||||
void serializeNetworkSpecific(std::ostream &os, u16 net_proto_version);
|
void serializeNetworkSpecific(std::ostream &os, u16 net_proto_version);
|
||||||
void deSerializeNetworkSpecific(std::istream &is);
|
void deSerializeNetworkSpecific(std::istream &is);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*
|
/*
|
||||||
Private methods
|
Private methods
|
||||||
|
|
|
@ -143,11 +143,6 @@ struct MapNode
|
||||||
MapNode()
|
MapNode()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
MapNode(const MapNode & n)
|
|
||||||
{
|
|
||||||
*this = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
MapNode(content_t content, u8 a_param1=0, u8 a_param2=0)
|
MapNode(content_t content, u8 a_param1=0, u8 a_param2=0)
|
||||||
: param0(content),
|
: param0(content),
|
||||||
param1(a_param1),
|
param1(a_param1),
|
||||||
|
|
Loading…
Reference in New Issue