summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_maths.h
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/src/nodes_maths.h')
-rw-r--r--rotord/src/nodes_maths.h108
1 files changed, 48 insertions, 60 deletions
diff --git a/rotord/src/nodes_maths.h b/rotord/src/nodes_maths.h
index ce474cf..6bbccdc 100644
--- a/rotord/src/nodes_maths.h
+++ b/rotord/src/nodes_maths.h
@@ -90,67 +90,55 @@ namespace Rotor {
}
Arithmetic* clone(map<string,string> &_settings) { return new Arithmetic(_settings);};
const double output(const Time_spec &time) {
- //if (attributes["operator"]->intVal==ARITHMETIC_divide||attributes["operator"]->intVal==ARITHMETIC_modulo){
- // if (value==0.0) {
- // Poco::Logger& logger = Poco::Logger::get("Rotor");
- // logger.error("Arithmetic node: caught division by zero, frame "+time.frame());
- // return 0.0;
- // }
- //}
- if (inputs.size()) { //there should there be a way to specify number of inputs in the code rather than in xml
- if (inputs[0]->connection) {
- double in= inputs[0]->get(time);
- int inint; //this old chestnut
- switch (attributes["operator"]->intVal) {
- case ARITHMETIC_plus:
- return in+parameters["value"]->value;
- break;
- case ARITHMETIC_minus:
- return in-parameters["value"]->value;
- break;
- case ARITHMETIC_multiply:
- return in*parameters["value"]->value;
- break;
- case ARITHMETIC_divide:
- return in/parameters["value"]->value;
- break;
- case ARITHMETIC_modulo:
- //cerr <<in<<" % "<<parameters["value"]->value<<" = "<<fmod(in,parameters["value"]->value)<<endl;
- return fmod(in,parameters["value"]->value);
- //return (((int)in)%12); //+(in-((int)in));
- break;
- case ARITHMETIC_pow:
- return pow(in,parameters["value"]->value);
- break;
- case ARITHMETIC_sin:
- phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value;
- return sin(phase)*parameters["value"]->value;
- break;
- case ARITHMETIC_cos:
- phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value;
- return cos(phase)*parameters["value"]->value;
- break;
- case ARITHMETIC_ease:
- return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((cos((fmod(in,1.0)+1.0)*M_PI))*0.5f)));
- break;
- case ARITHMETIC_jolt:
- return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((sin((fmod(in,1.0)+1.0)*M_PI))*0.5f)));
- break;
- case ARITHMETIC_floor:
- return floor(in);
- break;
- case ARITHMETIC_2pow:
- return pow(2,in);
- break;
- case ARITHMETIC_reciprocal:
- return parameters["value"]->value/in;
- break;
- case ARITHMETIC_rminus:
- return parameters["value"]->value-in;
- break;
- }
+ if (inputs[0]->connection) {
+ double in= inputs[0]->get(time);
+ switch (attributes["operator"]->intVal) {
+ case ARITHMETIC_plus:
+ return in+parameters["value"]->value;
+ break;
+ case ARITHMETIC_minus:
+ return in-parameters["value"]->value;
+ break;
+ case ARITHMETIC_multiply:
+ return in*parameters["value"]->value;
+ break;
+ case ARITHMETIC_divide:
+ return in/parameters["value"]->value;
+ break;
+ case ARITHMETIC_modulo:
+ return fmod(in,parameters["value"]->value);
+ break;
+ case ARITHMETIC_pow:
+ return pow(in,parameters["value"]->value);
+ break;
+ case ARITHMETIC_sin:
+ phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value;
+ return sin(phase)*parameters["value"]->value;
+ break;
+ case ARITHMETIC_cos:
+ phase+=(in-inputs[0]->get(time.lastframe()))*parameters["frequency"]->value;
+ return cos(phase)*parameters["value"]->value;
+ break;
+ case ARITHMETIC_ease:
+ return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((cos((fmod(in,1.0)+1.0)*M_PI))*0.5f)));
+ break;
+ case ARITHMETIC_jolt:
+ return ((1.0-parameters["value"]->value)*in)+(parameters["value"]->value*(0.5f+((sin((fmod(in,1.0)+1.0)*M_PI))*0.5f)));
+ break;
+ case ARITHMETIC_floor:
+ return floor(in);
+ break;
+ case ARITHMETIC_2pow:
+ return pow(2,in);
+ break;
+ case ARITHMETIC_reciprocal:
+ return parameters["value"]->value/in;
+ break;
+ case ARITHMETIC_rminus:
+ return parameters["value"]->value-in;
+ break;
}
- }
+ }
return 0.0;
}
int op;