Commit 44899741 authored by Libor Moravčík's avatar Libor Moravčík
Browse files

Added back collision override methods to CollisionMatrix for specifically...

Added back collision override methods to CollisionMatrix for specifically enabling/disabling collision for pair of colliders
parent c174b69f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -44,6 +44,10 @@ struct CollisionMatrix final : public com::File
	bool should_collide(Collider const * a, Collider const * b) const;
	void print(std::ostream &out = std::cout, std::size_t n = LayerSystem::NUMBER_OF_LAYERS);

	void override(Collider const *a, Collider const *b, bool value);
	void remove_override(Collider const *a, Collider const *b);
	void clear_overrides();

      protected:
	void initialize() override;

@@ -52,6 +56,7 @@ struct CollisionMatrix final : public com::File
	bool get_matrix_element(std::size_t i, std::size_t j) const;
	int matrix_index(std::size_t i, std::size_t j) const;
	std::array<bool, MATRIX_SIZE> m_matrix{};
	std::unordered_map<CollidersPair, bool> m_overrides;
};
} // namespace phx::coll

+24 −0
Original line number Diff line number Diff line
@@ -76,9 +76,33 @@ bool CollisionMatrix::should_collide(std::size_t layer_a,

bool CollisionMatrix::should_collide(Collider const * a, Collider const * b) const
{
	if (a > b) { std::swap(a,b); }
	
	if (m_overrides.contains({a,b}))
	{
		return m_overrides.at({a,b});
	}

	return should_collide(a->collision_layer(), b->collision_layer());
}

void CollisionMatrix::override(Collider const *a, Collider const *b, bool value)
{
	if (a > b) { std::swap(a,b); }
	m_overrides[{a,b}] = value;
}

void CollisionMatrix::remove_override(Collider const *a, Collider const *b)
{
	if (a > b) { std::swap(a,b); }
	m_overrides.erase({a, b});
}

void CollisionMatrix::clear_overrides()
{
	m_overrides.clear();
}

// Protected methods
void CollisionMatrix::initialize()
{