Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //asta-i functia de-mi detecteaza coliziunea
- bool Engine::handleCollision(Tank* tankToCheck, sf::FloatRect& intersection)
- {
- sf::FloatRect firstSpriteBounds = tankToCheck->m_tankSprite.getGlobalBounds();
- for (auto &enemyTank : m_enemyTanks) {
- if (tankToCheck == enemyTank.get())
- continue;
- sf::FloatRect secondSpriteBounds = enemyTank->m_tankSprite.getGlobalBounds();
- if (firstSpriteBounds.intersects(secondSpriteBounds, intersection)) {
- return true;
- }
- }
- if (tankToCheck != m_localPlayerTank.get()) {
- if (firstSpriteBounds.intersects(m_localPlayerTank->m_tankSprite.getGlobalBounds(), intersection)) {
- return true;
- }
- }
- for (auto &entity : m_worldEntities) {
- if (entity->getType() == entityType::Bush)
- continue;
- if (entity->getType() == entityType::Ice)
- continue;
- sf::FloatRect secondSpriteBounds = entity->getSprite().getGlobalBounds();
- if (firstSpriteBounds.intersects(secondSpriteBounds, intersection)) {
- return true;
- }
- }
- return false;
- }
- //asta-i functia de-mi misca tancurile, unde scade intersectia in caz de coliziune
- bool Engine::moveTank(Tank* tankToMove, const char direction, float speed)
- {
- sf::FloatRect intersection;
- switch (direction) {
- case DIR_UP:
- tankToMove->m_tankSprite.move(0, -speed);
- if (handleCollision(tankToMove, intersection)) {
- tankToMove->m_tankSprite.move(0, intersection.height);
- return false;
- }
- if (tankToMove->m_tankSprite.getRotation() != 0)
- tankToMove->m_tankSprite.setRotation(0.f);
- break;
- case DIR_DOWN:
- tankToMove->m_tankSprite.move(0, speed);
- if (handleCollision(tankToMove, intersection)) {
- tankToMove->m_tankSprite.move(0, -intersection.height);
- return false;
- }
- if (tankToMove->m_tankSprite.getRotation() != 180)
- tankToMove->m_tankSprite.setRotation(180.f);
- break;
- case DIR_LEFT:
- tankToMove->m_tankSprite.move(-speed, 0);
- if (handleCollision(tankToMove, intersection)) {
- tankToMove->m_tankSprite.move(intersection.width, 0);
- return false;
- }
- if (tankToMove->m_tankSprite.getRotation() != -90)
- tankToMove->m_tankSprite.setRotation(-90.f);
- break;
- case DIR_RIGHT:
- tankToMove->m_tankSprite.move(speed, 0);
- if (handleCollision(tankToMove, intersection)) {
- tankToMove->m_tankSprite.move(-intersection.width, 0);
- return false;
- }
- if (tankToMove->m_tankSprite.getRotation() != 90)
- tankToMove->m_tankSprite.setRotation(90.f);
- break;
- }
- // daca s-a executat miscarea, returnam true
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement