/*! \file valuenode_animated.cpp
** \brief Template File
**
-** $Id: valuenode_animated.cpp,v 1.1.1.1 2005/01/04 01:23:15 darco Exp $
+** $Id$
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
value_type Pn; Pn=after_next->get_value().get(T()); // P_{i+1}
// TCB
- value_type vect(static_cast<value_type>(subtract_func(Pc,Pp)*(((1.0-t)*(1.0-c)*(1.0+b))/2.0)+(Pn-Pc)*(((1.0-t)*(1.0+c)*(1.0-b))/2.0)));
+ value_type vect(static_cast<value_type>(subtract_func(Pc,Pp) * (((1.0-t)*(1.0-c)*(1.0+b))/2.0) +
+ (Pn-Pc) * (((1.0-t)*(1.0+c)*(1.0-b))/2.0)));
// Tension Only
//value_type vect((value_type)((Pn-Pp)*(1.0-t)));
// Adjust for time
const float timeadjust(0.5);
- if(!curve_list.empty())
- curve.second.t1()*=(curve.second.get_dt()*(timeadjust+1))/(curve.second.get_dt()*timeadjust+curve_list.back().second.get_dt());
- if(after_next!=waypoint_list_.end())
- curve.second.t2()*=(curve.second.get_dt()*(timeadjust+1))/(curve.second.get_dt()*timeadjust+(after_next->get_time()-next->get_time()));
-
if(iter_get_after==INTERPOLATION_HALT)
curve.second.t1()*=0;
+ // if this isn't the first curve
+ else if(iter_get_after != INTERPOLATION_LINEAR && !curve_list.empty())
+ // adjust it for the curve that came before it
+ curve.second.t1() *=
+ // (time span of this curve) * 1.5
+ // -----------------------------------------------------------------
+ // ((time span of this curve) * 0.5) + (time span of previous curve)
+ (curve.second.get_dt()*(timeadjust+1)) /
+ (curve.second.get_dt()*timeadjust + curve_list.back().second.get_dt());
if(next_get_before==INTERPOLATION_HALT)
curve.second.t2()*=0;
- }
+ // if this isn't the last curve
+ else if(next_get_before != INTERPOLATION_LINEAR && after_next!=waypoint_list_.end())
+ // adjust it for the curve that came after it
+ curve.second.t2() *=
+ // (time span of this curve) * 1.5
+ // -------------------------------------------------------------
+ // ((time span of this curve) * 0.5) + (time span of next curve)
+ (curve.second.get_dt()*(timeadjust+1)) /
+ (curve.second.get_dt()*timeadjust+(after_next->get_time()-next->get_time()));
+ } // not CONSTANT
}
// Set up the time to the default stuff
case ValueBase::TYPE_STRING:
return ValueNode_Animated::Handle(new _Constant<String>);
case ValueBase::TYPE_GRADIENT:
- return ValueNode_Animated::Handle(new _Constant<Gradient>);
+ return ValueNode_Animated::Handle(new _Hermite<Gradient>);
case ValueBase::TYPE_BOOL:
return ValueNode_Animated::Handle(new _AnimBool);
case ValueBase::TYPE_CANVAS: