mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-12-25 07:14:50 +01:00
184 lines
5.1 KiB
C++
184 lines
5.1 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
// DlgInfoPgAnim.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef new
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgInfoPgAnim property page
|
|
|
|
IMPLEMENT_DYNCREATE(CDlgInfoPgAnim, CPropertyPage)
|
|
|
|
CDlgInfoPgAnim::CDlgInfoPgAnim() : CPropertyPage(CDlgInfoPgAnim::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CDlgInfoPgAnim)
|
|
m_strCurrentFrame = _T("");
|
|
m_strFramesInAnim = _T("");
|
|
m_strAnimName = _T("");
|
|
m_strTimePassed = _T("");
|
|
m_strAnimState = _T("");
|
|
m_strAnimationLenght = _T("");
|
|
m_strNoOfAnimations = _T("");
|
|
m_strNoOfFrames = _T("");
|
|
m_fAnimSpeed = 0.0f;
|
|
//}}AFX_DATA_INIT
|
|
|
|
theApp.m_pPgInfoAnim = this;
|
|
}
|
|
|
|
CDlgInfoPgAnim::~CDlgInfoPgAnim()
|
|
{
|
|
}
|
|
|
|
void CDlgInfoPgAnim::SetAnimPageFromView(CModelerView* pModelerView)
|
|
{
|
|
CAnimInfo aiInfo;
|
|
CModelInfo miModelInfo;
|
|
char value[20];
|
|
|
|
ASSERT( pModelerView != NULL);
|
|
|
|
/* Get current model's info */
|
|
pModelerView->m_ModelObject.GetModelInfo( miModelInfo);
|
|
INDEX iMipModel = pModelerView->m_ModelObject.GetMipModel( pModelerView->m_fCurrentMipFactor);
|
|
|
|
/* Number of animations in model */
|
|
sprintf( value, "%d", pModelerView->m_ModelObject.GetAnimsCt());
|
|
m_strNoOfAnimations = value;
|
|
sprintf( value, "%d", miModelInfo.mi_FramesCt);
|
|
m_strNoOfFrames = value;
|
|
|
|
INDEX i = pModelerView->m_ModelObject.GetAnim();
|
|
pModelerView->m_ModelObject.GetAnimInfo( i, aiInfo);
|
|
|
|
FLOAT tmPassed = pModelerView->m_ModelObject.GetPassedTime();
|
|
INDEX iCurrentFrame = pModelerView->m_ModelObject.GetFrame();
|
|
BOOL bIsPaused = pModelerView->m_ModelObject.IsPaused();
|
|
|
|
/* Now we will fill animation page variables ...*/
|
|
m_strAnimName = aiInfo.ai_AnimName;
|
|
|
|
sprintf( value, "%d", aiInfo.ai_NumberOfFrames);
|
|
m_strFramesInAnim = value;
|
|
|
|
sprintf( value, "%d (%d)", INDEX(tmPassed/aiInfo.ai_SecsPerFrame), iCurrentFrame);
|
|
m_strCurrentFrame = value;
|
|
|
|
sprintf( value, "%.4f", tmPassed);
|
|
m_strTimePassed = value;
|
|
|
|
sprintf( value, "%.4f", aiInfo.ai_NumberOfFrames*aiInfo.ai_SecsPerFrame);
|
|
m_strAnimationLenght = value;
|
|
|
|
if( bIsPaused)
|
|
{
|
|
m_strAnimState = "Paused";
|
|
}
|
|
else
|
|
{
|
|
m_strAnimState = "Playing";
|
|
}
|
|
}
|
|
|
|
void CDlgInfoPgAnim::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CModelerView *pModelerView = CModelerView::GetActiveView();
|
|
if( pModelerView == NULL) return;
|
|
CModelerDoc* pDoc = theApp.GetDocument();
|
|
|
|
// if dialog is recieving data
|
|
if(pDX->m_bSaveAndValidate == FALSE)
|
|
{
|
|
SetAnimPageFromView( pModelerView);
|
|
// mark that the values have been updated to reflect the state of the view
|
|
m_udAllValues.MarkUpdated();
|
|
}
|
|
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDlgInfoPgAnim)
|
|
DDX_Text(pDX, IDC_ANIM_CURRENT_FRAME, m_strCurrentFrame);
|
|
DDX_Text(pDX, IDC_ANIM_FRAMES, m_strFramesInAnim);
|
|
DDX_Text(pDX, IDC_ANIM_NAME, m_strAnimName);
|
|
DDX_Text(pDX, IDC_ANIM_TIME_PASSED, m_strTimePassed);
|
|
DDX_Text(pDX, IDC_ANIM_STATE, m_strAnimState);
|
|
DDX_Text(pDX, IDC_ANIMATION_LENGHT, m_strAnimationLenght);
|
|
DDX_Text(pDX, IDC_NO_OF_ANIMATIONS, m_strNoOfAnimations);
|
|
DDX_Text(pDX, IDC_NO_OF_FRAMES, m_strNoOfFrames);
|
|
//}}AFX_DATA_MAP
|
|
|
|
CAnimInfo aiInfo;
|
|
INDEX iAnim = pModelerView->m_ModelObject.GetAnim();
|
|
pModelerView->m_ModelObject.GetAnimInfo( iAnim, aiInfo);
|
|
if(pDX->m_bSaveAndValidate == TRUE)
|
|
{
|
|
DDX_SkyFloat(pDX, IDC_ANIM_SPEED, m_fAnimSpeed);
|
|
}
|
|
else if( m_fAnimSpeed != aiInfo.ai_SecsPerFrame)
|
|
{
|
|
m_fAnimSpeed = aiInfo.ai_SecsPerFrame;
|
|
DDX_SkyFloat(pDX, IDC_ANIM_SPEED, m_fAnimSpeed);
|
|
}
|
|
|
|
// if dialog is giving data
|
|
if(pDX->m_bSaveAndValidate == TRUE)
|
|
{
|
|
if( (m_fAnimSpeed > 0) && (m_fAnimSpeed<100) )
|
|
{
|
|
pDoc->m_emEditModel.edm_md.SetSpeed( iAnim, m_fAnimSpeed);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDlgInfoPgAnim, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CDlgInfoPgAnim)
|
|
ON_EN_CHANGE(IDC_ANIM_SPEED, OnChangeAnimSpeed)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgInfoPgAnim message handlers
|
|
|
|
BOOL CDlgInfoPgAnim::OnIdle(LONG lCount)
|
|
{
|
|
CModelerView *pModelerView = CModelerView::GetActiveView();
|
|
ASSERT(pModelerView != NULL);
|
|
|
|
// refresh info frame size
|
|
((CMainFrame *)( theApp.m_pMainWnd))->m_pInfoFrame->SetSizes();
|
|
UpdateData(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CDlgInfoPgAnim::OnChangeAnimSpeed()
|
|
{
|
|
UpdateData(TRUE);
|
|
}
|
|
|
|
BOOL CDlgInfoPgAnim::OnSetActive()
|
|
{
|
|
m_fAnimSpeed = -1;
|
|
return CPropertyPage::OnSetActive();
|
|
}
|