예제 #1
0
//-----------------------------------------------------------------------------//
// 공격을 받은후 데미지를 입은 에니메이션을 출력하고, 라이프값을 줄이고, 공격받은
// 반대방향으로 밀려난다.
// AttackType : 공격받은 공격속성
//				ATTACK_TYPE { NONE, NORMAL, POWER, LAUNCH, THRUST, EARTH, MORTAL, };
// Damage : 공격받은 데미지량
// Dir : 공격받은 방향
//-----------------------------------------------------------------------------//
void CCharacter::Damage( ATTACK_TYPE AttackType, int Damage, Vector3 *pDir )
{
	int key[] = { KEY_NONE, KEY_DMG1, KEY_DMG2, KEY_DMG3, };
	float slide_dist[] = { 0.f, 1.f, 3.f, 2.f, };

	m_Life -= Damage;
	m_pLifeBar->SetHp( m_Life );
	m_pModel[ BODY]->MovePos( *pDir*slide_dist[ AttackType] );

	// 띄우기 공격에 당했다면 Animate() 함수에서 시간에 따라 높이 계산을 한다.
	const static int launchstate = STATE5 | STATE6;	// 띄우기 상태
	if( LAUNCH == AttackType && !(launchstate & m_State) )
	{
		m_LaunchIncTime = 0;
		m_LaunchVelocity = 200.f;
		m_OffsetY = m_pWorldTM->_42;
	}
	else if( (NORMAL == AttackType || POWER == AttackType) && (launchstate & m_State) )
	{
		m_LaunchIncTime = 0;
		m_LaunchVelocity = 30.f;
		m_OffsetY = m_pWorldTM->_42;
	}

	// 띄워진 상태에서는 HP가 0이 되더라도 Dead 에니메이션을 보여주지 않는다.
	if( (0 >= m_Life) && !(launchstate & m_State) )
	{
		KeyProc( KEY_DEAD1, g_CurTime );
	}
	else
	{
		KeyProc( key[ AttackType], g_CurTime );
	}

}
예제 #2
0
//-----------------------------------------------------------------------------//
// 외부에서 온 명령들을 이함수에서 처리한다.
//-----------------------------------------------------------------------------//
void CCharacter::Command( SMsg Msg )
{
	switch( Msg.type )
	{
	case MSG_KEYDOWN:
		KeyProc( Msg.lparam, Msg.wparam );
		break;

	case MSG_SETPOS:
		{
			Matrix44 mat;
			Vector3 *pv = (Vector3*)Msg.lparam;
			mat.SetWorld( *pv );
			SetWorldTM( &mat );
		}
		break;

	case MSG_MOVPOS:
		{

		}
		break;
	}

}
예제 #3
0
/**
 * MsgProc to deal with incoming windows messages.
 */
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{
	switch (msg)
	{
		// our app has the focus
	case WM_ACTIVATE:
		g_bIsActive = (BOOL)wParam;
		break;
		// key was pressed
	case WM_KEYDOWN:
		switch (wParam)
		{
		case VK_ESCAPE:
			g_bDone = true;
			PostMessage(hWnd, WM_CLOSE, 0, 0);
			return 0;
			break;
		case VK_LEFT:
			if (g_nWndCtl <= 0)
			{
				break;
			}
			g_nWndCtl--;
			if (g_pDevice)
			{
				g_pDevice->UseWindow(g_nWndCtl);
			}
			break;
		case VK_RIGHT:

			if (g_nWndCtl >= g_MAXWND - 1)
			{
				break;
			}
			g_nWndCtl++;
			if (g_pDevice)
			{
				g_pDevice->UseWindow(g_nWndCtl);
			}
			break;
		}
		break;
		// we are ordered to suicide
	case WM_DESTROY:
		g_bDone = true;
		PostQuitMessage(0);
		return 1;
		break;

	default: break;
	}

	if (msg == WM_KEYDOWN)
	{
		KeyProc(wParam);
	}
	return DefWindowProc(hWnd, msg, wParam, lParam);
}
예제 #4
0
bool CTank::FrameFunc()
{
	//°´¼ü´¦Àí
	KeyProc();

	//ÂÖÌ¥ÊÇ·ñÔ˶¯
	aniWheels->Update(dt);
	if(fMove < 1.0e-5 && aniWheels->IsPlaying())
	{
		aniWheels->Stop();
	}
	else if(fMove > 1.0e-5 && !aniWheels->IsPlaying())
	{
		aniWheels->Play();
	}
	//¼ì²âÅöײ
	dx *= friction; dy *= friction; fMove *= friction;
	CrashProc(dx, dy);
	if(xPos + dx > 64 && xPos + dx < mapWidth - 64) 
	{
		//¿¿½ü±ßÔµÔòÍØÕ¹ÊÓÒ°
		if(xScreen+dx > 128+64 && xScreen+dx < cxScreen-128-64)
		{
			xScreen += dx;
			IsMoveX = true;
		}
		else if(xPos < 128+64 || xPos > mapWidth - 128-64)
		{
			xScreen += dx;
			IsMoveX = true;
		}
		//µ½ÁËÆÁĻĩβ
		xPos += dx;
	}
	else
	{
		IsMoveX = true;
	}
	if(yPos + dy > 64 && yPos + dy < mapHeight - 64)
	{
		if(yScreen+dy > 128+64 && yScreen+dy < cyScreen-128-64)
		{
			yScreen += dy;
			IsMoveY = true;
		}
		else if(yPos < 128+64 || yPos > mapHeight - 128-64)
		{
			yScreen += dy;
			IsMoveY = true;
		}
		yPos += dy;
	}
	else
	{
		IsMoveY = true;
	}
	return true;
}
예제 #5
0
//-----------------------------------------------------------------------------//
// 상대방으로 부터 일정한 거리에 도달하면 공격한다.
// vDir : 공격방향
// Key: 키 버튼 
// return value: 
//				true : 공격함
//				false : 쫓는중
//-----------------------------------------------------------------------------//
BOOL CCharacter::Attack( const Vector3& vDir, int Key )
{
	// 목적지에 도착한후 공격한다.
	Vector3 curpos = m_pModel[ BODY]->GetPos();
	if( curpos.EqualEpsilon(3.f, m_DestPos) )
	{
		KeyProc( Key, g_CurTime );
		return TRUE;
	}
	return FALSE;
}
예제 #6
0
파일: key.c 프로젝트: wjw890912/PID_V0.2
void KeyScane(uint32_t Time)
{
			 
	if (Time - KeyCreatTrm >= KEY_CREATTRM_INTERVAL)
   {
   	   KeyCreatTrm  =  Time;
		 
	KeyRead();
	KeyProc();

   }
}	
예제 #7
0
int main()
{
	int i;
	ConsoleInit(80, 20);

	srand((unsigned int)time(NULL));
	for (i = 0; i < 3; i++){
		Init(i);
	}
	ItemInit();
	CoinInit();
	while (1)
	{
		Update();
		KeyProc();
		Draw();
		Sleep(30);
		g_nTimeElapsed++;
	}
	ConsoleRelease();
	return 0;
}
예제 #8
0
void rt_thread_entry_Door(void* parameter)
{  
	   

	  //modbus µØÖ·ÊÇ10 
	  PB8=1;//´ò¿ª¼ÌµçÆ÷
	  usSRegHoldBuf[20]=0x00;//¿ØÖƼ̵çÆ÷¼Ä´æÆ÷ΪĬÈÏÖµ¼·²»¿ªÒ²²»¹Ø
	  usSRegHoldBuf[22]=0x01;//¼ÌµçÆ÷״̬´ò¿ª
	while(1)
	{


			 if(PB10==0) //ÃÅ´Å״̬
			 {
			 
			    usSRegHoldBuf[21]=0x01;	 //ÃÅ´Å״̬
			 
			 }
			 else
			 if(PB10==1)
			 {
			 
			 	usSRegHoldBuf[21]=0x00; //ÃÅ´Å״̬

			 }
		



			if(usSRegHoldBuf[20]==0x1)//Èç¹û485¿ØÖÆÏÂ
			{
			  	
			   PD15=0;//ָʾ¼ÌµçÆ÷״̬
			   PB8=1;//´ò¿ª¼ÌµçÆ÷
			   usSRegHoldBuf[22]=0x01;	 //¼ÌµçÆ÷״̬
			   usSRegHoldBuf[20]=0; //¹éλ
			  	
			}
			else 
			if (usSRegHoldBuf[20]==0x2)
			{
			   
			   PD15=1;//ָʾ¼ÌµçÆ÷״̬
			   PB8=0;//¹Ø±Õ¼ÌµçÆ÷
			   usSRegHoldBuf[22]=0x00;	 //¼ÌµçÆ÷״̬
			   usSRegHoldBuf[20]=0; //¹éλ
			}


			  KeyRead();
			  KeyProc();	



	 rt_thread_delay(50); // Ïß³ÌCPUÖ÷¶¯Èóö	

	}




}