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); }
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; } }
wyPoint wyNode::nodeToParentSpace(wyPoint p) { updateNodeToParentTransform(); return wyaTransformPoint(m_transformMatrix, p); }
wyPoint wyNode::parentToNodeSpace(wyPoint p) { updateParentToNodeTransform(); return wyaTransformPoint(m_inverseMatrix, p); }
wyPoint wyNode::nodeToWorldSpace(wyPoint p) { wyAffineTransform t = getNodeToWorldTransform(); return wyaTransformPoint(t, p); }
wyPoint wyNode::worldToNodeSpace(wyPoint p) { wyAffineTransform t = getWorldToNodeTransform(); return wyaTransformPoint(t, p); }