Bullet::Bullet(Circle circle, Item *p) : QBody(p) { setPosition(QPointF(circle.pos())); setLinearDamping(0); setBullet(true); setBodyType(Dynamic); auto fixture = std::make_unique<Box2DCircle>(this); fixture->setShadowCaster(false); fixture->setRadius(circle.radius()); fixture->setGroupIndex(-1); addFixture(std::move(fixture)); }
void Bullet::initialize(QWorld* w) { setBodyType(QBody::BodyType::Dynamic); auto f = std::make_unique<Box2DBox>(); QSizeF size(10, 10); f->setSize(size); f->setPosition(-QPointF(0.5 * size.width(), 0.5 * size.height())); f->setTextureSource(":/resources/punch.png"); f->setSensor(true); f->setCollidesWith( QFixture::CategoryFlag(QFixture::All & ~QFixture::Category2)); addFixture(std::move(f)); setRotation(180.0 / M_PI * atan2(-m_direction.x(), m_direction.y()) + 90.0); QBody::initialize(w); enqueueFunction(std::bind(&Bullet::onStepped, this)); }
void ScriptedPhysicsBodyDefinition::receiveMessage(const tyr::script::Message& inMessage, tyr::script::Message& outMessage) { if(inMessage.hasValue("func", tyr::ValueType::String)) { std::string func = inMessage.getValue("func").string; if(func == "addBox") { float x, y, z; x = inMessage.getValue("x").number; y = inMessage.getValue("y").number; z = inMessage.getValue("z").number; addBox(glm::vec3(x, y, z)); } if(func == "setBodyType") { int type = inMessage.getValue("type").number; setBodyType(static_cast<tyr::physics::BodyType>(type)); } } }
Player::Player(Item* parent) : QBody(parent), m_currentPathPoint(), m_going(false), m_punchSound(std::make_shared<QSound>(":/resources/punch_sound.wav")), m_object(this), m_score() { setBodyType(QBody::BodyType::Dynamic); auto circle = std::make_unique<Box2DCircle>(); circle->setRadius(2.5); circle->setFriction(0.0); circle->setDensity(1.0); circle->setPosition(QPointF(-2.5, -2.5)); circle->setCategories(QFixture::Category2); circle->setCollidesWith(QFixture::Category1); circle->setRestitution(0.2); addFixture(std::move(circle)); setPosition(QPointF(70, 950)); setLinearDamping(5); setAngularDamping(5); }