MCPcopy Create free account
hub / github.com/atraczyk/2d-engine / resolveTileCollisions

Method resolveTileCollisions

engine/src/entity.cpp:812–1012  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

810}
811
812void Player::resolveTileCollisions(bool dynamic)
813{
814 numCollisions = 0;
815 totalCollisions = 0;
816 collisionInfos.clear();
817
818 Collision collision;
819 std::vector<Collision> collisions;
820 Collision bestXCollision;
821 Collision bestYCollision;
822 Collision bestXYCollision;
823 bestYCollision.y = -1;
824 float area = 0.0f;
825 float area_sum = 0.0f;
826 float tileheight = 0.0f;
827
828 if (collidableTiles.tileObjects.size() > 0)
829 tileheight = collidableTiles.tileObjects[0].size.y;
830
831 for (int i = 0; i < collidableTiles.tileObjects.size(); i++)
832 {
833 collision.Initialize();
834 if (tileIntersectionTest(&collidableTiles.tileObjects[i], collision,
835 collidableTiles.tileFlags[i]))
836 {
837 totalCollisions++;
838 area = intersectionArea(&collidableTiles.tileObjects[i]);
839 std::string axis =
840 (collision.topCollision || collision.bottomCollision) ? "y"
841 : "x";
842 axis =
843 (collision.leftSlopeCollision || collision.rightSlopeCollision)
844 ? "xy"
845 : axis;
846
847 if (area > 0.0f)
848 {
849 if (!dynamic && !(collision.flags == CT_TOP) &&
850 !axis.compare("y"))
851 area_sum += area;
852 collisionInfos.push_back(
853 CollisionInfo(area, axis, collidableTiles.tileIndices[i]));
854 collisions.push_back(Collision(
855 collision.minimumTranslation, area, collision.leftCollision,
856 collision.rightCollision, collision.bottomCollision,
857 collision.topCollision, collision.leftSlopeCollision,
858 collision.rightSlopeCollision,
859 collidableTiles.tileObjects[i].position.x,
860 collidableTiles.tileObjects[i].position.y, collision.flags,
861 collision.centerInBetween, collidableTiles.tileIndices[i],
862 collidableTiles.velocity));
863 }
864 }
865 }
866
867 // descending sort
868 std::sort(collisions.begin(), collisions.end(),
869 [](Collision const& a, Collision const& b) -> bool

Callers

nothing calls this directly

Calls 4

CollisionInfoClass · 0.85
CollisionClass · 0.85
PointClass · 0.85
PlaySfxMethod · 0.80

Tested by

no test coverage detected