wyPoint wySkeletalSprite::getBonePositionRelativeToWorld(const char* boneName) {
    // basic check
    if(!m_skeleton)
        return wypZero;

    // get bone
    wyBone* bone = m_skeleton->getBone(boneName);
    if(!bone)
        return wypZero;

    // get bone node
    wyBone::State& state = bone->getState(this);
    wyAffineTransform t = state.node->getNodeToWorldTransform();
    wyPoint pos = wyp(state.x, state.y);
    return wyaTransformPoint(t, pos);
}
Exemple #2
0
void wySpriteEx::updateVertices(wyAffineTransform& t) {
    // if not visible then everything is 0
    if(!m_visible) {
        memset(&(m_vertices), 0, sizeof(wyQuad3D));
    } else {
        float x1 = m_autoFit ? 0 : m_pointLeftBottom.x;
        float y1 = m_autoFit ? 0 : m_pointLeftBottom.y;
        float x2 = x1 + (m_autoFit ? m_width : (m_rotatedZwoptex ? m_texRect.height : m_texRect.width));
        float y2 = y1 + (m_autoFit ? m_height : (m_rotatedZwoptex ? m_texRect.width : m_texRect.height));

        m_vertices.bl_x = x1;
        m_vertices.bl_y = y1;
        m_vertices.bl_z = 0;
        m_vertices.br_x = x2;
        m_vertices.br_y = y1;
        m_vertices.br_z = 0;
        m_vertices.tl_x = x1;
        m_vertices.tl_y = y2;
        m_vertices.tl_z = 0;
        m_vertices.tr_x = x2;
        m_vertices.tr_y = y2;
        m_vertices.tr_z = 0;

        if(m_flipY) {
            // adjust vertices y value
            m_vertices.bl_y = m_height - m_vertices.bl_y;
            m_vertices.br_y = m_height - m_vertices.br_y;
            m_vertices.tl_y = m_height - m_vertices.tl_y;
            m_vertices.tr_y = m_height - m_vertices.tr_y;

            // swap bl and tl, swap br and tr
            wyUtils::swap((float*)&m_vertices, 0, 6);
            wyUtils::swap((float*)&m_vertices, 1, 7);
            wyUtils::swap((float*)&m_vertices, 2, 8);
            wyUtils::swap((float*)&m_vertices, 3, 9);
            wyUtils::swap((float*)&m_vertices, 4, 10);
            wyUtils::swap((float*)&m_vertices, 5, 11);
        }

        if(m_flipX) {
            // adjust vertices x value
            m_vertices.bl_x = m_width - m_vertices.bl_x;
            m_vertices.br_x = m_width - m_vertices.br_x;
            m_vertices.tl_x = m_width - m_vertices.tl_x;
            m_vertices.tr_x = m_width - m_vertices.tr_x;

            // swap bl and br, swap tl and tr
            wyUtils::swap((float*)&m_vertices, 0, 3);
            wyUtils::swap((float*)&m_vertices, 1, 4);
            wyUtils::swap((float*)&m_vertices, 2, 5);
            wyUtils::swap((float*)&m_vertices, 6, 9);
            wyUtils::swap((float*)&m_vertices, 7, 10);
            wyUtils::swap((float*)&m_vertices, 8, 11);
        }

        wyPoint temp;
        temp.x = m_vertices.bl_x;
        temp.y = m_vertices.bl_y;
        temp = wyaTransformPoint(t, temp);
        m_vertices.bl_x = temp.x;
        m_vertices.bl_y = temp.y;

        temp.x = m_vertices.br_x;
        temp.y = m_vertices.br_y;
        temp = wyaTransformPoint(t, temp);
        m_vertices.br_x = temp.x;
        m_vertices.br_y = temp.y;

        temp.x = m_vertices.tl_x;
        temp.y = m_vertices.tl_y;
        temp = wyaTransformPoint(t, temp);
        m_vertices.tl_x = temp.x;
        m_vertices.tl_y = temp.y;

        temp.x = m_vertices.tr_x;
        temp.y = m_vertices.tr_y;
        temp = wyaTransformPoint(t, temp);
        m_vertices.tr_x = temp.x;
        m_vertices.tr_y = temp.y;
    }
}
Exemple #3
0
wyPoint wyNode::nodeToParentSpace(wyPoint p) {
    updateNodeToParentTransform();
    return wyaTransformPoint(m_transformMatrix, p);
}
Exemple #4
0
wyPoint wyNode::parentToNodeSpace(wyPoint p) {
    updateParentToNodeTransform();
    return wyaTransformPoint(m_inverseMatrix, p);
}
Exemple #5
0
wyPoint wyNode::nodeToWorldSpace(wyPoint p) {
    wyAffineTransform t = getNodeToWorldTransform();
    return wyaTransformPoint(t, p);
}
Exemple #6
0
wyPoint wyNode::worldToNodeSpace(wyPoint p) {
    wyAffineTransform t = getWorldToNodeTransform();
    return wyaTransformPoint(t, p);
}