]> icculus.org git repositories - btb/d2x.git/blob - main/old/newmodel.c
attempt to support d1 for mac mission
[btb/d2x.git] / main / old / newmodel.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "inferno.h"
6 #include "polyobj.h"
7 #include "vecmat.h"
8 #include "3d.h"
9 #include "error.h"
10
11 byte model_tree[MAX_SUBMODELS][MAX_SUBMODELS+1];
12 g3s_instance_context context_array[MAX_SUBMODELS];
13
14
15 void new_draw_polygon_model(polymodel *po,grs_bitmap **model_bitmaps,vms_angvec *anim_angles,fix light,fix *glow_values)
16 {
17         int i;
18         g3s_instance_context saved_context;
19
20         //first, build a tree of the parts.  This is ugly.  The tree should be stored
21         //with the model
22
23         for (i=0;i<po->n_models;i++)
24                 model_tree[i][0] = -1;
25
26         Assert(po->submodel_parents[0] == 0xff);
27
28         for (i=1;i<po->n_models;i++) {
29                 int p,j;
30                 p = po->submodel_parents[i];
31                 for (j=0;model_tree[p][j]!=-1;j++)
32                         ;
33                 model_tree[p][j]=i;
34                 model_tree[p][j+1]=-1;
35         }
36
37         //now, go through model recursively, saving instance context for each submodel
38
39         instance_model_part(po,0,anim_angles);
40
41         //now, do whatever sorting on the part of the model you want
42
43                 //we don't do any sorting, now
44
45         //lastly, render our parts
46
47         g3_get_instance_context(&saved_context);        //save before we start mucking with it
48
49         for (i=0;i<po->n_models;i++) {
50
51                 g3_set_instance_context(&context_array[i]);
52
53                 g3_draw_polygon_model(&po->model_data[po->submodel_ptrs[i]],model_bitmaps,anim_angles,light,glow_values);
54         }
55
56         g3_set_instance_context(&saved_context);        //restore now that we're done
57
58 }
59
60
61 instance_model_part(polymodel *po,int part_number,vms_angvec *anim_angles)
62 {
63         int i;
64
65         g3_start_instance_angles(&po->submodel_offsets[part_number],anim_angles?&anim_angles[part_number]:NULL);
66
67         g3_get_instance_context(&context_array[part_number]);
68
69         for (i=0;model_tree[part_number][i]!=-1;i++)
70                 instance_model_part(po,model_tree[part_number][i],anim_angles);
71
72         g3_done_instance();
73
74 }