summaryrefslogtreecommitdiff
path: root/hammer/OP_Model.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/OP_Model.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/OP_Model.cpp')
-rw-r--r--hammer/OP_Model.cpp297
1 files changed, 297 insertions, 0 deletions
diff --git a/hammer/OP_Model.cpp b/hammer/OP_Model.cpp
new file mode 100644
index 0000000..290438b
--- /dev/null
+++ b/hammer/OP_Model.cpp
@@ -0,0 +1,297 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#include "stdafx.h"
+#include "hammer.h"
+#include "MapEntity.h"
+#include "MapStudioModel.h"
+#include "OP_Model.h"
+#include "ObjectProperties.h"
+#include "mapdoc.h"
+#include "options.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+
+#pragma warning( disable : 4355 )
+
+
+IMPLEMENT_DYNCREATE(COP_Model, CObjectPage)
+
+
+BEGIN_MESSAGE_MAP(COP_Model, CObjectPage)
+ //{{AFX_MSG_MAP(COP_Model)
+ ON_WM_HSCROLL()
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+const int FRAME_SCROLLBAR_RANGE = 1000;
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+COP_Model::COP_Model() : CObjectPage(COP_Model::IDD), m_ComboSequence( this )
+{
+ //{{AFX_DATA_INIT(COP_Model)
+ //}}AFX_DATA_INIT
+
+ m_pEditObjectRuntimeClass = RUNTIME_CLASS(editCEditGameClass);
+ m_ComboSequence.SetOnlyProvideSuggestions( true );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+COP_Model::~COP_Model()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : pDX -
+//-----------------------------------------------------------------------------
+void COP_Model::DoDataExchange(CDataExchange* pDX)
+{
+ CObjectPage::DoDataExchange(pDX);
+ //{{AFX_DATA_MAP(COP_Model)
+ DDX_Control(pDX, IDC_SEQUENCE, m_ComboSequence);
+ DDX_Control(pDX, IDC_FRAME_SCROLLBAR, m_ScrollBarFrame);
+ //}}AFX_DATA_MAP
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : Mode -
+// pData -
+//-----------------------------------------------------------------------------
+void COP_Model::UpdateData( int Mode, PVOID pData, bool bCanEdit )
+{
+ __super::UpdateData( Mode, pData, bCanEdit );
+
+ if (!IsWindow(m_hWnd) || !pData)
+ {
+ return;
+ }
+
+ if (Mode == LoadFirstData)
+ {
+ CMapStudioModel *pModel = GetModelHelper();
+ if ( pModel )
+ {
+ // If they were on a previous animation, remember it and we'll set the combo box to that after
+ // we tell it the list of suggestions.
+ char txt[512];
+ txt[0] = 0;
+ int iSequence = pModel->GetSequence();
+ if ( iSequence )
+ pModel->GetSequenceName( iSequence, txt );
+
+ // Set the list of suggestions.
+ CUtlVector<CString> suggestions;
+
+ int nCount = pModel->GetSequenceCount();
+ for ( int i = 0; i < nCount; i++ )
+ {
+ char szName[MAX_PATH];
+ pModel->GetSequenceName(i, szName);
+ suggestions.AddToTail( szName );
+ }
+
+ m_ComboSequence.SetSuggestions( suggestions, 0 );
+
+ // Tell it to go to the last sequence the model was on.
+ if ( txt[0] )
+ {
+ m_ComboSequence.SelectItem( txt );
+ }
+ }
+ }
+ else if (Mode == LoadData)
+ {
+ Assert(false);
+ }
+
+ SetReadOnly( !m_bCanEdit );
+}
+
+BOOL COP_Model::OnSetActive()
+{
+ m_bOldAnimatedModels = Options.view3d.bAnimateModels;
+ Options.view3d.bAnimateModels = true;
+
+ CMapDoc *pDoc = CMapDoc::GetActiveMapDoc();
+ if ( pDoc )
+ {
+ pDoc->UpdateAllViews( MAPVIEW_UPDATE_ANIMATION|MAPVIEW_OPTIONS_CHANGED );
+ }
+
+
+ return CObjectPage::OnSetActive();
+}
+
+BOOL COP_Model::OnKillActive()
+{
+ Options.view3d.bAnimateModels = m_bOldAnimatedModels;
+
+ CMapDoc *pDoc = CMapDoc::GetActiveMapDoc();
+ if ( pDoc )
+ {
+ pDoc->UpdateAllViews( MAPVIEW_UPDATE_ANIMATION|MAPVIEW_OPTIONS_CHANGED );
+ }
+
+ return CObjectPage::OnKillActive();
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output : Returns true on success, false on failure.
+//-----------------------------------------------------------------------------
+bool COP_Model::SaveData(void)
+{
+ if (!IsWindow(m_hWnd))
+ {
+ return false;
+ }
+
+ // Apply the dialog data to all the objects being edited.
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : pszClass -
+//-----------------------------------------------------------------------------
+void COP_Model::UpdateForClass(LPCTSTR pszClass)
+{
+ if (!IsWindow(m_hWnd))
+ {
+ return;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : flFrame -
+//-----------------------------------------------------------------------------
+void COP_Model::UpdateFrameText(float flFrame)
+{
+ char szFrame[40];
+ sprintf(szFrame, "%0.2f", flFrame);
+ GetDlgItem(IDC_FRAME_TEXT)->SetWindowText(szFrame);
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output : Returns TRUE on success, FALSE on failure.
+//-----------------------------------------------------------------------------
+BOOL COP_Model::OnInitDialog()
+{
+ CObjectPage::OnInitDialog();
+
+ //
+ // Set the frame number scrollbar range.
+ //
+ m_ScrollBarFrame.SetRange(0, FRAME_SCROLLBAR_RANGE);
+
+ return TRUE;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : nSBCode -
+// nPos -
+// pScrollBar -
+//-----------------------------------------------------------------------------
+void COP_Model::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
+{
+ if (pScrollBar == (CScrollBar *)&m_ScrollBarFrame)
+ {
+ CMapStudioModel *pModel = GetModelHelper();
+ if (pModel != NULL)
+ {
+ float flFrame = (float)nPos / (float)FRAME_SCROLLBAR_RANGE;
+ pModel->SetFrame(flFrame);
+ UpdateFrameText(flFrame);
+
+ CMapDoc *pDoc = CMapDoc::GetActiveMapDoc();
+ if ( pDoc )
+ {
+ pDoc->UpdateAllViews( MAPVIEW_UPDATE_ANIMATION );
+ }
+ }
+ }
+
+ CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void COP_Model::OnTextChanged( const char *pText )
+{
+ CMapStudioModel *pModel = GetModelHelper();
+ if (pModel != NULL)
+ {
+ int iSequence = pModel->GetSequenceIndex( pText );
+ if ( iSequence != -1 )
+ pModel->SetSequence( iSequence );
+
+ UpdateFrameText(pModel->GetFrame());
+
+ CMapDoc *pDoc = CMapDoc::GetActiveMapDoc();
+ if ( pDoc )
+ {
+ pDoc->UpdateAllViews( MAPVIEW_UPDATE_ANIMATION );
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CMapStudioModel *COP_Model::GetModelHelper(void)
+{
+ if ( m_pObjectList->Count() == 0 )
+ return NULL;
+
+ CMapClass *pObject = m_pObjectList->Element( 0 );
+
+ if (pObject != NULL)
+ {
+ CMapEntity *pEntity = dynamic_cast <CMapEntity *>(pObject);
+ if (pEntity != NULL)
+ {
+ CMapStudioModel *pModel = pEntity->GetChildOfType((CMapStudioModel *)NULL);
+ return pModel;
+ }
+ }
+ return NULL;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the controls to be read only
+// Input : bReadOnly - indicates if the controls should be read only
+//-----------------------------------------------------------------------------
+void COP_Model::SetReadOnly( bool bReadOnly )
+{
+ m_ComboSequence.EnableWindow( bReadOnly ? FALSE : TRUE );
+ m_ScrollBarFrame.EnableWindow( bReadOnly ? FALSE : TRUE );
+}