Esempio n. 1
0
static std::shared_ptr<asd::AnimationClip> CreateAnimation()
{
	auto factory = new asd::AnimationSystem_Imp();

	auto clip = factory->CreateAnimationClip();
	auto source = factory->CreateAnimationSource();
	auto key = factory->CreateKeyframeAnimation();

	asd::FCurveKeyframe k1;
	k1.KeyValue.X = 0.0;
	k1.KeyValue.Y = 20;
	k1.LeftHandle = k1.KeyValue;
	k1.RightHandle = k1.KeyValue;

	asd::FCurveKeyframe k2;
	k2.KeyValue.X = 10.0;
	k2.KeyValue.Y = -20;
	k2.LeftHandle = k2.KeyValue;
	k2.RightHandle = k2.KeyValue;

	key->SetName(asd::ToAString("no2.rot.z").c_str());
	key->AddKeyframe(k1);
	key->AddKeyframe(k2);

	source->AddAnimation(key);
	clip->SetSource(source);
	delete factory;

	return clip;
}
bool SMDImporter::Import ( char *in_szFilename )
{

	FILE *f = fopen ( in_szFilename, "rb" );

	if ( !f )
	{
		LPWSTR l_wszModelName;
		DSA2W(&l_wszModelName,in_szFilename);

		XSI::CString cstr = L"SMDImport: Cannot open the file ";
		cstr += l_wszModelName;

		XSILogMessage ( (unsigned short*)cstr.GetWideString(), XSI::siErrorMsg );
		return false;
	}
	
	memset ( m_szActionName, 0, 1024 );
	_splitpath ( in_szFilename, NULL, NULL, m_szActionName, NULL );

	char drive[1024];
	char dirc[1024];

	memset ( m_szDirectory, 0, 1024 );

	if ( strlen(___gTexturePathOverride))
	{
		sprintf ( ___gTexturePathOverride, "%s\\", ___gTexturePathOverride );
		_splitpath ( ___gTexturePathOverride, drive, dirc, NULL, NULL );
		sprintf ( m_szDirectory, "%s\\%s\\", drive, dirc );
	} else {
		_splitpath ( in_szFilename, drive, dirc, NULL, NULL );
		sprintf ( m_szDirectory, "%s\\%s\\", drive, dirc );
	}

	
	bool Success = Parse ( f );

	fclose (f);

	if ( !Success )
	{
		return Success;
	}

	DetectModel();

	CreateHierarchy();

	CreateGeometry();

	WeightGeometry();

	CreateShapeClips();

	CreateAnimationSource();

	return true;
}