mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-05-26 07:49:33 +00:00
Optimizing view iterators
This commit is contained in:
@@ -19,9 +19,9 @@ namespace WAL
|
||||
class ViewEntity
|
||||
{
|
||||
private:
|
||||
std::tuple<std::reference_wrapper<Entity>, std::reference_wrapper<Components>...> _value;
|
||||
std::tuple<std::reference_wrapper<Entity>, std::reference_wrapper<Components>...> &_value;
|
||||
public:
|
||||
explicit ViewEntity(std::tuple<std::reference_wrapper<Entity>, std::reference_wrapper<Components>...> value)
|
||||
explicit ViewEntity(std::tuple<std::reference_wrapper<Entity>, std::reference_wrapper<Components>...> &value)
|
||||
: _value(value)
|
||||
{}
|
||||
|
||||
@@ -63,19 +63,22 @@ namespace WAL
|
||||
public:
|
||||
ViewEntity<Components...> &operator*()
|
||||
{
|
||||
this->_entity.emplace(*this->_it);
|
||||
return this->_entity.value();
|
||||
if (!this->_entity)
|
||||
this->_entity.emplace(*this->_it);
|
||||
return *this->_entity;
|
||||
}
|
||||
|
||||
ViewEntity<Components...> *operator->()
|
||||
{
|
||||
this->_entity.emplace(*this->_it);
|
||||
if (!this->_entity)
|
||||
this->_entity =(*this->_it);
|
||||
return &this->_entity;
|
||||
}
|
||||
|
||||
ViewIterator &operator++()
|
||||
{
|
||||
this->_it++;
|
||||
this->_entity = std::nullopt;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -83,6 +86,7 @@ namespace WAL
|
||||
{
|
||||
ViewIterator copy = *this;
|
||||
this->_it++;
|
||||
this->_entity = std::nullopt;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace WAL
|
||||
//! @brief True if the engine should close after the end of the current tick.
|
||||
bool shouldClose = false;
|
||||
//! @brief The time between each fixed update.
|
||||
static constexpr std::chrono::nanoseconds timestep = std::chrono::milliseconds(8);
|
||||
static constexpr std::chrono::nanoseconds timestep = std::chrono::milliseconds(16);
|
||||
|
||||
//! @brief Create a new system in place.
|
||||
//! @return The wal instance used to call this function is returned. This allow method chaining.
|
||||
|
||||
@@ -32,13 +32,11 @@ namespace BBM
|
||||
position += movable->getVelocity();
|
||||
Vector3f minA = Vector3f::min(position, position + col.bound);
|
||||
Vector3f maxA = Vector3f::max(position, position + col.bound);
|
||||
for (auto other : this->getView()) {
|
||||
if (other->getUid() == entity->getUid())
|
||||
for (auto &[other, posB, colB] : this->getView()) {
|
||||
if (other.getUid() == entity->getUid())
|
||||
continue;
|
||||
auto colB = other.get<CollisionComponent>();
|
||||
auto posB = other.get<PositionComponent>().position;
|
||||
Vector3f minB = Vector3f::min(posB, posB + colB.bound);
|
||||
Vector3f maxB = Vector3f::max(posB, posB + colB.bound);
|
||||
Vector3f minB = Vector3f::min(posB.position, posB.position + colB.bound);
|
||||
Vector3f maxB = Vector3f::max(posB.position, posB.position + colB.bound);
|
||||
if (collide(minA, maxA, minB, maxB)) {
|
||||
col.onCollide(entity, other);
|
||||
colB.onCollided(entity, other);
|
||||
|
||||
Reference in New Issue
Block a user