home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Utilities / MView / mode.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2004-09-30  |  9.1 KB  |  353 lines

  1. /*//////////////////////////////////////////////////////////////////////////////
  2. //
  3. // File: mode.cpp
  4. //
  5. // Copyright (C) 1999 Microsoft Corporation. All Rights Reserved.
  6. //
  7. //
  8. //////////////////////////////////////////////////////////////////////////////*/
  9.  
  10. #include "mviewpch.h"
  11.  
  12. HRESULT
  13. InitViews
  14.     (
  15.     SFrame *pframe, 
  16.     SDrawElement *pde
  17.     );
  18.  
  19. void
  20. TrivialData::ToggleNPatchEdgeMode()
  21. {
  22.     m_bNPatchEdgeMode = !m_bNPatchEdgeMode;
  23.     CheckMenuItem(m_hMenu, ID_NPATCHES_EDGEMODE, m_bNPatchEdgeMode ? MF_CHECKED : MF_UNCHECKED);
  24. }
  25.  
  26. void
  27. TrivialData::ToggleSolidMode()
  28. {
  29.     if (m_bWireframeMode)
  30.     {
  31.         GXASSERT(!m_bEdgeMode);
  32.  
  33.         ToggleWireframeMode();
  34.     }
  35.  
  36.     if (m_bEdgeMode)
  37.     {
  38.         GXASSERT(!m_bWireframeMode);
  39.  
  40.         ToggleEdgeMode();
  41.     }
  42. }
  43.  
  44. void
  45. TrivialData::ToggleEdgeMode()
  46. {
  47.     DWORD dwOption;
  48.     if (m_bWireframeMode)
  49.     {
  50.         GXASSERT(!m_bEdgeMode);
  51.  
  52.         ToggleWireframeMode();
  53.     }
  54.  
  55.     m_bEdgeMode = !m_bEdgeMode;
  56.     dwOption = m_bEdgeMode ? MF_CHECKED : MF_UNCHECKED;
  57.  
  58.     CheckMenuItem(m_hMenu, ID_D3D_EDGEMODE, dwOption);
  59.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_EDGEMODE, MAKELONG(m_bEdgeMode, 0));
  60.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_SOLID, MAKELONG((!m_bEdgeMode && !m_bWireframeMode), 0));
  61. }
  62.  
  63. void
  64. TrivialData::ToggleNoSelectionMode()
  65. {
  66.     DWORD dwOption;
  67.  
  68.     // if Vertex Selection mode is on, disable it
  69.     if (m_bVertexSelectionMode)
  70.     {
  71.         ToggleVertexSelectionMode();
  72.     }
  73.  
  74.     // if Face selection mode is on, disable it
  75.     if (m_bFaceSelectionMode)
  76.     {
  77.         ToggleFaceSelectionMode();
  78.     }
  79.  
  80.     if (m_bShowMeshSelectionMode)
  81.     {
  82.         ToggleMeshSelectionMode();
  83.     }
  84. }
  85.  
  86. void
  87. TrivialData::ToggleMeshSelectionMode()
  88. {
  89.     DWORD dwOption;
  90.  
  91.     m_bShowMeshSelectionMode = !m_bShowMeshSelectionMode;
  92.     dwOption = m_bShowMeshSelectionMode ? MF_CHECKED : MF_UNCHECKED;
  93.  
  94.     CheckMenuItem(m_hMenu, ID_OPTIONS_MESHSELECTION, dwOption);
  95.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_OPTIONS_MESHSELECTION, MAKELONG(m_bShowMeshSelectionMode, 0));
  96.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_OPTIONS_NOSELECTION, MAKELONG((!m_bFaceSelectionMode && !m_bVertexSelectionMode && !m_bShowMeshSelectionMode), 0));
  97.  
  98.     UpdateSelectionInfo();
  99. }
  100.  
  101. void
  102. TrivialData::ToggleFaceSelectionMode()
  103. {
  104.     DWORD dwOption;
  105. #if 0
  106.     // if Vertex Selection mode is on, disable it
  107.     if (m_bVertexSelectionMode)
  108.     {
  109.         GXASSERT(!m_bFaceSelectionMode);
  110.  
  111.         ToggleVertexSelectionMode();
  112.     }
  113. #endif
  114.  
  115.     m_bFaceSelectionMode = !m_bFaceSelectionMode;
  116.     dwOption = m_bFaceSelectionMode ? MF_CHECKED : MF_UNCHECKED;
  117.  
  118.     CheckMenuItem(m_hMenu, ID_OPTIONS_FACESELECTION, dwOption);
  119.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_OPTIONS_FACESELECTION, MAKELONG(m_bFaceSelectionMode, 0));
  120.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_OPTIONS_NOSELECTION, MAKELONG((!m_bFaceSelectionMode && !m_bVertexSelectionMode && !m_bShowMeshSelectionMode), 0));
  121.  
  122.     UpdateSelectionInfo();
  123. }
  124.  
  125. void
  126. TrivialData::ToggleVertexSelectionMode()
  127. {
  128.     DWORD dwOption;
  129.  
  130. #if 0
  131.     // if Vertex Selection mode is on, disable it
  132.     if (m_bFaceSelectionMode)
  133.     {
  134.         GXASSERT(!m_bVertexSelectionMode);
  135.  
  136.         ToggleFaceSelectionMode();
  137.     }
  138. #endif
  139.  
  140.     m_bVertexSelectionMode = !m_bVertexSelectionMode;
  141.     dwOption = m_bVertexSelectionMode ? MF_CHECKED : MF_UNCHECKED;
  142.  
  143.     CheckMenuItem(m_hMenu, ID_OPTIONS_VERTEXSELECTION, dwOption);
  144.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_OPTIONS_VERTEXSELECTION, MAKELONG(m_bVertexSelectionMode, 0));
  145.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_OPTIONS_NOSELECTION, MAKELONG((!m_bFaceSelectionMode && !m_bVertexSelectionMode && !m_bShowMeshSelectionMode), 0));
  146.  
  147.     UpdateSelectionInfo();
  148. }
  149.  
  150. void
  151. TrivialData::ToggleStripMode()
  152. {
  153.     DWORD dwOption;
  154.  
  155.     m_bStripMode = !m_bStripMode;
  156.     dwOption = m_bStripMode ? MF_CHECKED : MF_UNCHECKED;
  157.  
  158.     CheckMenuItem(m_hMenu, ID_D3D_STRIPMODE, dwOption);
  159.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_STRIPMODE, MAKELONG(m_bStripMode, 0));
  160. }
  161.  
  162. void
  163. TrivialData::ToggleAdjacencyMode()
  164. {
  165.     DWORD dwOption;
  166.  
  167.     m_bAdjacencyMode = !m_bAdjacencyMode;
  168.     dwOption = m_bAdjacencyMode ? MF_CHECKED : MF_UNCHECKED;
  169.  
  170.     CheckMenuItem(m_hMenu, ID_D3D_ADJACENCYMODE, dwOption);
  171.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_ADJACENCYMODE, MAKELONG(m_bAdjacencyMode, 0));
  172. }
  173.  
  174. void
  175. TrivialData::ToggleCreaseMode()
  176. {
  177.     DWORD dwOption;
  178.  
  179.     m_bCreaseMode = !m_bCreaseMode;
  180.     dwOption = m_bCreaseMode ? MF_CHECKED : MF_UNCHECKED;
  181.  
  182.     CheckMenuItem(m_hMenu, ID_D3D_CREASEMODE, dwOption);
  183.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_CREASEMODE, MAKELONG(m_bCreaseMode, 0));
  184. }
  185.  
  186. void
  187. TrivialData::ToggleNormalsMode()
  188. {
  189.     DWORD dwOption;
  190.  
  191.     m_bNormalsMode = !m_bNormalsMode;
  192.     dwOption = m_bNormalsMode ? MF_CHECKED : MF_UNCHECKED;
  193.  
  194.     CheckMenuItem(m_hMenu, ID_D3D_SHOWNORMALS, dwOption);
  195.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_SHOWNORMALS, MAKELONG(m_bNormalsMode, 0));
  196. }
  197.  
  198. void
  199. TrivialData::ToggleShowTexCoord(DWORD iTexCoord)
  200. {
  201.     DWORD dwOption;
  202.     HRESULT hr;
  203.  
  204.     // if currently showing, stop showing
  205.     if (m_dwTexCoordsShown & (1<<iTexCoord))
  206.     {
  207.         m_dwTexCoordsShown &= ~(1<<iTexCoord);
  208.     }
  209.     else
  210.     {
  211.         m_dwTexCoordsShown |= (1<<iTexCoord);
  212.     }
  213.  
  214.     // if there is a model, and we haven't calculated the texture coord view yet
  215.     if ((m_pdeHead != NULL) && !(m_pdeHead->dwTexCoordsCalculated & (1<<iTexCoord)))
  216.     {
  217.         // update the tex coord views to keep current
  218.         m_pdeHead->dwTexCoordsCalculated |= (1<<iTexCoord);
  219.  
  220.         // calculate the new texture coord views
  221.         hr = InitViews(m_pdeHead->pframeRoot, m_pdeHead);
  222.         if (FAILED(hr))
  223.             return;
  224.     }
  225.  
  226.     dwOption = (m_dwTexCoordsShown & (1<<iTexCoord)) ? MF_CHECKED : MF_UNCHECKED;
  227.  
  228.     CheckMenuItem(m_hMenu, ID_D3D_SHOWTEX0+iTexCoord, dwOption);
  229. }
  230.  
  231. void
  232. TrivialData::TogglePlaybackSpeed()
  233. {
  234.     DWORD dwOption;
  235.  
  236.     if (m_fTicksPerSecond == 4800.0f)
  237.         m_fTicksPerSecond = 30.0f;
  238.     else
  239.         m_fTicksPerSecond = 4800.0f;
  240.  
  241.     dwOption = (m_fTicksPerSecond == 4800.0f) ? MF_CHECKED : MF_UNCHECKED;
  242.  
  243.     CheckMenuItem(m_hMenu, ID_VIEW_PLAYBACKSPEED, dwOption);
  244. }
  245.  
  246. void
  247. TrivialData::ChangeSkinningMode(METHOD method)
  248. {
  249.     m_method = method;
  250.  
  251.     // software skinning changes a number of things, so call the generic menu stuff
  252.     SetupMenu();
  253. }
  254.  
  255.  
  256.  
  257. void
  258. TrivialData::ToggleWireframeMode()
  259. {
  260.     DWORD dw;
  261.     DWORD dwOption;
  262.  
  263.     // if edge mode enabled, then disable it
  264.     if (m_bEdgeMode)
  265.     {
  266.         GXASSERT(!m_bWireframeMode);
  267.  
  268.         ToggleEdgeMode();
  269.     }
  270.  
  271.     if ( m_bWireframeMode )
  272.     {
  273.         m_pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );
  274.         dwOption = MF_UNCHECKED;
  275.         m_bWireframeMode = false;
  276.     }
  277.     else
  278.     {
  279.         m_pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
  280.         dwOption = MF_CHECKED;
  281.         m_bWireframeMode = true;
  282.     }
  283.  
  284.     CheckMenuItem(m_hMenu, ID_D3D_WIREFRAME, dwOption);
  285.  
  286.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_WIREFRAME, MAKELONG(m_bWireframeMode, 0));
  287.     SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_D3D_SOLID, MAKELONG((!m_bEdgeMode && !m_bWireframeMode), 0));
  288. }
  289.  
  290. void
  291. TrivialData::ToggleLightMode()
  292. {
  293.     DWORD dw;
  294.     DWORD dwOption;
  295.  
  296.     m_bLighting = !m_bLighting;
  297.     dwOption = m_bLighting ? MF_CHECKED : MF_UNCHECKED;
  298.  
  299.     m_pDevice->SetRenderState( D3DRS_LIGHTING, m_bLighting );
  300.     CheckMenuItem(m_hMenu, ID_D3D_LIGHTING, dwOption);
  301. }
  302.  
  303. void
  304. TrivialData::ToggleCullMode()
  305. {
  306.     DWORD dw;
  307.     DWORD dwOption;
  308.  
  309.     if ( D3DCULL_NONE == m_dwCullMode )
  310.     {
  311.         m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
  312.         m_dwCullMode = D3DCULL_CCW;
  313.         dwOption = MF_CHECKED;
  314.     }
  315.     else
  316.     {
  317.         m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
  318.         m_dwCullMode = D3DCULL_NONE;
  319.         dwOption = MF_UNCHECKED;
  320.     }
  321.  
  322.     CheckMenuItem(m_hMenu, ID_D3D_CULL, dwOption);
  323. }
  324.  
  325. void
  326. TrivialData::ToggleTextureMode()
  327. {
  328.     DWORD dwOption;
  329.  
  330.     // toggle the mode
  331.     m_bTextureMode = !m_bTextureMode;
  332.  
  333.     dwOption = m_bTextureMode ? MF_CHECKED : MF_UNCHECKED;
  334.     CheckMenuItem(m_hMenu, ID_OPTIONS_TEXTURE, dwOption);
  335. }
  336.  
  337. void 
  338. TrivialData::ChangeAnimMode(BOOL bPause)
  339. {
  340.     m_bAnimPaused = bPause;
  341.  
  342.     // only update buttons if 
  343.     if ((m_pdeHead != NULL) && (m_pdeHead->m_pAnimMixer != NULL))
  344.     {
  345.         EnableMenuItem(m_hMenu, ID_VIEW_PLAYANIM, m_bAnimPaused ? MF_ENABLED : MF_GRAYED);
  346.         EnableMenuItem(m_hMenu, ID_VIEW_PAUSEANIM, !m_bAnimPaused ? MF_ENABLED : MF_GRAYED);
  347.         CheckMenuItem(m_hMenu, ID_VIEW_PLAYANIM, !m_bAnimPaused ? MF_CHECKED : MF_UNCHECKED);
  348.         CheckMenuItem(m_hMenu, ID_VIEW_PAUSEANIM, m_bAnimPaused ? MF_CHECKED : MF_UNCHECKED);
  349.         SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_VIEW_PLAYANIM, MAKELONG(!m_bAnimPaused, 0));
  350.         SendMessage(m_hwndToolbar, TB_CHECKBUTTON, ID_VIEW_PAUSEANIM, MAKELONG(m_bAnimPaused, 0));
  351.     }
  352. }
  353.