//-----------------------------------------------------------------------------// // 공격을 받은후 데미지를 입은 에니메이션을 출력하고, 라이프값을 줄이고, 공격받은 // 반대방향으로 밀려난다. // 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 ); } }
//-----------------------------------------------------------------------------// // 외부에서 온 명령들을 이함수에서 처리한다. //-----------------------------------------------------------------------------// 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; } }
/** * 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); }
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; }
//-----------------------------------------------------------------------------// // 상대방으로 부터 일정한 거리에 도달하면 공격한다. // 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; }
void KeyScane(uint32_t Time) { if (Time - KeyCreatTrm >= KEY_CREATTRM_INTERVAL) { KeyCreatTrm = Time; KeyRead(); KeyProc(); } }
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; }
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Ö÷¶¯Èóö } }