Files
FC1/Editor/TVSequenceProps.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

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();
}