| 810 | } |
| 811 | |
| 812 | void 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 |
nothing calls this directly
no test coverage detected