Ejemplo n.º 1
0
void Entity::updateImage()
{
    static QVector<QImage> images = loadSoldierImages();
    if (m_walked)
        setImage(images.at(8 + 8 * (m_animationIndex % 4) + m_angleIndex));
    else
        setImage(images.at(m_angleIndex));
}
Ejemplo n.º 2
0
void Entity::initialize()
{
    QByteArray vsrc =
        "attribute highp vec4 vertexAttr;\n"
        "attribute highp vec2 texAttr;\n"
        "uniform mediump mat4 matrix;\n"
        "varying highp vec2 texCoord;\n"
        "void main(void)\n"
        "{\n"
        "    texCoord = texAttr;\n"
        "    gl_Position = matrix * vertexAttr;\n"
        "}\n";

    QByteArray fsrc =
        "uniform sampler2D texture;\n"
        "varying highp vec2 texCoord;\n"
        "void main(void)\n"
        "{\n"
        "    gl_FragColor = texture2D(texture, texCoord);\n"
        "}\n";

    m_program = generateShaderProgram(this, vsrc, fsrc);

    m_vertexAttr = m_program->attributeLocation("vertexAttr");
    m_texAttr = m_program->attributeLocation("texAttr");
    m_matrixUniform = m_program->uniformLocation("matrix");

    QVector<QImage> images = loadSoldierImages();
    int w = images.first().width() + 2;
    int h = images.first().height() + 2;

    m_tileMod = (images.size() + 3) / 4;

    QImage image(m_tileMod * w, 4 * h, QImage::Format_ARGB32_Premultiplied);
    image.fill(Qt::transparent);

    QPainter p(&image);
    p.setCompositionMode(QPainter::CompositionMode_Source);
    for (int i = 0; i < images.size(); ++i)
        p.drawImage(w * (i % m_tileMod) + 1, h * (i / m_tileMod) + 1, images.at(i));
    p.end();

    qDebug() << "Initialized soldier image" << image.size();

    m_tileWidth = w;
    m_tileHeight = h;

    m_texture = generateTexture(image, false, false);
    m_textureSize = image.size();
}