Source code: com/arranger/jarl/trait/BaseSegmentTrait.java
1 package com.arranger.jarl.trait;
2
3 import com.arranger.jarl.base.IContext;
4 import com.arranger.jarl.base.Time;
5 import com.arranger.jarl.util.IWidgetConfigSegmentFactory;
6 import com.arranger.jarl.util.InterpolateUtil;
7 import com.arranger.jarl.util.WidgetConfigSegment;
8 import com.arranger.jarl.util.WidgetUtil;
9 import com.arranger.jarl.widget.IWidget;
10
11 import java.util.Collection;
12
13 /**
14 * BaseSegmentTrait this is for traits that are segment enabled
15 * It just provides some helper functions
16 */
17 public abstract class BaseSegmentTrait extends BaseTrait implements IWidgetConfigSegmentFactory {
18
19 protected java.util.List m_configSegments;
20
21 /**
22 * @return a collection of {@link WidgetConfigSegment}
23 */
24 public Collection getConfigSegments() {
25 return m_configSegments;
26 }
27
28 /**
29 * Always remember some attrs might not be there
30 * @param context
31 */
32 protected void initAttributes(IContext context) {
33 super.initAttributes(context);
34
35 //look for segments
36 java.util.List seg = WidgetUtil.initWidgetConfigSegments(m_configElement, this);
37 if (seg != null) {
38 m_configSegments = seg;
39 }
40 }
41
42 /**
43 * Get the 'active' widget config segment
44 * @param widget
45 * @param context
46 * @return the 'active' widget config segment
47 */
48 protected WidgetConfigSegment getCurrentSegment(IWidget widget, IContext context) {
49 //get how far along we are into this widget
50 double currentTimePct = InterpolateUtil.interpolate(widget, context.getTime());
51
52 //get the current motion segment
53 return WidgetUtil.getWidgetConfigSegment(m_configSegments, currentTimePct);
54 }
55
56 /**
57 * Get the pct of time relative to this segment
58 * @param widget
59 * @param widgetConfigSegment
60 * @return relative time into this segment
61 *
62 * @see #getCurrentSegment
63 */
64 protected double getCurrentSegmentTimePct(IWidget widget, IContext context, WidgetConfigSegment widgetConfigSegment) {
65
66 //get relative time
67 Time relTime = WidgetUtil.getRelativeTime(widget, context.getTime());
68
69 //get current time pct relative to this segment
70 //relTime - segStart
71 //-------------------
72 // segLength
73 double segStart = widgetConfigSegment.getStartTimePct() * widget.getTotalTime().getFrame();
74 double segEnd = widgetConfigSegment.getEndTimePct() * widget.getTotalTime().getFrame();
75 double segLength = segEnd - segStart;
76
77 return (relTime.getFrame() - segStart) / segLength;
78 }
79 }