void IkSolver::solveIk(int maxIterations, double threshold) { if (ikChain.size() == 0) buildChain(*rootBone, *effectorBone, ikChain); for (int i = 0; i < maxIterations; ++i) { // perform basic CCD stepIk(); // need the bone transforms to be valid again afterwards for consistency updateBoneTransforms(); vec3d delta = getEffectorPos() - getTargetPos(); if (abs(dot(delta,delta)) < threshold*threshold) break; } }
void NegateMagicSpell::Launch() { if(m_caster == PlayerEntityHandle) { m_target = PlayerEntityHandle; } ARX_SOUND_PlaySFX(SND_SPELL_NEGATE_MAGIC, &entities[m_target]->pos); m_hasDuration = true; m_fManaCostPerSecond = 2.f; m_duration = (m_launchDuration > -1) ? m_launchDuration : 1000000; m_pos = getTargetPos(m_caster, m_target); tex_p2 = TextureContainer::Load("graph/obj3d/textures/(fx)_tsu_bluepouf"); tex_sol = TextureContainer::Load("graph/obj3d/textures/(fx)_negate_magic"); LaunchAntiMagicField(); }
void CurseSpell::Launch() { spells.endByCaster(m_target, SPELL_CURSE); ARX_SOUND_PlaySFX(SND_SPELL_CURSE, &entities[m_target]->pos); m_duration = (m_launchDuration > -1) ? m_launchDuration : 2000000; m_hasDuration = true; m_fManaCostPerSecond = 0.5f * m_level; Vec3f target = getTargetPos(m_caster, m_target); if(m_target == PlayerEntityHandle) { target.y -= 200.f; } else if(ValidIONum(m_target)) { target.y += entities[m_target]->physics.cyl.height - 50.f; } m_pos = target; fRot = 0.f; tex_p1 = TextureContainer::Load("graph/obj3d/textures/(fx)_tsu_blueting"); m_targets.push_back(m_target); }
void PageScrollView::update(float dt) { if(!isTouchMoving){ int currId = getCurrentNodeId(); if(PH::easing(content , getTargetPos()) && currIdCashe != currId) { callBack(nodes[currId]); currIdCashe = currId; } } if(isShowOne && !isViewStop){ for(boost::container::flat_map<int, cocos2d::CCSprite*>::iterator it = nodes.begin() ; it != nodes.end() ; it++) it->second->setOpacity(0); float tp = -page.width*getCurrentNodeId(); float cp = content->getPositionX(); float temp = abs(tp - cp)/page.width; int id = getCurrentNodeId(); nodes[id]->setOpacity(255*(1-temp)); if(id < size-1 && cp < tp)nodes[id+1]->setOpacity(255*temp); if(id > 0 && cp > tp)nodes[id-1]->setOpacity(255*temp); } }
Transform MotionData::getTargetTransform() { return Transform({getTargetPos(), getTargetOrient()}); }
void VcfMaterializer::_appendToVariants(Variants & variants, seqan::VcfRecord const & vcfRecord) { // Compute maximal length of alternative. unsigned altLength = 0; seqan::StringSet<seqan::CharString> alts; strSplit(alts, vcfRecord.alt, seqan::EqualsChar<','>()); for (unsigned i = 0; i < length(alts); ++i) altLength = std::max(altLength, (unsigned)length(alts[i])); if (contains(vcfRecord.info, "SVTYPE")) // Structural Variant { StructuralVariantRecord svRecord; svRecord.rId = vcfRecord.rID; svRecord.pos = vcfRecord.beginPos + 1; // given with shift of -1 svRecord.haplotype = 0; SEQAN_ASSERT_EQ(length(alts), 1u); if (contains(vcfRecord.info, "SVTYPE=INS")) // Insertion { svRecord.kind = StructuralVariantRecord::INDEL; svRecord.size = getSVLen(vcfRecord.info); svRecord.seq = suffix(vcfRecord.alt, 1); } else if (contains(vcfRecord.info, "SVTYPE=DEL")) // Deletion { svRecord.kind = StructuralVariantRecord::INDEL; svRecord.size = getSVLen(vcfRecord.info); } else if (contains(vcfRecord.info, "SVTYPE=INV")) // Inversion { svRecord.kind = StructuralVariantRecord::INVERSION; svRecord.size = getSVLen(vcfRecord.info); } else if (contains(vcfRecord.info, "SVTYPE=DUP")) // Duplication { svRecord.kind = StructuralVariantRecord::DUPLICATION; svRecord.size = getSVLen(vcfRecord.info); std::pair<seqan::CharString, int> pos = getTargetPos(vcfRecord.info); unsigned idx = 0; if (!getIdByName(idx, contigNamesCache(context(vcfFileIn)), pos.first)) SEQAN_FAIL("Unknown sequence %s", toCString(pos.first)); svRecord.targetRId = idx; svRecord.targetPos = pos.second - 1; } else if (contains(vcfRecord.info, "SVTYPE=BND")) // Breakend (Must be Translocation) { SEQAN_FAIL("Unexpected 'SVTYPE=BND' at this place!"); } else { SEQAN_FAIL("ERROR: Unknown SVTYPE!\n"); } // Split the target variants. SEQAN_ASSERT_NOT(empty(vcfRecord.genotypeInfos)); seqan::DirectionIterator<seqan::CharString const, seqan::Input>::Type inputIter = directionIterator(vcfRecord.genotypeInfos[0], seqan::Input()); seqan::CharString buffer; svRecord.haplotype = 0; for (; !atEnd(inputIter); ++inputIter) if ((*inputIter == '|' || *inputIter == '/')) { if (!empty(buffer)) { unsigned idx = std::min(seqan::lexicalCast<unsigned>(buffer), 1u); if (idx != 0u) // if not == ref appendValue(variants.svRecords, svRecord); } svRecord.haplotype++; clear(buffer); } else { appendValue(buffer, *inputIter); } if (!empty(buffer)) { unsigned idx = std::min(seqan::lexicalCast<unsigned>(buffer), 1u); if (idx != 0u) // if not == ref appendValue(variants.svRecords, svRecord); } } else if (length(vcfRecord.ref) == 1u && altLength == 1u) // SNP { SnpRecord snpRecord; snpRecord.rId = vcfRecord.rID; snpRecord.pos = vcfRecord.beginPos; // Split the alternatives. seqan::StringSet<seqan::CharString> alternatives; strSplit(alternatives, vcfRecord.alt, seqan::EqualsChar<','>()); // Split the target variants. SEQAN_ASSERT_NOT(empty(vcfRecord.genotypeInfos)); seqan::DirectionIterator<seqan::CharString const, seqan::Input>::Type inputIter = directionIterator(vcfRecord.genotypeInfos[0], seqan::Input()); seqan::CharString buffer; snpRecord.haplotype = 0; for (; !atEnd(inputIter); ++inputIter) if ((*inputIter == '|' || *inputIter == '/')) { if (!empty(buffer)) { unsigned idx = std::min(seqan::lexicalCast<unsigned>(buffer), (unsigned)length(alternatives)); if (idx != 0u) // if not == ref { SEQAN_ASSERT_NOT(empty(alternatives[idx - 1])); snpRecord.to = alternatives[idx - 1][0]; appendValue(variants.snps, snpRecord); } } snpRecord.haplotype++; clear(buffer); } else { appendValue(buffer, *inputIter); } if (!empty(buffer)) { unsigned idx = std::min(seqan::lexicalCast<unsigned>(buffer), (unsigned)length(alternatives)); if (idx != 0u) // if not == ref { SEQAN_ASSERT_NOT(empty(alternatives[idx - 1])); snpRecord.to = alternatives[idx - 1][0]; appendValue(variants.snps, snpRecord); } } } else // Small Indel { SmallIndelRecord smallIndel; smallIndel.rId = vcfRecord.rID; smallIndel.pos = vcfRecord.beginPos + 1; SEQAN_ASSERT_NOT(contains(vcfRecord.alt, ",")); // only one alternative SEQAN_ASSERT((length(vcfRecord.alt) == 1u) != (length(vcfRecord.ref) == 1u)); // XOR smallIndel.haplotype = 0; if (length(vcfRecord.ref) == 1u) // insertion { smallIndel.seq = suffix(vcfRecord.alt, 1); smallIndel.size = length(smallIndel.seq); } else // deletion { smallIndel.size = -(int)(length(vcfRecord.ref) - 1); } // Split the target variants. SEQAN_ASSERT_NOT(empty(vcfRecord.genotypeInfos)); seqan::DirectionIterator<seqan::CharString const, seqan::Input>::Type inputIter = directionIterator(vcfRecord.genotypeInfos[0], seqan::Input()); seqan::CharString buffer; smallIndel.haplotype = 0; for (; !atEnd(inputIter); ++inputIter) if ((*inputIter == '|' || *inputIter == '/')) { if (!empty(buffer)) { unsigned idx = std::min(seqan::lexicalCast<unsigned>(buffer), 1u); if (idx != 0u) // if not == ref appendValue(variants.smallIndels, smallIndel); } smallIndel.haplotype++; clear(buffer); } else { appendValue(buffer, *inputIter); } if (!empty(buffer)) { unsigned idx = std::min(seqan::lexicalCast<unsigned>(buffer), 1u); if (idx != 0u) // if not == ref appendValue(variants.smallIndels, smallIndel); } } }