#include "valuenode_linear.h"
#include "valuenode_const.h"
#include "general.h"
+#include "color.h"
#endif
/* === M E T H O D S ======================================================= */
-ValueNode_Linear::ValueNode_Linear(const ValueBase::Type &x):
- LinkableValueNode(x)
+ValueNode_Linear::ValueNode_Linear(const ValueBase &value):
+ LinkableValueNode(value.get_type())
{
- switch(x)
+ switch(get_type())
{
+ case ValueBase::TYPE_ANGLE:
+ set_link("slope",ValueNode_Const::create(Angle::deg(0)));
+ set_link("offset",ValueNode_Const::create(value.get(Angle())));
+ break;
+ case ValueBase::TYPE_COLOR:
+ set_link("slope",ValueNode_Const::create(Color(0,0,0,0)));
+ set_link("offset",ValueNode_Const::create(value.get(Color())));
+ break;
+ case ValueBase::TYPE_INTEGER:
+ set_link("slope",ValueNode_Const::create(int(0)));
+ set_link("offset",ValueNode_Const::create(value.get(int())));
+ break;
case ValueBase::TYPE_REAL:
- set_link("slope",ValueNode_Const::create(Real(1)));
- set_link("offset",ValueNode_Const::create(Real(0)));
+ set_link("slope",ValueNode_Const::create(Real(0)));
+ set_link("offset",ValueNode_Const::create(value.get(Real())));
break;
case ValueBase::TYPE_TIME:
- set_link("slope",ValueNode_Const::create(Time(1)));
- set_link("offset",ValueNode_Const::create(Time(0)));
+ set_link("slope",ValueNode_Const::create(Time(0)));
+ set_link("offset",ValueNode_Const::create(value.get(Time())));
break;
case ValueBase::TYPE_VECTOR:
- set_link("slope",ValueNode_Const::create(Vector(1.0,1.0)));
- set_link("offset",ValueNode_Const::create(Vector(0.0,0.0)));
- break;
- case ValueBase::TYPE_ANGLE:
- set_link("slope",ValueNode_Const::create(Angle::deg(90)));
- set_link("offset",ValueNode_Const::create(Angle::deg(0)));
+ set_link("slope",ValueNode_Const::create(Vector(0,0)));
+ set_link("offset",ValueNode_Const::create(value.get(Vector())));
break;
default:
- throw Exception::BadType(ValueBase::type_name(x));
+ throw Exception::BadType(ValueBase::type_name(get_type()));
}
DCAST_HACK_ENABLE();
ValueNode_Linear*
ValueNode_Linear::create(const ValueBase &x)
{
- return new ValueNode_Linear(x.get_type());
+ return new ValueNode_Linear(x);
}
ValueNode_Linear::~ValueNode_Linear()
{
switch(get_type())
{
- case ValueBase::TYPE_TIME:
- return (*m_)(t).get(Time())*t+(*b_)(t).get(Time());
+ case ValueBase::TYPE_ANGLE:
+ return (*m_)(t).get( Angle())*t+(*b_)(t).get( Angle());
+ case ValueBase::TYPE_COLOR:
+ return (*m_)(t).get( Color())*t+(*b_)(t).get( Color());
+ case ValueBase::TYPE_INTEGER:
+ return static_cast<int>((*m_)(t).get(int())*t+(*b_)(t).get(int()) + 0.5f);
case ValueBase::TYPE_REAL:
- return (*m_)(t).get(Real())*t+(*b_)(t).get(Real());
+ return (*m_)(t).get( Real())*t+(*b_)(t).get( Real());
+ case ValueBase::TYPE_TIME:
+ return (*m_)(t).get( Time())*t+(*b_)(t).get( Time());
case ValueBase::TYPE_VECTOR:
return (*m_)(t).get(Vector())*t+(*b_)(t).get(Vector());
- case ValueBase::TYPE_ANGLE:
- return (*m_)(t).get(Angle())*t+(*b_)(t).get(Angle());
default:
assert(0);
break;
bool
ValueNode_Linear::check_type(ValueBase::Type type)
{
- return type==ValueBase::TYPE_REAL
- || type==ValueBase::TYPE_VECTOR
- || type==ValueBase::TYPE_TIME
- || type==ValueBase::TYPE_ANGLE;
+ return
+ type==ValueBase::TYPE_ANGLE ||
+ type==ValueBase::TYPE_COLOR ||
+ type==ValueBase::TYPE_INTEGER ||
+ type==ValueBase::TYPE_REAL ||
+ type==ValueBase::TYPE_TIME ||
+ type==ValueBase::TYPE_VECTOR ;
}
bool
ValueNode_Linear::get_link_vfunc(int i)const
{
assert(i==0 || i==1);
- if(i==0)
- return m_;
- if(i==1)
- return b_;
-
+ if(i==0) return m_;
+ if(i==1) return b_;
return 0;
}
ValueNode_Linear::link_name(int i)const
{
assert(i==0 || i==1);
- if(i==0)
- return "slope";
- if(i==1)
- return "offset";
+ if(i==0) return "slope";
+ if(i==1) return "offset";
return String();
}
if(i==0)
switch(get_type())
{
+ case ValueBase::TYPE_ANGLE:
+ case ValueBase::TYPE_COLOR:
+ case ValueBase::TYPE_INTEGER:
case ValueBase::TYPE_REAL:
case ValueBase::TYPE_TIME:
- case ValueBase::TYPE_ANGLE:
return _("Rate");
+ case ValueBase::TYPE_VECTOR:
default:
return _("Slope");
}
int
ValueNode_Linear::get_link_index_from_name(const String &name)const
{
- if(name=="slope")
- return 0;
- if(name=="offset")
- return 1;
+ if(name=="slope") return 0;
+ if(name=="offset") return 1;
throw Exception::BadLinkName(name);
}
{
switch(get_type())
{
- case ValueBase::TYPE_REAL:
- set_link("before",ValueNode_Const::create(value.get(Real())));
- set_link("after",ValueNode_Const::create(value.get(Real())));
- break;
- case ValueBase::TYPE_VECTOR:
- set_link("before",ValueNode_Const::create(value.get(Vector())));
- set_link("after",ValueNode_Const::create(value.get(Vector())));
- break;
case ValueBase::TYPE_ANGLE:
set_link("before",ValueNode_Const::create(value.get(Angle())));
set_link("after",ValueNode_Const::create(value.get(Angle())));
set_link("before",ValueNode_Const::create(value.get(int())));
set_link("after",ValueNode_Const::create(value.get(int())));
break;
+ case ValueBase::TYPE_REAL:
+ set_link("before",ValueNode_Const::create(value.get(Real())));
+ set_link("after",ValueNode_Const::create(value.get(Real())));
+ break;
case ValueBase::TYPE_TIME:
set_link("before",ValueNode_Const::create(value.get(Time())));
set_link("after",ValueNode_Const::create(value.get(Time())));
break;
+ case ValueBase::TYPE_VECTOR:
+ set_link("before",ValueNode_Const::create(value.get(Vector())));
+ set_link("after",ValueNode_Const::create(value.get(Vector())));
+ break;
default:
throw Exception::BadType(ValueBase::type_name(get_type()));
}
switch(get_type())
{
- case ValueBase::TYPE_REAL:
- {
- Real a=(*after)(t).get(Real());
- Real b=(*before)(t).get(Real());
- return (b-a)*amount+a;
- }
- case ValueBase::TYPE_VECTOR:
- {
- Vector a=(*after)(t).get(Vector());
- Vector b=(*before)(t).get(Vector());
- return (b-a)*amount+a;
- }
case ValueBase::TYPE_ANGLE:
{
Angle a=(*after)(t).get(Angle());
float b=(float)(*before)(t).get(int());
return static_cast<int>((b-a)*amount+a+0.5f);
}
+ case ValueBase::TYPE_REAL:
+ {
+ Real a=(*after)(t).get(Real());
+ Real b=(*before)(t).get(Real());
+ return (b-a)*amount+a;
+ }
case ValueBase::TYPE_TIME:
{
Time a=(*after)(t).get(Time());
Time b=(*before)(t).get(Time());
return (b-a)*amount+a;
}
+ case ValueBase::TYPE_VECTOR:
+ {
+ Vector a=(*after)(t).get(Vector());
+ Vector b=(*before)(t).get(Vector());
+ return (b-a)*amount+a;
+ }
default:
break;
}
ValueNode_TimedSwap::check_type(ValueBase::Type type)
{
return
- type==ValueBase::TYPE_REAL ||
- type==ValueBase::TYPE_VECTOR ||
type==ValueBase::TYPE_ANGLE ||
type==ValueBase::TYPE_COLOR ||
type==ValueBase::TYPE_INTEGER ||
- type==ValueBase::TYPE_TIME;
+ type==ValueBase::TYPE_REAL ||
+ type==ValueBase::TYPE_TIME ||
+ type==ValueBase::TYPE_VECTOR;
}