29036a59642bc439c76a10fe40ef3c387cb4c90b
[lighthouse] / src / seq.cc
1 #include <string.h>
2 #include <vector>
3 #include "seq.h"
4 #include "track.h"
5
6 struct SeqTrack {
7         char *name;
8         Track *track;
9 };
10
11 static std::vector<SeqTrack> tracks;
12
13 bool init_seq()
14 {
15         return true;
16 }
17
18 void destroy_seq()
19 {
20         int ntrk = tracks.size();
21         for(int i=0; i<ntrk; i++) {
22                 delete tracks[i].track;
23                 delete [] tracks[i].name;
24         }
25         tracks.clear();
26 }
27
28 int add_seq_track(const char *name, InterpMode inmode, ExtrapMode exmode, float defval)
29 {
30         int idx = find_seq_track(name);
31         if(idx >= 0) return idx;
32
33         SeqTrack st;
34         st.name = new char[strlen(name) + 1];
35         strcpy(st.name, name);
36         st.track = new Track;
37         st.track->defval = defval;
38         st.track->interp = inmode;
39         st.track->extrap = exmode;
40         tracks.push_back(st);
41         return tracks.size() - 1;
42 }
43
44 int find_seq_track(const char *name)
45 {
46         int ntrk = tracks.size();
47         for(int i=0; i<ntrk; i++) {
48                 if(strcmp(tracks[i].name, name) == 0) {
49                         return i;
50                 }
51         }
52         return -1;
53 }
54
55 Track *get_seq_track(int idx)
56 {
57         return tracks[idx].track;
58 }
59
60 void clear_seq_track(int idx)
61 {
62         tracks[idx].track->clear();
63 }
64
65 void clear_seq_track(const char *name)
66 {
67         int idx = find_seq_track(name);
68         if(idx >= 0) {
69                 tracks[idx].track->clear();
70         }
71 }
72
73 void set_seq_value(int idx, long tm, float val)
74 {
75         tracks[idx].track->set_key(tm, val);
76 }
77
78 void set_seq_value(const char *name, long tm, float val)
79 {
80         int idx = find_seq_track(name);
81         if(idx >= 0) {
82                 tracks[idx].track->set_key(tm, val);
83         }
84 }
85
86 float get_seq_value(int idx, long tm)
87 {
88         return (*tracks[idx].track)(tm);
89 }
90
91 float get_seq_value(const char *name, long tm)
92 {
93         int idx = find_seq_track(name);
94         if(idx < 0) {
95                 return 0.0f;
96         }
97         return (*tracks[idx].track)(tm);
98 }
99
100 bool load_seq(const char *fname)
101 {
102         return false;   /* TODO */
103 }