ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/entity.h
Revision: 1.12
Committed: Sun Oct 3 23:59:30 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.11: +5 -0 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #ifndef ENTITY_H
2 #define ENTITY_H
3
4 #include <GL/gl.h>
5
6 #include <vector>
7
8 #include "util.h"
9 #include "oct.h"
10 #include "view.h"
11
12 using namespace std;
13
14 struct entity_base {
15 struct entity_base *parent;
16 sector orig;
17 vector<octant *> o;
18 box bbox;
19
20 virtual void update_bbox ();
21 virtual void show () { world.add (this); };
22 void hide ();
23 void display (draw_context &ctx);
24 virtual void draw (draw_context &ctx) = 0;
25
26 entity_base ();
27 virtual ~entity_base ();
28 };
29
30 struct entity_container : entity_base, protected vector<entity_base *> {
31 void add (entity_base *e) { push_back (e); e->parent = this; }
32 void update_bbox ();
33 void show ();
34 void draw (draw_context &ctx);
35 ~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 void show ();
59 void draw (draw_context &ctx);
60 ~entity_filter ();
61 };
62
63 struct entity : entity_filter {
64 };
65
66 struct vertex1d {
67 colour c; // colour
68 point p; // vertex
69 };
70
71 struct vertex2d {
72 point p; // vertex
73 vec3 n; // normal
74 texc t; // texture
75
76 vertex2d () { };
77 vertex2d (point p, vec3 n, texc t = texc()) : p(p), n(n), t(t) { };
78 };
79
80 struct entity_opengl : entity_base {
81 };
82
83 template<GLenum type>
84 struct entity_opengl1d : entity_opengl, vector<vertex1d> {
85 void update_bbox ();
86 void draw (draw_context &ctx);
87 };
88
89 template<GLenum type>
90 struct entity_opengl2d : entity_opengl, vector<vertex2d> {
91 material m;
92 GLuint list;
93
94 void update_bbox ();
95 void draw (draw_context &ctx);
96
97 entity_opengl2d ()
98 : list(0)
99 {
100 }
101
102 ~entity_opengl2d ()
103 {
104 if (list)
105 glDeleteLists (list, 1);
106 }
107 };
108
109 typedef entity_opengl1d<GL_POINTS> entity_points;
110 typedef entity_opengl1d<GL_LINES> entity_lines;
111 typedef entity_opengl1d<GL_LINE_STRIP> entity_line_strip;
112 typedef entity_opengl1d<GL_LINE_LOOP> entity_line_loop;
113 typedef entity_opengl2d<GL_TRIANGLES> entity_triangles;
114 typedef entity_opengl2d<GL_TRIANGLE_STRIP> entity_triangle_strip;
115 typedef entity_opengl2d<GL_TRIANGLE_FAN> entity_triangle_fan;
116 typedef entity_opengl2d<GL_QUADS> entity_quads;
117 typedef entity_opengl2d<GL_QUAD_STRIP> entity_quad_strip;
118 typedef entity_opengl2d<GL_POLYGON> entity_polygon;
119
120 struct entity_transform : entity_filter {
121 gl_matrix m;
122
123 entity_transform ();
124
125 void update_bbox ();
126 void show ();
127 void draw (draw_context &ctx);
128 };
129
130 struct entity_anim : entity_transform {
131 GLfloat vx, vy, vz;
132 void draw (draw_context &ctx);
133 };
134
135 #endif
136
137
138