1 /*
2 Copyright (C) 2005-2007 Feeling Software Inc.
3 Portions of the code are:
4 Copyright (C) 2005-2007 Sony Computer Entertainment America
5
6 MIT License: http://www.opensource.org/licenses/mit-license.php
7 */
8
9 #include "StdAfx.h"
10 #include "FCDocument/FCDocument.h"
11 #include "FCDocument/FCDAnimation.h"
12 #include "FCDocument/FCDAnimationChannel.h"
13 #include "FCDocument/FCDAnimationClip.h"
14 #include "FCDocument/FCDAnimationCurve.h"
15 #include "FCDocument/FCDAnimated.h"
16
17 //
18 // FCDAnimationClip
19 //
20
21 ImplementObjectType(FCDAnimationClip);
22 ImplementParameterObjectNoCtr(FCDAnimationClip, FCDEntityInstance, animations);
23
FCDAnimationClip(FCDocument * document)24 FCDAnimationClip::FCDAnimationClip(FCDocument* document)
25 : FCDEntity(document, "AnimationClip")
26 , InitializeParameter(start, 0.0f)
27 , InitializeParameter(end, 0.0f)
28 , InitializeParameterNoArg(animations)
29 {
30 }
31
~FCDAnimationClip()32 FCDAnimationClip::~FCDAnimationClip()
33 {
34 curves.clear();
35 }
36
AddClipCurve(FCDAnimationCurve * curve)37 void FCDAnimationClip::AddClipCurve(FCDAnimationCurve* curve)
38 {
39 curve->RegisterAnimationClip(this);
40 curves.push_back(curve);
41 SetNewChildFlag();
42 }
43
Clone(FCDEntity * _clone,bool cloneChildren) const44 FCDEntity* FCDAnimationClip::Clone(FCDEntity* _clone, bool cloneChildren) const
45 {
46 FCDAnimationClip* clone = NULL;
47 if (_clone == NULL) _clone = clone = new FCDAnimationClip(const_cast<FCDocument*>(GetDocument()));
48 else if (_clone->HasType(FCDAnimationClip::GetClassType())) clone = (FCDAnimationClip*) _clone;
49
50 Parent::Clone(_clone, cloneChildren);
51
52 if (clone != NULL)
53 {
54 // Copy the generic animation clip parameters
55 clone->start = start;
56 clone->end = end;
57
58 // If requested, clone the animation curves as well.
59 for (FCDAnimationCurveTrackList::const_iterator it = curves.begin(); it != curves.end(); ++it)
60 {
61 if (cloneChildren)
62 {
63 FCDAnimationCurve* clonedCurve = (*it)->Clone(NULL, false);
64 clonedCurve->AddClip(clone);
65 clone->AddClipCurve(clonedCurve);
66 }
67 }
68 }
69
70 return _clone;
71 }
72
AddInstanceAnimation()73 FCDEntityInstance* FCDAnimationClip::AddInstanceAnimation()
74 {
75 FCDEntityInstance* newInstance = FCDEntityInstanceFactory::CreateInstance(GetDocument(), NULL, FCDEntity::ANIMATION);
76 animations.push_back(newInstance);
77 return newInstance;
78 }
79
AddInstanceAnimation(FCDAnimation * animation)80 FCDEntityInstance* FCDAnimationClip::AddInstanceAnimation(FCDAnimation* animation)
81 {
82 FCDEntityInstance* newInstance = FCDEntityInstanceFactory::CreateInstance(GetDocument(), NULL, animation);
83 animations.push_back(newInstance);
84 return newInstance;
85 }
86