| 116 | } |
| 117 | |
| 118 | void Entity::populateCollisionTileArray(TileMap* pcollisionmap) |
| 119 | { |
| 120 | collidableTiles.tileObjects.clear(); |
| 121 | collidableTiles.tileFlags.clear(); |
| 122 | collidableTiles.tileIndices.clear(); |
| 123 | collidableTiles.velocity = Vector2(0, 0); |
| 124 | |
| 125 | Point BottomLeft = |
| 126 | worldToTile(position + Vector2(leftPadding, bottomPadding) - |
| 127 | pcollisionmap->position, |
| 128 | pcollisionmap->w_tileSize); |
| 129 | Point TopRight = worldToTile(position - Vector2(rightPadding, topPadding) + |
| 130 | size - pcollisionmap->position, |
| 131 | pcollisionmap->w_tileSize); |
| 132 | |
| 133 | Point min; |
| 134 | Point max; |
| 135 | |
| 136 | min.x = std::max(0, BottomLeft.x); |
| 137 | min.y = std::max(0, BottomLeft.y); |
| 138 | max.x = std::min(TopRight.x + 1, pcollisionmap->t_mapSize.x); |
| 139 | max.y = std::min(TopRight.y + 1, pcollisionmap->t_mapSize.y); |
| 140 | |
| 141 | float tx, ty; |
| 142 | |
| 143 | for (int y = min.y; y < max.y; y++) |
| 144 | { |
| 145 | for (int x = min.x; x < max.x; x++) |
| 146 | { |
| 147 | if (pcollisionmap->collisionLayer[x][y].isCollidable) |
| 148 | { |
| 149 | tx = (float)(x * pcollisionmap->w_tileSize.x) + |
| 150 | pcollisionmap->position.x; |
| 151 | ty = (float)(y * pcollisionmap->w_tileSize.y) + |
| 152 | pcollisionmap->position.y; |
| 153 | collidableTiles.tileObjects.push_back(StaticObject( |
| 154 | Vector2(tx, ty), Vector2(pcollisionmap->w_tileSize.x, |
| 155 | pcollisionmap->w_tileSize.y))); |
| 156 | collidableTiles.tileFlags.push_back( |
| 157 | pcollisionmap->collisionLayer[x][y].collisionFlags); |
| 158 | collidableTiles.tileIndices.push_back( |
| 159 | pcollisionmap->imageLayer[x][y].tileIndex); |
| 160 | collidableTiles.velocity = pcollisionmap->velocity; |
| 161 | } |
| 162 | } |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | bool Entity::tileIntersectionTest(StaticObject* ptile, Collision& collision, |
| 167 | unsigned short flags) |
nothing calls this directly
no test coverage detected