git-svn-id: svn://db.shs.com.ru/libs@1 a8b55f48-bf90-11e4-a774-851b48703e85
116 lines
5.4 KiB
C++
116 lines
5.4 KiB
C++
#ifndef BRICK_EMITS_H
|
|
#define BRICK_EMITS_H
|
|
|
|
#include "brick_base.h"
|
|
#include "brick_manager.h"
|
|
|
|
|
|
class BrickEmitBase: public BrickBase {
|
|
public: BrickEmitBase(int inputs_num = 1, int outputs_num = 1, int parameters_num = 0): BrickBase(inputs_num, outputs_num, parameters_num) {lib = "Emitters";}
|
|
};
|
|
|
|
|
|
class BrickEmitConst: public BrickEmitBase {
|
|
MBRICK(BrickEmitConst)
|
|
BrickEmitConst(double value = 1.): BrickEmitBase(0, 1, 1) {parameters[0].setValue(value); type = "Const"; setName(type); paramNames[0] = "Const";}
|
|
void setValue(double value) {parameters[0].setValue(value);}
|
|
virtual bool tick_body(double time) {outputs[0] = parameters[0].toFloat(); return true;}
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitConst)
|
|
|
|
|
|
class BrickEmitLinear: public BrickEmitBase {
|
|
MBRICK(BrickEmitLinear)
|
|
BrickEmitLinear(double start_value = 0., double slope = 1.): BrickEmitBase(2, 1) {setParameters(start_value, slope); type = "Linear"; setName(type); inNames[0] = "Start"; inNames[1] = "Slope";}
|
|
enum Inputs {StartValue, Slope};
|
|
void setParameters(double start_value, double slope) {inputs[StartValue] = start_value; inputs[Slope] = slope;}
|
|
virtual bool tick_body(double time);
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitLinear)
|
|
|
|
|
|
class BrickEmitSin: public BrickEmitBase {
|
|
MBRICK(BrickEmitSin)
|
|
BrickEmitSin(double amplitude = 1., double frequency = 1., double phase_shift = 0.): BrickEmitBase(3, 1) {setParameters(amplitude, frequency, phase_shift); type = "Sin"; setName(type); inNames[0] = "Amplitude"; inNames[1] = "Frequency, Hz"; inNames[2] = "Phase Shift, rad";}
|
|
enum Inputs {Amplitude, Frequency, PhaseShift};
|
|
void setParameters(double amplitude, double frequency, double phase_shift) {inputs[Amplitude] = amplitude; inputs[Frequency] = frequency; inputs[PhaseShift] = phase_shift;}
|
|
virtual bool tick_body(double time);
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitSin)
|
|
|
|
|
|
class BrickEmitDelta: public BrickEmitBase {
|
|
MBRICK(BrickEmitDelta)
|
|
BrickEmitDelta(double time = 0.): BrickEmitBase(1, 1) {setTime(time); type = "Delta"; setName(type); inNames[0] = "Time, s";}
|
|
enum Inputs {Time};
|
|
void setTime(double time) {inputs[Time] = time;}
|
|
virtual bool tick_body(double time);
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitDelta)
|
|
|
|
|
|
class BrickEmitStep: public BrickEmitBase {
|
|
MBRICK(BrickEmitStep)
|
|
BrickEmitStep(double time = 0., double start = 0., double finish = 1.): BrickEmitBase(3, 1) {setParameters(time, start, finish); type = "Step"; setName(type); inNames[0] = "Time, s"; inNames[1] = "Start Value"; inNames[2] = "Finish Value";}
|
|
enum Inputs {Time, StartValue, FinishValue};
|
|
void setParameters(double time, double start, double finish) {inputs[Time] = time; inputs[StartValue] = start; inputs[FinishValue] = finish;}
|
|
virtual bool tick_body(double time);
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitStep)
|
|
|
|
|
|
class BrickEmitPulse: public BrickEmitBase {
|
|
MBRICK(BrickEmitPulse)
|
|
BrickEmitPulse(double ampl = 1., double period = 1., double duration = 0.5, double offset = 0.): BrickEmitBase(4, 1) {setParameters(ampl, period, duration, offset); type = "Pulse"; setName(type); inNames[0] = "Amplitude"; inNames[1] = "Period, s"; inNames[2] = "Duration, s"; inNames[3] = "Start Delay, s";}
|
|
enum Inputs {Amplitude, Period, Duration, StartDelay};
|
|
void setParameters(double ampl, double period, double duration, double offset) {inputs[Amplitude] = ampl; inputs[Period] = period; inputs[Duration] = duration; inputs[StartDelay] = offset;}
|
|
virtual bool tick_body(double time);
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitPulse)
|
|
|
|
|
|
class BrickEmitStrobe: public BrickEmitBase {
|
|
MBRICK(BrickEmitStrobe)
|
|
BrickEmitStrobe(): BrickEmitBase(0, 1) {type = "Strobe"; setName(type);}
|
|
virtual bool tick_body(double time) {outputs[0] = 1. - outputs[0]; return true;}
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitStrobe)
|
|
|
|
|
|
class BrickEmitTime: public BrickEmitBase {
|
|
MBRICK(BrickEmitTime)
|
|
BrickEmitTime(): BrickEmitBase(0, 1) {type = "Time"; setName(type);}
|
|
virtual bool tick_body(double time) {outputs[0] = time; return true;}
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitTime)
|
|
|
|
|
|
class BrickEmitFrequency: public BrickEmitBase {
|
|
MBRICK(BrickEmitFrequency)
|
|
BrickEmitFrequency(): BrickEmitBase(0, 1) {type = "Frequency"; setName(type);}
|
|
virtual bool tick_body(double time) {outputs[0] = manager_->freq; return true;}
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitFrequency)
|
|
|
|
|
|
class BrickEmitNoiseRandom: public BrickEmitBase {
|
|
MBRICK(BrickEmitNoiseRandom)
|
|
BrickEmitNoiseRandom(double shift = 0., double scale = 1.): BrickEmitBase(2, 1) {setParameters(shift, scale); type = "Random"; setName(type); inNames[0] = "Shift"; inNames[1] = "Scale";}
|
|
enum Inputs {Shift, Scale};
|
|
void setParameters(double shift, double scale) {inputs[Shift] = shift; inputs[Scale] = scale;}
|
|
virtual bool tick_body(double time) {outputs[0] = randomd() * inputs[Scale] + inputs[Shift]; return true;}
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitNoiseRandom)
|
|
|
|
|
|
class BrickEmitNoiseNormal: public BrickEmitBase {
|
|
MBRICK(BrickEmitNoiseNormal)
|
|
BrickEmitNoiseNormal(double shift = 0., double scale = 1.): BrickEmitBase(2, 1) {setParameters(shift, scale); type = "NormalNoise"; setName(type); inNames[0] = "Shift"; inNames[1] = "Scale";}
|
|
enum Inputs {Shift, Scale};
|
|
void setParameters(double shift, double scale) {inputs[Shift] = shift; inputs[Scale] = scale;}
|
|
virtual bool tick_body(double time) {outputs[0] = randomn(inputs[Shift], inputs[Scale]); return true;}
|
|
};
|
|
ADD_NEW_TO_COLLECTION(Emitters, BrickEmitNoiseNormal)
|
|
|
|
#endif // BRICK_EMITS_H
|