1 /*
2 * defvelaccel.h
3 * DIN Is Noise is copyright (c) 2006-2021 Jagannathan Sampath
4 * DIN Is Noise is released under GNU Public License 2.0
5 * For more information, please visit https://dinisnoise.org/
6 */
7 
8 #ifndef __defvelaccel
9 #define __defvelaccel
10 
11 #include "angle.h"
12 #include "random.h"
13 
14 struct valt {
15   float val;
16   int rndrd;
17   rnd<float> rd;
18   valt (float v = 0.0f, int rr = 0) : rd (0.0f, 1.0f) {
19     val = v;
20     rndrd = rr;
21   }
operatorvalt22   float operator()() {if (rndrd) return rd() * val; else return val;}
23   valt& operator= (float v) {
24     val = v;
25     return *this;
26   }
27   operator float () {
28     return val;
29   }
30 } ;
31 
32 std::istream& operator>> (std::istream&, valt&);
33 std::ostream& operator<< (std::ostream&, valt&);
34 
35 struct defvelaccel {
36 
37   std::string name;
38 
39   valt mag;
40 
41   int dir;
42   enum {HORIZONTAL, VERTICAL, MOUSE};
43   int neg;
44 
45   int rndrot;
46   rnd<float> rotrd;
47   void setrotrd ();
48   anglet clock, anticlock;
49   int sync;
50 
51   struct autost {
52 
53     struct rott {
54       int yes;
55       int dir;
56       int mov;
57       valt rpm, dps, tps;
rottdefvelaccel::autost::rott58       rott () : rpm(45), dps(6), tps(1) {
59         yes = 0;
60         dir = 0;
61         mov = 0;
62       }
63     } rot;
64 
65     struct flipt {
66       valt deg;
67       int yes;
fliptdefvelaccel::autost::flipt68       flipt () : deg (180), yes(0) {}
69     } flip;
70 
71   } autos;
72 
73   defvelaccel (const std::string& n);
74 
75 };
76 
77 
78 std::ostream& operator<< (std::ostream& f, defvelaccel& dva);
79 std::istream& operator>> (std::istream& f, defvelaccel& dva);
80 
81 
82 
83 #endif
84