set_link("link",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()));
}
DCAST_HACK_ENABLE();
}
bool
-ValueNode_Random::set_link_vfunc(int i,ValueNode::Handle x)
+ValueNode_Random::set_link_vfunc(int i,ValueNode::Handle value)
{
assert(i>=0 && i<link_count());
+
switch(i)
{
- case 0:
- link_=x;
- signal_child_changed()(i);signal_value_changed()();
- return true;
- case 1:
- radius_=x;
- signal_child_changed()(i);signal_value_changed()();
- return true;
- case 2:
- seed_=x;
- signal_child_changed()(i);signal_value_changed()();
- return true;
- case 3:
- speed_=x;
- signal_child_changed()(i);signal_value_changed()();
- return true;
- case 4:
- smooth_=x;
- signal_child_changed()(i);signal_value_changed()();
- return true;
+ case 0: CHECK_TYPE_AND_SET_VALUE(link_, get_type());
+ case 1: CHECK_TYPE_AND_SET_VALUE(radius_, ValueBase::TYPE_REAL);
+ case 2: CHECK_TYPE_AND_SET_VALUE(seed_, ValueBase::TYPE_INTEGER);
+ case 3: CHECK_TYPE_AND_SET_VALUE(speed_, ValueBase::TYPE_REAL);
+ case 4: CHECK_TYPE_AND_SET_VALUE(smooth_, ValueBase::TYPE_INTEGER);
}
return false;
}
ValueNode_Random::get_link_vfunc(int i)const
{
assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return link_;
ValueNode_Random::link_name(int i)const
{
assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return "link";
ValueNode_Random::link_local_name(int i)const
{
assert(i>=0 && i<link_count());
+
switch(i)
{
case 0: return _("Link");
type==ValueBase::TYPE_TIME ||
type==ValueBase::TYPE_VECTOR ;
}
+
+ValueNode*
+ValueNode_Random::clone(const GUID& deriv_guid)const
+{
+ ValueNode_Random* ret = (ValueNode_Random*)LinkableValueNode::clone(deriv_guid);
+ ret->randomize_seed();
+ return ret;
+}
+
+void
+ValueNode_Random::randomize_seed()
+{
+ int i = get_link_index_from_name("seed");
+ ValueNode::Handle link = get_link_vfunc(i);
+ if(!link->is_exported() && link->get_name() == "constant")
+ {
+ int seed = time(NULL) + rand();
+ if (seed < 0) seed = -seed;
+ random.set_seed(seed);
+ set_link(i, ValueNode_Const::create(seed));
+ }
+}