5 #include <VersionHelpers.h> 12 #define GUID_DEVINTERFACE_USB_DEVICE {0x4d1e55b2, 0xf16f, 0x11cf,{ 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}} 65 for (
size_t i = 0; i <
modules.size(); i++)
80 vpfmTimer->Report(
"Frame Move (Viewscreen)");
81 SAFE_DELETE(vpfmTimer);
82 viewscreen->cockpitFrameMoveTimer->Report(
" Frame Move (Viewscreen->Cockpit)");
83 SAFE_DELETE(
viewscreen->cockpitFrameMoveTimer);
84 viewscreen->instrumentsFrameMoveTimer->Report(
" Frame Move (Viewscreen->Instruments)");
85 SAFE_DELETE(
viewscreen->instrumentsFrameMoveTimer);
86 viewscreen->weatherFrameMoveTimer->Report(
" Frame Move (Viewscreen->Weather)");
87 SAFE_DELETE(
viewscreen->weatherFrameMoveTimer);
88 viewscreen->modulesFrameMoveTimer->Report(
" Frame Move (Viewscreen->Modules)");
89 SAFE_DELETE(
viewscreen->modulesFrameMoveTimer);
90 viewscreen->displaysFrameMoveTimer->Report(
" Frame Move (Viewscreen->Displays)");
91 SAFE_DELETE(
viewscreen->displaysFrameMoveTimer);
92 viewscreen->inputFrameMoveTimer->Report(
" Frame Move (Viewscreen->Input)");
94 viewscreen->weaponsFrameMoveTimer->Report(
" Frame Move (Viewscreen->Weapons)");
95 SAFE_DELETE(
viewscreen->weaponsFrameMoveTimer);
96 viewscreen->propulsionFrameMoveTimer->Report(
" Frame Move (Viewscreen->Propulsion)");
97 SAFE_DELETE(
viewscreen->propulsionFrameMoveTimer);
98 viewscreen->otherFrameMoveTimer->Report(
" Frame Move (Viewscreen->Other)");
100 uifmTimer->Report(
"Frame Move (GUI)");
101 SAFE_DELETE(uifmTimer);
102 otfmTimer->Report(
"Frame Move (Other)");
103 SAFE_DELETE(otfmTimer);
104 vpfrTimer->Report(
"Frame Render (Viewscreen)");
105 SAFE_DELETE(vpfrTimer);
106 viewscreen->cityTimer->Report(
" Frame Render (Viewscreen->City)");
108 viewscreen->shipTimer->Report(
" Frame Render (Viewscreen->Ship)");
110 viewscreen->liteTimer->Report(
" Frame Render (Viewscreen->Lite)");
112 uifrTimer->Report(
"Frame Render (GUI)");
113 SAFE_DELETE(uifrTimer);
114 otfrTimer->Report(
"Frame Render (Other)");
115 SAFE_DELETE(otfrTimer);
128 for (
int i = 0; i < MAX_SCAN; i++)
134 SClientPacket outpacket;
136 outpacket.f_x = 1.0f;
137 outpacket.f_y = 0.0f;
138 outpacket.f_z = 0.0f;
139 outpacket.f_w = 0.0f;
145 #if defined(_DEBUG) && defined(_TOUCHFILES) 148 handle = CreateFile(str, GENERIC_WRITE, FILE_SHARE_WRITE,
nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS,
nullptr);
149 if (handle == INVALID_HANDLE_VALUE)
151 logger->
Log(
"Bailing out in LoadSound trying to CreateFile: INVALID_HANDLE_VALUE @1", Logger::Level::Error);
156 if (!SystemTimeToFileTime(&st, &ft))
158 logger->
Log(
"Bailing out in LoadSound trying to CreateFile @1", Logger::Level::Error);
160 if (!SetFileTime(handle,
nullptr,
nullptr, &ft))
162 logger->
Log(
"Bailing out in LoadSound trying to SetFileTime @1", Logger::Level::Error);
274 if (goFullScreen && DXUTIsWindowed())
276 logger->
Log(
"DXUTToggleFullScreen(true)");
277 DXUTToggleFullScreen();
280 else if (!goFullScreen && !DXUTIsWindowed())
282 logger->
Log(
"DXUTToggleFullScreen(false)");
283 DXUTToggleFullScreen();
304 srand(static_cast<unsigned int>(ltime));
323 logger->
Log(
"InitDirectInput() called...");
327 #pragma region DirectInput 328 logger->
Log(
"Calling DirectInput8Create...");
330 IID_IDirectInput8, reinterpret_cast<void**>(&
viewscreen->
g_pDI), NULL)))
332 logger->
Log(
"DirectInput8Create() failed!", Logger::Level::Warn);
335 logger->
Log(
"Done with DirectInput8Create!");
338 #pragma region Keyboard 339 logger->
Log(
"Calling ptrKeyboard->Initialize...");
342 logger->
Log(
"Done with ptrKeyboard->Initialize!");
345 #pragma region Joystick 346 logger->
Log(
"Calling ptrJoystick->Initialize...");
348 logger->
Log(
"Done with ptrJoystick->Initialize!");
351 catch (
const std::exception& e)
353 logger->
Log(const_cast<char*>(e.what()), Logger::Level::Error);
356 logger->
Log(
"InitDirectInput() exited successfully!");
363 const DWORD dwPaletteSize = 0;
364 HANDLE hOldPal2 =
nullptr;
365 HDC hDC = CreateDC(TEXT(
"DISPLAY"),
nullptr,
nullptr,
nullptr);
366 const int iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
379 GetObject(hBitmap,
sizeof(Bitmap0), reinterpret_cast<LPSTR>(&Bitmap0));
382 bi.biSize =
sizeof(BITMAPINFOHEADER);
383 bi.biWidth = Bitmap0.bmWidth;
384 bi.biHeight = -Bitmap0.bmHeight;
386 bi.biBitCount = wBitCount;
387 bi.biCompression = BI_RGB;
389 bi.biXPelsPerMeter = 0;
390 bi.biYPelsPerMeter = 0;
391 bi.biClrImportant = 0;
394 const DWORD dwBmBitsSize = ((Bitmap0.bmWidth * wBitCount + 31) & ~31) / 8 * Bitmap0.bmHeight;
395 const HANDLE hDib = GlobalAlloc(GHND, dwBmBitsSize + dwPaletteSize +
sizeof BITMAPINFOHEADER);
396 const LPBITMAPINFOHEADER lpbi =
static_cast<LPBITMAPINFOHEADER
>(GlobalLock(hDib));
399 const HANDLE hPal = GetStockObject(DEFAULT_PALETTE);
402 hDC = GetDC(
nullptr);
403 hOldPal2 = SelectPalette(hDC, static_cast<HPALETTE>(hPal), FALSE);
407 GetDIBits(hDC, hBitmap, 0, static_cast<UINT>(Bitmap0.bmHeight), reinterpret_cast<LPSTR>(lpbi) +
sizeof BITMAPINFOHEADER
408 + dwPaletteSize, reinterpret_cast<BITMAPINFO*>(lpbi), DIB_RGB_COLORS);
412 SelectPalette(hDC, static_cast<HPALETTE>(hOldPal2), TRUE);
414 ReleaseDC(
nullptr, hDC);
417 BITMAPFILEHEADER bmfHdr;
418 bmfHdr.bfType = 0x4D42;
419 const DWORD dwDIBSize =
sizeof BITMAPFILEHEADER +
sizeof BITMAPINFOHEADER + dwPaletteSize + dwBmBitsSize;
420 bmfHdr.bfSize = dwDIBSize;
421 bmfHdr.bfReserved1 = 0;
422 bmfHdr.bfReserved2 = 0;
423 bmfHdr.bfOffBits =
sizeof BITMAPFILEHEADER +
sizeof BITMAPINFOHEADER + dwPaletteSize;
425 char* buffer =
new char[
sizeof BITMAPFILEHEADER + dwDIBSize + 1];
426 buffer[0] = ID_USER_PACKET_SCREENSHOT;
427 memcpy(&buffer[1], &bmfHdr,
sizeof BITMAPFILEHEADER);
428 memcpy(&buffer[1 +
sizeof BITMAPFILEHEADER], lpbi, dwDIBSize);
438 const HDC hdc = GetDC(
nullptr);
439 const HDC hDest = CreateCompatibleDC(hdc);
442 const int height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
443 const int width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
446 const HBITMAP hbDesktop = CreateCompatibleBitmap(hdc, width, height);
449 SelectObject(hDest, hbDesktop);
453 BitBlt(hDest, 0, 0, width, height, hdc, 0, 0, SRCCOPY);
456 ReleaseDC(
nullptr, hdc);
461 DeleteObject(hbDesktop);
474 HRESULT hr = DXUTGetD3D9Object()->CheckDeviceFormat(D3DADAPTER_DEFAULT,
477 D3DUSAGE_DEPTHSTENCIL,
480 if (FAILED(hr))
return FALSE;
483 hr = DXUTGetD3D9Object()->CheckDeviceFormat(D3DADAPTER_DEFAULT,
486 D3DUSAGE_RENDERTARGET,
489 if (FAILED(hr))
return FALSE;
492 hr = DXUTGetD3D9Object()->CheckDepthStencilMatch(D3DADAPTER_DEFAULT,
498 return SUCCEEDED(hr);
510 return game->
IsDepthFormatOk(D3DFMT_D24S8, AdapterFormat, BackBufferFormat) ||
511 game->
IsDepthFormatOk(D3DFMT_D24X8, AdapterFormat, BackBufferFormat) ||
512 game->
IsDepthFormatOk(D3DFMT_D24X4S4, AdapterFormat, BackBufferFormat) ||
520 game->
logger->
Log(
"Calling ModifyDeviceSettings()...");
527 V(DXUTGetD3D9Object()->GetDeviceCaps(pDeviceSettings->d3d9.AdapterOrdinal, pDeviceSettings->d3d9.DeviceType, &pCaps));
530 pDeviceSettings->d3d9.pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
533 if (SUCCEEDED(DXUTGetD3D9Object()->CheckDeviceMultiSampleType(pCaps.AdapterOrdinal,
534 pCaps.DeviceType, pDeviceSettings->d3d9.pp.BackBufferFormat,
535 FALSE, D3DMULTISAMPLE_4_SAMPLES, NULL)))
536 pDeviceSettings->d3d9.pp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES;
539 if ((pCaps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) == 0 ||
540 pCaps.VertexShaderVersion < D3DVS_VERSION(3, 0))
542 pDeviceSettings->d3d9.BehaviorFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
543 game->
logger->
Log(
"Insufficient vertex shader version!", Logger::Level::Fatal);
547 pDeviceSettings->d3d9.BehaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
548 game->
logger->
Log(
"Hardware vertex processing detected!");
554 if (pDeviceSettings->DeviceType != D3DDEVTYPE_REF)
556 pDeviceSettings->BehaviorFlags &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING;
557 pDeviceSettings->BehaviorFlags &= ~D3DCREATE_PUREDEVICE;
558 pDeviceSettings->BehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
562 pDeviceSettings->DeviceType = D3DDEVTYPE_REF;
567 pDeviceSettings->d3d9.AdapterFormat,
568 pDeviceSettings->d3d9.pp.BackBufferFormat))
569 pDeviceSettings->d3d9.pp.AutoDepthStencilFormat = D3DFMT_D24S8;
572 pDeviceSettings->d3d9.AdapterFormat,
573 pDeviceSettings->d3d9.pp.BackBufferFormat))
574 pDeviceSettings->d3d9.pp.AutoDepthStencilFormat = D3DFMT_D24X8;
577 pDeviceSettings->d3d9.AdapterFormat,
578 pDeviceSettings->d3d9.pp.BackBufferFormat))
579 pDeviceSettings->d3d9.pp.AutoDepthStencilFormat = D3DFMT_D24X4S4;
582 pDeviceSettings->d3d9.AdapterFormat,
583 pDeviceSettings->d3d9.pp.BackBufferFormat))
584 pDeviceSettings->d3d9.pp.AutoDepthStencilFormat = D3DFMT_D24FS8;
586 game->
logger->
Log(
"Could not find a suitable depth stencil format!", Logger::Level::Fatal);
589 if (pDeviceSettings->d3d9.DeviceType == D3DDEVTYPE_REF)
591 DXUTDisplaySwitchingToREFWarning(DXUT_D3D9_DEVICE);
592 game->
logger->
Log(
"Switching to reference device warning!", Logger::Level::Debug);
595 if (pCaps.NumSimultaneousRTs < 3)
610 HRESULT CALLBACK
GameClass::OnCreateDevice(IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext)
614 game->
logger->
Log(
"Calling OnCreateDevice()...");
630 game->
logger->
Log(
"OnCreateDevice called in STATUS_GAME so we are headed back to STATUS_LOADING!", Logger::Level::Debug);
639 game->
logger->
Log(
"Advanced to STATUS_LOADING");
643 game->
logger->
Log(
"OnCreateDevice() done!");
654 HRESULT CALLBACK
GameClass::OnResetDevice(IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext)
666 sprintf_s(msg, 99,
"GameClass::OnResetDevice() DS %i", game->
displaystage);
696 game->
logger->
Log(
"game->GUI->g_HUD Initializing...");
699 game->
GUI->
g_HUD.RemoveAllControls();
701 V(game->
GUI->
g_HUD.SetFont(0, L
"DejaVu Sans Mono", static_cast<LONG>(12.0f * game->
displayscale), FW_NORMAL));
704 V(game->
GUI->
g_HUD.SetFont(1, L
"Comic Sans MS", static_cast<LONG>(24.0f * game->
displayscale), FW_NORMAL));
723 game->
logger->
Log(
"OnResetDevice() done!");
739 g_fFOV = D3DXToRadian(115.0f);
749 if (itemtype == KitType::Binoculars)
751 g_fFOV = D3DXToRadian(12.0f);
754 else if (itemtype == KitType::NightVision)
776 sprintf_s(msg, 99,
"GameClass::OnFrameMove %i", game->
displaystage);
829 game->
logger->
Log(
"Oops, this is where we were skipping ahead in STATUS_SPLASH before all resources were loaded!", Logger::Level::Debug);
839 game->
logger->
Log(
"Somehow we are advancing to STATUS_LOGIN with a null MOTD GLASS!", Logger::Level::Error);
845 sprintf_s(msg,
sizeof msg,
"Somehow we are advancing to STATUS_LOGIN with a null m_pddsGUIScroll %i!", game->
loadstage);
846 game->
logger->
Log(msg, Logger::Level::Error);
862 game->
logger->
Log(
"Advanced to STATUS_LOGIN");
896 sprintf_s(msg,
sizeof msg,
"Somehow we are advancing to STATUS_LOADING with a null m_pddsGUIScroll %i!", game->
loadstage);
897 game->
logger->
Log(msg, Logger::Level::Error);
916 game->
logger->
Log(
"Advanced to STATUS_LOADING");
929 static float rxhold = 0.0f, txhold = 0.0f;
932 rxhold += fElapsedTime;
944 txhold += fElapsedTime;
973 game->
logger->
Log(
"Advanced to STATUS_LOADING");
978 if (!GetWindowRect(DXUTGetHWND(), &rect))
980 sprintf_s(msg,
sizeof msg,
"Error in GetWindowRect: %d", GetLastError());
986 if (!MoveWindow(DXUTGetHWND(), rect.left, static_cast<int>(rect.top + 102.5f * game->
displayscale), static_cast<int>(700.0f * game->
displayscale), static_cast<int>(500.0f * game->
displayscale),
true))
988 sprintf_s(msg,
sizeof msg,
"Error in MoveWindow: %d", GetLastError());
992 DXUTReset3DEnvironment();
994 game->
GUI->
g_HUD.RemoveAllControls();
1037 #pragma region Eventually we can delete this 1038 game->
logger->
Log(
"Transmitting the contents of their old PODS system to the server!");
1039 rename(
"pods.dat",
"Save\\pods.dat");
1043 _sopen_s(&pods,
"Save\\pods.dat", _O_RDONLY | O_BINARY, _SH_DENYNO, _S_IWRITE);
1046 _lseek(pods, 0, SEEK_SET);
1048 _read(pods, &PODStot, 4);
1050 for (
int t = 1; t <= PODStot; t++)
1054 unsigned short serial;
1057 unsigned char unused;
1061 float latitude, longitude;
1062 char IVR[10], PODS[6];
1063 D3DXVECTOR3 location;
1064 unsigned short quantity;
1068 _lseek(pods, t * 100, SEEK_SET);
1069 _read(pods, &temppods,
sizeof(SPODSData));
1070 if (temppods.serial)
1072 SPacketBig bigPacket = SPacketBig();
1073 bigPacket.type = 13;
1074 sprintf_s(bigPacket.msg, 78,
"%i,%i,%i,%i,%s,%i,%s,%s,%.3f,%.3f,%.3f,%i,%.0f",
1075 temppods.serial, temppods.type, temppods.loadtype, temppods.reference, temppods.handle, temppods.dest, &temppods.IVR[4], temppods.PODS, temppods.location.x, temppods.location.y, temppods.location.z, temppods.quantity, temppods.weight);
1081 remove(
"Save\\pods.dat");
1087 #pragma region Eventually we can delete this 1088 game->
logger->
Log(
"Transmitting the contents of their old VPT system to the server!");
1089 remove(
"Save\\msgbodies.dat");
1090 remove(
"Save\\msgheader.dat");
1092 rename(
"vpt.dat",
"Save\\vpt.dat");
1096 _sopen_s(&vpt,
"Save\\vpt.dat", _O_RDONLY | O_BINARY, _SH_DENYNO, _S_IWRITE);
1099 for (
int t = 1; t <= MAX_SHIPINMEMORY && _eof(vpt) != 1; t++)
1108 D3DXVECTOR3 location;
1109 unsigned short serial;
1112 unsigned short pilot;
1114 _lseek(vpt, t * 100, SEEK_SET);
1115 _read(vpt, &tempvpt,
sizeof(SVPT));
1118 SPacketBig bigPacket = SPacketBig();
1119 bigPacket.type = 13;
1120 sprintf_s(bigPacket.msg, 78,
"%i,%i,%i,%i,%s,%i,%s,%s,%.3f,%.3f,%.3f,%i,%.0f",
1121 tempvpt.serial, tempvpt.type, 0, tempvpt.reference, tempvpt.owner, 0,
"", tempvpt.IVR, tempvpt.location.x, tempvpt.location.y, tempvpt.location.z, 0, 0.0f);
1127 remove(
"Save\\vpt.dat");
1138 Swaypoint tempwaypoint = Swaypoint();
1139 ZeroMemory(&tempwaypoint,
sizeof Swaypoint);
1147 #pragma region Eventually we can delete this 1148 game->
logger->
Log(
"Transmitting the contents of their old help system to the server!");
1151 for (
int i = 1; i < 81; i++)
1155 SClientPacket outpacket = SClientPacket();
1157 outpacket.type = 41;
1158 outpacket.f_x =
static_cast<float>(i);
1159 outpacket.f_y = 4.0f;
1160 outpacket.f_z = 0.0f;
1161 outpacket.f_w = 0.0f;
1175 game->
GUI->
fade += fElapsedTime / 5.8f;
1206 game->
logger->
Log(
"Advanced to STATUS_GAME");
1212 SetWindowLong(DXUTGetHWND(), GWL_STYLE, WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE);
1216 game->
logger->
Log(
"DXUTToggleFullScreen()");
1217 DXUTToggleFullScreen();
1224 ShowWindow(DXUTGetHWND(), SW_MAXIMIZE);
1227 SetFocus(DXUTGetHWND());
1243 #if !defined(DIALOGHARNESS) | !defined(_DEBUG) 1246 game->otfmTimer->startTimer();
1251 game->otfmTimer->stopTimer();
1255 game->vpfmTimer->startTimer();
1259 game->vpfmTimer->stopTimer();
1264 game->uifmTimer->startTimer();
1268 game->uifmTimer->stopTimer();
1277 if (command.
name ==
"UseInventoryItem")
1281 const int itemIndex = command.
ivalues[0];
1282 int itemType, vehicleId;
1296 case KitType::LockPick:
1299 SClientPacket outpacket = SClientPacket();
1301 outpacket.type = 21;
1302 outpacket.f_x =
static_cast<float>(itemType);
1303 outpacket.f_y = 0.0f;
1304 outpacket.f_z = 0.0f;
1314 case KitType::Binoculars:
1315 case KitType::NightVision:
1316 case KitType::Sunglasses:
1320 case KitType::TemporaryRunwayLighting:
1321 case KitType::UpLink:
1323 SClientPacket outpacket = SClientPacket();
1325 outpacket.type = 21;
1326 outpacket.f_x =
static_cast<float>(itemType);
1327 outpacket.f_y = 4.0f;
1328 outpacket.f_z = 1.0f;
1329 outpacket.f_w = 0.0f;
1333 case KitType::Firework:
1335 SClientPacket outpacket = SClientPacket();
1337 outpacket.type = 21;
1338 outpacket.f_x =
static_cast<float>(itemType);
1339 outpacket.f_y = 0.0f;
1340 outpacket.f_z = 0.0f;
1341 outpacket.f_w = 0.0f;
1346 game->
logger->
Log(
"Received request to UseInventoryItem but unhandled type!", Logger::Level::Error);
1356 else if (command.
name ==
"TransferInventoryItem")
1362 const int itemIndex = command.
ivalues[0];
1372 SClientPacket outpacket = SClientPacket();
1374 outpacket.type = 21;
1375 outpacket.f_x =
static_cast<float>(itemType);
1376 outpacket.f_y = 1.0f;
1377 outpacket.f_z =
static_cast<float>(command.
ivalues[1]);
1393 else if (command.
name ==
"SwapInventoryItem")
1397 const int itemIndex = command.
ivalues[0];
1398 int itemType, vehicleId;
1413 SClientPacket outpacket = SClientPacket();
1415 outpacket.type = 21;
1416 outpacket.f_x =
static_cast<float>(itemType);
1417 outpacket.f_y = 2.0f;
1418 outpacket.f_z =
static_cast<float>(command.
ivalues[1]);
1419 outpacket.f_w = 0.0f;
1428 else if (command.
name ==
"TransferWeapon")
1432 SClientPacket outpacket = SClientPacket();
1433 outpacket.type = 19;
1434 outpacket.f_x = 0.0f;
1435 outpacket.f_y = 0.0f;
1436 outpacket.f_z = 1.0f;
1437 outpacket.f_w =
static_cast<float>(command.
ivalues[0]);
1446 else if (command.
name ==
"ToggleAvionics")
1456 else if (command.
ivalues[0] == 4)
1460 ZeroMemory(&game->
bus->
assayGrid.gridarray,
sizeof SAssayGrid);
1462 else if (command.
ivalues[0] == 5)
1473 SClientPacket outpacket;
1474 outpacket.type = 11;
1476 outpacket.f_y = 0.0f;
1477 outpacket.f_z = 0.0f;
1478 outpacket.f_w = 0.0f;
1500 sprintf_s(msg, 99,
"GameClass::OnFrameRender (%i)", game->
displaystage);
1511 if (SUCCEEDED(pd3dDevice->BeginScene()))
1513 V(pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0L, 1.0f, 0));
1515 pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
true);
1516 pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS);
1517 pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
1518 pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
1519 pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
1524 V(pd3dDevice->EndScene());
1529 if (SUCCEEDED(pd3dDevice->BeginScene()))
1531 V(pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0L, 1.0f, 0));
1533 pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
true);
1534 pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS);
1535 pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
1536 pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
1537 pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
1542 V(pd3dDevice->EndScene());
1550 if (SUCCEEDED(pd3dDevice->BeginScene()))
1552 V(pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, game->
GUI->
fade == 1.0f ? D3DCOLOR_XRGB(static_cast<short>(255.0f * game->
GUI->
furtherdelay / 0.5f), static_cast<short>(255.0f * game->
GUI->
furtherdelay / 0.5f), static_cast<short>(255.0f * game->
GUI->
furtherdelay / 0.5f)) : 0L, 1.0f, 0));
1554 pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
true);
1555 pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS);
1556 pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
1557 pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
1558 pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
1562 if (game->
stage == 0)
1564 game->
logger->
Log(
"#include TEXTURES called!");
1570 if (game->
stage == 31)
1572 game->
logger->
Log(
"#include TEXTURES exited successfully!");
1577 if (game->
stage == 32)
1590 V(pd3dDevice->EndScene());
1599 game->vpfrTimer->startTimer();
1606 game->vpfrTimer->stopTimer();
1609 V(pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS));
1611 V(pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
true));
1612 V(pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA));
1613 V(pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA));
1616 game->uifrTimer->startTimer();
1622 V(game->
GUI->
g_HUD.OnRender(fElapsedTime));
1625 game->uifrTimer->stopTimer();
1632 V(pd3dDevice->EndScene());
1637 sprintf_s(msg,
sizeof msg,
"Found a %i when trying to EndScene", game->
beginScene);
1638 game->
logger->
Log(msg, Logger::Level::Fatal);
1641 V(pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
false));
1642 V(pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS));
1647 game->otfrTimer->startTimer();
1651 game->otfrTimer->stopTimer();
1694 LRESULT CALLBACK
GameClass::MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
bool* pbNoFurtherProcessing,
void* pUserContext)
1703 if (wParam == SC_RESTORE)
1710 game->
logger->
Log(
"GameClass::MsgProc WM_CREATE");
1712 DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
1713 ZeroMemory(&NotificationFilter,
sizeof DEV_BROADCAST_DEVICEINTERFACE);
1714 NotificationFilter.dbcc_size =
sizeof DEV_BROADCAST_DEVICEINTERFACE;
1715 NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
1717 game->
dev_notify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
1728 *pbNoFurtherProcessing =
true;
1732 case WM_DEVICECHANGE:
1734 game->
logger->
Log(
"GameClass::MsgProc WM_DEVICECHANGE");
1738 const auto lpdb = PDEV_BROADCAST_HDR(lParam);
1739 if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
1744 case DBT_DEVICEARRIVAL:
1745 case DBT_DEVICEREMOVECOMPLETE:
1771 game->
logger->
Log(
"GameClass::MsgProc WM_ACTIVATE");
1774 game->
logger->
Log(
"GameClass::MsgProc WM_NULL");
1777 game->
logger->
Log(
"GameClass::MsgProc WM_DESTROY");
1780 game->
logger->
Log(
"GameClass::MsgProc WM_ENABLE");
1783 game->
logger->
Log(
"GameClass::MsgProc WM_SETFOCUS");
1786 game->
logger->
Log(
"GameClass::MsgProc WM_KILLFOCUS");
1789 game->
logger->
Log(
"GameClass::MsgProc WM_QUIT");
1792 game->
logger->
Log(
"GameClass::MsgProc WM_SHOWWINDOW");
1796 game->
logger->
Log(
"GameClass::MsgProc WM_MOVE");
1801 game->
logger->
Log(
"GameClass::MsgProc WM_SIZE");
1804 if (DXUTIsWindowed())
1817 if (GetClientRect(hWnd, &client))
1822 game->
displayWidth =
static_cast<float>(client.right - client.left);
1823 game->
displayHeight =
static_cast<float>(client.bottom - client.top);
1834 game->
displayWidth =
static_cast<float>(DXUTGetD3D9PresentParameters().BackBufferWidth);
1835 game->
displayHeight =
static_cast<float>(DXUTGetD3D9PresentParameters().BackBufferHeight);
1852 *pbNoFurtherProcessing = game->
GUI->
MsgProc(hWnd, uMsg, wParam, lParam);
1853 if (*pbNoFurtherProcessing)
1860 *pbNoFurtherProcessing = game->
GUI->
g_HUD.MsgProc(hWnd, uMsg, wParam, lParam);
1861 if (*pbNoFurtherProcessing)
1873 case WM_RBUTTONDOWN:
1874 game->
logger->
Log(
"GameClass::MsgProc WM_RBUTTONDOWN");
1881 game->
logger->
Log(
"GameClass::MsgProc WM_RBUTTONUP");
1887 case WM_RBUTTONDBLCLK:
1888 game->
logger->
Log(
"GameClass::MsgProc WM_RBUTTONDBLCLK");
1908 game->
logger->
Log(
"GameClass::MsgProc WM_CHAR");
1912 if (LOWORD(wParam) > 13)
1917 else if (LOWORD(wParam) == 13)
1922 SPacketBig outpacket = SPacketBig();
1923 strcpy_s(outpacket.msg,
sizeof outpacket.msg,
outgoing);
1925 outpacket.array = 0;
1935 if (sscanf_s(
outgoing,
"%d", &amount) == 1 && amount > 0.0f)
1939 SClientPacket outpacket;
1940 outpacket.type = 19;
1941 outpacket.f_x =
static_cast<float>(amount);
1942 outpacket.f_y = 0.0f;
1943 outpacket.f_z = 0.0f;
1944 outpacket.f_w =
static_cast<float>(
temptarget);
1957 if (sscanf_s(
outgoing,
"%d", &amount) == 1)
1961 SClientPacket outpacket;
1962 outpacket.type = 19;
1963 outpacket.f_x = 0.0f;
1964 outpacket.f_y =
static_cast<float>(amount);
1965 outpacket.f_z = 0.0f;
1966 outpacket.f_w =
static_cast<float>(
temptarget);
1979 if (sscanf_s(
outgoing,
"%d", &amount) == 1 && amount < 0)
1989 SClientPacket outpacket;
1991 outpacket.f_x = -
static_cast<float>(amount);
1992 outpacket.f_y = 0.0f;
1993 outpacket.f_z = 0.0f;
1994 outpacket.f_w = 0.0f;
2006 else if (LOWORD(wParam) == 8)
2020 void GameClass::LoadTexture(LPDIRECT3DTEXTURE9* resource,
const std::string& pointerName,
const WCHAR* file, D3DFORMAT format)
2027 SAFE_RELEASE(*resource);
2030 sprintf_s(msg, 199,
"Resource was not previously released: %s", pointerName.c_str());
2037 sprintf_s(msg, 199,
"Filename was blank for: %s", pointerName.c_str());
2043 if (FAILED(hr = D3DXCreateTextureFromFileExW(DXUTGetD3D9Device(), file, D3DX_DEFAULT, D3DX_DEFAULT, 1, 0, format,
2044 D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0,
nullptr,
nullptr, resource)))
2047 if (hr == D3DERR_INVALIDCALL)
2048 sprintf_s(msg, 199,
"Cannot load texture: %S (D3DERR_INVALIDCALL)", file);
2049 else if (hr == D3DERR_NOTAVAILABLE)
2050 sprintf_s(msg, 199,
"Cannot load texture: %S (D3DERR_NOTAVAILABLE)", file);
2051 else if (hr == D3DERR_OUTOFVIDEOMEMORY)
2052 sprintf_s(msg, 199,
"Cannot load texture: %S (D3DERR_OUTOFVIDEOMEMORY)", file);
2053 else if (hr == D3DXERR_INVALIDDATA)
2054 sprintf_s(msg, 199,
"Cannot load texture: %S (D3DXERR_INVALIDDATA)", file);
2055 else if (hr == E_OUTOFMEMORY)
2056 sprintf_s(msg, 199,
"Cannot load texture: %S (E_OUTOFMEMORY)", file);
2058 sprintf_s(msg, 199,
"Cannot load texture: %S (0x%x)", file, hr);
2087 SClientPacket outpacket;
2088 outpacket.type = 23;
2089 outpacket.f_x = 0.0f;
2090 outpacket.f_y = 2.0f;
2091 outpacket.f_z = 0.0f;
2092 outpacket.f_w = 0.0f;
2096 outpacket.type = 23;
2097 outpacket.f_x = 0.0f;
2098 outpacket.f_y = 3.0f;
2099 outpacket.f_z = 0.0f;
2100 outpacket.f_w = 0.0f;
2107 else if (oldgear == -1)
2111 SClientPacket outpacket;
2112 outpacket.type = 23;
2113 outpacket.f_x = 0.0f;
2114 outpacket.f_y = 4.0f;
2115 outpacket.f_z = 0.0f;
2116 outpacket.f_w = 0.0f;
2151 SClientPacket outpacket;
2152 outpacket.type = 23;
2153 outpacket.f_x = 0.0f;
2154 outpacket.f_y = 1.0f;
2155 outpacket.f_z = 0.0f;
2156 outpacket.f_w = 0.0f;
2160 outpacket.type = 23;
2161 outpacket.f_x = 0.0f;
2162 outpacket.f_y = 4.0f;
2163 outpacket.f_z = 0.0f;
2164 outpacket.f_w = 0.0f;
2175 SClientPacket outpacket;
2176 outpacket.type = 23;
2177 outpacket.f_x = 0.0f;
2178 outpacket.f_y = 3.0f;
2179 outpacket.f_z = 0.0f;
2180 outpacket.f_w = 0.0f;
2198 sprintf_s(bug, 199,
"That's weird, tried to lose scanner target but already -1: %s", msg);
2292 sprintf_s(msg, 99,
"KeyboardProc START %i %i %i", game->
displaystage, nChar, bKeyDown ? 1 : 0);
2329 CDXUTDialog::ClearFocus();
2334 CDXUTDialog::ClearFocus();
2394 sprintf_s(msg, 99,
"KeyboardProc key %x", nChar);
2451 DWORD dwShaderFlags = D3DXSHADER_OPTIMIZATION_LEVEL3;
2453 dwShaderFlags |= D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT;
2456 dwShaderFlags |= D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT;
2460 HRESULT hr = D3DXCreateEffectFromFile(DXUTGetD3D9Device(), L
"CustomUI.fx",
nullptr,
nullptr, dwShaderFlags,
nullptr, &game->
graphics->
g_pEffect,
nullptr);
2462 game->
logger->
Log(
"Graphics::LoadShaderFile D3DXCreateEffectFromFile", Logger::Level::Fatal, hr);
2549 game->
logger->
Log(
"Calling OnLostDevice()...");
2583 game->
logger->
Log(
"OnLostDevice() done!");
2591 sprintf_s(msg, 199,
"Resource not set to lost: %s", game->
trackedResources.at(t).name);
2592 game->
logger->
Log(msg, Logger::Level::Error);
2607 game->
logger->
Log(
"Calling OnDestroyDevice()...");
2628 game->
logger->
Log(
"Resources that haven't been freed:", Logger::Level::Warn);
2632 game->
logger->
Log(msg, Logger::Level::Warn);
2636 game->
logger->
Log(
"All tracked resources have been freed!");
2639 DXUTGetD3D9Device()->Release();
2641 game->
logger->
Log(
"OnDestroyDevice() done!");
2646 WCHAR filename[MAX_PATH];
2647 GetModuleFileName(
nullptr, filename, MAX_PATH);
2650 sprintf_s(msg, MAX_PATH,
"Executable: %S", filename);
2653 const DWORD dwSize = GetFileVersionInfoSize(filename,
nullptr);
2656 sprintf_s(msg, MAX_PATH,
"Error in GetFileVersionInfoSize: %d", GetLastError());
2661 BYTE* pbVersionInfo =
new BYTE[dwSize];
2663 if (!GetFileVersionInfo(filename, 0, dwSize, pbVersionInfo))
2665 sprintf_s(msg, MAX_PATH,
"Error in GetFileVersionInfo: %d", GetLastError());
2667 SAFE_DELETE_ARRAY(pbVersionInfo);
2673 if (!VerQueryValue(pbVersionInfo, TEXT(
"\\"), reinterpret_cast<VOID FAR * FAR*>(&p), &querySize))
2675 sprintf_s(msg, MAX_PATH,
"Error in VerQueryValue: %d", GetLastError());
2677 SAFE_DELETE_ARRAY(pbVersionInfo);
2683 VS_FIXEDFILEINFO* verInfo =
reinterpret_cast<VS_FIXEDFILEINFO*
>(p);
2684 major = HIWORD(verInfo->dwFileVersionMS);
2685 minor = LOWORD(verInfo->dwFileVersionMS);
2686 build = HIWORD(verInfo->dwFileVersionLS);
2687 revision = LOWORD(verInfo->dwFileVersionLS);
2689 SAFE_DELETE_ARRAY(pbVersionInfo);
2694 const DWORD64 start = __rdtsc();
2696 const DWORD64 end = __rdtsc();
2697 const DWORD64 hz = end - start;
2698 const DWORD64 mhz = hz / 1000000;
2699 return static_cast<float>(mhz);
2704 assert(strlen(name) < 32);
2712 sprintf_s(msg, 199,
"GameClass::AddTrackedResource Already Tracking: %s (%i)", name,
trackedResources.at(i).status);
2727 assert(status != 0);
2728 assert(strlen(name) < 32);
2736 sprintf_s(msg, 199,
"GameClass::UpdateTrackedResource %s already status %i", name, status);
2742 sprintf_s(msg, 199,
"GameClass::UpdateTrackedResource %s status transition %i", name, status);
2754 sprintf_s(msg, 199,
"GameClass::UpdateTrackedResource Wasn't Tracking: %s", name);
void Initialize(HWND prmHWND)
LPDIRECT3DTEXTURE9 m_pddsGUIInterlace
int inventoryItemInUseType
static void CALLBACK OnLostDevice(void *pUserContext)
void SendScreenShot(const char *fileContents, int length) const
int intentoryItemInUseVehicleId
static void CALLBACK KeyboardProc(UINT nChar, bool bKeyDown, bool bAltDown, void *pUserContext)
std::vector< DIDEVICEINSTANCE > deviceList
std::vector< Resource > trackedResources
virtual void UpdateMenu(short tab)
static void CALLBACK OnDestroyDevice(void *pUserContext)
void DrawImmigration(IDirect3DDevice9 *pd3dDevice, float fElapsedTime)
LPDIRECT3DTEXTURE9 m_pddsGUIRanks
void SetNetworkingPointer(Networking *prmNetworking)
BOOL IsDepthFormatOk(D3DFORMAT DepthFormat, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat) const
std::vector< Command > commandStream
void RequestWaypointData() const
HRESULT OnCreateDevice(IDirect3DDevice9 *pd3dDevice)
enum Bus::Afcs::LateralModes CurrentLateralMode
void SendToServer(void *pData, DWORD dwSize, bool bGuaranteed, PacketOrdering order=ORDERING_NONE) const
LPDIRECT3DTEXTURE9 m_pddsLightningAndBackground[3]
bool MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LPDIRECT3DTEXTURE9 m_pddsGUIActions
static LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool *pbNoFurtherProcessing, void *pUserContext)
HRESULT OnResetDevice(void) const
InformationDialog * informationDialog
void AutopilotDisconnect() const
std::vector< GUID > deviceGuids
HRESULT LoadShaderFile(void)
s_network_objects playerships[MAX_SCAN]
static HRESULT CALLBACK OnResetDevice(IDirect3DDevice9 *pd3dDevice, const D3DSURFACE_DESC *pBackBufferSurfaceDesc, void *pUserContext)
bool ComponentRcsRollFail
float RollAttitudeRadians
std::vector< unsigned char > personalInventory
void OnFrameRender(IDirect3DDevice9 *pd3dDevice, double fTime) const
static void CALLBACK OnFrameRender(IDirect3DDevice9 *pd3dDevice, double fTime, float fElapsedTime, void *pUserContext)
static float GetCpuSpeedMhz()
std::vector< Module * > modules
void ToggleFullScreen(bool goFullScreen)
s_mesh_component * componentarray
void SendEvent(EventType eventType, float extent=0.0f) const
bool ComponentFcsRollFail
static HRESULT CALLBACK OnCreateDevice(IDirect3DDevice9 *pd3dDevice, const D3DSURFACE_DESC *pBackBufferSurfaceDesc, void *pUserContext)
void FrameMove(GameState displaystage)
CDXUTDialogResourceManager g_DialogResourceManager
float DesiredClosingSpeed
bool ThrustReverserCommand[MAX_ENGINES]
static DialogBase * dialogs[D_ENUMERATION]
LPDIRECT3DTEXTURE9 m_pddsGUIParts
static bool CALLBACK IsDeviceAcceptable(D3DCAPS9 *pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void *pUserContext)
void LostScannerTarget(const char *msg) const
propulsion * ptrPropulsion
GridProperties gridProperties
#define DIRECTINPUT_VERSION
float DesiredPitchRadians
void RequestScannerData() const
void RequestClose() const
void GetProgramVersion(int &major, int &minor, int &build, int &revision) const
void UseOrDisuseInventoryItemType(int itemtype, int itemId, int vehicleId) const
static void CALLBACK OnGUIEvent(UINT nEvent, int nControlID, CDXUTControl *pControl, void *pUserContext)
SPlayerData player[MAX_ONLINEPLAYERS]
LPDIRECT3DTEXTURE9 m_pddsCloudBaseMapAndNetwork
void RepairVehicle() const
void FadeIn(float f, float fElapsedTime)
unsigned short temptarget
void LoadConfiguration() const
void OnFrameMove(double fTime, float fElapsedTime)
void OnFrameRender2(IDirect3DDevice9 *pd3dDevice, float fElapsedTime)
void KillScannerData() const
static void CALLBACK AdvanceStage(HSYNC handle, DWORD channel, DWORD data, void *user)
HRESULT InitDirectInput(HWND hDlg) const
void LoadTexture(LPDIRECT3DTEXTURE9 *resource, const std::string &pointerName, const WCHAR *file, D3DFORMAT format=D3DFMT_A8R8G8B8)
void ScreenCapture() const
void LightningCalculations(float fElapsedTime)
HRESULT Initialize(HWND hDlg)
void OnDestroyDevice(void)
enum Bus::Afcs::VerticalModes CurrentVerticalMode
bool lastDeviceChangedInput
LPDIRECT3DTEXTURE9 m_pddsDynamicTexture
void FlightDirectorOn() const
void SendScreenShot(HBITMAP hbitmap) const
void OnRender(float fElapsedTime, IDirect3DDevice9 *pd3dDevice)
void FrameMove(float elapsedTime)
float GetAttenuation(bool applyDensity) const
void LoadVehicleProfile(short t, bool forceCockpitTextures=false)
void Log(const char *msg, Level level=Info, int errorCode=0)
void FrameMove(float fElapsed)
HRESULT OnCreateDevice(IDirect3DDevice9 *pd3dDevice)
float Play(int soundEnum)
static void CALLBACK OnFrameMove(double fTime, float fElapsedTime, void *pUserContext)
void UpdatePresence(const char *prmDetails, const char *prmState, const char *prmLargeImageKey)
ID3DXSprite * g_pTextSprite
void SetProjectionMatrices()
LPDIRECT3DTEXTURE9 m_pddsGUIScrollButton
void RestorePage(std::string screenName)
void OnFrameMove(float fElapsedTime)
bool lastDeviceChangedSound
void LoadTextures(GameState displaystage, short loadstage)
void AddTrackedResource(const char *name, _D3DPOOL pool=D3DPOOL_MANAGED)
#define GUID_DEVINTERFACE_USB_DEVICE
void LostVerticalTarget() const
std::vector< Swaypoint > waypoint
LPDIRECT3DTEXTURE9 m_pddsGUIScroll
std::wstring strings[L_ENUMERATION]
void PlayEx(int soundEnum, bool loop, float volume=1.0f, float frequencyMod=1.0f, float pan=0.0f, bool restart=true)
void UpdateTrackedResource(const char *name, int status)
void AddToCallStack(const char *msg)
HRESULT OnResetDevice(IDirect3DDevice9 *pd3dDevice, const D3DSURFACE_DESC *pBackBufferSurfaceDesc)
void SaveConfiguration() const
void GearDownShift() const
void RequestVerbiage(int helpId) const
std::vector< unsigned char > vehicleInventory
void LoadSounds(short instage)
void LoadTextures(IDirect3DDevice9 *pd3dDevice, short *stage, short *instage)
LPDIRECT3DTEXTURE9 m_pddsProjectionTexture
static void TouchFile(const WCHAR *str)
float PitchAttitudeRadians
float EngineThrustLever[MAX_ENGINES]
static bool CALLBACK ModifyDeviceSettings(DXUTDeviceSettings *pDeviceSettings, void *pUserContext)