| |
1 #ifndef __FACE_H__ |
| |
2 #define __FACE_H__ |
| |
3 |
| |
4 #include <GL/gl.h> |
| |
5 #include <GL/glu.h> |
| |
6 #include "glm.h" |
| |
7 |
| |
8 #define NUM_PARTS 10 |
| |
9 #define DOG_SHARK_CHANGE 5 |
| |
10 #define CRAZY_COUNT 12 |
| |
11 #define MAX_EYE_POP 1.3 |
| |
12 #define EYE_TIME 120 |
| |
13 #define MAX_FILE_LEN 64 |
| |
14 #define ANGLE_INC 60 |
| |
15 |
| |
16 typedef enum {DOG, SHARK} KIND; |
| |
17 typedef int BOOL; |
| |
18 typedef enum {UP, DOWN, CONST} DIRECTION; |
| |
19 typedef enum {NORMAL, CRAZY1, CRAZY2, CRAZY3} OUTPUT_MODE; |
| |
20 |
| |
21 struct face_struct { |
| |
22 char* name; |
| |
23 KIND my_kind; |
| |
24 void* char_struct; |
| |
25 GLint* mat_indeces; |
| |
26 GLMmat_str* materials; |
| |
27 OUTPUT_MODE my_mode; |
| |
28 int eye_count, crazy_count; |
| |
29 void (*draw_func)(struct face_struct*, GLfloat, GLfloat, BOOL, BOOL, GLfloat, DIRECTION, OUTPUT_MODE); |
| |
30 float curr_z_angle, curr_eye_pop; |
| |
31 }; |
| |
32 |
| |
33 typedef struct face_struct* FACE; |
| |
34 typedef enum {APPENDAGE, HEAD, LIDS, LEFT_IRIS, RIGHT_IRIS, EYES, PUPIL, EXTRA1, EXTRA2, EXTRA3} PART; |
| |
35 |
| |
36 FACE init_face(KIND kind); |
| |
37 |
| |
38 FACE copy_face(FACE f); |
| |
39 |
| |
40 void draw_face(FACE face, GLfloat zrot, GLfloat yrot, BOOL left_eye, BOOL right_eye, GLfloat mouth_open, DIRECTION dir, OUTPUT_MODE mode); |
| |
41 |
| |
42 void change_materials(FACE face, int* mats, int num_change); |
| |
43 |
| |
44 #endif |