210 lines
5.3 KiB
C++
210 lines
5.3 KiB
C++
// TVSequenceProps.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "TVSequenceProps.h"
|
|
#include "IMovieSystem.h"
|
|
#include "TrackViewUndo.h"
|
|
|
|
// CTVSequenceProps dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CTVSequenceProps, CDialog)
|
|
|
|
CTVSequenceProps::CTVSequenceProps( IAnimSequence *seq,CWnd* pParent /* = NULL */ )
|
|
: CDialog(CTVSequenceProps::IDD, pParent)
|
|
, m_outOfRange(0)
|
|
{
|
|
assert( seq );
|
|
m_sequence = seq;
|
|
}
|
|
|
|
CTVSequenceProps::~CTVSequenceProps()
|
|
{
|
|
}
|
|
|
|
void CTVSequenceProps::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_NAME, m_nameEdit);
|
|
DDX_Control(pDX, IDC_ALWAYS_PLAY, m_alwaysPlayingBtn);
|
|
DDX_Control(pDX, IDC_CUT_SCENE, m_cutSceneBtn);
|
|
DDX_Control(pDX, IDC_DISABLEHUD, m_NoHUDBtn);
|
|
DDX_Control(pDX, IDC_DISABLEPLAYER, m_NoPlayerBtn);
|
|
DDX_Control(pDX, IDC_DISABLEPHYICS, m_NoPhysicsBtn);
|
|
DDX_Control(pDX, IDC_DISABLEAI, m_NoAIBtn);
|
|
DDX_Control(pDX, IDC_16TO9, m_16To9);
|
|
DDX_Control(pDX, IDC_DISABLESOUNDS, m_NoSoundsBtn);
|
|
DDX_Radio(pDX, IDC_ORT_ONCE, m_outOfRange);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTVSequenceProps, CDialog)
|
|
ON_BN_CLICKED(IDC_RESCALE_TIME, OnBnClickedRescaleTime)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CTVSequenceProps message handlers
|
|
|
|
BOOL CTVSequenceProps::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_nameEdit.SetWindowText( m_sequence->GetName() );
|
|
int seqFlags = m_sequence->GetFlags();
|
|
|
|
if (seqFlags & IAnimSequence::PLAY_ONRESET)
|
|
m_alwaysPlayingBtn.SetCheck( BST_CHECKED );
|
|
else
|
|
m_alwaysPlayingBtn.SetCheck( BST_UNCHECKED );
|
|
|
|
if (seqFlags & IAnimSequence::CUT_SCENE)
|
|
m_cutSceneBtn.SetCheck( BST_CHECKED );
|
|
else
|
|
m_cutSceneBtn.SetCheck( BST_UNCHECKED );
|
|
|
|
if (seqFlags & IAnimSequence::NO_HUD)
|
|
m_NoHUDBtn.SetCheck( BST_CHECKED );
|
|
else
|
|
m_NoHUDBtn.SetCheck( BST_UNCHECKED );
|
|
|
|
if (seqFlags & IAnimSequence::NO_PLAYER)
|
|
m_NoPlayerBtn.SetCheck( BST_CHECKED );
|
|
else
|
|
m_NoPlayerBtn.SetCheck( BST_UNCHECKED );
|
|
|
|
if (seqFlags & IAnimSequence::NO_PHYSICS)
|
|
m_NoPhysicsBtn.SetCheck( BST_CHECKED );
|
|
else
|
|
m_NoPhysicsBtn.SetCheck( BST_UNCHECKED );
|
|
|
|
if (seqFlags & IAnimSequence::NO_AI)
|
|
m_NoAIBtn.SetCheck( BST_CHECKED );
|
|
else
|
|
m_NoAIBtn.SetCheck( BST_UNCHECKED );
|
|
|
|
if (seqFlags & IAnimSequence::IS_16TO9)
|
|
m_16To9.SetCheck( BST_CHECKED );
|
|
else
|
|
m_16To9.SetCheck( BST_UNCHECKED );
|
|
|
|
m_NoSoundsBtn.SetCheck( (seqFlags&IAnimSequence::NO_GAMESOUNDS) ? BST_CHECKED : BST_UNCHECKED );
|
|
|
|
m_startTime.Create( this,IDC_START_TIME );
|
|
m_endTime.Create( this,IDC_END_TIME );
|
|
m_length.Create( this,IDC_LENGTH );
|
|
|
|
Range timeRange = m_sequence->GetTimeRange();
|
|
m_startTime.SetValue( timeRange.start );
|
|
m_endTime.SetValue( timeRange.end );
|
|
|
|
m_length.SetValue( timeRange.Length() );
|
|
|
|
m_outOfRange = 0;
|
|
if (m_sequence->GetFlags() & IAnimSequence::ORT_CONSTANT)
|
|
{
|
|
m_outOfRange = 1;
|
|
}
|
|
else if (m_sequence->GetFlags() & IAnimSequence::ORT_LOOP)
|
|
{
|
|
m_outOfRange = 2;
|
|
}
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CTVSequenceProps::OnBnClickedRescaleTime()
|
|
{
|
|
CUndo undo( "AnimSequence Scale Time" );
|
|
CUndo::Record( new CUndoAnimSequenceObject(m_sequence) );
|
|
// Rescale sequence to a new length.
|
|
Range timeRange;
|
|
timeRange.start = m_startTime.GetValue();
|
|
timeRange.end = m_endTime.GetValue();
|
|
|
|
float oldLength = timeRange.Length();
|
|
float newLength = m_length.GetValue();
|
|
if (oldLength != newLength)
|
|
{
|
|
//m_sequence->SetTimeRange( timeRange.start
|
|
timeRange.end = timeRange.start + newLength;
|
|
m_sequence->ScaleTimeRange( timeRange );
|
|
m_startTime.SetValue( timeRange.start );
|
|
m_endTime.SetValue( timeRange.end );
|
|
}
|
|
}
|
|
|
|
void CTVSequenceProps::OnOK()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
CUndo undo( "AnimSequence Modified" );
|
|
CUndo::Record( new CUndoAnimSequenceObject(m_sequence) );
|
|
|
|
Range timeRange;
|
|
timeRange.start = m_startTime.GetValue();
|
|
timeRange.end = m_endTime.GetValue();
|
|
m_sequence->SetTimeRange( timeRange );
|
|
|
|
CString name;
|
|
m_nameEdit.GetWindowText( name );
|
|
if (name != m_sequence->GetName())
|
|
{
|
|
// Rename sequence.
|
|
m_sequence->SetName( name );
|
|
}
|
|
|
|
int seqFlags = m_sequence->GetFlags();
|
|
seqFlags &= ~(IAnimSequence::ORT_CONSTANT | IAnimSequence::ORT_LOOP);
|
|
|
|
if (m_alwaysPlayingBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::PLAY_ONRESET;
|
|
else
|
|
seqFlags &= (~IAnimSequence::PLAY_ONRESET);
|
|
|
|
if (m_cutSceneBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::CUT_SCENE;
|
|
else
|
|
seqFlags &= (~IAnimSequence::CUT_SCENE);
|
|
|
|
if (m_NoHUDBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::NO_HUD;
|
|
else
|
|
seqFlags &= (~IAnimSequence::NO_HUD);
|
|
|
|
if (m_NoPlayerBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::NO_PLAYER;
|
|
else
|
|
seqFlags &= (~IAnimSequence::NO_PLAYER);
|
|
|
|
if (m_NoPhysicsBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::NO_PHYSICS;
|
|
else
|
|
seqFlags &= (~IAnimSequence::NO_PHYSICS);
|
|
|
|
if (m_NoAIBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::NO_AI;
|
|
else
|
|
seqFlags &= (~IAnimSequence::NO_AI);
|
|
|
|
if (m_16To9.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::IS_16TO9;
|
|
else
|
|
seqFlags &= (~IAnimSequence::IS_16TO9);
|
|
|
|
if (m_outOfRange == 1)
|
|
seqFlags |= IAnimSequence::ORT_CONSTANT;
|
|
else if (m_outOfRange == 2)
|
|
seqFlags |= IAnimSequence::ORT_LOOP;
|
|
|
|
if (m_NoSoundsBtn.GetCheck() == BST_CHECKED)
|
|
seqFlags |= IAnimSequence::NO_GAMESOUNDS;
|
|
else
|
|
seqFlags &= (~IAnimSequence::NO_GAMESOUNDS);
|
|
|
|
m_sequence->SetFlags( seqFlags );
|
|
|
|
CDialog::OnOK();
|
|
}
|