#ifndef _TM_STRUCTURES
#define _TM_STRUCTURES

typedef
     struct Point3D
     {
     WORD x, y, z;
     }POINT3D;

typedef
     struct SFace
     {
     WORD v1, v2, v3;
     }SFACE;

typedef
     struct UVCoords
     {
     UBYTE u,v;
     }UVCOORDS;

typedef
	struct Vertex
	{
		LONG x, y, z;
		LONG xn, yn, zn;
		LONG u, v;
		LONG ut, vt;
		LONG xp, yp, zt;
		ULONG	ClipBits;
	} VERTEX;

#define LEFT_VCLIP_BIT		0
#define RIGHT_VCLIP_BIT		1
#define TOP_VCLIP_BIT			2
#define BOTTOM_VCLIP_BIT	3

typedef
	struct Face
	{
		VERTEX *V1, *V2, *V3;
		LONG u1,u2,u3,v1,v2,v3;
		LONG AvgZ;
		ULONG Flags;
          LONG DPosX,DPosY,DPosZ;
	} FACE;

#define FB_TRANSPARENT	8
#define FB_TEXTURE			9
#define FB_ENVIRONMENT	10
#define FB_BUMP					11
#define FB_ZCLIP				14
#define FB_VCLIP				15

#define FF_TRANSPARENT	0x00000100
#define FF_TEXTURE			0x00000200
#define FF_ENVIRONMENT	0x00000400
#define FF_BUMP					0x00000800
#define FF_ZCLIP				0x00004000
#define FF_VCLIP				0x00008000


typedef
	struct Camera
	{
		LONG PosX, PosY, PosZ;
		LONG RotX, RotY, RotZ;
	} CAMERA;

typedef
	struct Object
	{
		LONG PosX, PosY, PosZ;
		LONG RotX, RotY, RotZ;
		LONG VNumber;
		LONG FNumber;
		VERTEX *Vertices;
		FACE *Faces;
		ULONG	Flags;
	} OBJECT;

#define OB_NEWPOS				0
#define OB_DISPLAY			1
#define OB_NOBACKFACE		2
#define OB_TRANSPARENT	8
#define OB_TEXTURE			9
#define OB_ENVIRONMENT	10
#define OB_BUMP					11

#define OF_NEWPOS				0x00000001
#define OF_DISPLAY 			0x00000002
#define OF_NOBACKFACE 	0x00000004
#define OF_TRANSPARENT	0x00000100
#define OF_TEXTURE			0x00000200
#define OF_ENVIRONMENT	0x00000400
#define OF_BUMP					0x00000800


typedef
	struct Scene
	{
		LONG ONumber;
		LONG FNumber;
		OBJECT *Objects;
		CAMERA *Camera;
    LONG FramesNumber;
    LONG CurrentFrame;
    FACE **DeptBuffor;
	} SCENE;

#endif
