aboutsummaryrefslogtreecommitdiff
path: root/scene.c
blob: a75b3293c3c3c786de9292c5ab23f2932519354b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "scene.h"

#include <stdlib.h>

static inline void link_object(space_t *s, object_t *o)
{
	if (s) {
		o->next = s->objects;
		s->objects = o;
	} else {
		o->next = 0;
	}
}

object_t *add_sphere(space_t *s, vector_t *c, COORD_T r)
{
	object_t *o = (object_t *) malloc(sizeof(object_t));

	o->type = TYPE_SPHERE;
	o->sph.center = c;
	o->sph.radius = r;

	link_object(s, o);

	return o;
}

object_t *add_plane(space_t *s, vector_t *start, vector_t *dir)
{
	object_t *o = (object_t *) malloc(sizeof(object_t));

	o->type = TYPE_PLANE;
	o->pl.start = start;
	o->pl.norm = dir;

	link_object(s, o);

	return o;
}

light_t *add_light(space_t *s, vector_t *pos, color_t *c)
{
	light_t *o = (light_t *) malloc(sizeof(light_t));

	o->pos = pos;
	o->col = c;

	if (s) {
		o->next = s->lights;
		s->lights = o;
	} else {
		o->next = NULL;
	}

	return o;
}