示例#1
0
文件: HpAnimate.cpp 项目: hyizsg/HM_3
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();
    }
}
示例#2
0
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();
}
示例#3
0
void PlaneWellLog::setRepeatGap (float repeatgap)
{
    if ( _repeatGap != repeatgap )
    {
	_repeatGap = repeatgap;
	if ( getRepeatNumber() > 1 )
	    dirtyBound();
    }
}