Statistics
| Revision:

root / branches / simulator / projects / simulator / simulator / core / world.h @ 1045

History | View | Annotate | Download (2.2 KB)

1 1021 bpoole
/**
2 1021 bpoole
 * @file world.h
3 1021 bpoole
 * @author Colony Project
4 1021 bpoole
 *
5 1022 bpoole
 * @brief THE WHOLE WIDE WORLD
6 1021 bpoole
 *
7 1021 bpoole
 * Contains structures and function prototypes used
8 1022 bpoole
 * for managing the world.
9 1021 bpoole
 **/
10 1021 bpoole
11 1021 bpoole
#ifndef __WORLD_H__
12 1021 bpoole
#define __WORLD_H__
13 1021 bpoole
14 1026 bpoole
#include <stdarg.h>
15 1041 chihsiuh
#include <string.h>
16 1041 chihsiuh
#include <stdio.h>
17 1041 chihsiuh
#include <stdlib.h>
18 1026 bpoole
19 1040 bpoole
#define ID_OFFSET -1
20 1026 bpoole
#define ID_RECTANGLE 3
21 1040 bpoole
#define ID_CIRCLE 2
22 1040 bpoole
#define ID_NULL 0
23 1040 bpoole
#define ID_POLY 1
24 1026 bpoole
#define POLY_DISCONNECTED 0
25 1026 bpoole
#define POLY_CONNECTED 1
26 1026 bpoole
#define POLY_RECT 2
27 1026 bpoole
28 1026 bpoole
#define NUM_SHAPES 3
29 1045 bpoole
#define RAY_MISS 10000
30 1026 bpoole
#define CREATE(id, ...) (create_func[id](__VA_ARGS__))
31 1040 bpoole
#define PBBOX(b) {printf("(%g,%g) --> (%g, %g)\n",(b).p1.x,(b).p1.y,(b).p2.x,\
32 1040 bpoole
                                                  (b).p2.y);}
33 1042 bpoole
#define PRAY(v) {printf("(%g,%g), %g\n", (v).p.x, (v).p.y,(v).d);}
34 1041 chihsiuh
35 1041 chihsiuh
#define BUF_SIZE 512
36 1041 chihsiuh
37 1021 bpoole
typedef struct {
38 1021 bpoole
    double x;
39 1021 bpoole
    double y;
40 1021 bpoole
} point_t;
41 1021 bpoole
42 1021 bpoole
typedef struct {
43 1021 bpoole
    point_t p1; /* Lower left point */
44 1021 bpoole
    point_t p2; /* Upper right point */
45 1026 bpoole
} bbox_t, rect_t, seg_t;
46 1021 bpoole
47 1021 bpoole
typedef struct {
48 1022 bpoole
    point_t p; /* origin */
49 1022 bpoole
    double d; /* direction */
50 1022 bpoole
} ray_t;
51 1022 bpoole
52 1022 bpoole
typedef struct {
53 1026 bpoole
    int type;
54 1026 bpoole
    int num_pts;
55 1026 bpoole
    point_t *pts;
56 1026 bpoole
} poly_t;
57 1026 bpoole
58 1026 bpoole
typedef struct {
59 1021 bpoole
    int id;
60 1021 bpoole
    bbox_t *bbox;
61 1021 bpoole
    void *props; /* shape-specific properties */
62 1021 bpoole
} object_t;
63 1021 bpoole
64 1021 bpoole
typedef struct {
65 1040 bpoole
    int max_objs;
66 1040 bpoole
    int cur_objs;
67 1021 bpoole
    object_t *objs;
68 1040 bpoole
    bbox_t win;
69 1021 bpoole
} world_t;
70 1021 bpoole
71 1022 bpoole
/* Specific collision functions */
72 1026 bpoole
double collide(ray_t *ray, object_t *obj);
73 1022 bpoole
double collide_circle(ray_t *ray, object_t *obj);
74 1022 bpoole
double collide_rect(ray_t *ray, object_t *obj);
75 1026 bpoole
double collide_poly(ray_t *ray, object_t *obj);
76 1042 bpoole
double collide_world(ray_t *ray);
77 1042 bpoole
78 1022 bpoole
/*  Array of function pointers to the specific collide functions.
79 1022 bpoole
 *  Must be listed in the same order as IDs */
80 1026 bpoole
extern double (*collide_func[NUM_SHAPES])(ray_t *ray, object_t *obj);
81 1026 bpoole
extern int (*create_func[NUM_SHAPES])(object_t *obj, va_list ap);
82 1040 bpoole
extern int (*destroy_func[NUM_SHAPES])(object_t *obj);
83 1040 bpoole
extern world_t world;
84 1022 bpoole
85 1040 bpoole
int init_world(int num_objs, bbox_t b);
86 1040 bpoole
int destroy_world(void);
87 1026 bpoole
int create_poly(object_t *obj, va_list ap);
88 1040 bpoole
int destroy_poly(object_t *obj);
89 1026 bpoole
object_t *create(int id, ...);
90 1026 bpoole
91 1040 bpoole
void print_world(void);
92 1040 bpoole
void print_object(object_t *obj);
93 1040 bpoole
94 1041 chihsiuh
95 1041 chihsiuh
/* WORLD 0 0 512 512
96 1041 chihsiuh
 * POLYGON 3 CONNECTED 1 2 3 4 5 6
97 1041 chihsiuh
 */
98 1043 chihsiuh
int load_world (const char* filename, int max_objs);
99 1041 chihsiuh
int load_object (const char* line);
100 1041 chihsiuh
101 1021 bpoole
#endif