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)); }
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(); }