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);}
	
	
}

/*--------------------------------------------------*/