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

Method populateCollisionTileArray

engine/src/entity.cpp:118–164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

116}
117
118void 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
166bool Entity::tileIntersectionTest(StaticObject* ptile, Collision& collision,
167 unsigned short flags)

Callers

nothing calls this directly

Calls 3

Vector2Class · 0.85
worldToTileFunction · 0.85
StaticObjectClass · 0.85

Tested by

no test coverage detected