OBB* RagDoll::CreateBoneBox(Bone* parent, Bone *bone, D3DXVECTOR3 size, D3DXQUATERNION rot) { if (bone == NULL || parent == NULL) return NULL; D3DXMATRIX &parentMat = parent->CombinedTransformationMatrix; D3DXMATRIX &boneMat = bone->CombinedTransformationMatrix; D3DXVECTOR3 parentPos(parentMat(3, 0), parentMat(3, 1), parentMat(3, 2)); D3DXVECTOR3 bonePos(boneMat(3, 0), boneMat(3, 1), boneMat(3, 2)); D3DXQUATERNION q; D3DXVECTOR3 p, s; D3DXMatrixDecompose(&s, &q, &p, &parentMat); q *= rot; D3DXQuaternionNormalize(&q, &q); p = (parentPos + bonePos) * 0.5f; OBB *obb = new OBB(p, size, q, true); physicsEngine.GetWorld()->addRigidBody(obb->m_pBody); m_boxes.push_back(obb); parent->m_pObb = obb; parent->m_pivot = obb->SetPivot(parentPos); return obb; }
void Component::updateModelMatrix() { glm::vec3 parentPos(0.f); if (m_parent) parentPos = m_parent->getAbsolutePosition(); m_modelMat = glm::translate(m_position + parentPos) * glm::scale(glm::vec3(m_size, 1.f)); for (auto& child : m_children) child->updateModelMatrix(); }
void MapView::setSelection(const Location *o) { selection = o; QPoint pos(galaxyToScreen(QPoint(o->GetPosX(), o->GetPosY()))); QRect updateRect(pos, QSize(60, 60)); updateRect.translate(-30, -30); QPoint parentPos(mapToParent(updateRect.topLeft())); QRect viewportUpdateRect(parentPos, updateRect.size()); if(viewportUpdateRect.intersects(parentWidget()->contentsRect())) { update(updateRect); parentWidget()->update(viewportUpdateRect); } }
void MapView::clearSelection() { if(selection != NULL) { QPoint pos(galaxyToScreen(QPoint(selection->GetPosX(), selection->GetPosY()))); QRect updateRect(pos, QSize(60, 60)); updateRect.translate(-30, -30); QPoint parentPos(mapToParent(updateRect.topLeft())); QRect viewportUpdateRect(parentPos, updateRect.size()); selection = NULL; if(viewportUpdateRect.intersects(parentWidget()->contentsRect())) { update(updateRect); parentWidget()->update(viewportUpdateRect); } } }