示例#1
0
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));
}
示例#2
0
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));
}
示例#3
0
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));
        }
    }
}
示例#4
0
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);
}