/* Функция построения кадра анимации. * АРГУМЕНТЫ: Нет. * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет. */ VOID VG4_AnimRender( VOID ) { INT i; LARGE_INTEGER li; POINT pt; /*** Обновление ввода ***/ /* Клавиатура */ GetKeyboardState(VG4_Anim.Keys); for (i = 0; i < 256; i++) VG4_Anim.Keys[i] >>= 7; for (i = 0; i < 256; i++) VG4_Anim.KeysClick[i] = VG4_Anim.Keys[i] && !VG4_Anim.KeysOld[i]; memcpy(VG4_Anim.KeysOld, VG4_Anim.Keys, 256); /* Мышь */ /* колесо */ VG4_Anim.MsWheel = VG4_MouseGlobalWheel; VG4_MouseGlobalWheel = 0; /* абсолютная позиция */ pt.x = VG4_MouseGlobalX; pt.y = VG4_MouseGlobalY; ScreenToClient(VG4_Anim.hWnd, &pt); VG4_Anim.MsX = pt.x; VG4_Anim.MsY = pt.y; /* относительное перемещение */ VG4_Anim.MsDeltaX = VG4_MouseGlobalX - VG4_MouseXOld; VG4_Anim.MsDeltaY = VG4_MouseGlobalY - VG4_MouseYOld; VG4_MouseXOld = VG4_MouseGlobalX; VG4_MouseYOld = VG4_MouseGlobalY; /* Джойстик */ if ((i = joyGetNumDevs()) > 0) { JOYCAPS jc; /* получение общей информации о джостике */ if (joyGetDevCaps(JOYSTICKID1, &jc, sizeof(jc)) == JOYERR_NOERROR) { JOYINFOEX ji; /* получение текущего состояния */ ji.dwSize = sizeof(JOYCAPS); ji.dwFlags = JOY_RETURNALL; if (joyGetPosEx(JOYSTICKID1, &ji) == JOYERR_NOERROR) { /* Кнопки */ memcpy(VG4_Anim.JButsOld, VG4_Anim.JButs, sizeof(VG4_Anim.JButs)); for (i = 0; i < 32; i++) VG4_Anim.JButs[i] = (ji.dwButtons >> i) & 1; for (i = 0; i < 32; i++) VG4_Anim.JButsClick[i] = VG4_Anim.JButs[i] && !VG4_Anim.JButsOld[i]; /* Оси */ VG4_Anim.JX = VG4_GET_AXIS_VALUE(X); VG4_Anim.JY = VG4_GET_AXIS_VALUE(Y); if (jc.wCaps & JOYCAPS_HASZ) VG4_Anim.JZ = VG4_GET_AXIS_VALUE(Z); if (jc.wCaps & JOYCAPS_HASR) VG4_Anim.JR = VG4_GET_AXIS_VALUE(R); if (jc.wCaps & JOYCAPS_HASU) VG4_Anim.JU = 2.0 * (ji.dwUpos - jc.wUmin) / (jc.wUmax - jc.wUmin - 1) - 1; /* Point-Of-View */ if (jc.wCaps & JOYCAPS_HASPOV) { if (ji.dwPOV == 0xFFFF) VG4_Anim.JPOV = 0; else VG4_Anim.JPOV = ji.dwPOV / 4500 + 1; } }
/* Функция построения кадра анимации. * АРГУМЕНТЫ: Нет. * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет. */ VOID VG4_AnimRender( VOID ) { INT i; LARGE_INTEGER li; POINT pt; /*** Обновление таймера ***/ QueryPerformanceCounter(&li); VG4_Anim.GlobalTime = (DBL)(li.QuadPart - TimeStart) / TimeFreq; VG4_Anim.GlobalDeltaTime = (DBL)(li.QuadPart - TimeOld) / TimeFreq; if (!VG4_Anim.IsPause) VG4_Anim.DeltaTime = VG4_Anim.GlobalDeltaTime; else { TimePause += li.QuadPart - TimeOld; VG4_Anim.DeltaTime = 0; } VG4_Anim.Time = (DBL)(li.QuadPart - TimePause - TimeStart) / TimeFreq; /* вычисляем FPS */ if (li.QuadPart - TimeFPS > TimeFreq) { VG4_Anim.FPS = FrameCounter / ((DBL)(li.QuadPart - TimeFPS) / TimeFreq); TimeFPS = li.QuadPart; FrameCounter = 0; } /* время "прошлого" кадра */ TimeOld = li.QuadPart; /*** Обновление ввода ***/ /* Клавиатура */ GetKeyboardState(VG4_Anim.Keys); for (i = 0; i < 256; i++) VG4_Anim.Keys[i] >>= 7; for (i = 0; i < 256; i++) VG4_Anim.KeysClick[i] = VG4_Anim.Keys[i] && !VG4_Anim.KeysOld[i]; memcpy(VG4_Anim.KeysOld, VG4_Anim.Keys, sizeof(VG4_Anim.KeysOld)); /* Мышь */ /* колесо */ VG4_Anim.MsWheel = VG4_MouseWheel; VG4_MouseWheel = 0; /* абсолютная позиция */ GetCursorPos(&pt); ScreenToClient(VG4_Anim.hWnd, &pt); VG4_Anim.MsX = pt.x; VG4_Anim.MsY = pt.y; /* относительное перемещение */ VG4_Anim.MsDeltaX = pt.x - VG4_MouseOldX; VG4_Anim.MsDeltaY = pt.y - VG4_MouseOldY; VG4_MouseOldX = pt.x; VG4_MouseOldY = pt.y; /* Джойстик */ if ((i = joyGetNumDevs()) > 0) { JOYCAPS jc; /* получение общей информации о джостике */ if (joyGetDevCaps(JOYSTICKID2, &jc, sizeof(jc)) == JOYERR_NOERROR) { JOYINFOEX ji; /* получение текущего состояния */ ji.dwSize = sizeof(JOYCAPS); ji.dwFlags = JOY_RETURNALL; if (joyGetPosEx(JOYSTICKID2, &ji) == JOYERR_NOERROR) { /* Кнопки */ memcpy(VG4_Anim.JButsOld, VG4_Anim.JButs, sizeof(VG4_Anim.JButs)); for (i = 0; i < 32; i++) VG4_Anim.JButs[i] = (ji.dwButtons >> i) & 1; for (i = 0; i < 32; i++) VG4_Anim.JButsClick[i] = VG4_Anim.JButs[i] && !VG4_Anim.JButsOld[i]; /* Оси */ VG4_Anim.JX = VG4_GET_AXIS_VALUE(X); VG4_Anim.JY = VG4_GET_AXIS_VALUE(Y); if (jc.wCaps & JOYCAPS_HASZ) VG4_Anim.JZ = VG4_GET_AXIS_VALUE(Z); if (jc.wCaps & JOYCAPS_HASU) VG4_Anim.JU = VG4_GET_AXIS_VALUE(U); if (jc.wCaps & JOYCAPS_HASV) VG4_Anim.JV = VG4_GET_AXIS_VALUE(V); if (jc.wCaps & JOYCAPS_HASR) VG4_Anim.JR = VG4_GET_AXIS_VALUE(R); if (jc.wCaps & JOYCAPS_HASPOV) { if (ji.dwPOV == 0xFFFF) VG4_Anim.JPOV = 0; else VG4_Anim.JPOV = ji.dwPOV / 4500 + 1; } }