void PlayerObject::update(vec2 accel, float timeStep, std::vector<Object> worldObjects) { speed += (accel * timeStep); desiredPos += (speed * timeStep); boundingCircle.center = desiredPos; bool collide = false; for (auto &object : worldObjects) { vec2 collisionVec = checkCollision(object.boundingBox, boundingCircle); if (collisionVec != vec2(0.f, 0.f)){ collide = true; speed = speed - (collisionVec * dotProduct(speed, collisionVec)) * 1.85f; break; } } if (!collide){ position = desiredPos; entity->setPos(desiredPos.x, desiredPos.y); } else{ desiredPos = position; boundingCircle.center = position; } if (!isOnScreen(vec2(1280, 720), boundingCircle.center)) { vec2 a(600, 0); entity->setPos(a.x, a.y); position = a; desiredPos = position; boundingCircle = BoundingCircle(position, size.x / 2); speed = vec2(0, 0); } }
BoundingCircle Tile::getBoundingCircle() { return BoundingCircle(position, hexRadius); }
BoundingCircle Virus::getTakeoverCircle() { return BoundingCircle(position, virusData->getTakeoverRadius()); }
BoundingCircle Antibody::getBoundingCircle() { return BoundingCircle(position, 0.0); }
BoundingCircle Virus::getBoundingCircle() { return BoundingCircle(position, virusData->getRadius()); }