home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / frontend / flyLight / flyLight.cpp next >
Encoding:
C/C++ Source or Header  |  2000-12-12  |  6.8 KB  |  242 lines

  1. #include "../../lib/Fly3D.h"
  2. #include "lightengine.h"
  3. #include "resource.h"
  4. #include "time.h"
  5. #include <commctrl.h>
  6.  
  7. #define MAXLMPIXELSIZE 100
  8.  
  9. HINSTANCE hInst;
  10. HWND hWndHC,hWndProgress,hWndStatus;
  11. int lightvalue=-1,shadows=2,connectivity=1,ambient=32;
  12. float lmpixelsize=50.0;
  13. int mapsize=128;
  14.  
  15. float lightradius=0.0f;
  16. char fly_file_name[256]="";
  17.  
  18. void MyGetProfile(LPTSTR section, LPTSTR key, LPBYTE lpData, DWORD cbData)
  19. {
  20.     HKEY key1,key2,key3,key4;
  21.  
  22.     if (ERROR_SUCCESS==RegOpenKeyEx(HKEY_CURRENT_USER,"Software",0,KEY_READ,&key1))
  23.     {
  24.         if (ERROR_SUCCESS==RegOpenKeyEx(key1,"Paralelo",0,KEY_READ,&key2))
  25.         {
  26.             if (ERROR_SUCCESS==RegOpenKeyEx(key2,"Fly3D",0,KEY_READ,&key3))
  27.             {
  28.                 if (ERROR_SUCCESS==RegOpenKeyEx(key3,section,0,KEY_READ,&key4))
  29.                 {
  30.                     RegQueryValueEx(key4, key, 0, 0, lpData, &cbData);
  31.                     RegCloseKey(key4);
  32.                 }
  33.                 RegCloseKey(key3);
  34.             }
  35.             RegCloseKey(key2);
  36.         }
  37.         RegCloseKey(key1);
  38.     }
  39. }
  40.  
  41. void MyWriteProfile(LPTSTR section, LPCTSTR key, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
  42. {
  43.     HKEY key1,key2,key3,key4;
  44.     DWORD d;
  45.  
  46.     if (ERROR_SUCCESS==RegOpenKeyEx(HKEY_CURRENT_USER,"Software",0,KEY_READ,&key1))
  47.     {
  48.         if (ERROR_SUCCESS==RegCreateKeyEx(key1,"Paralelo",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key2,&d))
  49.         {
  50.             if (ERROR_SUCCESS==RegCreateKeyEx(key2,"Fly3D",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key3,&d))
  51.             {
  52.                 if (ERROR_SUCCESS==RegCreateKeyEx(key3, section,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&key4,&d))
  53.                 {
  54.                     RegSetValueEx(key4, key, 0, dwType, lpData, cbData);
  55.                     RegCloseKey(key4);
  56.                 }
  57.                 RegCloseKey(key3);
  58.             }
  59.             RegCloseKey(key2);
  60.         }
  61.         RegCloseKey(key1);
  62.     }
  63. }
  64.  
  65. int OpenBspFileDialog(HWND hWnd,char *file)
  66. {
  67.     OPENFILENAME ofn;
  68.     HINSTANCE hInstance;
  69.  
  70.     hInstance=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
  71.     
  72.     memset(&ofn,0,sizeof(OPENFILENAME));
  73.     char filename[256]="";
  74.     strcpy(filename,fly_file_name);
  75.  
  76.     ofn.lStructSize=sizeof(OPENFILENAME);
  77.     ofn.hwndOwner=hWnd;
  78.     ofn.hInstance=hInstance;
  79.     ofn.lpstrFilter="Fly scene (*.fly)\0*.fly\0";
  80.     ofn.lpstrDefExt="fly";
  81.     ofn.lpstrFile=filename;
  82.     ofn.nMaxFile=255;
  83.     ofn.lpstrTitle="Open Fly3D Scene";
  84.     ofn.Flags=OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
  85.     
  86.     if (GetOpenFileName(&ofn))
  87.     {
  88.         strcpy(file,filename);
  89.         if (filename[0])
  90.             return 1;
  91.     }
  92.     return 0;
  93. }
  94.  
  95. BOOL FAR PASCAL lightbspProc(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
  96. {
  97.     switch (uiMsg)
  98.     {
  99.     case WM_INITDIALOG:
  100.         hWndStatus=GetDlgItem(hWnd,IDC_STATUS);
  101.         hWndProgress=GetDlgItem(hWnd,IDC_PROGRESS);
  102.         EnableWindow(GetDlgItem(hWnd,IDOK),0);
  103.         if (lightradius!=0.0f)
  104.             {
  105.             SetDlgItemInt(hWnd,IDC_LIGHTRADIUSEDIT,(int)lightradius,1);
  106.             EnableWindow(GetDlgItem(hWnd,IDC_LIGHTRADIUSEDIT),1);
  107.             }
  108.         else EnableWindow(GetDlgItem(hWnd,IDC_LIGHTRADIUSEDIT),0);
  109.  
  110.         CheckDlgButton(hWnd,IDC_SHADOWS,shadows?1:0);
  111.         CheckDlgButton(hWnd,IDC_CONNECTIVITY,connectivity?1:0);
  112.         
  113.         if (lightvalue!=-1)
  114.             {
  115.             SetDlgItemInt(hWnd,IDC_LIGHTVALUEEDIT,lightvalue,1);
  116.             EnableWindow(GetDlgItem(hWnd,IDC_LIGHTVALUEEDIT),1);
  117.             }
  118.         else EnableWindow(GetDlgItem(hWnd,IDC_LIGHTVALUEEDIT),0);
  119.  
  120.         SetWindowText(GetDlgItem(hWnd,IDC_BSPFILE),fly_file_name);
  121.         if (fly_file_name[0])
  122.             EnableWindow(GetDlgItem(hWnd,IDOK),1);
  123.         else EnableWindow(GetDlgItem(hWnd,IDOK),0);
  124.  
  125.         {
  126.         char str[256];
  127.         GetPrivateProfileString("fly", "amblight", "", str, 255, fly_file_name);
  128.         sscanf(str, "%i", &ambient);
  129.         GetPrivateProfileString("fly", "lmpxsize", "", str, 255, fly_file_name);
  130.         sscanf(str, "%f", &lmpixelsize);
  131.         GetPrivateProfileString("fly", "mapsize", "", str, 255, fly_file_name);
  132.         sscanf(str, "%i", &mapsize);
  133.         SetDlgItemInt(hWnd,IDC_AMBLIGHT,ambient,1);
  134.         sprintf(str,"%.2f",lmpixelsize/10.0f);
  135.         SetDlgItemText(hWnd,IDC_LMPIXELSIZE,str);
  136.         SetDlgItemInt(hWnd,IDC_MAPSIZE,mapsize,1);
  137.         }
  138.         break;
  139.  
  140.     case WM_COMMAND:
  141.         switch(LOWORD(wParam))
  142.         {
  143.         case IDC_BROWSE:
  144.             if (OpenBspFileDialog(hWnd,fly_file_name))
  145.                 if (fly_file_name[0])
  146.                 {
  147.                     char str[256];
  148.  
  149.                     GetPrivateProfileString("fly", "amblight", "", str, 255, fly_file_name);
  150.                     sscanf(str, "%i", &ambient);
  151.                     GetPrivateProfileString("fly", "lmpxsize", "", str, 255, fly_file_name);
  152.                     sscanf(str, "%f", &lmpixelsize);
  153.                     GetPrivateProfileString("fly", "mapsize", "", str, 255, fly_file_name);
  154.                     sscanf(str, "%i", &mapsize);
  155.  
  156.                     SetDlgItemInt(hWnd,IDC_AMBLIGHT,ambient,1);
  157.                     sprintf(str,"%.2f",lmpixelsize/10.0f);
  158.                     SetDlgItemText(hWnd,IDC_LMPIXELSIZE,str);
  159.                     SetDlgItemInt(hWnd,IDC_MAPSIZE,mapsize,1);
  160.                 
  161.                     EnableWindow(GetDlgItem(hWnd,IDOK),1);
  162.                 SetDlgItemText(hWnd,IDC_BSPFILE,fly_file_name);
  163.                 }
  164.             else EnableWindow(GetDlgItem(hWnd,IDOK),0);
  165.             break;
  166.         case IDOK:
  167.             {
  168.             char str[256];
  169.             int i;
  170.  
  171.             shadows=IsDlgButtonChecked(hWnd,IDC_SHADOWS)*2;
  172.             connectivity=IsDlgButtonChecked(hWnd,IDC_CONNECTIVITY);
  173.  
  174.             if (IsDlgButtonChecked(hWnd,IDC_LIGHTRADIUS))
  175.                 {
  176.                 i=GetDlgItemInt(hWnd,IDC_LIGHTRADIUSEDIT,0,1);
  177.                 lightradius=(float)(i<0?0:i);
  178.                 SetDlgItemInt(hWnd,IDC_LIGHTRADIUSEDIT,(int)lightradius,1);
  179.                 }
  180.             else lightradius=0.0f;
  181.             if (IsDlgButtonChecked(hWnd,IDC_LIGHTVALUE))
  182.                 {
  183.                 i=GetDlgItemInt(hWnd,IDC_LIGHTVALUEEDIT,0,1);
  184.                 lightvalue=(i<0?0:i>255?255:i);
  185.                 SetDlgItemInt(hWnd,IDC_LIGHTVALUEEDIT,lightvalue,1);
  186.                 }
  187.             else lightvalue=-1;
  188.             
  189.             i=GetDlgItemInt(hWnd,IDC_AMBLIGHT,0,1);
  190.             ambient=(i<0?0:i>255?255:i);
  191.  
  192.             mapsize=GetDlgItemInt(hWnd,IDC_MAPSIZE,0,1);
  193.             
  194.             GetDlgItemText(hWnd,IDC_LMPIXELSIZE,str,255);
  195.             sscanf(str,"%f",&lmpixelsize);
  196.             lmpixelsize*=10.0f;
  197.             
  198.             EnableWindow(GetDlgItem(hWnd,IDOK),0);
  199.             
  200.             set_engine(new lightEngine,hWnd,hInst,FLYAPPID_LIGHTBSP);
  201.             init_directx();
  202.             flyengine->shadows=shadows;
  203.             ((lightEngine *)flyengine)->light(fly_file_name);
  204.             free_engine();
  205.             free_directx();
  206.  
  207.             EnableWindow(GetDlgItem(hWnd,IDOK),1);
  208.             }
  209.             break;
  210.         case IDC_LIGHTRADIUS:
  211.             if (IsDlgButtonChecked(hWnd,IDC_LIGHTRADIUS))
  212.                 EnableWindow(GetDlgItem(hWnd,IDC_LIGHTRADIUSEDIT),1);
  213.             else EnableWindow(GetDlgItem(hWnd,IDC_LIGHTRADIUSEDIT),0);
  214.             break;
  215.         case IDC_LIGHTVALUE:
  216.             if (IsDlgButtonChecked(hWnd,IDC_LIGHTVALUE))
  217.                 EnableWindow(GetDlgItem(hWnd,IDC_LIGHTVALUEEDIT),1);
  218.             else EnableWindow(GetDlgItem(hWnd,IDC_LIGHTVALUEEDIT),0);
  219.             break;
  220.         case IDCANCEL:
  221.             EndDialog (hWnd, IDCANCEL);
  222.             break;
  223.         }
  224.         break;
  225.     }
  226.     return FALSE;
  227.  
  228. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
  229. {
  230.     hInst=hInstance;
  231.  
  232.     MyGetProfile("lightbsp","filename", (unsigned char *)&fly_file_name, 256);
  233.  
  234.     DialogBox(hInst,MAKEINTRESOURCE(IDD_LIGHTBSP),0,(DLGPROC)lightbspProc);
  235.  
  236.     MyWriteProfile("lightbsp","filename", REG_SZ, (unsigned char *)&fly_file_name, sizeof(char)*strlen(fly_file_name)+1);
  237.  
  238.     return 0;
  239. }
  240.  
  241.