Ejemplo n.º 1
0
//====================
// じゃんけんスタート
//====================
void cMMDChar::startJankenMode( void )
{
	if( m_iCharState != ST_JANKEN )
	{
		changeStateTo( ST_JANKEN );
	}
}
Ejemplo n.º 2
0
//------------
// 頭なでられ
//------------
void cMMDChar::stHeadStroke( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_HEAD_STROKE_S], false, 5.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_HEAD_STROKE_L], true, 5.0f );
				m_fFrameCounter = 2 * 30.0f;
				m_iCharSubState++;
			}
			break;

		case 2 :
			if( m_fFrameCounter < 0.0f && !m_bStrokeNow )
			{
				m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_HEAD_STROKE_E], false, 5.0f );
				m_iCharSubState++;
			}
			break;

		case 3 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_IDLING );
			}
			break;
	}
}
Ejemplo n.º 3
0
//------
// 悩み
//------
void cMMDChar::stWorry( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_WORRY_S], false, 5.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_WORRY_L], true, 5.0f );
				m_fFrameCounter = (rand() % 3 + 3) * 30.0f;
				m_iCharSubState++;
			}
			break;

		case 2 :
			if( m_fFrameCounter <= 0.0f )
			{
				m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_WORRY_E], false, 5.0f );
				m_iCharSubState++;
			}
			break;

		case 3 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_IDLING );
			}
			break;
	}
}
Ejemplo n.º 4
0
bool HuluCat::initElement()
{
	//init jump info
	float revTime = 0;
	if (_JumpTime != 0)
	{
		revTime = 1 / _JumpTime;
	}
	_BaseJumpAcceleration = _JumpHeight * 2 * revTime * revTime;
	_BaseJumpSpeed = _JumpTime * _BaseJumpAcceleration;

	//init jump2 info
	float revTime2 = 0;
	if (_JumpTime2 != 0)
	{
		revTime2 = 1 / _JumpTime2;
	}
	_BaseJumpAcceleration2 = _JumpHeight2 * 2 * revTime2 * revTime2;
	_BaseJumpSpeed2 = _JumpTime2 * _BaseJumpAcceleration2;

	_IsValid = true;
	_CanClean = false;
	this->_AttackState = AttackState::NotAttack;
	_AttackColdTime = 0.6f;
	this->_Sprite->setScale(_BaseScale);
	this->setRotation(0);
	boundingBoxSize = _Sprite->getBoundingBox().size;
	changeStateTo(ActionState::Stand);
	_BeginBorn();
	return true;
}
// wird einmalig beim Start des Arduinos ausgeführt
void setup() {
  pinMode(LED_G, OUTPUT);
  pinMode(LED_Y, OUTPUT);
  pinMode(LED_R, OUTPUT);
  Serial.begin(9600);
  testLeds();
  changeStateTo(STATE_OFF);
}
Ejemplo n.º 6
0
//------------
// じゃんけん
//------------
void cMMDChar::stJanken( unsigned int uiJankenFlag )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_JANKEN_START], false, 3.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				m_uiMyJankenFlag = 1 << (rand() % 3);
				switch( m_uiMyJankenFlag )
				{
					case JANKEN_GOO :	m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_JANKEN_GOO],   false, 0.0f );	break;
					case JANKEN_CHOKI :	m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_JANKEN_CHOKI], false, 0.0f );	break;
					case JANKEN_PAR :	m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_JANKEN_PAR],   false, 0.0f );	break;
				}
				m_iCharSubState++;
			}
			break;

		case 2 :
			if( m_bMotionEnd )
			{
				if( uiJankenFlag == m_uiMyJankenFlag )
				{
					// あいこ
					m_iCharSubState = 0;
				}
				else if( uiJankenFlag == JANKEN_GOO )
				{
					if( m_uiMyJankenFlag == JANKEN_CHOKI )		changeStateTo( ST_JANKEN_LOSE );
					else if( m_uiMyJankenFlag == JANKEN_PAR )	changeStateTo( ST_JANKEN_WIN );
				}
				else if( uiJankenFlag == JANKEN_CHOKI )
				{
					if( m_uiMyJankenFlag == JANKEN_GOO )		changeStateTo( ST_JANKEN_WIN );
					else if( m_uiMyJankenFlag == JANKEN_PAR )	changeStateTo( ST_JANKEN_LOSE );
				}
				else if( uiJankenFlag == JANKEN_PAR )
				{
					if( m_uiMyJankenFlag == JANKEN_GOO )		changeStateTo( ST_JANKEN_LOSE );
					else if( m_uiMyJankenFlag == JANKEN_CHOKI )	changeStateTo( ST_JANKEN_WIN );
				}
				else
				{
					// 不正
					changeStateTo( ST_INVESTIGATE );
				}
			}
			break;
	}
}
Ejemplo n.º 7
0
//----------
// 待機状態
//----------
void cMMDChar::stIdling( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_IDLING], true, 10.0f );
			m_fFrameCounter = (rand() % 3 + 5) * 30.0f;
			m_iCharSubState++;
			break;

		case 1 :
			if( m_fFrameCounter <= 0.0f )
			{
				switch( rand() % 2 )
				{
					case 0 :	changeStateTo( ST_SIDE );			break;
					case 1 :	changeStateTo( ST_WORRY );			break;
				}
			}
			break;
	}
}
// wird nach dem Starten dauerhaft ausgeführt
void loop() {  
  // Einschalter auslesen
  if (debounceBtnOn.update() && debounceBtnOn.read()) {
    changeStateTo(STATE_ON);
  }
  // Ausschalter auslesen
  if (debounceBtnOff.update() && debounceBtnOff.read()) {
    changeStateTo(STATE_OFF);
  }

  // Auswertung des aktuellen Zustandes
  // ggf Zustand wechseln
  if (state_current == STATE_ON) {
    if (calcStateTime() >= TIME_HALF) {
      changeStateTo(STATE_HALF);
    }
  } else if (state_current == STATE_HALF && calcStateTime() >= TIME_OFF) {
    changeStateTo(STATE_OFF);
  }

  // kommunizieren
  sendState();
  delay(10);
}
Ejemplo n.º 9
0
//----------------
// じゃんけん負け
//----------------
void cMMDChar::stJankenLose( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_JANKEN_LOSE], false, 3.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_IDLING );
			}
			break;
	}
}
Ejemplo n.º 10
0
//------------------
// スカートめくられ
//------------------
void cMMDChar::stSkirtLift( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_SKIRT_LIFT], false, 0.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_INVESTIGATE );
			}
			break;
	}
}
Ejemplo n.º 11
0
//----------
// 胸触られ
//----------
void cMMDChar::stBustTouch( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_BUST_TOUCH], false, 0.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_INVESTIGATE );
			}
			break;
	}
}
Ejemplo n.º 12
0
//------------
// 頭たたかれ
//------------
void cMMDChar::stHeadBeat( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_HEAD_BEAT], false, 0.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_IDLING );
			}
			break;
	}
}
Ejemplo n.º 13
0
//----
// 礼
//----
void cMMDChar::stGreeting( void )
{
	switch( m_iCharSubState )
	{
		case 0 :
			m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_GREETING], false, 0.0f );
			m_iCharSubState++;
			break;

		case 1 :
			if( m_bMotionEnd )
			{
				changeStateTo( ST_IDLING );
			}
			break;
	}
}
Ejemplo n.º 14
0
//------------------
// いろいろリセット
//------------------
void cMMDChar::reset( void )
{
	m_clPMDModel.setMotion( &m_clVMDMotArray[MOT_GREETING], true );
	m_clPMDModel.setLookAtFlag( true );

	changeStateTo( ST_GREETING );

	m_pHeadBone = m_clPMDModel.getBoneByName( "頭" );
	m_pBustBone = m_clPMDModel.getBoneByName( "上半身" );
	m_pSkirtBone = m_clPMDModel.getBoneByName( "下半身" );

	m_vec3CurVec.x = m_vec3CurVec.y = m_vec3CurVec.z = 0.0f;
	m_vec3PrevCurPos.x = m_vec3PrevCurPos.y = m_vec3PrevCurPos.z = 0.0f;
	m_fCurVecLength = 0.0f;
	m_fStrokeCount = 0.0f;
	m_bStrokeNow = false;
	m_fTouchCount = 0.0f;
}
Ejemplo n.º 15
0
//==========
// 更新処理
//==========
void cMMDChar::update( float fElapsedFrame, const Vector3 *pvec3CameraPos, const Vector3 *pvec3CursorPos, unsigned int uiJankenFlag )
{
	if( m_bModelLoaded && fElapsedFrame != 0.0f )
	{
		// 状態ごとに処理を振り分ける
		switch( m_iCharState )
		{
			case ST_IDLING :		stIdling();					break;
			case ST_GREETING :		stGreeting();				break;
			case ST_GUTS :			stGuts();					break;
			case ST_SIDE :			stSide();					break;
			case ST_INVESTIGATE :	stInvestigate();			break;
			case ST_WORRY :			stWorry();					break;
			case ST_HEAD_BEAT :		stHeadBeat();				break;
			case ST_HEAD_STROKE :	stHeadStroke();				break;
			case ST_BUST_TOUCH :	stBustTouch();				break;
			case ST_SKIRT_LIFT :	stSkirtLift();				break;
			case ST_JANKEN :		stJanken( uiJankenFlag );	break;
			case ST_JANKEN_WIN :	stJankenWin();				break;
			case ST_JANKEN_LOSE :	stJankenLose();				break;
		}

		if( m_fFrameCounter > 0.0f )	m_fFrameCounter -= fElapsedFrame;

		float	fInvElapsedFrame = 1.0f / fElapsedFrame;

		m_bStrokeNow = false;

		// おさわり判定
		if( pvec3CursorPos )
		{
			calcCursorVec( fInvElapsedFrame, pvec3CursorPos );

			Vector3		vec3BonePos;

			// スカート関連判定
			if( m_pSkirtBone )
			{
				m_pSkirtBone->getPos( &vec3BonePos );

				if( vec3BonePos.x - 5.0f < pvec3CursorPos->x && pvec3CursorPos->x < vec3BonePos.x + 5.0f &&
						vec3BonePos.y - 7.0f < pvec3CursorPos->y && pvec3CursorPos->y < vec3BonePos.y + 3.0f &&
							vec3BonePos.z - 5.0f < pvec3CursorPos->z && pvec3CursorPos->z < vec3BonePos.z + 5.0f &&
								0.4f < m_vec3CurVec.y )
				{
					// スカートめくられた!
					if( m_iCharState != ST_SKIRT_LIFT )
					{
						changeStateTo( ST_SKIRT_LIFT );
					}
				}
			}

			// 胸関連判定
			if( m_pBustBone )
			{
				m_pBustBone->getPos( &vec3BonePos );

				if( vec3BonePos.x - 5.0f < pvec3CursorPos->x && pvec3CursorPos->x < vec3BonePos.x + 5.0f &&
							vec3BonePos.y + 0.0f < pvec3CursorPos->y && pvec3CursorPos->y < vec3BonePos.y + 3.0f &&
								vec3BonePos.z - 5.0f < pvec3CursorPos->z && pvec3CursorPos->z < vec3BonePos.z + 5.0f &&
									0.001f < m_fCurVecLength )
				{
					// 胸触られた!
					if( m_iCharState != ST_BUST_TOUCH )
					{
						m_fTouchCount += fElapsedFrame;
						if( m_fTouchCount > 0.7f * 30.0f )	changeStateTo( ST_BUST_TOUCH );
					}
				}
				else
				{
					m_fTouchCount = 0.0f;
				}
			}

			// 頭関連判定
			if( m_pHeadBone )
			{
				m_pHeadBone->getPos( &vec3BonePos );

				if( vec3BonePos.x - 5.0f < pvec3CursorPos->x && pvec3CursorPos->x < vec3BonePos.x + 5.0f &&
						vec3BonePos.y - 2.0f < pvec3CursorPos->y && pvec3CursorPos->y < vec3BonePos.y + 5.0f &&
							vec3BonePos.z - 5.0f < pvec3CursorPos->z && pvec3CursorPos->z < vec3BonePos.z + 5.0f &&
								m_vec3CurVec.y < -0.6f )
				{
					// 頭たたかれた!
					changeStateTo( ST_HEAD_BEAT );
					m_fStrokeCount = 0.0f;
				}
				else if( vec3BonePos.x - 5.0f < pvec3CursorPos->x && pvec3CursorPos->x < vec3BonePos.x + 5.0f &&
							vec3BonePos.y + 0.0f < pvec3CursorPos->y && pvec3CursorPos->y < vec3BonePos.y + 4.0f &&
								vec3BonePos.z - 5.0f < pvec3CursorPos->z && pvec3CursorPos->z < vec3BonePos.z + 5.0f &&
									0.01f < m_fCurVecLength )
				{
					// 頭なでられた!
					if( m_iCharState == ST_HEAD_STROKE )
					{
						// なでられ継続中
						m_bStrokeNow = true;
					}
					else if( m_iCharState != ST_HEAD_BEAT )
					{
						m_fStrokeCount += fElapsedFrame;
						if( m_fStrokeCount > 1.0f * 30.0f )	changeStateTo( ST_HEAD_STROKE );
					}
				}
				else
				{
					m_fStrokeCount = 0.0f;
				}
			}

			if( m_iCharState == ST_IDLING )		m_fFrameCounter = 30.0f;
		}
		else
		{
			m_vec3CurVec.x *= fInvElapsedFrame * 0.5f;
			m_vec3CurVec.y *= fInvElapsedFrame * 0.5f;
			m_vec3CurVec.z *= fInvElapsedFrame * 0.5f;
			m_fCurVecLength *= fInvElapsedFrame * 0.5f;
		}

		// ボーンなどの更新
		if( fElapsedFrame > 10.0f )	fElapsedFrame = 10.0f;
		m_bMotionEnd = m_clPMDModel.updateMotion( fElapsedFrame );

		if( pvec3CursorPos && (m_iCharState == ST_IDLING || m_iCharState == ST_SIDE || m_iCharState == ST_WORRY) )
			m_clPMDModel.updateNeckBone( pvec3CursorPos, -10.0f, 10.0f, 50.0f );
		else
			m_clPMDModel.updateNeckBone( pvec3CameraPos, -25.0f, 45.0f, 60.0f );

		m_clPMDModel.updateSkinning();
	}
}