void Game::CheckCollision() { // TODO all X and Y coords to absolute (level) values as opposed to screen values refactor this std::map<std::pair<int, int>, Entity*>* entities = level->getEntities(); for (std::map<std::pair<int, int>, Entity*>::iterator i = entities->begin(); i != entities->end(); i++) { Entity* entity = i->second; Platform* p = dynamic_cast<Platform*>(entity); int levelBlockX = i->first.second; int levelBlockY = i->first.first; if (p != NULL && p->getState() == dislodged) { p->setYOffset(p->getYOffset() + 5); //TODO needs to be a variable int currentLevelBlockX = levelBlockX; int currentLevelBlockY = levelBlockY + (p->getYOffset() + 50) / Level::BLOCK_HEIGHT_PX; if (level->getLevelCodeByBlock(currentLevelBlockX, currentLevelBlockY) == '_') { p->setState(broken); level->setLevelCodeByBlock(currentLevelBlockX,currentLevelBlockY, '$'); level->setLevelCodeByBlock(levelBlockX, levelBlockY, ' '); } else { p->setY(int(p->getY() + 5) % (Level::BLOCK_HEIGHT_PX * Level::SCENE_HEIGHT_BLK)); //p->setY((levelBlockY - level->getSceneY()) * Level::BLOCK_HEIGHT_PX + p->getYOffset() - p->getAnim()->getSheet()->getFrameHeight()); if (!level->inScene(levelBlockX, levelBlockY) && level->inScene(currentLevelBlockX, currentLevelBlockY)) { p->Animate(&graphics); } } } } collision->CheckPrinceCollision(prince); CheckCombatCollision(); }