attempt to support d1 for mac mission
[btb/d2x.git] / main / polyobj.h
1 /* $Id: polyobj.h,v 1.5 2003-01-02 23:31:50 btb Exp $ */
2 /*
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.
13 */
14
15
16
17 #ifndef _POLYOBJ_H
18 #define _POLYOBJ_H
19
20 #include "vecmat.h"
21 #include "gr.h"
22 #include "3d.h"
23
24 #ifndef DRIVE
25 #include "robot.h"
26 #endif
27 #include "piggy.h"
28
29 #define MAX_POLYGON_MODELS 200
30
31 //used to describe a polygon model
32 typedef struct polymodel {
33         int     n_models;
34         int     model_data_size;
35         ubyte   *model_data;
36         int     submodel_ptrs[MAX_SUBMODELS];
37         vms_vector submodel_offsets[MAX_SUBMODELS];
38         vms_vector submodel_norms[MAX_SUBMODELS];       //norm for sep plane
39         vms_vector submodel_pnts[MAX_SUBMODELS];        //point on sep plane
40         fix     submodel_rads[MAX_SUBMODELS];           //radius for each submodel
41         ubyte   submodel_parents[MAX_SUBMODELS];        //what is parent for each submodel
42         vms_vector submodel_mins[MAX_SUBMODELS];
43         vms_vector submodel_maxs[MAX_SUBMODELS];
44         vms_vector mins,maxs;                                           //min,max for whole model
45         fix             rad;
46         ubyte   n_textures;
47         ushort  first_texture;
48         ubyte   simpler_model;  //alternate model with less detail (0 if none, model_num+1 else)
49 //      vms_vector min,max;
50 } __pack__ polymodel;
51
52 //array of pointers to polygon objects
53 extern polymodel Polygon_models[];
54
55 //switch to simpler model when the object has depth
56 //greater than this value times its radius.
57 extern int Simple_model_threshhold_scale;
58
59 //how many polygon objects there are
60 extern int N_polygon_models;
61
62
63 //array of names of currently-loaded models
64 extern char Pof_names[MAX_POLYGON_MODELS][13];
65
66 void init_polygon_models();
67
68 #ifndef DRIVE
69 int load_polygon_model(char *filename,int n_textures,int first_texture,robot_info *r);
70 #else
71 int load_polygon_model(char *filename,int n_textures,grs_bitmap ***textures);
72 #endif
73
74 //draw a polygon model
75 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[]);
76
77 //fills in arrays gun_points & gun_dirs, returns the number of guns read
78 int read_model_guns(char *filename,vms_vector *gun_points, vms_vector *gun_dirs, int *gun_submodels);
79
80 //draws the given model in the current canvas.  The distance is set to
81 //more-or-less fill the canvas.  Note that this routine actually renders
82 //into an off-screen canvas that it creates, then copies to the current
83 //canvas.
84 void draw_model_picture(int mn,vms_angvec *orient_angles);
85
86 #define MAX_POLYOBJ_TEXTURES 100
87 extern grs_bitmap *texture_list[MAX_POLYOBJ_TEXTURES];
88 extern bitmap_index texture_list_index[MAX_POLYOBJ_TEXTURES];
89 extern g3s_point robot_points[];
90
91 #ifdef FAST_FILE_IO
92 #define polymodel_read(pm, fp) cfread(pm, sizeof(polymodel), 1, fp)
93 #define polymodel_read_n(pm, n, fp) cfread(pm, sizeof(polymodel), n, fp)
94 #else
95 /*
96  * reads a polymodel structure from a CFILE
97  */
98 extern void polymodel_read(polymodel *pm, CFILE *fp);
99
100 /*
101  * reads n polymodel structs from a CFILE
102  */
103 extern int polymodel_read_n(polymodel *pm, int n, CFILE *fp);
104 #endif
105
106 /*
107  * routine which allocates, reads, and inits a polymodel's model_data
108  */
109 void polygon_model_data_read(polymodel *pm, CFILE *fp);
110
111 #endif