35#include <libFreeWRL.h>
37#include "../vrml_parser/Structs.h"
38#include "../vrml_parser/CRoutes.h"
39#include "../main/headers.h"
48void do_BooleanFilter (
void *node){
54 if (px->set_boolean == TRUE) {
55 px->inputNegate = FALSE;
59 px->inputNegate = TRUE;
70int iwrap(
int i,
int istart,
int iend);
71void do_BooleanSequencer (
void *node){
81 kvin = px->keyValue.n;
84 oldValue = px->value_changed;
88 if ((kvin == 0) || (kin == 0)) {
89 px->value_changed = 0;
92 if (kin>kvin) kin=kvin;
95 printf (
"BooleanSequencer, kin %d kvin %d, vc %f\n",kin,kvin,px->value_changed);
96 printf (
" and set_fraction is %f\n",px->set_fraction);
98 if(px->next || px->previous){
100 if(px->next) counter += 1;
101 if(px->previous) counter -= 1;
102 counter = iwrap(counter,0,kin);
103 px->value_changed = px->keyValue.p[counter];
104 px->set_fraction = px->key.p[counter];
105 px->_index = counter;
107 px->previous = FALSE;
110 if (px->set_fraction <= px->key.p[0]) {
111 px->value_changed = kVs[0];
113 }
else if (px->set_fraction >= px->key.p[kin-1]) {
114 px->value_changed = kVs[kvin-1];
118 counter=find_key(kin,(
float)(px->set_fraction),px->key.p);
123 if (counter >= px->keyValue.n) counter = px->keyValue.n-1;
124 px->value_changed = px->keyValue.p[counter];
125 px->_index = counter;
138void do_BooleanToggle (
void *node){
145 oldBoolean = px->toggle;
147 if (px->set_boolean == TRUE) px->toggle = FALSE;
148 else px->toggle = TRUE;
149 if (oldBoolean != px->toggle) MARK_EVENT (node, offsetof (
struct X3D_BooleanToggle, toggle));
158void do_BooleanTrigger (
void *node){
164 px->triggerTrue = TRUE;
197void do_IntegerSequencer (
void *node){
207 kvin = px->keyValue.n;
208 kVs = px->keyValue.p;
211 oldValue = px->value_changed;
214 printf (
"IntegerSequencer, kin %d kvin %d, sf %f vc %d\n",kin,kvin,px->set_fraction, px->value_changed);
218 if ((kvin == 0) || (kin == 0)) {
219 px->value_changed = 0;
222 if (kin>kvin) kin=kvin;
223 if(px->next || px->previous){
224 counter = px->_index;
225 if(px->next) counter += 1;
226 if(px->previous) counter -= 1;
227 counter = iwrap(counter,0,kin);
228 px->value_changed = px->keyValue.p[counter];
229 px->set_fraction = px->key.p[counter];
230 px->_index = counter;
232 px->previous = FALSE;
235 if (px->set_fraction <= px->key.p[0]) {
236 px->value_changed = kVs[0];
238 }
else if (px->set_fraction >= px->key.p[kin-1]) {
239 px->value_changed = kVs[kvin-1];
244 counter=find_key(kin+1,(
float)(px->set_fraction),px->key.p)-1;
247 if (counter >= px->keyValue.n) counter = px->keyValue.n-1;
249 px->value_changed = px->keyValue.p[counter];
250 px->_index = counter;
261void do_IntegerTrigger (
void *node){
270 px->triggerValue = px->integerKey;
282void do_TimeTrigger (
void *node){
288 px->triggerTime = TickTime();