/* === S Y N F I G ========================================================= */
/*! \file valuenode_timedswap.cpp
-** \brief Template File
+** \brief Implementation of the "Timed Swap" valuenode conversion.
**
** $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
#include "valuenode_const.h"
#include <stdexcept>
#include "color.h"
+#include <ETL/misc>
#endif
{
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()));
+ throw Exception::BadType(ValueBase::type_local_name(get_type()));
}
set_link("time",ValueNode_Const::create(Time(2)));
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 a=(float)(*after)(t).get(int());
float b=(float)(*before)(t).get(int());
- return static_cast<int>((b-a)*amount+a+0.5f);
+ return round_to_int((b-a)*amount+a);
+ }
+ 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 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;
}
bool
ValueNode_TimedSwap::set_link_vfunc(int i,ValueNode::Handle x)
{
- assert(i>=0 && i<4);
+ assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return set_before(x);
ValueNode::LooseHandle
ValueNode_TimedSwap::get_link_vfunc(int i)const
{
- assert(i>=0 && i<4);
+ assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return get_before();
String
ValueNode_TimedSwap::link_local_name(int i)const
{
- assert(i>=0 && i<4);
+ assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return _("Before");
String
ValueNode_TimedSwap::link_name(int i)const
{
- assert(i>=0 && i<4);
+ assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return "before";
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;
}