annotate src/paranormal/containers.c @ 279:1983383db0f5 trunk

[svn] build fixes: - now configure properly find flac 1.1.3beta2 - fix CXXFLAGS. it would lose audacious include path if --with-libFLAC was given. - suppress gcc 4.1.1 compile warnings
author yaz
date Sun, 19 Nov 2006 22:54:10 -0800
parents 0d826917c56f
children b185ed2f8fa2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
1 #ifdef HAVE_CONFIG_H
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
2 # include <config.h>
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
3 #endif
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
4
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
5 #include <stdio.h>
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
6
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
7 #include <glib.h>
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
8
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
9 #include "actuators.h"
164
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
10 #include "paranormal.h"
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
11
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
12 /* **************** all containers **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
13
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
14 /* Add a actuator to a container (end of list) */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
15 void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
16 container_add_actuator (struct pn_actuator *container, struct pn_actuator *a)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
17 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
18 g_assert (container->desc->flags & ACTUATOR_FLAG_CONTAINER);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
19 g_assert (a);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
20
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
21 *((GSList **)container->data) =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
22 g_slist_append (*(GSList **)container->data, a);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
23 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
24
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
25 void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
26 container_remove_actuator (struct pn_actuator *container, struct pn_actuator *a)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
27 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
28 g_assert (container->desc->flags & ACTUATOR_FLAG_CONTAINER);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
29 g_assert (a);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
30
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
31 *((GSList **)container->data) =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
32 g_slist_remove (*(GSList **)container->data, a);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
33 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
34
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
35 /* clear the containee list */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
36 void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
37 container_unlink_actuators (struct pn_actuator *container)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
38 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
39 g_assert (container->desc->flags & ACTUATOR_FLAG_CONTAINER);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
40
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
41 g_slist_free (*(GSList **)container->data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
42 *(GSList **)container->data = NULL;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
43 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
44
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
45 /* this does NOT free data */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
46 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
47 container_cleanup (GSList** data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
48 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
49 GSList *child;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
50
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
51 for (child = *data; child; child = child->next)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
52 destroy_actuator ((struct pn_actuator *) child->data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
53
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
54 g_slist_free (*data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
55 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
56
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
57 /* **************** container_simple **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
58 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
59 container_simple_init (GSList ***data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
60 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
61 *data = g_new0 (GSList *, 1);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
62 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
63
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
64 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
65 container_simple_cleanup (GSList **data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
66 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
67 container_cleanup (data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
68 g_free (data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
69 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
70
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
71 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
72 container_simple_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
73 GSList **data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
74 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
75 GSList *child;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
76
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
77 for (child = *data; child; child = child->next)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
78 exec_actuator ((struct pn_actuator *) child->data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
79 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
80
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
81 struct pn_actuator_desc builtin_container_simple =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
82 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
83 "container_simple",
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
84 "Simple Container",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
85 "A simple (unconditional) container\n\n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
86 "This is usually used as the root actuator of a list",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
87 ACTUATOR_FLAG_CONTAINER, NULL,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
88 PN_ACTUATOR_INIT_FUNC (container_simple_init),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
89 PN_ACTUATOR_CLEANUP_FUNC (container_simple_cleanup),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
90 PN_ACTUATOR_EXEC_FUNC (container_simple_exec)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
91 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
92
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
93 /* **************** container_once **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
94 struct container_once_data
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
95 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
96 GSList *children; /* This MUST be first! */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
97
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
98 gboolean done;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
99 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
100
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
101 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
102 container_once_init (struct container_once_data **data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
103 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
104 *data = g_new0 (struct container_once_data, 1);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
105 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
106
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
107 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
108 container_once_cleanup (GSList **data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
109 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
110 container_cleanup (data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
111 g_free (data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
112 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
113
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
114 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
115 container_once_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
116 struct container_once_data *data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
117 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
118 if (! data->done)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
119 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
120 GSList *child;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
121
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
122 for (child = data->children; child; child = child->next)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
123 exec_actuator ((struct pn_actuator *) child->data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
124
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
125 data->done = TRUE;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
126 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
127 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
128
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
129 struct pn_actuator_desc builtin_container_once =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
130 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
131 "container_once",
172
5ed59f83526f [svn] - fix typoes
nenolod
parents: 171
diff changeset
132 "Initialization Container",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
133 "A container whose contents get executed exactly once.\n\n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
134 "This is often used to set initial graphics states such as the\n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
135 "pixel depth, or to display some text (such as credits)",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
136 ACTUATOR_FLAG_CONTAINER, NULL,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
137 PN_ACTUATOR_INIT_FUNC (container_once_init),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
138 PN_ACTUATOR_CLEANUP_FUNC (container_once_cleanup),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
139 PN_ACTUATOR_EXEC_FUNC (container_once_exec)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
140 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
141
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
142 /* **************** container_cycle ***************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
143 static struct pn_actuator_option_desc container_cycle_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
144 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
145 { "change_interval", "The number of seconds between changing the "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
146 "child to be executed", OPT_TYPE_INT, { ival: 20 } },
164
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
147 { "beat", "Whether or not the change should only occur on a beat",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
148 OPT_TYPE_BOOLEAN, { bval: TRUE } },
188
0d826917c56f [svn] - 64-bit safety (pass 1 of 2)
nenolod
parents: 172
diff changeset
149 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
150 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
151
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
152 struct container_cycle_data
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
153 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
154 GSList *children;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
155 GSList *current;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
156 int last_change;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
157 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
158
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
159 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
160 container_cycle_init (gpointer *data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
161 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
162 *data = g_new0 (struct container_cycle_data, 1);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
163 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
164
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
165 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
166 container_cycle_cleanup (gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
167 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
168 container_cleanup (data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
169 g_free (data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
170 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
171
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
172 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
173 container_cycle_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
174 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
175 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
176 struct container_cycle_data *cdata = (struct container_cycle_data*)data;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
177 int now;
170
13955c70fbec [svn] - split out beat detection code into beatdetect.c
nenolod
parents: 167
diff changeset
178 int new_beat = pn_is_new_beat();
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
179
164
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
180 /*
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
181 * Change branch if all of the requirements are met for the branch to change.
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
182 */
166
a118245b88c7 [svn] - use a quantized variance instead of a fast fft sum for beat detection with thresholding
nenolod
parents: 164
diff changeset
183 if ((opts[1].val.bval == TRUE && new_beat != 0) || opts[1].val.bval == FALSE)
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
184 {
164
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
185 now = SDL_GetTicks();
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
186
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
187 if (now - cdata->last_change
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
188 > opts[0].val.ival * 1000)
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
189 {
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
190 cdata->last_change = now;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
191
164
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
192 /* FIXME: add randomization support */
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
193 if (cdata->current)
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
194 cdata->current = cdata->current->next;
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
195 }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
196 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
197
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
198 if (! cdata->current)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
199 cdata->current = cdata->children;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
200
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
201 if (cdata->current)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
202 exec_actuator ((struct pn_actuator*)cdata->current->data);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
203 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
204
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
205 struct pn_actuator_desc builtin_container_cycle =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
206 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
207 "container_cycle",
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
208 "Branched-execution Container",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
209 "A container that alternates which of its children is executed; it "
164
0393aae79318 [svn] - clean up about box
nenolod
parents: 155
diff changeset
210 "can either change on an interval, or only on a beat.",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
211 ACTUATOR_FLAG_CONTAINER, container_cycle_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
212 container_cycle_init, container_cycle_cleanup, container_cycle_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
213 };
171
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
214
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
215 /* **************** container_onbeat **************** */
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
216 static void
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
217 container_onbeat_init (GSList ***data)
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
218 {
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
219 *data = g_new0 (GSList *, 1);
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
220 }
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
221
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
222 static void
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
223 container_onbeat_cleanup (GSList **data)
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
224 {
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
225 container_cleanup (data);
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
226 g_free (data);
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
227 }
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
228
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
229 static void
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
230 container_onbeat_exec (const struct pn_actuator_option *opts,
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
231 GSList **data)
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
232 {
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
233 GSList *child;
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
234
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
235 if (pn_is_new_beat() == TRUE)
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
236 {
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
237 for (child = *data; child; child = child->next)
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
238 exec_actuator ((struct pn_actuator *) child->data);
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
239 }
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
240 }
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
241
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
242 struct pn_actuator_desc builtin_container_onbeat =
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
243 {
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
244 "container_onbeat",
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
245 "OnBeat Container",
172
5ed59f83526f [svn] - fix typoes
nenolod
parents: 171
diff changeset
246 "A simple container which only triggers on a beat.",
171
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
247 ACTUATOR_FLAG_CONTAINER, NULL,
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
248 PN_ACTUATOR_INIT_FUNC (container_onbeat_init),
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
249 PN_ACTUATOR_CLEANUP_FUNC (container_onbeat_cleanup),
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
250 PN_ACTUATOR_EXEC_FUNC (container_onbeat_exec)
9e51ffaca177 [svn] - add OnBeat container. children are only iterated on a detected beat.
nenolod
parents: 170
diff changeset
251 };