home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
hensa
/
graphics
/
a150_1
/
!Demo4
/
c
/
simu1
< prev
next >
Wrap
Text File
|
1992-02-12
|
5KB
|
198 lines
/******************************************************************************
* *
* 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 3700
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;
int t,cont=1;
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,-2500,300,-3000);
envi = MakeEnvi(1, 1, 0x50);
MkVec4(envi->DirecSrc[0], 128, 128, 128, 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);
/***** main loop of simu *****/
ReadMouse(&msorgx,&msorgy,&msbut);
v=0;
obj=obs;
SetMousePos(640,512);
pra = 0; prs = 0; prt = 0; pv = 0;
t=0;
while (cont) {
dra = drs = drt = dv = 0;
SetTxtCurPos(0,0); printf("%d",GetClock()-time);
SetTxtCurPos(0,0); printf("%d %d %d %d %d",dra,drs,drt,dv,t);
time = GetClock();
dra = drs = drt = dv = 0;
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 'b' : cont=0; break;
case ' ' : return(0);
}
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);
}
traject[t][0] = dra; traject[t][1] = drs; traject[t][2] = drt;
traject[t][3] = dv;
t++;
}
SaveTraject("<Demo4$Dir>.traject",traject,t);
SetTxtCurPos(0,0); printf("%d",t);
}