back to the text
/*----------------------------------------------------
*
* APPSWITCH.c - switch between apps
*
*--------------------------------------------------*/
#include "INCLUDES.h"
struct APPSWITCH
{
void (*draw)(void);
void (*updt)(void);
};
APPSWITCH application[7];
float POS[3], VEC_point[3], VEC_pos[3], VEC_vec[3];
static int looping = 0;
int VEC_line = 0;
/*----------------------------------------------------
*
* function to setup draw & calculation functions
*
*--------------------------------------------------*/
void APP_COUNTER()
{
printf("setupstuff \n");
application[0].draw = draw_G400 ;
application[0].updt = calc_G400 ;
application[1].draw = draw_SOUP ;
application[1].updt = calc_SOUP ;
application[2].draw = draw_JAWS ;
application[2].updt = calc_JAWS ;
application[3].draw = draw_FIRE ;
application[3].updt = calc_FIRE ;
application[4].draw = draw_SPIN ;
application[4].updt = calc_SPIN ;
application[5].draw = draw_GROW ;
application[5].updt = calc_GROW ;
application[6].draw = draw_GALLERY ;
application[6].updt = calc_GALLERY ;
}
/*----------------------------------------------------
*
* function to determine which draw function
*
*--------------------------------------------------*/
void APP_draw()
{
application[*App_in_use].draw();
}
/*----------------------------------------------------
*
* function to determine which calculation function
*
*--------------------------------------------------*/
void APP_updt()
{
if (CAVEMasterDisplay())
application[*App_in_use].updt();
CAVEDisplayBarrier();
}
/*----------------------------------------------------
*
* calculation functions
*
*--------------------------------------------------*/
void calc_G400() /* app 0 */
{
CAVEGetPosition(CAVE_HEAD_NAV,POS);
CAVEGetPosition(CAVE_WAND_NAV,VEC_pos);
CAVEGetVector(CAVE_WAND_FRONT_NAV,VEC_vec);
VEC_point[0] = VEC_pos[0] + 5*VEC_vec[0];
VEC_point[1] = VEC_pos[1] + 5*VEC_vec[1];
VEC_point[2] = VEC_pos[2] + 5*VEC_vec[2];
/*sound*/
if (!looping){
smp9.loop(1.0, 0.25, SET_LOOP_ON);
looping = 1;
}
if ((POS[0] < -10 && POS[0] >-10.1)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <50 && POS[2] >-50))
{smp10.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < -5 && POS[0] >-5.1)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <50 && POS[2] >-50))
{smp11.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < 0.1 && POS[0] >0)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <50 && POS[2] >-50))
{smp12.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < 5.1 && POS[0] >5)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <35 && POS[2] >-50))
{smp11.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < 10.1 && POS[0] >10)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <35 && POS[2] >-50))
{smp10.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < 15 && POS[0] >8)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <42.3 && POS[2] >42))
{smp14.play( 1.0, 0.5, SET_PLAY_CUT);}
if (*CAVETime < 30){ return;}
/*appswitch*/
/*soup*/
if ((POS[0] < 2.0 && POS[0] > -2.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] < 5.0 && POS[2] > 1.0))
{*App_in_use = 1;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*jaws*/
if ((POS[0] < 2.0 && POS[0] > -2.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] < 25.0 && POS[2] > 20.0))
{*App_in_use = 2;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*fire*/
if ((POS[0] < 2.0 && POS[0] > -2.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] <-15.0 && POS[2] >-20.0))
{*App_in_use = 3;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*spin*/
if ((POS[0] < 2.0 && POS[0] > -2.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] < 45.0 && POS[2] > 40.0))
{*App_in_use = 4;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*grow*/
if ((POS[0] < 2.0 && POS[0] > -2.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] <-35.0 && POS[2] >-40.0))
{*App_in_use = 5;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*gallery*/
if ((POS[0] < -9.0 && POS[0] > -11.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] <-26.5 && POS[2] >-28.5))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, 90);}
/*gallery*/
if ((POS[0] < 11.0 && POS[0] > 9.0)
&& (POS[1] < 10.0 && POS[1] > 0.0)
&& (POS[2] <-26.5 && POS[2] >-28.5))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 0, -90);}
/*gallery - photos*/
if(CAVEBUTTON1)
{
VEC_line = 1;
/*photo 1*/
if ((VEC_point[0] < 28.0 && VEC_point[0] > 15.0)
&& (VEC_point[1] < 10.0 && VEC_point[1] > 0.0)
&& (VEC_point[2] <-20.0 && VEC_point[2] >-35.0))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(-55, 0, 5, 135);}
/*photo 2*/
if ((VEC_point[0] < 28.0 && VEC_point[0] > 15.0)
&& (VEC_point[1] < 10.0 && VEC_point[1] > 0.0)
&& (VEC_point[2] < 0.0 && VEC_point[2] >-15.0))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(-55, 0, -5, 45);}
/*photo 3*/
if ((VEC_point[0] < -15.0 && VEC_point[0] > -28.0)
&& (VEC_point[1] < 10.0 && VEC_point[1] > 0.0)
&& (VEC_point[2] <-20.0 && VEC_point[2] >-35.0))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, -30, 0);}
/*photo 4*/
if ((VEC_point[0] < -15.0 && VEC_point[0] > -28.0)
&& (VEC_point[1] < 10.0 && VEC_point[1] > 0.0)
&& (VEC_point[2] < 0.0 && VEC_point[2] >-15.0))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(55, 0, -5, -45);}
/*photo 5*/
if ((VEC_point[0] < -15.0 && VEC_point[0] > -28.0)
&& (VEC_point[1] < 10.0 && VEC_point[1] > 0.0)
&& (VEC_point[2] < 20.0 && VEC_point[2] > 5.0))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(55, 0, 5, -135);}
/*photo 6*/
if ((VEC_point[0] < -15.0 && VEC_point[0] > -28.0)
&& (VEC_point[1] < 10.0 && VEC_point[1] > 0.0)
&& (VEC_point[2] < 40.0 && VEC_point[2] >25.0))
{*App_in_use = 6;
smp9.loop(0.0, 0.0, SET_LOOP_OFF);
smp10.destroy();smp11.destroy();smp12.destroy();smp13.destroy();smp14.destroy();
looping = 0;
reset_navigation_to(0, 0, 30, 180);}
}
else VEC_line = 0;
}
/*--------------------------------------------------*/
void calc_SOUP() /* app 1 */
{
if (!looping){
smp4.loop(1.0, 0.50, SET_LOOP_ON);
looping = 1;
}
if (CAVEButtonChange(1) == 1)
{ *App_in_use = 3;
smp4.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
else if (CAVEButtonChange(2) == 1)
{ *App_in_use = 0;
smp4.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(-10, 0, 6, -135);}
else if (CAVEButtonChange(3) == 1)
{ *App_in_use = 2;
smp4.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
}
/*--------------------------------------------------*/
void calc_JAWS() /* app 2 */
{
if (!looping){
smp5.loop(1.0, 0.25, SET_LOOP_ON);
looping = 1;
}
if (CAVEButtonChange(1) == 1)
{ *App_in_use = 1;
smp5.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
else if (CAVEButtonChange(2) == 1)
{ *App_in_use = 0;
smp5.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(10, 0, 25, 135);}
else if (CAVEButtonChange(3) == 1)
{ *App_in_use = 4;
smp5.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
}
/*--------------------------------------------------*/
void calc_FIRE() /* app 3 */
{
if (!looping){
smp8.loop(1.0, 0.50, SET_LOOP_ON);
looping = 1;
}
if (CAVEButtonChange(1) == 1)
{ *App_in_use = 5;
smp8.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
else if (CAVEButtonChange(2) == 1)
{ *App_in_use = 0;
smp8.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(10, 0, -11, 135);}
else if (CAVEButtonChange(3) == 1)
{ *App_in_use = 1;
smp8.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
}
/*--------------------------------------------------*/
void calc_SPIN() /* app 4 */
{
if (!looping){
smp6.loop(1.0, 1.75, SET_LOOP_ON);
looping = 1;
}
if (CAVEButtonChange(1) == 1)
{ *App_in_use = 2;
smp6.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
else if (CAVEButtonChange(2) == 1)
{ *App_in_use = 0;
smp6.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(-10, 0, 50, -10);}
else if (CAVEButtonChange(3) == 1)
{ *App_in_use = 5;
smp6.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
}
/*--------------------------------------------------*/
void calc_GROW() /* app 5 */
{
if (!looping){
smp7.loop(1.0, 0.50, SET_LOOP_ON);
looping = 1;
}
if (CAVEButtonChange(1) == 1)
{ *App_in_use = 4;
smp7.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
else if (CAVEButtonChange(2) == 1)
{ *App_in_use = 0;
smp7.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(-10, 0, -33, -135);}
else if (CAVEButtonChange(3) == 1)
{ *App_in_use = 3;
smp7.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
}
/*--------------------------------------------------*/
void calc_GALLERY() /* app 6 */
{
CAVEGetPosition(CAVE_HEAD_NAV,POS);
/*sound*/
if (!looping){
smp1.loop(1.0, 0.50, SET_LOOP_ON);
looping = 1;
}
/*soup*/
if ((POS[0] < 10 && POS[0] >-10)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-38 && POS[2] >-38.5))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
/*jaws*/
if ((POS[0] < 77 && POS[0] > 63)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-13 && POS[2] >-13.5))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < 77.5 && POS[0] > 77)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-13 && POS[2] >-27))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
/*fire*/
if ((POS[0] < -63 && POS[0] >-77)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-13 && POS[2] >-13.5))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < -77 && POS[0] >-77.5)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-13 && POS[2] >-27))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
/*spin*/
if ((POS[0] < 77 && POS[0] > 63)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 13.5 && POS[2] > 13))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < 77.5 && POS[0] > 77)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 27 && POS[2] > 13))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
/*grow*/
if ((POS[0] < -63 && POS[0] >-77)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 13.5 && POS[2] > 13))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
if ((POS[0] < -77 && POS[0] >-77.5)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 27 && POS[2] > 13))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
/*road*/
if ((POS[0] < 10 && POS[0] >-10)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 38.5 && POS[2] > 38))
{smp2.play( 1.0, 0.5, SET_PLAY_CUT);}
/*appswitch*/
/*soup*/
if ((POS[0] < 10 && POS[0] >-10)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-40 && POS[2] >-50))
{*App_in_use = 1;
smp1.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*jaws*/
if ((POS[0] < 75 && POS[0] > 65)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-15 && POS[2] >-25))
{*App_in_use = 2;
smp1.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*fire*/
if ((POS[0] < -65 && POS[0] >-75)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] <-15 && POS[2] >-25))
{*App_in_use = 3;
smp1.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*spin*/
if ((POS[0] < 75 && POS[0] > 65)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 25 && POS[2] > 15))
{*App_in_use = 4;
smp1.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*grow*/
if ((POS[0] < -65 && POS[0] >-75)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 25 && POS[2] > 15))
{*App_in_use = 5;
smp1.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(0, 0, 0, 0);}
/*road*/
if ((POS[0] < 10 && POS[0] >-10)
&& (POS[1] < 10 && POS[1] > 0)
&& (POS[2] < 50 && POS[2] > 40))
{*App_in_use = 0;
smp1.loop(0.0, 0.0, SET_LOOP_OFF);
looping = 0;
reset_navigation_to(10, 0, 52, 45);}
}
/*--------------------------------------------------*/