182 lines
4.7 KiB
C++
182 lines
4.7 KiB
C++
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Crytek Engine Source File.
|
|
// Copyright (C), Crytek Studios, 2002.
|
|
// -------------------------------------------------------------------------
|
|
// File name: tvcharacterkeydialog.cpp
|
|
// Version: v1.00
|
|
// Created: 20/8/2002 by Timur.
|
|
// Compilers: Visual Studio.NET
|
|
// Description:
|
|
// -------------------------------------------------------------------------
|
|
// History:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "TVCharacterKeyDialog.h"
|
|
#include "CryEditDoc.h"
|
|
#include "Objects\EntityScript.h"
|
|
|
|
#include "IMovieSystem.h"
|
|
#include "IEntitySystem.h"
|
|
|
|
// CTVCharacterKeyDialog dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CTVCharacterKeyDialog, CDialog)
|
|
CTVCharacterKeyDialog::CTVCharacterKeyDialog(CWnd* pParent /*=NULL*/)
|
|
: IKeyDlg(CTVCharacterKeyDialog::IDD, pParent)
|
|
{
|
|
m_node = 0;
|
|
m_track = 0;
|
|
m_key = 0;
|
|
}
|
|
|
|
CTVCharacterKeyDialog::~CTVCharacterKeyDialog()
|
|
{
|
|
}
|
|
|
|
void CTVCharacterKeyDialog::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_ANIMATION, m_animation);
|
|
DDX_Control(pDX, IDC_LOOP, m_loopBtn);
|
|
DDX_Control(pDX, IDC_UNLOAD, m_unloadBtn);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTVCharacterKeyDialog, CDialog)
|
|
ON_CBN_SELENDOK(IDC_ANIMATION, ControlsToKey)
|
|
ON_EN_UPDATE(IDC_ANIMATION, ControlsToKey)
|
|
ON_EN_UPDATE(IDC_BLEND_TIME, ControlsToKey)
|
|
ON_EN_UPDATE(IDC_TIME_SCALE, ControlsToKey)
|
|
ON_BN_CLICKED(IDC_LOOP, OnBnClickedLoop)
|
|
ON_BN_CLICKED(IDC_UNLOAD, OnBnClickedUnload)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CTVCharacterKeyDialog message handlers
|
|
|
|
void CTVCharacterKeyDialog::SetKey( IAnimNode *node,IAnimTrack *track,int nkey )
|
|
{
|
|
m_node = node;
|
|
m_track = track;
|
|
m_key = nkey;
|
|
|
|
if (m_key < 0 || m_key >= m_track->GetNumKeys())
|
|
return;
|
|
|
|
if (track->GetType() != ATRACK_CHARACTER)
|
|
return;
|
|
|
|
m_animation.ResetContent();
|
|
|
|
// Find editor object who owns this node.
|
|
IEntity *entity = node->GetEntity();
|
|
if (entity)
|
|
{
|
|
// Add available animations.
|
|
ICryCharInstance *pCharacter = entity->GetCharInterface()->GetCharacter(0);
|
|
if (pCharacter)
|
|
{
|
|
IAnimationSet* pAnimations = pCharacter->GetModel()->GetAnimationSet();
|
|
assert (pAnimations);
|
|
int numAnimations = pAnimations->Count();
|
|
m_animation.AddString("");
|
|
for (int i = 0; i < numAnimations; i++)
|
|
{
|
|
m_animation.AddString ( pAnimations->GetName(i));
|
|
}
|
|
}
|
|
}
|
|
|
|
ICharacterKey key;
|
|
m_track->GetKey( m_key,&key );
|
|
|
|
m_animation.SelectString( -1,key.animation );
|
|
m_blendTime.SetValue( key.blendTime );
|
|
m_startTime.SetValue( key.startTime );
|
|
m_timeScale.SetValue( key.speed );
|
|
m_startTime.SetValue( key.startTime );
|
|
//m_hide.SetCheck( (key.hidden)?BST_CHECKED:BST_UNCHECKED );
|
|
m_loopBtn.SetCheck( (key.bLoop)?BST_CHECKED:BST_UNCHECKED );
|
|
m_unloadBtn.SetCheck(key.bUnload ? BST_CHECKED : BST_UNCHECKED);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
BOOL CTVCharacterKeyDialog::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_blendTime.Create( this,IDC_BLEND_TIME );
|
|
m_blendTime.SetRange(0,100);
|
|
m_blendTime.SetValue(0);
|
|
|
|
m_startTime.Create( this,IDC_START_TIME );
|
|
|
|
m_timeScale.Create( this,IDC_TIME_SCALE );
|
|
m_timeScale.SetValue(1);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CTVCharacterKeyDialog::ControlsToKey()
|
|
{
|
|
if (!m_track || m_key < 0 || m_key >= m_track->GetNumKeys())
|
|
return;
|
|
|
|
//bool hidden = m_hide.GetCheck() == BST_CHECKED;
|
|
|
|
CString animation;
|
|
m_animation.GetWindowText(animation);
|
|
|
|
ICharacterKey key;
|
|
m_track->GetKey( m_key,&key );
|
|
|
|
//key.hidden = hidden;
|
|
strncpy( key.animation,animation,sizeof(key.animation) );
|
|
key.animation[sizeof(key.animation)-1] = '\0';
|
|
|
|
key.blendTime = m_blendTime.GetValue();
|
|
key.speed = m_timeScale.GetValue();
|
|
key.startTime = m_startTime.GetValue();
|
|
|
|
key.duration = 0;
|
|
key.bLoop = m_loopBtn.GetCheck() != 0;
|
|
key.bUnload = m_unloadBtn.GetCheck() != 0;
|
|
|
|
if (strlen(key.animation) > 0)
|
|
{
|
|
IEntity *entity = m_node->GetEntity();
|
|
if (entity)
|
|
{
|
|
ICryCharInstance *pCharacter = entity->GetCharInterface()->GetCharacter(0);
|
|
if (pCharacter)
|
|
{
|
|
IAnimationSet* pAnimations = pCharacter->GetModel()->GetAnimationSet();
|
|
assert (pAnimations);
|
|
|
|
key.duration = pAnimations->GetLength( key.animation ) + pAnimations->GetStart( key.animation );
|
|
}
|
|
}
|
|
}
|
|
|
|
m_track->SetKey( m_key,&key );
|
|
|
|
RefreshTrackView();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CTVCharacterKeyDialog::OnBnClickedLoop()
|
|
{
|
|
ControlsToKey();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CTVCharacterKeyDialog::OnBnClickedUnload()
|
|
{
|
|
ControlsToKey();
|
|
}
|