home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * *
- * grp.c *
- * *
- ******************************************************************************/
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <swis.h>
- #include <os.h>
- #include <bbc.h>
- #include "GrpLib.h"
- #include "extern.h"
-
- #define tmax 950
-
- int xorg = 160,yorg = 128,dist = 640;
-
- int ra,rs,rt,x,y,z,v;
-
- /*****************************************************************************/
-
- void reset(void)
- {
- ra = 0; rs = 0; rt = 0;
- x = 0; y = 0; z = 0; v = 0;
- }
-
- /*****************************************************************************/
-
- int main()
- {
- int time=0;
- int msx,msy,msbut,msorgx,msorgy;
- int kbbut;
- int stp=2;
- int collision;
-
- ObjTab **table;
-
- Object *obs,*hor,*obj,*plane0;
- Envi *envi;
-
- Object *sol1,*sol2,*sol3,*sol4;
- Sol sold1,sold2,sold3,sold4;
- char *spr;
- int *alt;
-
- Object *tower,*ldzn,*hang1,*hang2,*esiee;
-
- int t;
- signed char dra,drs,drt,dv;
- signed char traject[tmax][4];
- int pra,prs,prt,px,py,pz,pv;
-
- /***** init grp tools *****/
-
- InitGrp();
- Change2DParm(0,0,319,255);
- Change3DParm(xorg,yorg,dist);
-
- /***** init object table *****/
-
- table = InitPlot(10);
-
- /***** set observer and envirronement *****/
-
- obs = MakeObj("", NULL,0);
- PlaceObj(obs,0,0,0,-400,500,-3000);
-
- envi = MakeEnvi(1, 1, 0x30);
- MkVec4(envi->DirecSrc[0], 255, 128, 200, 0);
- MkVec4(envi->PonctSrc[0], 0, 2000, 0, 100000);
-
- /***** set horizon *****/
-
- hor = MakeObj("", NULL,0);
- PlaceObj(hor,0,0,0,0,0,0);
-
- /***** load fractal mountains *****/
-
- sol1 = MakeObj("", NULL,0);
- sol2 = MakeObj("", NULL,0);
- sol3 = MakeObj("", NULL,0);
- sol4 = MakeObj("", NULL,0);
- AddObject(table,sol1,PlotSol,CollisionSol,1,&sold1);
- AddObject(table,sol2,PlotSol,CollisionSol,1,&sold2);
- AddObject(table,sol3,PlotSol,CollisionSol,1,&sold3);
- AddObject(table,sol4,PlotSol,CollisionSol,1,&sold4);
- PlaceObj(sol1, 0,0,0, 0, 0, 0);
- PlaceObj(sol2, 0,0,0, 30000, 0, 40000);
- PlaceObj(sol3, 0,0,0,-25000, 0, 10000);
- PlaceObj(sol4, 0,0,0, 5000, 0,-30000);
-
- spr = (char *)load("<GrpObj$Dir>.GrndSpr");
- alt = (int *)load("<GrpObj$Dir>.GrndAlt8");
- InitSol(&sold1,spr,alt,40,40);
- InitSol(&sold2,spr,alt,20,20);
- InitSol(&sold3,spr,alt,30,30);
- InitSol(&sold4,spr,alt,20,20);
-
- /***** load airport object *****/
-
- tower = MakeObj("<GrpObj$Dir>.Tower", SCH,0);
- AddObject(table,tower ,PlotObj, NULL,0,NULL);
- PlaceObj(tower,0,0,0,-1500,0, -2000);
-
- ldzn = MakeObj("<GrpObj$Dir>.Ldzn", CVX,0);
- /* AddObject(table,ldzn ,PlotObj, NULL,0,NULL); */
- PlaceObj(ldzn ,0,0,0,-2500,0,-10000);
-
- hang1 = MakeObj("<GrpObj$Dir>.Hangare",CVX,1);
- AddObject(table,hang1 ,PlotObj, NULL,0,NULL);
- PlaceObj(hang1,0,0,0,-1000,0, 35000);
-
- hang2 = MakeObj("<GrpObj$Dir>.Hangare",CVX,2);
- AddObject(table,hang2 ,PlotObj, NULL,0,NULL);
- PlaceObj(hang2,0,0,0,-1000,0, 38000);
-
-
- /***** load esiee object *****/
-
- esiee = MakeObj("<GrpObj$Dir>.Esiee", SCH,3);
- AddObject(table,esiee ,PlotObj, NULL,0,NULL);
- PlaceObj(esiee,0,0,0,-10500,0, -000);
-
-
- /***** load plane0 and traject *****/
-
- plane0 = MakeObj("<GrpObj$Dir>.plane2", SCH,1);
- AddObject(table,plane0 ,PlotObj, NULL,0,NULL);
- PlaceObj(plane0,0,0,0,-2500,200,-2500);
-
- LoadTraject("<Demo4$Dir>.traject",traject,tmax);
-
- /***** main loop of simu *****/
-
- ReadMouse(&msorgx,&msorgy,&msbut);
- v=0;
- obj=obs;
-
- SetMousePos(640,512);
-
- while (1) {
-
- PlaceObj(plane0,0,0,0,-2500,200,-2500);
- pra = 0; prs = 0; prt = 0; pv = 0;
-
- for (t=0 ; t<tmax ; t++) {
-
- SetTxtCurPos(0,0); printf("%d",GetClock()-time);
- /* SetTxtCurPos(0,0); printf("%d %d %d %d",pra,prs,prt,pv);
- */ time = GetClock();
-
- PlotHorizon(envi,obj,hor);
- PlotObj(envi,obj,ldzn);
- Plot(table,envi,obj);
-
- SwapView(0x00FF);
-
- ReadMouse(&msx,&msy,&msbut);
- msx-=msorgx;
- msy-=msorgy;
-
- kbbut = Inkey();
-
-
- rt = (drt = msx*stp>>6);
- rs = (drs = msy*stp>>7);
- if (msbut==0x01<<2) ra= (dra = stp*3);
- if (msbut==0x01<<0) ra= (dra = -stp*3);
- if (msbut==0x01<<1) {
- reset();
- }
- switch (kbbut) {
- case '+' : v+=5; dv = 5; break;
- case '-' : v-=5; dv = -5; break;
- case '6' : x+=50; break;
- case '4' : x-=50; break;
- case '8' : z+=50; break;
- case '2' : z-=50; break;
- case 'o' : obj = obs; break;
- case 's' : obj = plane0; v=0; break;
- case ' ' : return(0);
- }
-
- pra = traject[t][0];
- prs = traject[t][1];
- prt = traject[t][2];
- pv += traject[t][3];
- MoveObj(plane0, pra, prs, prt, pv);
-
- MoveObj(obs, ra, rs, rt, v);ra=0;
-
- collision = CollisionHorizon(obs,hor);
- if (!collision) collision = Collision(table,obs);
- if ( collision) {
- obs->Org[1] = collision + 200;
- reset();
- SetTxtCurPos(5,0);
- printf("collision%c",0x07);
- }
-
- }
-
- }
-
- }
-