Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
255
VISU/C/READVUE.C
Normal file
255
VISU/C/READVUE.C
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
|
||||
int findobject_co;
|
||||
object *findobject(char *t,int frame)
|
||||
{
|
||||
int i,l=strlen(t);
|
||||
int found1=-1;
|
||||
for(i=1;i<conum;i++)
|
||||
{
|
||||
if(!memcmp(co[i].name,t,l))
|
||||
{
|
||||
if(found1==-1) found1=i;
|
||||
if(co[i].lastused!=frame)
|
||||
{
|
||||
findobject_co=i;
|
||||
co[i].lastused=frame;
|
||||
return(co[i].o);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(found1!=-1)
|
||||
{
|
||||
print("^ Object %s duplicated.\n",t);
|
||||
i=duplicate(co+found1);
|
||||
co[i].lastused=frame;
|
||||
findobject_co=i;
|
||||
return(co[i].o);
|
||||
}
|
||||
print("ERROR: object %s not found!\n",t);
|
||||
return(co[0].o);
|
||||
}
|
||||
|
||||
int lsize(long l)
|
||||
{
|
||||
if(!l) return(0);
|
||||
if(l>=-127 && l<=127) return(1);
|
||||
if(l>=-32767 && l<=32767) return(2);
|
||||
return(3);
|
||||
}
|
||||
|
||||
void putl(long l,FILE *f)
|
||||
{
|
||||
putw(l&0xffff,f);
|
||||
putw(l>>16,f);
|
||||
}
|
||||
|
||||
void lwrite(int f,long l)
|
||||
{
|
||||
switch(f&3)
|
||||
{
|
||||
case 0 : break;
|
||||
case 1 : putc(l,outb); break;
|
||||
case 2 : putw(l,outb); break;
|
||||
case 3 : putl(l,outb); break;
|
||||
}
|
||||
}
|
||||
|
||||
void readvue(void)
|
||||
{
|
||||
static int lastobject_co=0;
|
||||
int a,ix,iy,visfield;
|
||||
int frame;
|
||||
long x,y,z,x2,y2,z2,ll;
|
||||
float f,fx,fy,fz;
|
||||
rmatrix tmpm;
|
||||
rmatrix tmpm2;
|
||||
char *p,*p0,*t;
|
||||
object *o;
|
||||
print("\n");
|
||||
print(">>>>>>>>>>>>>>>> VUE file <<<<<<<<<<<<<<<<\n");
|
||||
print("\n");
|
||||
while(!feof(in))
|
||||
{
|
||||
p0=p=getline();
|
||||
if(emptyline(p)) continue;
|
||||
// process line
|
||||
t=gettoken(&p);
|
||||
IFT("frame")
|
||||
{
|
||||
t=gettoken(&p);
|
||||
frame=a=atoi(t);
|
||||
if(!drawpass)
|
||||
{ // init stuff for script
|
||||
lastobject_co=0;
|
||||
}
|
||||
print("FRAME %i\n",a);
|
||||
if(kbhit()) break;
|
||||
}
|
||||
else IFT("transform")
|
||||
{
|
||||
t=gettoken(&p);
|
||||
print("TRANSFORM %s",t);
|
||||
o=findobject(t,frame);
|
||||
o->r0->m[0]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[3]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[6]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[1]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[4]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[7]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[2]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[5]=(long)(UNIT*getfloat(&p));
|
||||
o->r0->m[8]=(long)(UNIT*getfloat(&p));
|
||||
getxyz(&p,&x,&y,&z);
|
||||
o->r0->x=x;
|
||||
o->r0->y=y;
|
||||
o->r0->z=z;
|
||||
print(" (xyz: %li %li %li)\n",x,y,z);
|
||||
o->flags&=~(F_GOURAUD);
|
||||
}
|
||||
else IFT("camera")
|
||||
{
|
||||
getxyz(&p,&x2,&y2,&z2);
|
||||
print("CAMERA (%li,%li,%li)->",x2,y2,z2);
|
||||
getxyz(&p,&x,&y,&z);
|
||||
print("(%li,%li,%li) ",x,y,z);
|
||||
f=getfloat(&p); // roll
|
||||
print("Roll:%f ",f);
|
||||
a=(angle)f*65536L/360L;
|
||||
calc_setrmatrix_camera(&camera,x2,y2,z2,x,y,z,a);
|
||||
f=getfloat(&p); // field of vision
|
||||
f=(float)usefov;
|
||||
print("FOV:%f \n",f);
|
||||
f=f*65536.0/360.0;
|
||||
visfield=(angle)f;
|
||||
visfield&=0xff00;
|
||||
vid_cameraangle(visfield);
|
||||
|
||||
vDraw();
|
||||
|
||||
if(!drawpass)
|
||||
{
|
||||
int coi,coilast=0;
|
||||
unsigned int u;
|
||||
struct s_cobject *cop;
|
||||
object *o;
|
||||
for(coi=1;coi<conum;coi++)
|
||||
{
|
||||
co[coi].on=0;
|
||||
}
|
||||
// scan fill_object for truely visible objects
|
||||
for(u=0;u<64000;u++)
|
||||
{
|
||||
a=fill_object[u];
|
||||
if(a) co[a].on=1;
|
||||
}
|
||||
// camera always on!
|
||||
co[0].on=1;
|
||||
co[0].last_on=1;
|
||||
fprintf(fdeb,"%i\n",conum);
|
||||
for(coi=0;coi<conum;coi++)
|
||||
{
|
||||
int flag,a,b,pflaglen;
|
||||
long pflag,mbytes;
|
||||
long wx,wy,wz;
|
||||
long l;
|
||||
|
||||
flag=pflag=pflaglen=0;
|
||||
cop=co+coi;
|
||||
o=cop->o;
|
||||
|
||||
fprintf(fdeb,"%s:%i\n",cop->name,cop->on);
|
||||
|
||||
if(!cop->on)
|
||||
{ // object hidden
|
||||
if(cop->last_on)
|
||||
{
|
||||
flag=0x40;
|
||||
cop->last_on=0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // visible
|
||||
|
||||
if(!cop->last_on)
|
||||
{
|
||||
flag=0x80;
|
||||
cop->last_on=1;
|
||||
}
|
||||
|
||||
l=o->r0->z - cop->last_z;
|
||||
a=lsize(l); wz=l;
|
||||
pflag<<=2; pflag|=a;
|
||||
|
||||
l=o->r0->y - cop->last_y;
|
||||
a=lsize(l); wy=l;
|
||||
pflag<<=2; pflag|=a;
|
||||
|
||||
l=o->r0->x - cop->last_x;
|
||||
a=lsize(l); wx=l;
|
||||
pflag<<=2; pflag|=a;
|
||||
|
||||
mbytes=1;
|
||||
print("[pfl:%06lX]",pflag);
|
||||
for(a=0;a<9;a++)
|
||||
{
|
||||
b=o->r0->m[a] - cop->last_m[a];
|
||||
if(b<-127 || b>127) mbytes=0;
|
||||
if(b) pflag|=0x80L<<a;
|
||||
}
|
||||
print("[pfl:%06lX]",pflag);
|
||||
if(!mbytes) pflag|=0x40;
|
||||
|
||||
if(!pflag) pflaglen=0;
|
||||
else if(!(pflag&0xffffff00L)) pflaglen=1;
|
||||
else if(!(pflag&0xffff0000L)) pflaglen=2;
|
||||
else pflaglen=3;
|
||||
flag|=0x10*pflaglen;
|
||||
}
|
||||
|
||||
if(flag)
|
||||
{
|
||||
if( (coi&0xff0)!=(coilast&0xff0) )
|
||||
{
|
||||
putc(0xC0|(coi>>4),outb);
|
||||
putc((coi&0x0f)|flag,outb);
|
||||
}
|
||||
else
|
||||
{
|
||||
putc((coi&0x0f)|flag,outb);
|
||||
}
|
||||
coilast=coi;
|
||||
if(pflaglen)
|
||||
{
|
||||
l=pflag;
|
||||
while(pflaglen--)
|
||||
{
|
||||
putc(l,outb);
|
||||
l>>=8;
|
||||
}
|
||||
print("[pfl:%06lX wxyz:%li,%li,%li]\n",pflag,wx,wy,wz);
|
||||
lwrite(pflag,wx);
|
||||
lwrite(pflag>>2,wy);
|
||||
lwrite(pflag>>4,wz);
|
||||
for(a=0;a<9;a++) if(pflag&(0x80<<a))
|
||||
{
|
||||
b=o->r0->m[a] - cop->last_m[a];
|
||||
if(mbytes) putc(b,outb);
|
||||
else putw(b,outb);
|
||||
}
|
||||
}
|
||||
for(a=0;a<9;a++) cop->last_m[a]=o->r0->m[a];
|
||||
cop->last_x=o->r0->x;
|
||||
cop->last_y=o->r0->y;
|
||||
cop->last_z=o->r0->z;
|
||||
}
|
||||
}
|
||||
putc(0xff,outb);
|
||||
putc(visfield>>8,outb);
|
||||
}
|
||||
}
|
||||
else print("Unknown: %s\n",t);
|
||||
if(debug) print(" (%s)\n",p0);
|
||||
}
|
||||
putc(0xff,outb);
|
||||
putc(0xff,outb);
|
||||
}
|
||||
Loading…
Reference in a new issue