1 #include "COLLADASaxFWLStableHeaders.h"
2 #include "COLLADASaxFWLLibraryAnimationClipsLoader.h"
3 #include "COLLADASaxFWLLoader.h"
4 
5 #include "COLLADAFWAnimationClip.h"
6 #include "COLLADAFWIWriter.h"
7 #include "COLLADAFWUniqueId.h"
8 
9 namespace COLLADASaxFWL
10 {
11 	//------------------------------
LibraryAnimationClipsLoader(IFilePartLoader * callingFilePartLoader)12 	LibraryAnimationClipsLoader::LibraryAnimationClipsLoader( IFilePartLoader* callingFilePartLoader )
13 		: FilePartLoader(callingFilePartLoader)
14 		, mAnimationClip(0)
15 	{
16 
17 	}
18 
19 	//------------------------------
~LibraryAnimationClipsLoader()20 	LibraryAnimationClipsLoader::~LibraryAnimationClipsLoader()
21 	{
22 	}
23 
24 	//------------------------------
getUniqueId()25 	const COLLADAFW::UniqueId& LibraryAnimationClipsLoader::getUniqueId()
26 	{
27 		if ( mAnimationClip )
28 			return mAnimationClip->getUniqueId();
29 		return COLLADAFW::UniqueId::INVALID;
30 	}
31 
32 	//------------------------------
end__library_animation_clips()33 	bool LibraryAnimationClipsLoader::end__library_animation_clips()
34 	{
35 		moveUpInSidTree();
36 		finish();
37 		return true;
38 	}
39 
40 	//------------------------------
begin__animation_clip(const animation_clip__AttributeData & attributeData)41 	bool LibraryAnimationClipsLoader::begin__animation_clip( const animation_clip__AttributeData& attributeData )
42 	{
43 		mAnimationClip = FW_NEW COLLADAFW::AnimationClip(createUniqueIdFromId(attributeData.id, COLLADAFW::AnimationClip::ID()));
44 
45 		if ( attributeData.name )
46 			mAnimationClip->setName ( (const char*)attributeData.name );
47 		else if ( attributeData.id )
48 			mAnimationClip->setName ( (const char*)attributeData.id );
49 
50 		if ( attributeData.id )
51 			mAnimationClip->setOriginalId ( (const char*)attributeData.id );
52 
53 		return true;
54 	}
55 
56 	//------------------------------
end__animation_clip()57 	bool LibraryAnimationClipsLoader::end__animation_clip()
58 	{
59 		COLLADAFW::UniqueIdArray& instanceAnimationUniqueIds = mAnimationClip->getInstanceAnimationUniqueIds();
60 		instanceAnimationUniqueIds.allocMemory( mInstanceAnimationIds.size() );
61 		instanceAnimationUniqueIds.setCount( mInstanceAnimationIds.size() );
62 
63 		UniqueIdSet::const_iterator it = mInstanceAnimationIds.begin();
64 		size_t i = 0;
65 		for ( ; it != mInstanceAnimationIds.end(); ++it, ++i )
66 		{
67 			instanceAnimationUniqueIds[i] = *it;
68 		}
69 
70 		mInstanceAnimationIds.clear();
71 
72 		bool success = true;
73 		if ( (getObjectFlags() & Loader::ANIMATION_CLIP_FLAG) != 0)
74 		{
75 			success = writer()->writeAnimationClip(mAnimationClip);
76 		}
77 
78 		FW_DELETE mAnimationClip;
79 		mAnimationClip = 0;
80 		return success;
81 	}
82 
83 	//------------------------------
begin__instance_animation(const instance_animation__AttributeData & attributeData)84 	bool LibraryAnimationClipsLoader::begin__instance_animation( const instance_animation__AttributeData& attributeData )
85 	{
86 		mInstanceAnimationIds.insert(createUniqueIdFromUrl(attributeData.url, COLLADAFW::Animation::ID()));
87 		return true;
88 	}
89 
90 	//------------------------------
end__instance_animation()91 	bool LibraryAnimationClipsLoader::end__instance_animation()
92 	{
93 		return true;
94 	}
95 } // namespace COLLADASaxFWL