X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_step.cpp;h=130d2b27041d0283e6589744dabe39467c0556a5;hb=3c84217d4e5701c51c796df7c745ad39d90903a8;hp=9a163f856feea1908e312bed81c811fcaaba41da;hpb=031f3c52eaf4c994f7c662c7d44caee7596aafa2;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_step.cpp b/synfig-core/trunk/src/synfig/valuenode_step.cpp index 9a163f8..130d2b2 100644 --- a/synfig-core/trunk/src/synfig/valuenode_step.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_step.cpp @@ -54,34 +54,29 @@ using namespace synfig; ValueNode_Step::ValueNode_Step(const ValueBase &value): LinkableValueNode(value.get_type()) { - set_link("width",ValueNode_Const::create(Time(1))); - set_link("time",ValueNode_Const::create(Time(0))); + set_link("duration", ValueNode_Const::create(Time(1))); + set_link("start_time", ValueNode_Const::create(Time(0))); + set_link("intersection", ValueNode_Const::create(Real(0.5))); switch(get_type()) { case ValueBase::TYPE_ANGLE: - set_link("height",ValueNode_Const::create(Angle::deg(0))); - set_link("value",ValueNode_Const::create(value.get(Angle()))); + set_link("link",ValueNode_Const::create(value.get(Angle()))); break; case ValueBase::TYPE_COLOR: - set_link("height",ValueNode_Const::create(Color(0,0,0,0))); - set_link("value",ValueNode_Const::create(value.get(Color()))); + set_link("link",ValueNode_Const::create(value.get(Color()))); break; case ValueBase::TYPE_INTEGER: - set_link("height",ValueNode_Const::create(int(0))); - set_link("value",ValueNode_Const::create(value.get(int()))); + set_link("link",ValueNode_Const::create(value.get(int()))); break; case ValueBase::TYPE_REAL: - set_link("height",ValueNode_Const::create(Real(0))); - set_link("value",ValueNode_Const::create(value.get(Real()))); + set_link("link",ValueNode_Const::create(value.get(Real()))); break; case ValueBase::TYPE_TIME: - set_link("height",ValueNode_Const::create(Time(0))); - set_link("value",ValueNode_Const::create(value.get(Time()))); + set_link("link",ValueNode_Const::create(value.get(Time()))); break; case ValueBase::TYPE_VECTOR: - set_link("height",ValueNode_Const::create(Vector(0,0))); - set_link("value",ValueNode_Const::create(value.get(Vector()))); + set_link("link",ValueNode_Const::create(value.get(Vector()))); break; default: throw Exception::BadType(ValueBase::type_local_name(get_type())); @@ -110,17 +105,20 @@ ValueNode_Step::~ValueNode_Step() ValueBase ValueNode_Step::operator()(Time t)const { - int step = floor((t - ((*time_)(t).get(Time()))) / - ((*width_)(t).get(Time()))); + Time duration ((*duration_ )(t).get(Time())); + Time start_time ((*start_time_ )(t).get(Time())); + Real intersection((*intersection_)(t).get(Real())); + + t = (floor((t - start_time) / duration) + intersection) * duration + start_time; switch(get_type()) { - case ValueBase::TYPE_ANGLE: return (*value_)(t).get( Angle()) + (*height_)(t).get( Angle())*step; - case ValueBase::TYPE_COLOR: return (*value_)(t).get( Color()) + (*height_)(t).get( Color())*step; - case ValueBase::TYPE_INTEGER: return (*value_)(t).get( int()) + (*height_)(t).get( int())*step; - case ValueBase::TYPE_REAL: return (*value_)(t).get( Real()) + (*height_)(t).get( Real())*step; - case ValueBase::TYPE_TIME: return (*value_)(t).get( Time()) + (*height_)(t).get( Time())*step; - case ValueBase::TYPE_VECTOR: return (*value_)(t).get(Vector()) + (*height_)(t).get(Vector())*step; + case ValueBase::TYPE_ANGLE: return (*link_)(t).get( Angle()); + case ValueBase::TYPE_COLOR: return (*link_)(t).get( Color()); + case ValueBase::TYPE_INTEGER: return (*link_)(t).get( int()); + case ValueBase::TYPE_REAL: return (*link_)(t).get( Real()); + case ValueBase::TYPE_TIME: return (*link_)(t).get( Time()); + case ValueBase::TYPE_VECTOR: return (*link_)(t).get(Vector()); default: assert(0); return ValueBase(); @@ -159,10 +157,10 @@ ValueNode_Step::set_link_vfunc(int i,ValueNode::Handle value) switch(i) { - case 0: CHECK_TYPE_AND_SET_VALUE(width_, ValueBase::TYPE_TIME); - case 1: CHECK_TYPE_AND_SET_VALUE(height_, get_type()); - case 2: CHECK_TYPE_AND_SET_VALUE(time_, ValueBase::TYPE_TIME); - case 3: CHECK_TYPE_AND_SET_VALUE(value_, get_type()); + case 0: CHECK_TYPE_AND_SET_VALUE(link_, get_type()); + case 1: CHECK_TYPE_AND_SET_VALUE(duration_, ValueBase::TYPE_TIME); + case 2: CHECK_TYPE_AND_SET_VALUE(start_time_, ValueBase::TYPE_TIME); + case 3: CHECK_TYPE_AND_SET_VALUE(intersection_, ValueBase::TYPE_REAL); } return false; } @@ -174,10 +172,10 @@ ValueNode_Step::get_link_vfunc(int i)const switch(i) { - case 0: return width_; - case 1: return height_; - case 2: return time_; - case 3: return value_; + case 0: return link_; + case 1: return duration_; + case 2: return start_time_; + case 3: return intersection_; default: return 0; } @@ -196,10 +194,10 @@ ValueNode_Step::link_name(int i)const switch(i) { - case 0: return "width"; - case 1: return "height"; - case 2: return "time"; - case 3: return "value"; + case 0: return "link"; + case 1: return "duration"; + case 2: return "start_time"; + case 3: return "intersection"; default: return String(); } @@ -212,10 +210,10 @@ ValueNode_Step::link_local_name(int i)const switch(i) { - case 0: return _("Width"); - case 1: return _("Height"); - case 2: return _("Time"); - case 3: return _("Value"); + case 0: return _("Link"); + case 1: return _("Duration"); + case 2: return _("Start Time"); + case 3: return _("Intersection"); default: return String(); } @@ -224,10 +222,10 @@ ValueNode_Step::link_local_name(int i)const int ValueNode_Step::get_link_index_from_name(const String &name)const { - if(name=="width") return 0; - if(name=="height") return 1; - if(name=="time") return 2; - if(name=="value") return 3; + if(name=="link") return 0; + if(name=="duration") return 1; + if(name=="start_time") return 2; + if(name=="intersection") return 3; throw Exception::BadLinkName(name); }