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) {
148 px->toggle = !px->toggle;
151 if (oldBoolean != px->toggle) MARK_EVENT (node, offsetof (
struct X3D_BooleanToggle, toggle));
160void do_BooleanTrigger (
void *node){
166 px->triggerTrue = TRUE;
199void do_IntegerSequencer (
void *node){
209 kvin = px->keyValue.n;
210 kVs = px->keyValue.p;
213 oldValue = px->value_changed;
216 printf (
"IntegerSequencer, kin %d kvin %d, sf %f vc %d\n",kin,kvin,px->set_fraction, px->value_changed);
220 if ((kvin == 0) || (kin == 0)) {
221 px->value_changed = 0;
224 if (kin>kvin) kin=kvin;
225 if(px->next || px->previous){
226 counter = px->_index;
227 if(px->next) counter += 1;
228 if(px->previous) counter -= 1;
229 counter = iwrap(counter,0,kin);
230 px->value_changed = px->keyValue.p[counter];
231 px->set_fraction = px->key.p[counter];
232 px->_index = counter;
234 px->previous = FALSE;
237 if (px->set_fraction <= px->key.p[0]) {
238 px->value_changed = kVs[0];
240 }
else if (px->set_fraction >= px->key.p[kin-1]) {
241 px->value_changed = kVs[kvin-1];
246 counter=find_key(kin+1,(
float)(px->set_fraction),px->key.p)-1;
249 if (counter >= px->keyValue.n) counter = px->keyValue.n-1;
251 px->value_changed = px->keyValue.p[counter];
252 px->_index = counter;
263void do_IntegerTrigger (
void *node){
272 px->triggerValue = px->integerKey;
284void do_TimeTrigger (
void *node){
290 px->triggerTime = TickTime();