ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/entity.h
Revision: 1.10
Committed: Sun Oct 3 20:14:33 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.9: +8 -15 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef ENTITY_H
2     #define ENTITY_H
3    
4     #include <GL/gl.h>
5    
6     #include <vector>
7    
8 root 1.5 #include "util.h"
9 root 1.1 #include "oct.h"
10 root 1.8 #include "view.h"
11 root 1.1
12     using namespace std;
13    
14     struct entity_base {
15     struct entity_base *parent;
16 root 1.10 sector orig;
17 root 1.1 vector<octant *> o;
18     box bbox;
19    
20     virtual void update_bbox ();
21 root 1.10 virtual void show () { world.add (orig, this); };
22 root 1.1 void hide ();
23 root 1.10 void display (draw_context &ctx);
24 root 1.8 virtual void draw (draw_context &ctx) = 0;
25 root 1.10
26     entity_base ();
27     virtual ~entity_base ();
28 root 1.1 };
29    
30     struct entity_container : entity_base, protected vector<entity_base *> {
31 root 1.4 void add (entity_base *e) { push_back (e); e->parent = this; }
32 root 1.1 void update_bbox ();
33 root 1.10 void show ();
34 root 1.8 void draw (draw_context &ctx);
35 root 1.1 ~entity_container ();
36     };
37    
38     struct entity_filter : entity_base {
39     protected:
40     entity_base *e;
41     public:
42    
43     void set (entity_base *e)
44     {
45     this->e = e;
46     e->parent = this;
47     }
48    
49     void remove ()
50     {
51     this->e->parent = 0;
52     this->e = 0;
53     }
54    
55     entity_base *content () { return e; };
56    
57     void update_bbox ();
58 root 1.10 void show ();
59 root 1.8 void draw (draw_context &ctx);
60 root 1.1 ~entity_filter ();
61     };
62    
63     struct entity : entity_filter {
64     };
65    
66 root 1.7 #if 0
67 root 1.1 struct entity_affine : entity_filter {
68 root 1.7 GLfloat m[4][4];
69    
70 root 1.8 void draw (draw_context &ctx);
71 root 1.1 };
72 root 1.7 #endif
73 root 1.1
74     struct vertex1d {
75 root 1.3 colour c; // colour
76 root 1.2 point p; // vertex
77 root 1.1 };
78    
79     struct vertex2d {
80 root 1.6 point p; // vertex
81     vec3 n; // normal
82     texc t; // texture
83 root 1.3
84     vertex2d () { };
85 root 1.6 vertex2d (point p, vec3 n, texc t = texc()) : p(p), n(n), t(t) { };
86     };
87    
88     struct entity_opengl : entity_base {
89 root 1.1 };
90    
91     template<GLenum type>
92 root 1.6 struct entity_opengl1d : entity_opengl, vector<vertex1d> {
93 root 1.1 void update_bbox ();
94 root 1.8 void draw (draw_context &ctx);
95 root 1.1 };
96    
97     template<GLenum type>
98 root 1.6 struct entity_opengl2d : entity_opengl, vector<vertex2d> {
99     material m;
100 root 1.9 GLuint list;
101 root 1.6
102 root 1.1 void update_bbox ();
103 root 1.8 void draw (draw_context &ctx);
104 root 1.9
105     entity_opengl2d ()
106     : list(0)
107     {
108     }
109    
110     ~entity_opengl2d ()
111     {
112     if (list)
113     glDeleteLists (list, 1);
114     }
115 root 1.1 };
116    
117     typedef entity_opengl1d<GL_POINTS> entity_points;
118     typedef entity_opengl1d<GL_LINES> entity_lines;
119 root 1.2 typedef entity_opengl1d<GL_LINE_STRIP> entity_line_strip;
120     typedef entity_opengl1d<GL_LINE_LOOP> entity_line_loop;
121 root 1.1 typedef entity_opengl2d<GL_TRIANGLES> entity_triangles;
122 root 1.2 typedef entity_opengl2d<GL_TRIANGLE_STRIP> entity_triangle_strip;
123     typedef entity_opengl2d<GL_TRIANGLE_FAN> entity_triangle_fan;
124 root 1.1 typedef entity_opengl2d<GL_QUADS> entity_quads;
125     typedef entity_opengl2d<GL_QUAD_STRIP> entity_quad_strip;
126     typedef entity_opengl2d<GL_POLYGON> entity_polygon;
127    
128     #endif
129    
130    
131