home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / graphics / a150_1 / !Demo4 / c / simu1 < prev    next >
Text File  |  1992-02-12  |  5KB  |  198 lines

  1. /******************************************************************************
  2. *                                                                             *
  3. *    grp.c                                                                    *
  4. *                                                                             *
  5. ******************************************************************************/
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <math.h>
  10. #include <swis.h>
  11. #include <os.h>
  12. #include <bbc.h>
  13. #include "GrpLib.h"
  14. #include "extern.h"
  15.  
  16. #define  tmax 3700
  17.  
  18. int xorg = 160,yorg = 128,dist = 640;
  19.  
  20. int ra,rs,rt,x,y,z,v;
  21.  
  22. /*****************************************************************************/
  23.  
  24. void reset(void)
  25. {
  26.   ra = 0; rs = 0; rt = 0;
  27.   x = 0; y = 0; z = 0; v = 0;
  28. }
  29.  
  30. /*****************************************************************************/
  31.  
  32. int main()
  33. {
  34.   int  time=0;
  35.   int  msx,msy,msbut,msorgx,msorgy;
  36.   int  kbbut;
  37.   int  stp=2;
  38.   int  collision;
  39.  
  40.   ObjTab  **table;
  41.  
  42.   Object  *obs,*hor,*obj,*plane0;
  43.   Envi    *envi;
  44.  
  45.   Object  *sol1,*sol2,*sol3,*sol4;
  46.   Sol     sold1,sold2,sold3,sold4;
  47.   char    *spr;
  48.   int     *alt;
  49.  
  50.   Object  *tower,*ldzn,*hang1,*hang2;
  51.  
  52.   int     t,cont=1;
  53.   signed char dra,drs,drt,dv;
  54.   signed char traject[tmax][4];
  55.   int     pra,prs,prt,px,py,pz,pv;
  56.  
  57. /***** init grp tools *****/
  58.  
  59.   InitGrp();
  60.   Change2DParm(0,0,319,255);
  61.   Change3DParm(xorg,yorg,dist); 
  62.  
  63. /***** init object table *****/
  64.  
  65.   table = InitPlot(10);
  66.  
  67. /***** set observer and envirronement *****/
  68.  
  69.   obs  = MakeObj("",                    NULL,0);
  70.   PlaceObj(obs,0,0,0,-2500,300,-3000);
  71.  
  72.   envi = MakeEnvi(1, 1, 0x50);
  73.   MkVec4(envi->DirecSrc[0],   128,   128,   128,      0);
  74.   MkVec4(envi->PonctSrc[0],     0,  2000,     0, 100000);
  75.  
  76. /***** set horizon *****/
  77.  
  78.   hor  = MakeObj("",                    NULL,0);
  79.   PlaceObj(hor,0,0,0,0,0,0);
  80.  
  81. /***** load fractal mountains *****/
  82.  
  83.   sol1 = MakeObj("",                    NULL,0);
  84.   sol2 = MakeObj("",                    NULL,0);
  85.   sol3 = MakeObj("",                    NULL,0);
  86.   sol4 = MakeObj("",                    NULL,0);
  87.   AddObject(table,sol1,PlotSol,CollisionSol,1,&sold1);  
  88.   AddObject(table,sol2,PlotSol,CollisionSol,1,&sold2);  
  89.   AddObject(table,sol3,PlotSol,CollisionSol,1,&sold3);  
  90.   AddObject(table,sol4,PlotSol,CollisionSol,1,&sold4);  
  91.   PlaceObj(sol1,   0,0,0,     0,   0,     0);
  92.   PlaceObj(sol2,   0,0,0, 30000,   0, 40000);
  93.   PlaceObj(sol3,   0,0,0,-25000,   0, 10000);
  94.   PlaceObj(sol4,   0,0,0,  5000,   0,-30000);
  95.  
  96.   spr = (char *)load("<GrpObj$Dir>.GrndSpr");
  97.   alt = (int  *)load("<GrpObj$Dir>.GrndAlt8");
  98.   InitSol(&sold1,spr,alt,40,40);
  99.   InitSol(&sold2,spr,alt,20,20);
  100.   InitSol(&sold3,spr,alt,30,30);
  101.   InitSol(&sold4,spr,alt,20,20);
  102.  
  103. /***** load airport object *****/
  104.  
  105.   tower  = MakeObj("<GrpObj$Dir>.Tower",  SCH,0);
  106.   AddObject(table,tower ,PlotObj,        NULL,0,NULL);  
  107.   PlaceObj(tower,0,0,0,-1500,0, -2000);
  108.  
  109.   ldzn   = MakeObj("<GrpObj$Dir>.Ldzn",   CVX,0);
  110. /*  AddObject(table,ldzn  ,PlotObj,        NULL,0,NULL); */ 
  111.   PlaceObj(ldzn ,0,0,0,-2500,0,-10000);
  112.  
  113.   hang1  = MakeObj("<GrpObj$Dir>.Hangare",CVX,1);
  114.   AddObject(table,hang1 ,PlotObj,        NULL,0,NULL);  
  115.   PlaceObj(hang1,0,0,0,-1000,0, 35000);
  116.  
  117.   hang2  = MakeObj("<GrpObj$Dir>.Hangare",CVX,2);
  118.   AddObject(table,hang2 ,PlotObj,        NULL,0,NULL);  
  119.   PlaceObj(hang2,0,0,0,-1000,0, 38000);
  120.  
  121.  
  122. /***** main loop  of simu *****/
  123.  
  124.   ReadMouse(&msorgx,&msorgy,&msbut);
  125.   v=0;
  126.   obj=obs;
  127.  
  128.   SetMousePos(640,512);
  129.  
  130.   
  131.   pra = 0; prs = 0; prt = 0; pv = 0;
  132.  
  133.   t=0;
  134.   while (cont) {
  135.     dra = drs = drt = dv = 0;
  136.  
  137.     SetTxtCurPos(0,0); printf("%d",GetClock()-time);
  138.     SetTxtCurPos(0,0); printf("%d %d %d %d   %d",dra,drs,drt,dv,t);
  139.     time = GetClock();
  140.     dra = drs = drt = dv = 0;
  141.   
  142.     PlotHorizon(envi,obj,hor);
  143.     PlotObj(envi,obj,ldzn);
  144.     Plot(table,envi,obj);
  145.  
  146.     SwapView(0x00FF);
  147.  
  148.     ReadMouse(&msx,&msy,&msbut);
  149.     msx-=msorgx;
  150.     msy-=msorgy;
  151.  
  152.     kbbut = Inkey();
  153.  
  154.  
  155.     rt = (drt = msx*stp>>6);
  156.     rs = (drs = msy*stp>>7); 
  157.     if (msbut==0x01<<2) ra= (dra =  stp*3);
  158.     if (msbut==0x01<<0) ra= (dra = -stp*3);
  159.     if (msbut==0x01<<1) {
  160.       reset();
  161.     }
  162.     switch (kbbut) {
  163.      case '+' : v+=5; dv =  5; break;
  164.      case '-' : v-=5; dv = -5; break;
  165.      case '6' : x+=50; break;
  166.      case '4' : x-=50; break;
  167.      case '8' : z+=50; break;
  168.      case '2' : z-=50; break;
  169.      case 'o' : obj = obs; break;
  170.      case 's' : obj = plane0; v=0; break;
  171.      case 'b' : cont=0; break;
  172.      case ' ' : return(0);
  173.     }
  174.  
  175.  
  176.     MoveObj(obs, ra, rs, rt, v);ra=0;
  177.  
  178.     collision = CollisionHorizon(obs,hor);
  179.     if (!collision) collision = Collision(table,obs);
  180.     if ( collision) {
  181.       obs->Org[1] = collision + 200;
  182.       reset();
  183.       SetTxtCurPos(5,0);
  184.       printf("collision%c",0x07);
  185.     }
  186.  
  187.     traject[t][0] = dra; traject[t][1] = drs; traject[t][2] = drt;
  188.     traject[t][3] =  dv;
  189.     t++;
  190.  
  191.   }
  192.  
  193.   SaveTraject("<Demo4$Dir>.traject",traject,t);
  194.   SetTxtCurPos(0,0); printf("%d",t);
  195.  
  196.  
  197. }
  198.