summaryrefslogtreecommitdiffhomepage
path: root/src/world.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/world.cpp')
-rw-r--r--src/world.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/world.cpp b/src/world.cpp
index 028ddd45..54096608 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -78,6 +78,9 @@ world::~world() noexcept
world::world(size_t capacity) : _chunks{capacity}
{
_chunks.max_load_factor(max_load_factor);
+ _chunks.reserve(initial_capacity);
+ _entities.max_load_factor(max_load_factor);
+ _entities.reserve(initial_capacity);
}
chunk& world::operator[](chunk_coords_ coord) noexcept
@@ -112,9 +115,14 @@ bool world::contains(chunk_coords_ c) const noexcept
void world::clear()
{
+ fm_assert(!_teardown);
_last_collection = 0;
_chunks.clear();
_chunks.rehash(initial_capacity);
+ _entities.clear();
+ _entities.rehash(initial_capacity);
+ _collect_every = initial_collect_every;
+ _entity_counter = entity_counter_init;
auto& [c, pos] = _last_chunk;
c = nullptr;
pos = chunk_tuple::invalid_coords;
@@ -183,4 +191,9 @@ void world::set_entity_counter(object_id value)
_entity_counter = value;
}
+void world::throw_on_wrong_entity_type(object_id id, entity_type actual, entity_type expected)
+{
+ fm_throw("object '{}' has wrong entity type '{}', should be '{}'"_cf, id, (size_t)actual, (size_t)expected);
+}
+
} // namespace floormat