summaryrefslogtreecommitdiff
path: root/src/environment.cpp
diff options
context:
space:
mode:
authorEkdohibs <nathanael.courant@laposte.net>2016-03-21 12:58:52 +0100
committerparamat <mat.gregory@virginmedia.com>2016-06-11 23:35:17 +0100
commit559dd9946988cd35a7c26bcafe7d0f8c42dc547a (patch)
treefb898f7202095e2bdb996820370dd139b82b30ee /src/environment.cpp
parent27aff22a9b68044d3ea51db731597834336effa3 (diff)
downloadminetest-559dd9946988cd35a7c26bcafe7d0f8c42dc547a.tar.gz
minetest-559dd9946988cd35a7c26bcafe7d0f8c42dc547a.tar.bz2
minetest-559dd9946988cd35a7c26bcafe7d0f8c42dc547a.zip
Make node timers more efficient
Diffstat (limited to 'src/environment.cpp')
-rw-r--r--src/environment.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index 413bc7ff1..eea264699 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -1030,17 +1030,17 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
m_lbm_mgr.applyLBMs(this, block, stamp);
// Run node timers
- std::map<v3s16, NodeTimer> elapsed_timers =
+ std::vector<NodeTimer> elapsed_timers =
block->m_node_timers.step((float)dtime_s);
- if(!elapsed_timers.empty()){
+ if (!elapsed_timers.empty()) {
MapNode n;
- for(std::map<v3s16, NodeTimer>::iterator
+ for (std::vector<NodeTimer>::iterator
i = elapsed_timers.begin();
i != elapsed_timers.end(); ++i){
- n = block->getNodeNoEx(i->first);
- v3s16 p = i->first + block->getPosRelative();
- if(m_script->node_on_timer(p,n,i->second.elapsed))
- block->setNodeTimer(i->first,NodeTimer(i->second.timeout,0));
+ n = block->getNodeNoEx(i->position);
+ v3s16 p = i->position + block->getPosRelative();
+ if (m_script->node_on_timer(p, n, i->elapsed))
+ block->setNodeTimer(NodeTimer(i->timeout, 0, i->position));
}
}
@@ -1434,17 +1434,19 @@ void ServerEnvironment::step(float dtime)
MOD_REASON_BLOCK_EXPIRED);
// Run node timers
- std::map<v3s16, NodeTimer> elapsed_timers =
+ std::vector<NodeTimer> elapsed_timers =
block->m_node_timers.step((float)dtime);
- if(!elapsed_timers.empty()){
+ if (!elapsed_timers.empty()) {
MapNode n;
- for(std::map<v3s16, NodeTimer>::iterator
+ for (std::vector<NodeTimer>::iterator
i = elapsed_timers.begin();
- i != elapsed_timers.end(); ++i){
- n = block->getNodeNoEx(i->first);
- p = i->first + block->getPosRelative();
- if(m_script->node_on_timer(p,n,i->second.elapsed))
- block->setNodeTimer(i->first,NodeTimer(i->second.timeout,0));
+ i != elapsed_timers.end(); ++i) {
+ n = block->getNodeNoEx(i->position);
+ p = i->position + block->getPosRelative();
+ if (m_script->node_on_timer(p, n, i->elapsed)) {
+ block->setNodeTimer(NodeTimer(
+ i->timeout, 0, i->position));
+ }
}
}
}