Commit: 5846212aab982466f4cd99b024b9912e7e718dd9
Author: Jacques Lucke
Date:   Fri Feb 22 14:27:53 2019 +0100
Branches: functions
https://developer.blender.org/rB5846212aab982466f4cd99b024b9912e7e718dd9

fix and cleanup

===================================================================

M       source/blender/functions/core/core.hpp
M       source/blender/functions/nodes/test_nodes.cpp

===================================================================

diff --git a/source/blender/functions/core/core.hpp 
b/source/blender/functions/core/core.hpp
index 673268564e4..a8b7fefc3bb 100644
--- a/source/blender/functions/core/core.hpp
+++ b/source/blender/functions/core/core.hpp
@@ -111,7 +111,7 @@ namespace FN {
                        const SmallTypeVector &inputs,
                        const SmallTypeVector &outputs) const;
 
-               bool Signature::has_interface(
+               bool has_interface(
                        const Signature &other) const;
 
                void print(std::string indent = "") const;
diff --git a/source/blender/functions/nodes/test_nodes.cpp 
b/source/blender/functions/nodes/test_nodes.cpp
index a053218dea5..b77fa5ca7d9 100644
--- a/source/blender/functions/nodes/test_nodes.cpp
+++ b/source/blender/functions/nodes/test_nodes.cpp
@@ -7,8 +7,8 @@ namespace FN { namespace Nodes {
 
        using namespace Types;
 
-       class CombineVector : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class CombineVector : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        Vector v;
                        v.x = fn_in.get<float>(0);
@@ -18,8 +18,8 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class SeparateVector : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class SeparateVector : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        Vector v = fn_in.get<Vector>(0);
                        fn_out.set<float>(0, v.x);
@@ -28,8 +28,8 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class AddFloats : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class AddFloats : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        float a = fn_in.get<float>(0);
                        float b = fn_in.get<float>(1);
@@ -37,8 +37,8 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class MultiplyFloats : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class MultiplyFloats : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        float a = fn_in.get<float>(0);
                        float b = fn_in.get<float>(1);
@@ -46,8 +46,8 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class MinFloats : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class MinFloats : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        float a = fn_in.get<float>(0);
                        float b = fn_in.get<float>(1);
@@ -55,8 +55,8 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class MaxFloats : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class MaxFloats : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        float a = fn_in.get<float>(0);
                        float b = fn_in.get<float>(1);
@@ -64,8 +64,8 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class VectorDistance : public FN::TupleCallBody {
-               void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const 
override
+       class VectorDistance : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        Vector a = fn_in.get<Vector>(0);
                        Vector b = fn_in.get<Vector>(1);
@@ -74,7 +74,30 @@ namespace FN { namespace Nodes {
                }
        };
 
-       class ObjectTransforms : public FN::TupleCallBody {
+       static uint32_t random_int(uint32_t x)
+       {
+               x = (x<<13) ^ x;
+               return x * (x * x * 15731 + 789221) + 1376312589;
+       }
+
+       static float random_float(uint32_t x)
+       {
+               x = random_int(x);
+               return (float)x / 4294967296.0f;
+       }
+
+       class RandomNumber : public TupleCallBody {
+               void call(const Tuple &fn_in, Tuple &fn_out) const override
+               {
+                       uint32_t seed = fn_in.get<int32_t>(0);
+                       float min = fn_in.get<float>(1);
+                       float max = fn_in.get<float>(2);
+                       float result = random_float(seed) * (max - min) + min;
+                       fn_out.set<float>(0, result);
+               }
+       };
+
+       class ObjectTransforms : public TupleCallBody {
        private:
                Object *m_object;
 
@@ -82,7 +105,7 @@ namespace FN { namespace Nodes {
                ObjectTransforms(Object *object)
                        : m_object(object) {}
 
-               void call(const FN::Tuple &UNUSED(fn_in), FN::Tuple &fn_out) 
const override
+               void call(const Tuple &UNUSED(fn_in), Tuple &fn_out) const 
override
                {
                        if (m_object) {
                                Vector position = *(Vector *)m_object->loc;
@@ -143,7 +166,7 @@ namespace FN { namespace Nodes {
                        InputParameter("A", get_float_type()),
                        InputParameter("B", get_float_type()),
                }, {
-                       OutputParameter("Vector", get_float_type()),
+                       OutputParameter("Result", get_float_type()),
                }));
                return fn;
        }
@@ -176,6 +199,19 @@ namespace FN { namespace Nodes {
                return fn;
        }
 
+       LAZY_INIT_REF_STATIC__NO_ARG(SharedFunction, get_random_number_function)
+       {
+               auto fn = SharedFunction::New("Random Number", Signature({
+                       InputParameter("Seed", get_int32_type()),
+                       InputParameter("Min", get_float_type()),
+                       InputParameter("Max", get_float_type()),
+               }, {
+                       OutputParameter("Value", get_float_type()),
+               }));
+               fn->add_body(new RandomNumber());
+               return fn;
+       }
+
        static void insert_object_transforms_node(
                bNodeTree *btree,
                bNode *bnode,
@@ -247,6 +283,7 @@ namespace FN { namespace Nodes {
                register_node_function_getter__no_arg("fn_CombineVectorNode", 
get_combine_vector_function);
                register_node_function_getter__no_arg("fn_SeparateVectorNode", 
get_separate_vector_function);
                register_node_function_getter__no_arg("fn_VectorDistanceNode", 
get_vector_distance_function);
+               register_node_function_getter__no_arg("fn_RandomNumberNode", 
get_random_number_function);
                register_node_inserter("fn_ObjectTransformsNode", 
insert_object_transforms_node);
                register_node_inserter("fn_FloatMathNode", 
insert_float_math_node);
                register_node_inserter("fn_ClampNode", insert_clamp_node);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to