annotate dmq3d.c @ 246:3bf8ebf09a6a

Cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 09 Oct 2012 17:46:54 +0300
parents eed8eed58f82
children 3b028785b843
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #include "dmq3d.h"
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 #include "dmimage.h"
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 #define DM_DRAWLINE_NAME dmDrawLineSpec
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 #define DM_DRAWLINE_DST_BYTES 4
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #define DM_DRAWLINE_DST_TYPE DMRGBA32
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 #define DM_DRAWLINE_ARGS , SDL_Surface *bmp
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 #define DM_DRAWLINE_INIT const int px = bmp->w / 2, py = bmp->h / 2;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 #define DM_DRAWLINE_INNER \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 dmUnscaledBlitSurface32to32Transparent(bmp, x0-px, y0-py, screen);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 #define DM_DRAWLINE_SPEC
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 #include "dmdrawline.h"
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 static int dmFind3DBitmap(int nitems, DM3DBitmap *items, DM3DBitmap *item)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 int i;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 for (i = 0; i < nitems; i++)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 if (strcmp(item->name, items[i].name) == 0)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 return i;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 return -1;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 #define DM_FIND_ITEM_FUNC(NAME, TYPE) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 static int dmFind3D ## NAME (int nitems, TYPE *items, TYPE *item) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 { \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 int i; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 for (i = 0; i < nitems; i++) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 if (memcmp(item, items+i, sizeof(TYPE)) == 0) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 return i; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 return -1; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 #define DM_ADD_ITEM_FUNC(NAME, TYPE) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36 static int dmAdd3D ## NAME (int *nitems, int *nalloc, TYPE **items, TYPE *item, int *res) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 { \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 int tmp; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 if ((tmp = dmFind3D ## NAME (*nitems, *items, item)) >= 0) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 { \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 if (res != NULL) *res = tmp; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42 return DMERR_OK; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 } \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 if ((*nitems) + 1 >= *nalloc) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 { \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 (*nalloc) += 16; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47 if ((*items = dmRealloc(*items, *nalloc * sizeof(TYPE))) == NULL) \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 return DMERR_MALLOC; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49 } \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 memcpy((*items) + (*nitems), item, sizeof(TYPE)); \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 if (res != NULL) *res = *nitems; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 (*nitems)++; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 return DMERR_OK; \
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 DM_FIND_ITEM_FUNC(Vertex, DMVector)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 DM_FIND_ITEM_FUNC(Line, DM3DLine)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 DM_FIND_ITEM_FUNC(Sprite, DM3DSprite)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 DM_ADD_ITEM_FUNC(Vertex, DMVector)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 DM_ADD_ITEM_FUNC(Line, DM3DLine)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 DM_ADD_ITEM_FUNC(Sprite, DM3DSprite)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63 DM_ADD_ITEM_FUNC(Bitmap, DM3DBitmap)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66 int dmAdd3DLineSpriteModelVertex(DM3DLineSpriteModel *model, DMVector *v, int *index)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 return dmAdd3DVertex(&model->nvertices, &model->nvertexalloc,
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69 &model->vertices, v, index);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 int dmAdd3DLineSpriteModelLine(DM3DLineSpriteModel *model, DM3DLine *v, int *index)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 return dmAdd3DLine(&model->nlines, &model->nlinesalloc,
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 &model->lines, v, index);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 int dmAdd3DLineSpriteModelSprite(DM3DLineSpriteModel *model, DM3DSprite *v, int *index)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 return dmAdd3DSprite(&model->nsprites, &model->nspritesalloc,
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 &model->sprites, v, index);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84 int dmAdd3DLineSpriteModelBitmap(DM3DLineSpriteModel *model, DM3DBitmap *v, int *index)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
86 return dmAdd3DBitmap(&model->nbitmaps, &model->nbitmapsalloc,
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 &model->bitmaps, v, index);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
88 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91 static inline DMFloat dmPX(DMVector p)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 return 320 + p.x * 250.0f / (p.z + 501.0f);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 static inline DMFloat dmPY(DMVector p)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 return 200 + p.y * 250.0f / (p.z + 501.0f);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 void dmDraw3DLineSpriteModel(SDL_Surface *screen, DM3DLineSpriteModel *model, DMVector *pos, DMMatrix *mat, SDL_Surface *fbmap, Uint32 lcol)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 int i;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 for (i = 0; i < model->nlines; i++)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 DM3DLine *line = &model->lines[i];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 DMVector pv[2];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110 dm_vector_add_r(&pv[0], &model->vertices[line->v1], pos);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 dm_vector_add_r(&pv[1], &model->vertices[line->v2], pos);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 dm_vector_mul_by_mat_n(pv, 2, mat);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114 if (line->type > 1)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 dmDrawLineSpec(screen, dmPX(pv[0]), dmPY(pv[0]), dmPX(pv[1]), dmPY(pv[1]), lcol, fbmap);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 else
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 dmDrawLine32(screen, dmPX(pv[0]), dmPY(pv[0]), dmPX(pv[1]), dmPY(pv[1]), lcol);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 for (i = 0; i < model->nsprites; i++)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 DM3DSprite *sprite = &model->sprites[i];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123 DM3DBitmap *bmp = &model->bitmaps[sprite->bitmap];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 DMVector pv, pt;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125 dm_vector_add_r(&pt, &model->vertices[sprite->v], pos);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126 dm_vector_mul_by_mat(&pv, &pt, mat);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 dmUnscaledBlitSurface32to32Transparent(bmp->img, dmPX(pv), dmPY(pv), screen);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132 static char *dmSkipWhitespace(char *line, BOOL invert)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
133 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134 if (invert)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 for (; *line && !isspace(*line); line++);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136 else
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 for (; *line && isspace(*line); line++);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138 return line;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142 static char *dmSkipUntil(char *line, char ch)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144 for (; *line && *line != ch; line++);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 return line;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 static BOOL dmReadCoordinate(char **line, float *value, BOOL next)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151 *line = dmSkipWhitespace(*line, FALSE);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 if (sscanf(*line, "%f", value) != 1) return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 if (next)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 *line = dmSkipUntil(*line, ',');
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156 if (**line != ',') return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 *(*line)++;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159 else
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 *line = dmSkipWhitespace(*line, TRUE);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 return TRUE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
164
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
165 static BOOL dmReadLineSegments(char *line, DM3DLineSpriteModel *model, BOOL relative, const DMVector *pt)
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167 int nvertices, vertex, type;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 int *indices = NULL;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 if (sscanf(line+1, "%d", &nvertices) != 1)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 dmError("No # of segments @ '%s'\n", line);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 goto error;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175 if ((indices = dmMalloc(sizeof(int) * (nvertices+1))) == NULL)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176 goto error;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 line = dmSkipWhitespace(line, TRUE);
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
179 DMVector v, p, *t;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
180 dm_vector_copy(&v, pt);
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 for (vertex = 0; vertex <= nvertices; vertex++)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183 if (!dmReadCoordinate(&line, &p.x, TRUE)) return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 if (!dmReadCoordinate(&line, &p.y, TRUE)) return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 if (!dmReadCoordinate(&line, &p.z, FALSE)) return FALSE;
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
186 if (relative)
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
187 {
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
188 dm_vector_add(&v, &p);
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
189 t = &v;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
190 }
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
191 else
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
192 {
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
193 dm_vector_add_r(&v, &p, pt);
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
194 t = &v;
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
195 }
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
196
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
197 if (dmAdd3DLineSpriteModelVertex(model, t, &indices[vertex]) != DMERR_OK)
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 goto error;
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
199
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 line = dmSkipWhitespace(line, FALSE);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 if (sscanf(line, "%d", &type) != 1)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 dmError("No line type @ '%s'\n", line);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 goto error;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
208
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 for (vertex = 1; vertex <= nvertices; vertex++)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211 DM3DLine line;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212 line.v1 = indices[vertex - 1];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 line.v2 = indices[vertex];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214 line.type = type;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
215 if (dmAdd3DLineSpriteModelLine(model, &line, NULL) != DMERR_OK)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216 goto error;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
218
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
219 return TRUE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
220 error:
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221 dmFree(indices);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 static BOOL dmReadSprite(char *line, DM3DLineSpriteModel *model)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227 DMVector pt;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
228 DM3DSprite spr;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230 line++;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231 if (!dmReadCoordinate(&line, &pt.x, TRUE)) return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232 if (!dmReadCoordinate(&line, &pt.y, TRUE)) return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233 if (!dmReadCoordinate(&line, &pt.z, FALSE)) return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234 line = dmSkipWhitespace(line, FALSE);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
235 if (*line != 'B')
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237 dmError("No bitmap definition found for sprite.\n");
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
238 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
239 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
240
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
241 spr.bitmap = atoi(line + 1);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
243 if (dmAdd3DLineSpriteModelVertex(model, &pt, &spr.v) != DMERR_OK)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
244 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
245
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
246 if (dmAdd3DLineSpriteModelSprite(model, &spr, NULL) != DMERR_OK)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
247 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
248
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249 return TRUE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 static BOOL dmReadBitmap(char *line, DM3DLineSpriteModel *model)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
253 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 DM3DBitmap bmp, *rbmp;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255 int index;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
256
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 strncpy(bmp.name, line + 1, sizeof(bmp.name));
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258 bmp.img = NULL;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
259
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 if (dmAdd3DLineSpriteModelBitmap(model, &bmp, &index) != DMERR_OK)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
261 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
262
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
263 rbmp = &(model->bitmaps[index]);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
264 if (rbmp->img == NULL)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
266 DMResource *res = dmf_create_stdio(rbmp->name, "rb");
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
267 if (res == NULL)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
269 dmError("Could not open resource file '%s'.\n", rbmp->name);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
270 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
271 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
272 rbmp->img = dmLoadImage(res);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
273 dmf_close(res);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274 if (rbmp->img == NULL)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
275 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
276 dmError("Could not load image file '%s'.\n", rbmp->name);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
277 return FALSE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
278 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
279 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
280 fprintf(stderr, "loaded '%s': %d: %p\n", rbmp->name, index, rbmp->img);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
281 return TRUE;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
282 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
283
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
284
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
285 int dmRead3DLineSpriteModel(DMResource *f, DM3DLineSpriteModel **model)
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
286 {
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
287 DMVector pt;
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
288 char line[512];
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
289
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
290 if ((*model = dmMalloc0(sizeof(DM3DLineSpriteModel))) == NULL)
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
291 return DMERR_MALLOC;
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
292
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
293 while (dmfgets(line, sizeof(line), f) != NULL)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
294 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
295 char *start = dmSkipWhitespace(line, FALSE);
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
296 switch (*start)
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
297 {
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
298 case 0:
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
299 case '#':
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
300 break;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
301
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
302 case 'B':
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
303 if (!dmReadBitmap(start, *model))
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
304 return DMERR_INVALID_DATA;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
305 break;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
306
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
307 case 'P':
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
308 start++;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
309 if (!dmReadCoordinate(&start, &pt.x, TRUE)) return FALSE;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
310 if (!dmReadCoordinate(&start, &pt.y, TRUE)) return FALSE;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
311 if (!dmReadCoordinate(&start, &pt.z, FALSE)) return FALSE;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
312 break;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
313
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
314 case 'L':
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
315 if (!dmReadLineSegments(start, *model, FALSE, &pt))
243
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
316 return DMERR_INVALID_DATA;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
317 break;
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
318
a9d500e5698d Improve the parser.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
319 case 'R':
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
320 if (!dmReadLineSegments(start, *model, TRUE, &pt))
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
321 return DMERR_INVALID_DATA;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
322 break;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
323
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
324 case 'S':
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
325 if (!dmReadSprite(start, *model))
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
326 return DMERR_INVALID_DATA;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
327 break;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
328
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
329 default:
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
330 break;
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
331 }
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
332 }
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
333 return DMERR_OK;
246
3bf8ebf09a6a Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
334 }
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
335
245
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
336
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
337 void dmFree3DLineSpriteModel(DM3DLineSpriteModel *model)
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
338 {
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
339 int i;
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
340 for (i = 0; i < model->nbitmaps; i++)
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
341 {
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
342 if (model->bitmaps[i].img != NULL)
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
343 SDL_FreeSurface(model->bitmaps[i].img);
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
344 }
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
345
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
346 dmFree(model->bitmaps);
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
347 dmFree(model->vertices);
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
348 dmFree(model->lines);
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
349 dmFree(model->sprites);
eed8eed58f82 Changes in the 3d loader.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
350 dmFree(model);
241
3bff024a91be Move 3D line/sprite renderer to separate module.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
351 }