This commit was manufactured by cvs2svn to create tag 'd2x-0_1_2'.
[btb/d2x.git] / main / polyobj.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14
15
16 #ifndef _POLYOBJ_H
17 #define _POLYOBJ_H
18
19 #include "vecmat.h"
20 #include "gr.h"
21 #include "3d.h"
22
23 #ifndef DRIVE
24 #include "robot.h"
25 #endif
26 #include "piggy.h"
27
28 #define MAX_POLYGON_MODELS 200
29
30 //used to describe a polygon model
31 typedef struct polymodel {
32         int n_models;
33         int model_data_size;
34         ubyte *model_data;
35         int submodel_ptrs[MAX_SUBMODELS];
36         vms_vector submodel_offsets[MAX_SUBMODELS];
37         vms_vector submodel_norms[MAX_SUBMODELS];               //norm for sep plane
38         vms_vector submodel_pnts[MAX_SUBMODELS];                //point on sep plane 
39         fix submodel_rads[MAX_SUBMODELS];                               //radius for each submodel
40         ubyte submodel_parents[MAX_SUBMODELS];          //what is parent for each submodel
41         vms_vector submodel_mins[MAX_SUBMODELS];
42         vms_vector submodel_maxs[MAX_SUBMODELS];
43         vms_vector mins,maxs;                                                   //min,max for whole model
44         fix rad;
45         ubyte           n_textures;
46         ushort  first_texture;
47         ubyte           simpler_model;          //alternate model with less detail (0 if none, model_num+1 else)
48 //      vms_vector min,max;
49 } __pack__ polymodel;
50
51 //array of pointers to polygon objects
52 extern polymodel Polygon_models[];
53
54 //switch to simpler model when the object has depth 
55 //greater than this value times its radius.   
56 extern int Simple_model_threshhold_scale;
57
58 //how many polygon objects there are
59 extern int N_polygon_models;
60
61
62 //array of names of currently-loaded models
63 extern char Pof_names[MAX_POLYGON_MODELS][13];
64
65 void init_polygon_models();
66
67 #ifndef DRIVE
68 int load_polygon_model(char *filename,int n_textures,int first_texture,robot_info *r);
69 #else
70 int load_polygon_model(char *filename,int n_textures,grs_bitmap ***textures);
71 #endif
72
73 //draw a polygon model
74 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[]);
75
76 //fills in arrays gun_points & gun_dirs, returns the number of guns read
77 int read_model_guns(char *filename,vms_vector *gun_points, vms_vector *gun_dirs, int *gun_submodels);
78
79 //draws the given model in the current canvas.  The distance is set to
80 //more-or-less fill the canvas.  Note that this routine actually renders
81 //into an off-screen canvas that it creates, then copies to the current
82 //canvas.
83 void draw_model_picture(int mn,vms_angvec *orient_angles);
84
85 #define MAX_POLYOBJ_TEXTURES 100
86 extern grs_bitmap *texture_list[MAX_POLYOBJ_TEXTURES];
87 extern bitmap_index texture_list_index[MAX_POLYOBJ_TEXTURES];
88 extern g3s_point robot_points[];
89
90 #endif
91