summary refs log tree commit diff stats
path: root/src/simulation.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2019-02-23 12:15:46 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2019-02-23 12:15:46 -0500
commit3504fd5080dbcfd0172299c5c6d13895e53ad163 (patch)
treecaab8e868566262b3aa4d80aa6a06cdf13e7c21d /src/simulation.cpp
parent15b511e694f976686fdec1fb9f959f8a92f3b594 (diff)
downloaddispatcher-3504fd5080dbcfd0172299c5c6d13895e53ad163.tar.gz
dispatcher-3504fd5080dbcfd0172299c5c6d13895e53ad163.tar.bz2
dispatcher-3504fd5080dbcfd0172299c5c6d13895e53ad163.zip
Removed position caches
There aren't going to be enough entities at once for position checking to ever really be a bottleneck, I don't think. Removing the caches makes the range logic a bit more intuitive, and it removes the possibility of accidentally not updating a cache when it needs to be.
Diffstat (limited to 'src/simulation.cpp')
-rw-r--r--src/simulation.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/simulation.cpp b/src/simulation.cpp index f75bd3d..27ac6ab 100644 --- a/src/simulation.cpp +++ b/src/simulation.cpp
@@ -89,12 +89,6 @@ Simulation::Simulation(
89 crate2.canBePushedBy.insert(ColliderType::crate); 89 crate2.canBePushedBy.insert(ColliderType::crate);
90 crate2.canBePushedBy.insert(ColliderType::train); 90 crate2.canBePushedBy.insert(ColliderType::train);
91 crate2.gridPos = vec2s { 6, 7 }; 91 crate2.gridPos = vec2s { 6, 7 };
92
93
94 for (Entity& entity : active_ | entityView())
95 {
96 posCache_.set(entity.id, entity.gridPos);
97 }
98} 92}
99 93
100void Simulation::tick( 94void Simulation::tick(
@@ -132,8 +126,9 @@ void Simulation::tick(
132 vec2s lookPos = posInDir(entity.gridPos, lookDir); 126 vec2s lookPos = posInDir(entity.gridPos, lookDir);
133 127
134 for (Entity& block : 128 for (Entity& block :
135 posCache_.at(lookPos) | 129 active_ |
136 entityView() | 130 entityView() |
131 views::atGridPos(lookPos) |
137 views::isNotMoving() | 132 views::isNotMoving() |
138 views::canBePushedBy(entity.colliderType) | 133 views::canBePushedBy(entity.colliderType) |
139 views::isOnLayer(entity.layer)) 134 views::isOnLayer(entity.layer))
@@ -185,8 +180,9 @@ void Simulation::tick(
185 views::isNotMoving()) 180 views::isNotMoving())
186 { 181 {
187 auto tracks = 182 auto tracks =
188 posCache_.at(entity.gridPos) | 183 active_ |
189 entityView() | 184 entityView() |
185 views::atGridPos(entity.gridPos) |
190 views::isTrack(); 186 views::isTrack();
191 187
192 if (!ranges::empty(tracks)) 188 if (!ranges::empty(tracks))
@@ -233,8 +229,6 @@ void Simulation::tick(
233 { 229 {
234 entity.moving = false; 230 entity.moving = false;
235 entity.gridPos = entity.destPos; 231 entity.gridPos = entity.destPos;
236 posCache_.set(entity.id, entity.gridPos);
237 moveToCache_.remove(entity.id);
238 } 232 }
239 } 233 }
240 234
@@ -340,16 +334,18 @@ bool Simulation::moveEntityOnGrid(
340 334
341 // Can't move into a space that something else is already moving into. 335 // Can't move into a space that something else is already moving into.
342 if (!ranges::empty( 336 if (!ranges::empty(
343 moveToCache_.at(shouldMoveTo) | 337 active_ |
344 entityView() | 338 entityView() |
339 views::isMovingTo(shouldMoveTo) |
345 views::isOnLayer(entity.layer))) 340 views::isOnLayer(entity.layer)))
346 { 341 {
347 return false; 342 return false;
348 } 343 }
349 344
350 for (Entity& block : 345 for (Entity& block :
351 posCache_.at(shouldMoveTo) | 346 active_ |
352 entityView() | 347 entityView() |
348 views::atGridPos(shouldMoveTo) |
353 views::isOnLayer(entity.layer)) 349 views::isOnLayer(entity.layer))
354 { 350 {
355 if (!block.moving) 351 if (!block.moving)
@@ -389,8 +385,6 @@ bool Simulation::moveEntityOnGrid(
389 entity.destPos = shouldMoveTo; 385 entity.destPos = shouldMoveTo;
390 entity.movementTween = 0.0; 386 entity.movementTween = 0.0;
391 entity.moveDir = moveDir; 387 entity.moveDir = moveDir;
392
393 moveToCache_.set(entity.id, entity.destPos);
394 } 388 }
395 389
396 return true; 390 return true;