1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#include "unitlib/unitlib.h"
#include "datamodel/dmelement.h"
#include "movieobjects/movieobjects.h"
#include "datamodel/idatamodel.h"
#include "tier1/utlbuffer.h"
#include "filesystem.h"
#include "movieobjects/dmelog.h"
#include "choreoscene.h"
#include "choreoevent.h"
#include "iscenetokenprocessor.h"
#include "tier1/tokenreader.h"
#include "characterset.h"
#include "movieobjects/dmx_to_vcd.h"
#include "tier3/scenetokenprocessor.h"
#include "tier2/tier2.h"
char const *vcdtestfile = "dmxtest.vcd";
void RunSceneToDmxTests( CChoreoScene *scene )
{
DmFileId_t fileid = g_pDataModel->FindOrCreateFileId( scene->GetFilename() );
CDmeFilmClip *dmx = CreateElement< CDmeFilmClip >( scene->GetFilename(), fileid );
Assert( dmx );
bool success = ConvertSceneToDmx( scene, dmx );
Assert( success );
CChoreoScene *scene2 = new CChoreoScene( NULL );
scene2->SetFileName( scene->GetFilename() );
success = ConvertDmxToScene( dmx, scene2 );
Assert( success );
char sz[ 512 ];
Q_StripExtension( scene->GetFilename(), sz, sizeof( sz ) );
Q_strncat( sz, "_2.vcd", sizeof( sz ), COPY_ALL_CHARACTERS );
scene2->SaveToFile( sz );
delete scene2;
g_pDataModel->RemoveFileId( fileid );
}
DEFINE_TESTCASE_NOSUITE( DmxTestVcdToDme )
{
Msg( "Running .vcd (faceposer) to dmx tests\n" );
#ifdef _DEBUG
int nStartingCount = g_pDataModel->GetAllocatedElementCount();
#endif
CDisableUndoScopeGuard guard;
g_pDmElementFramework->BeginEdit();
const char *pFileName = vcdtestfile;
char pFullPathName[ MAX_PATH ];
char pDir[ MAX_PATH ];
if ( g_pFullFileSystem->GetCurrentDirectory( pDir, sizeof( pDir ) ) )
{
V_ComposeFileName( pDir, vcdtestfile, pFullPathName, sizeof( pFullPathName ) );
V_RemoveDotSlashes( pFullPathName );
pFileName = pFullPathName;
}
CUtlBuffer buf;
if ( g_pFullFileSystem->ReadFile( pFileName, NULL, buf ) )
{
SetTokenProcessorBuffer( (char *)buf.Base() );
CChoreoScene *scene = ChoreoLoadScene( pFileName, NULL, GetTokenProcessor(), NULL );
if ( scene )
{
RunSceneToDmxTests( scene );
delete scene;
}
}
else
{
Msg( "Unable to load test file '%s'\n", pFileName );
}
g_pDataModel->ClearUndo();
#ifdef _DEBUG
int nEndingCount = g_pDataModel->GetAllocatedElementCount();
AssertEquals( nEndingCount, nStartingCount );
if ( nEndingCount != nStartingCount )
{
for ( DmElementHandle_t hElement = g_pDataModel->FirstAllocatedElement() ;
hElement != DMELEMENT_HANDLE_INVALID;
hElement = g_pDataModel->NextAllocatedElement( hElement ) )
{
CDmElement *pElement = g_pDataModel->GetElement( hElement );
Assert( pElement );
if ( !pElement )
return;
Msg( "[%s : %s] in memory\n", pElement->GetName(), pElement->GetTypeString() );
}
}
#endif
}
|