void HpAnimate::step(float dt) { if(_firstTick) { _elapsed = m_start; m_start = 0; _firstTick = false; } else { _elapsed += dt; } HpCharaInst* target = dynamic_cast<HpCharaInst*> (_target); target->setAni(m_anima, _elapsed * target->getFps()); HPLOG(" HpAnimate.....step isDone %d m_elapsed %f m_fDuration %f", isDone(), m_elapsed, m_fDuration); if(m_not_done && this->isDone()) { m_not_done = false; this->retain(); target->retain(); HPLOG(" HpAnimate.....step isDone = true m_repeat_count = %d; m_repeat_num = %d ", m_repeat_count, m_repeat_number); target->onAnimationEnd(getRepeatNumber() == 0 ? false : (++ m_repeat_count == this->getRepeatNumber()) && getAutoDestroy()); target->release(); this->release(); } }
void PlaneWellLog::calcCoordinates(const osg::Vec3& normal) { int nrSamples = _logPath->size(); const bool doFill = (getLogItem() != LOGLINE_ONLY); const osg::Vec3 appliedDir = normal * _logWidth; const osg::Vec3 emptyPnt( 0, 0, 0 ); for ( int idx=0; idx<nrSamples; idx++ ) { const float shpFactor = _coordLinedFactors->at(idx) ; const osg::Vec3 pathCoord = _logPath->at(idx); (*_logLinedPoints)[idx] = (_lineWidth->getWidth() > 0) ? ( pathCoord + appliedDir * shpFactor ) : emptyPnt; if ( doFill ) { const int idx1 = 2*idx; const int idx2 = idx1+1; const float shpfactor1 = _coordLinedTriFactors->at(2*idx) ; const float shpfactor2 = _coordLinedTriFactors->at(2*idx + 1) ; if ( (int)_logLinedTriPoints->size() > nrSamples && std::find(_outFillIndex.begin(),_outFillIndex.end(), idx) != _outFillIndex.end() ) { if( idx < (int)_logLinedTriPoints->size() ) { (*_logLinedTriPoints)[idx1] = pathCoord + appliedDir * shpfactor1; (*_logLinedTriPoints)[idx2] = pathCoord + appliedDir * shpfactor1; continue; } } (*_logLinedTriPoints)[idx1] = pathCoord + appliedDir * shpfactor1; (*_logLinedTriPoints)[idx2] = pathCoord + appliedDir * shpfactor2; } } _logLinedPoints->dirty(); if ( doFill ) _logLinedTriPoints->dirty(); _forceCoordReCalculation = false; _trianglePrimitiveSet->setCount(_logLinedTriPoints->size()); _lineGeometry->dirtyDisplayList(); _triangleGeometry->dirtyDisplayList(); _lineGeometry->dirtyBound(); _triangleGeometry->dirtyBound(); const osg::BoundingBox& bb = _triangleGeometry->getBound(); _triGeometryWidth = osg::Vec2(bb.xMax()-bb.xMin(), bb.yMax()-bb.yMin() ).length(); if ( getRepeatNumber() > 1 ) dirtyBound(); }
void PlaneWellLog::setRepeatGap (float repeatgap) { if ( _repeatGap != repeatgap ) { _repeatGap = repeatgap; if ( getRepeatNumber() > 1 ) dirtyBound(); } }