/* scenes.c by Michael Thorpe 2023-03-13 */ #include #include #include #include #include #include "runner.h" #define CUEFILE "cues.tsv" #define CUENUMSIZE 6 #define AUDIOSIZE 3 #define PAGESIZE 4 #define DESCSIZE 150 #define FADEFOLLOWLEN 5 #define DOUBLETAP_LOCKOUT .25 struct scene { char cuenum[CUENUMSIZE]; struct look *look; char audio[AUDIOSIZE]; char page[PAGESIZE]; char desc[DESCSIZE]; double fadetime,followtime; int mhlscene; }; static struct scene *scenes=0; static int numscenes=0,pos=0; void startscene(int scenenum); void gotoscene(int scenenum); static void scenes_redraw(); #include "fade.c" /* Switch to a scene, play SFX, setup fade, start autofollow, etc. */ void startscene(int scenenum) { if(scenes[scenenum].fadetime || scenes[scenenum].followtime) { fade_setup(scenenum); } else { curlook=scenes[scenenum].look; } pos=scenenum; playaudio(scenes[pos].audio); mhl_setscene(scenes[pos].mhlscene); } /* Switch to a scene immediately and quietly */ void gotoscene(int scenenum) { curlook=scenes[scenenum].look; pos=scenenum; mhl_setscene(scenes[pos].mhlscene); scenes_redraw(); } /* Returns 0 if the scene was found or 1 if it wasn't */ int find_scene(const char *cuename,int dofades) { int i,cuesize; char searchfor[CUENUMSIZE]; i=strlen(cuename); if(CUENUMSIZE<=i) return(1); cuesize=strlen(scenes[0].cuenum); memcpy(searchfor+cuesize-i,cuename,i+1); for(i=cuesize-i;0'==tmp[0]) { scenes[numscenes-1].followtime=strtod(tmp+1,&tmp); if(0==scenes[numscenes-1].followtime) scenes[numscenes-1].followtime=.0000001; } else { scenes[numscenes-1].followtime=0; } if(tmp[0]) { fprintf(stderr,CUEFILE":%d: bad fade/follow time\n",line); return(1); } /* Handle page number */ i=strlen(t[4]); j=PAGESIZE-1-i; if(jname[k];k++) { addch(scenes[first+i].look->name[k]); j++; } while(k