Example #1
0
/**
@brief 키의 위치값을 얻는다. 아직 랜덤적용이 안된상태면 랜덤적용 시킨값을 생성해 리턴한다.
*/
XE::VEC2 XKeyScale::GetvScaleRandomed()
{
	if( m_vScaleRandomed.IsInit() ) {
		m_vScaleRandomed = AssignRandom();
	}
	return m_vScaleRandomed;
}
Example #2
0
void XKeyEffect::Execute( XSprObj *pSprObj, float fOverSec )
{
	auto pLayer = pSprObj->GetpLayerMove( GetLayerType(), GetnLayer() );
	auto& cn = pLayer->GetcnEffect();
	cn.interpolation = m_Interpolation;
	cn.fAlphaSrc = GetOpacityRandomed();
	cn.fStartKeyFrame = GetfFrame();
	auto pNextKey = m_pNextKey;
	if( pNextKey ) {
		cn.fAlphaDest = pNextKey->GetOpacityRandomed();
		cn.fNextKeyFrame = pNextKey->GetfFrame();
	} else {
		cn.interpolation = XBaseLayer::xNONE;
		cn.fNextKeyFrame = GetfFrame();
	}
	cn.DrawMode = m_DrawMode;
	cn.dwDrawFlag = m_dwFlag;
	m_fOpacityRandomed = AssignRandom();
// 	XLayerMove *pLayer = pSprObj->GetpLayerMove(GetLayerType(), GetnLayer());
// 	pLayer->GetcnEffect().fAlpha = m_fOpacity;
// 	XKeyEffect *pNextKey = m_pNextKey;
// 	
// 	if( m_Interpolation && pNextKey )			// 다음키까지 보간모드로 변해야 하고 다음키가 있으면
// 		pLayer->SetcnEffect( m_Interpolation, pNextKey->GetfOpacity(), m_fOpacity, m_dwFlag, m_DrawMode, GetfFrame(), pNextKey->GetfFrame() );
// 	else
// 		pLayer->SetcnEffect( XBaseLayer::xNONE, 0, 0, m_dwFlag, m_DrawMode, 0, 0 );
}
Example #3
0
void XKeyScale::Execute( XSPActObj spActObj, XSPBaseLayer spLayer, float fOverSec )
{
// 	const auto bPlaying = spActObj->GetpSprObj()->IsPlaying();
	auto pSprObj = spActObj->GetpSprObj();
	auto bPlaying = pSprObj->IsPlaying();
	if( pSprObj->GetpParent() )
		bPlaying = pSprObj->GetpParent()->IsPlaying();
	auto spLayerMove = std::static_pointer_cast<XLayerMove>( spLayer );
	if( XASSERT( spLayerMove ) ) {
		auto& cn = spLayerMove->GetcnScaleMutable();
		// 실시간으로 이 키의 뒤에 같은타입의 키가 있는지 찾는다
		auto pNextKey = dynamic_cast<XKeyScale *>( GetNextKey() );
		if( pNextKey ) {
			cn.interpolation = m_Interpolation;
			if( bPlaying )
				cn.vScaleDest = pNextKey->GetvScaleRandomed();
			else
				cn.vScaleDest = pNextKey->GetvScaleOrig();
//			cn.vScaleSrc = m_vScaleOrig;
			cn.vScaleSrc = GetvScaleRandomed();
			cn.fNextKeyFrame = pNextKey->GetfFrame();
			cn.fStartKeyFrame = GetfFrame();
		} else {
			cn.interpolation = xSpr::xNONE;
			cn.vScaleDest = m_vScaleOrig;
			cn.vScaleSrc = GetvScaleRandomed();
			cn.fNextKeyFrame = GetfFrame();
			cn.fStartKeyFrame = GetfFrame();
		}
		if( bPlaying )
			m_vScaleRandomed = AssignRandom();		// 다음 보간을 위해 랜덤값 만듬.
		else
			m_vScaleRandomed = m_vScaleOrig;		// 에디팅 모드에선 오리지날 값만 씀.
	}
// 	if( XASSERT( spLayerMove ) ) {
// 		spLayerMove->SetScale( m_vScale );
// 		CHANNEL_SCALE cn;
// 		cn.vScale = m_vScale;
// 		cn.interpolation = m_Interpolation;
// 		// 		spLayerMove->SetScale( m_fScaleX, m_fScaleY );
// 		// 실시간으로 이 키의 뒤에 같은타입의 키가 있는지 찾는다
// 		auto pNextKey = dynamic_cast<XKeyScale *>( GetNextKey() );
// 		if( m_Interpolation && pNextKey ) {			// 다음키가 있으면 보간으로 움직이도록 한다
// 			cn.vScaleDest = pNextKey->GetvScale();
// 			cn.vScaleSrc = m_vScale;
// 			cn.fNextKeyFrame = pNextKey->GetfFrame();
// 			cn.fStartKeyFrame = GetfFrame();
// 		} else {
// 			cn.interpolation = xSpr::xNONE;
// 			cn.vScaleDest.Set( 1.f );
// 			cn.vScaleSrc.Set( 1.f );
// 			cn.fNextKeyFrame = 0;
// 			cn.fStartKeyFrame = 0;
// 		}
// 		// 채널정보 씀
// 		spLayerMove->SetcnScale( cn );
// 	}
}
Example #4
0
void XKeyPos::Execute( XSprObj *pSprObj, float fOverSec )
{
    auto pActObj = pSprObj->GetpObjActCurr();
    if( XASSERT( pActObj ) ) {
        XLayerMove* pLayer = nullptr;
        if( GetidLayer() ) {
            pLayer = SafeCast<XLayerMove*>( pActObj->GetpLayerByidLocalInLayer( GetidLayer() ) );
        } else {
            pLayer = SafeCast<XLayerMove*>( pSprObj->GetLayer( GetLayerType(), GetnLayer() ) );
        }
// 		auto pLayer = GetpLayerByidLayerT<XLayerMove>( pSprObj );
        if( XASSERT( pLayer ) ) {
            auto& cn = pLayer->GetcnPos();
// 			if( cn.interpolation )		// 새 키가 실행될때 이전 채널값을 안지운다는 가정.
// 				// 현재 채널이 보간모드면 이전 위치를 시작위치로 한다.
// 				cn.m_vStart = cn.m_vEnd;
// 			else
// 				// 채널에 보간옵션이 없으면 현재키의 랜덤값으로 지정한다.
// 				cn.m_vStart = AssignRandom();
            if( m_pInterpolationEndKey ) {
                cn.interpolation = m_Interpolation;
                cn.m_frameStartKey = GetfFrame();
                cn.m_vStart = GetvPosRandomed();
// 				cn.m_vStart = AssignRandom();
                cn.m_frameEndKey = m_pInterpolationEndKey->GetfFrame();
// 				cn.m_vEnd = m_pInterpolationEndKey->GetvPosRandomed();
                cn.m_vEnd = m_pInterpolationEndKey->AssignRandom();
            } else {
                // 다음키가 없다는것은 보간옵션이 켜져있어도 보간할게 없다는뜻임.
                cn.interpolation = XBaseLayer::xNONE;
                cn.m_frameStartKey = GetfFrame();
                cn.m_vStart = GetvPosRandomed();
// 				cn.m_frameEndKey = GetfFrame();
            }
            m_vPosRandomed = AssignRandom();
// 			cn.m_mapRandom[ GetidKey() ] = AssignRandom();
        } // pLayer
    } // pActObj
}
Example #5
0
void XKeyScale::Execute( XSprObj *pSprObj, float fOverSec )
{
	auto pLayer = pSprObj->GetpLayerMove( GetLayerType(), GetnLayer() );
	auto& cn = pLayer->GetcnScale();
	cn.m_vScaleSrc = GetvScaleRandomed();
	cn.fStartKeyFrame = GetfFrame();
	if( m_pNextKey ) {
		cn.interpolation = m_Interpolation;
		cn.m_vScaleDest = m_pNextKey->GetvScaleRandomed();
		cn.fNextKeyFrame = m_pNextKey->GetfFrame();
	} else {
		cn.interpolation = XBaseLayer::xNONE;
	}
	m_vScaleRandomed = AssignRandom();
// 	XLayerMove *pLayer = pSprObj->GetpLayerMove(GetLayerType(), GetnLayer());
// 	pLayer->SetScale( m_fScaleX, m_fScaleY );
// 
// 	XKeyScale *pNextKey = m_pNextKey;
// 	
// 	if( m_Interpolation && pNextKey )			// 다음키가 있으면 보간으로 움직이도록 한다
// 		pLayer->SetcnScale( m_Interpolation, pNextKey->GetfScaleX(), pNextKey->GetfScaleY(), GetfScaleX(), GetfScaleY(), GetfFrame(), pNextKey->GetfFrame() );
// 	else
// 		pLayer->SetcnScale( XBaseLayer::xNONE, 1.0f, 1.0f, 1.0f, 1.0f, 0, 0 );
}
Example #6
0
float XKeyEffect::GetOpacityRandomed() 
{
	if( m_fOpacityRandomed == 9999.f )
		m_fOpacityRandomed = AssignRandom();
	return m_fOpacityRandomed;
}