bool moveForDinamics(MySpriteDinamics & dinamicElement, MySpriteStatics & staticElement, GameData & gData, const std::string &staticKey, float time) { // -----------------------------реализация анимации------------------------------------------- dinamicElement.frameChangeTime += (sf::microseconds((sf::Int64)time)); sf::Time realTPF = staticElement.baseTPF / dinamicElement.mSprite.speedKoof; if (dinamicElement.frameChangeTime >= realTPF) { int frameInc = (int)(dinamicElement.frameChangeTime / realTPF); dinamicElement.frameCurrent += frameInc; if (staticElement.isCycleFrames == false && dinamicElement.frameCurrent >= staticElement.frameCount) { return true; } dinamicElement.frameCurrent = dinamicElement.frameCurrent % staticElement.frameCount; dinamicElement.frameChangeTime -= sf::microseconds(frameInc * realTPF.asMicroseconds()); } //---------------------------------------движение объекта------------------------------------- dinamicElement.sprite.setTextureRect(sf::IntRect(staticElement.frameSize.width * (dinamicElement.frameCurrent + 1), 0, -staticElement.frameSize.width, staticElement.frameSize.height)); float nextX = dinamicElement.sprite.getPosition().x + dinamicElement.mSprite.signMoveHorizont * staticElement.baseSpeedPx * dinamicElement.mSprite.speedKoof * time; float nextY = dinamicElement.sprite.getPosition().y + dinamicElement.mSprite.signMoveVertical * staticElement.baseSpeedPx * dinamicElement.mSprite.speedKoof * time; if ((nextX >= 0 && nextX < gData.window.getSize().x - staticElement.frameSize.width && nextY >= 0 && nextY < gData.window.getSize().y - staticElement.frameSize.height) || staticElement.isFlyOutOfScreen) { dinamicElement.sprite.setPosition(nextX, nextY); } else { dinamicElement.mSprite.signMoveHorizont = 0; dinamicElement.mSprite.signMoveVertical = 0; } if (dinamicElement.sprite.getPosition().x < -staticElement.frameSize.width || dinamicElement.sprite.getPosition().x > gData.window.getSize().x) { return true; } //-----------------------------------Взаимодействие объектов--------------------------------- if (collisionObject(gData, dinamicElement, staticKey)) { return true; } //-------------------------------------------------------------------------------------------- return false; }
void BulletDS::addCollisionShape(SP::btCollisionShape shape, SP::SiconosVector pos, SP::SiconosVector ori, int group) { SP::btCollisionObject collisionObject(new btCollisionObject()); collisionObject->setUserPointer(this); collisionObject->setCollisionFlags(collisionObject->getCollisionFlags()| btCollisionObject::CF_KINEMATIC_OBJECT); collisionObject->setCollisionShape(&*shape); addCollisionObject(collisionObject, pos, ori, group); }