diff options
author | Joshua Leung <aligorith@gmail.com> | 2010-01-19 14:43:29 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2010-01-19 14:43:29 +0300 |
commit | bfe5482169397912d66272376fe5b1f6a95256f3 (patch) | |
tree | 24ad82a855ed3b17cd6ee83ee257451fa1dd09c7 /source/blender/makesrna/intern/rna_nla.c | |
parent | 7759fc2983422ef234b1d9a2bcdbc4c7e6265071 (diff) |
NLA Bugfix for Lee: Changing action extents doesn't update the strip lengths too
Diffstat (limited to 'source/blender/makesrna/intern/rna_nla.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_nla.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c index 79e6d52766e..f182e930a67 100644 --- a/source/blender/makesrna/intern/rna_nla.c +++ b/source/blender/makesrna/intern/rna_nla.c @@ -234,15 +234,40 @@ static void rna_NlaStrip_blend_out_set(PointerRNA *ptr, float value) static void rna_NlaStrip_action_start_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; + float actlen, mapping; + + /* prevent start frame from occurring after end of action */ CLAMP(value, MINAFRAME, data->actend); data->actstart= value; + + /* calculate new length factors */ + actlen= data->actend - data->actstart; + if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; + mapping= data->scale * data->repeat; + + /* adjust endpoint of strip in response to this */ + // FIXME: should we be moving the start backwards instead? + if (IS_EQ(mapping, 0.0f) == 0) + data->end = (actlen * mapping) + data->start; } static void rna_NlaStrip_action_end_frame_set(PointerRNA *ptr, float value) { NlaStrip *data= (NlaStrip*)ptr->data; + float actlen, mapping; + + /* prevent end frame from starting before start of action */ CLAMP(value, data->actstart, MAXFRAME); data->actend= value; + + /* calculate new length factors */ + actlen= data->actend - data->actstart; + if (IS_EQ(actlen, 0.0f)) actlen= 1.0f; + mapping= data->scale * data->repeat; + + /* adjust endpoint of strip in response to this */ + if (IS_EQ(mapping, 0.0f) == 0) + data->end = (actlen * mapping) + data->start; } static void rna_NlaStrip_animated_influence_set(PointerRNA *ptr, int value) |