1 /* $Id: polyobj.h,v 1.8 2004-08-28 23:17:45 schaffner Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Header for polyobj.c, the polygon object code
34 #define MAX_POLYGON_MODELS 200
36 //used to describe a polygon model
37 typedef struct polymodel {
41 int submodel_ptrs[MAX_SUBMODELS];
42 vms_vector submodel_offsets[MAX_SUBMODELS];
43 vms_vector submodel_norms[MAX_SUBMODELS]; // norm for sep plane
44 vms_vector submodel_pnts[MAX_SUBMODELS]; // point on sep plane
45 fix submodel_rads[MAX_SUBMODELS]; // radius for each submodel
46 ubyte submodel_parents[MAX_SUBMODELS]; // what is parent for each submodel
47 vms_vector submodel_mins[MAX_SUBMODELS];
48 vms_vector submodel_maxs[MAX_SUBMODELS];
49 vms_vector mins,maxs; // min,max for whole model
53 ubyte simpler_model; // alternate model with less detail (0 if none, model_num+1 else)
57 // array of pointers to polygon objects
58 extern polymodel Polygon_models[];
59 extern int D1Share_Polymodel_map[];
60 extern int D1_Polymodel_map[];
61 extern int D2Demo_Polymodel_map[];
63 // switch to simpler model when the object has depth
64 // greater than this value times its radius.
65 extern int Simple_model_threshhold_scale;
67 // how many polygon objects there are
68 extern int N_polygon_models;
71 // array of names of currently-loaded models
72 extern char Pof_names[MAX_POLYGON_MODELS][13];
74 void init_polygon_models();
77 int load_polygon_model(char *filename,int n_textures,int first_texture,robot_info *r);
79 int load_polygon_model(char *filename,int n_textures,grs_bitmap ***textures);
82 // draw a polygon model
83 void draw_polygon_model(vms_vector *pos,vms_matrix *orient,vms_angvec *anim_angles,int model_num,int flags,fix light,fix *glow_values,bitmap_index alt_textures[]);
85 // fills in arrays gun_points & gun_dirs, returns the number of guns read
86 int read_model_guns(char *filename,vms_vector *gun_points, vms_vector *gun_dirs, int *gun_submodels);
88 // draws the given model in the current canvas. The distance is set to
89 // more-or-less fill the canvas. Note that this routine actually renders
90 // into an off-screen canvas that it creates, then copies to the current
92 void draw_model_picture(int mn,vms_angvec *orient_angles);
94 // free up a model, getting rid of all its memory
95 void free_model(polymodel *po);
97 #define MAX_POLYOBJ_TEXTURES 100
98 extern grs_bitmap *texture_list[MAX_POLYOBJ_TEXTURES];
99 extern bitmap_index texture_list_index[MAX_POLYOBJ_TEXTURES];
100 extern g3s_point robot_points[];
103 #define polymodel_read(pm, fp) cfread(pm, sizeof(polymodel), 1, fp)
104 #define polymodel_read_n(pm, n, fp) cfread(pm, sizeof(polymodel), n, fp)
107 * reads a polymodel structure from a CFILE
109 extern void polymodel_read(polymodel *pm, CFILE *fp);
112 * reads n polymodel structs from a CFILE
114 extern int polymodel_read_n(polymodel *pm, int n, CFILE *fp);
118 * routine which allocates, reads, and inits a polymodel's model_data
120 void polygon_model_data_read(polymodel *pm, CFILE *fp);
122 #endif /* _POLYOBJ_H */