Ejemplo n.º 1
0
		void L2DEyeBlink::setParam( live2d::ALive2DModel *model )
		{
			l2d_int64 time = live2d::UtSystem::getTimeMSec() ;
			float eyeParamValue ;
			float t = 0 ;
			
			switch( this->eyeState )
			{
				case STATE_CLOSING:
					
					t = (float)(( time - stateStartTime ) / (double)closingMotionMsec ) ;
					if( t >= 1 )
					{
						t = 1 ;
						this->eyeState = STATE_CLOSED ;
						this->stateStartTime = time ;
					}
					eyeParamValue = 1 - t ;
					break ;
				case STATE_CLOSED:
					t = (float)(( time - stateStartTime ) / (double)closedMotionMsec) ;
					if( t >= 1 )
					{
						this->eyeState = STATE_OPENING ;
						this->stateStartTime = time ;
					}
					eyeParamValue = 0 ;
					break ;
				case STATE_OPENING:
					t = (float)(( time - stateStartTime ) / (double)openingMotionMsec ) ;
					if( t >= 1 )
					{
						t = 1 ;
						this->eyeState = STATE_INTERVAL ;
						this->nextBlinkTime = calcNextBlink() ;
					}
					eyeParamValue = t ;
					break ;
				case STATE_INTERVAL:
					
					if( this->nextBlinkTime < time )
					{
						this->eyeState = STATE_CLOSING ;
						this->stateStartTime = time ;
					}
					eyeParamValue = 1 ;
					break ;
				case STATE_FIRST:
				default:
					this->eyeState = STATE_INTERVAL ;
					this->nextBlinkTime = calcNextBlink() ;
					eyeParamValue = 1 ;
					break ;
			}
			
			if( ! closeIfZero ) eyeParamValue = -eyeParamValue ;
			
			
			model->setParamFloat( eyeID_L.c_str() , eyeParamValue ) ;
			model->setParamFloat( eyeID_R.c_str() , eyeParamValue ) ;
			
		}
Ejemplo n.º 2
0
		/*
		 * モデルのパラメータを更新
		 * update時に呼び出す
		 */
		void L2DEyeBlink::setParam( live2d::ALive2DModel *model )
		{
			l2d_int64 time = live2d::UtSystem::getTimeMSec() ;
			float eyeParamValue ;// 設定する値
			float t = 0 ;
			
			switch( this->eyeState )
			{
				case STATE_CLOSING:
					// 閉じるまでの割合を0..1に直す(blinkMotionMsecの半分の時間で閉じる)
					t = (float)(( time - stateStartTime ) / (double)closingMotionMsec ) ;
					if( t >= 1 )
					{
						t = 1 ;
						this->eyeState = STATE_CLOSED ;// 次から開き始める
						this->stateStartTime = time ;
					}
					eyeParamValue = 1 - t ;
					break ;
				case STATE_CLOSED:
					t = (float)(( time - stateStartTime ) / (double)closedMotionMsec) ;
					if( t >= 1 )
					{
						this->eyeState = STATE_OPENING ;// 次から開き始める
						this->stateStartTime = time ;
					}
					eyeParamValue = 0 ;// 閉じた状態
					break ;
				case STATE_OPENING:
					t = (float)(( time - stateStartTime ) / (double)openingMotionMsec ) ;
					if( t >= 1 )
					{
						t = 1 ;
						this->eyeState = STATE_INTERVAL ;// 次から開き始める
						this->nextBlinkTime = calcNextBlink() ;// 次回のまばたきのタイミングを始める時刻
					}
					eyeParamValue = t ;
					break ;
				case STATE_INTERVAL:
					// まばたき開始時刻なら
					if( this->nextBlinkTime < time )
					{
						this->eyeState = STATE_CLOSING ;
						this->stateStartTime = time ;
					}
					eyeParamValue = 1 ;// 開いた状態
					break ;
				case STATE_FIRST:
				default:
					this->eyeState = STATE_INTERVAL ;
					this->nextBlinkTime = calcNextBlink() ;// 次回のまばたきのタイミングを始める時刻
					eyeParamValue = 1 ;// 開いた状態
					break ;
			}
			
			if( ! closeIfZero ) eyeParamValue = -eyeParamValue ;
			
			// ---- 値を設定 ----
			model->setParamFloat( eyeID_L.c_str() , eyeParamValue ) ;
			model->setParamFloat( eyeID_R.c_str() , eyeParamValue ) ;
			
		}