libzoom: Einige Verbesserungen und Bugfixes im Level-Lader.
This commit is contained in:
parent
36d7e086f6
commit
0d161e31bb
3 changed files with 27 additions and 15 deletions
5
init.c
5
init.c
|
@ -5,6 +5,7 @@
|
||||||
#include <zoom/texture.h>
|
#include <zoom/texture.h>
|
||||||
#include <zoom/level.h>
|
#include <zoom/level.h>
|
||||||
#include <zoom/light.h>
|
#include <zoom/light.h>
|
||||||
|
#include <zoom/player.h>
|
||||||
|
|
||||||
LEVEL *level;
|
LEVEL *level;
|
||||||
GLuint sphere;
|
GLuint sphere;
|
||||||
|
@ -13,6 +14,8 @@ GLuint lightmap;
|
||||||
|
|
||||||
|
|
||||||
extern TEXLIST *texlist;
|
extern TEXLIST *texlist;
|
||||||
|
extern PLAYER player;
|
||||||
|
|
||||||
|
|
||||||
int InitGame() {
|
int InitGame() {
|
||||||
LIGHT light = {LIGHT_POINT, {15.0, 15.0, 15.0}, {0.0, 0.0, 0.0}};
|
LIGHT light = {LIGHT_POINT, {15.0, 15.0, 15.0}, {0.0, 0.0, 0.0}};
|
||||||
|
@ -59,6 +62,8 @@ int InitGame() {
|
||||||
|
|
||||||
level = LoadLevel("level.lvl");
|
level = LoadLevel("level.lvl");
|
||||||
|
|
||||||
|
player.pos = level->info->start;
|
||||||
|
|
||||||
sphere = glGenLists(1);
|
sphere = glGenLists(1);
|
||||||
glNewList(sphere, GL_COMPILE);
|
glNewList(sphere, GL_COMPILE);
|
||||||
glRotatef(90, 1.0, 0.0, 0.0);
|
glRotatef(90, 1.0, 0.0, 0.0);
|
||||||
|
|
28
level.c
28
level.c
|
@ -36,7 +36,7 @@ static void LoadTriangles(xmlNodePtr node, LEVEL *level, WALL* walls, int nWalls
|
||||||
VECTOR v;
|
VECTOR v;
|
||||||
|
|
||||||
|
|
||||||
for(; node = node->next; node != NULL) {
|
for(; node != NULL; node = node->next) {
|
||||||
if(node->type != XML_ELEMENT_NODE || xmlStrcmp(node->name, "triangle")) continue;
|
if(node->type != XML_ELEMENT_NODE || xmlStrcmp(node->name, "triangle")) continue;
|
||||||
|
|
||||||
walls[i].visible = 1;
|
walls[i].visible = 1;
|
||||||
|
@ -57,7 +57,7 @@ static void LoadTriangles(xmlNodePtr node, LEVEL *level, WALL* walls, int nWalls
|
||||||
}
|
}
|
||||||
|
|
||||||
j = -1;
|
j = -1;
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type != XML_ELEMENT_NODE) continue;
|
if(node2->type != XML_ELEMENT_NODE) continue;
|
||||||
|
|
||||||
if(!xmlStrcmp(node2->name, "vertex")) {
|
if(!xmlStrcmp(node2->name, "vertex")) {
|
||||||
|
@ -192,20 +192,20 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
if(!root || xmlStrcmp(root->name, "level")) {
|
if(!root || xmlStrcmp(root->name, "level")) {
|
||||||
xmlFreeDoc(doc);
|
xmlFreeDoc(doc);
|
||||||
xmlCleanupParser();
|
xmlCleanupParser();
|
||||||
return NULL;puts("Loaded.");
|
return NULL;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level = calloc(1, sizeof(LEVEL));
|
level = calloc(1, sizeof(LEVEL));
|
||||||
|
|
||||||
for(node = root->children; node = node->next; node != NULL) {
|
for(node = root->children; node != NULL; node = node->next) {
|
||||||
if(node->type != XML_ELEMENT_NODE) continue;
|
if(node->type != XML_ELEMENT_NODE) continue;
|
||||||
|
|
||||||
if(!xmlStrcmp(node->name, "info")) {
|
if(!xmlStrcmp(node->name, "info")) {
|
||||||
level->info = calloc(1, sizeof(LEVELINFO));
|
level->info = calloc(1, sizeof(LEVELINFO));
|
||||||
|
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type != XML_ELEMENT_NODE) continue;
|
if(node2->type != XML_ELEMENT_NODE) continue;
|
||||||
|
|
||||||
if(!xmlStrcmp(node2->name, "name")) {
|
if(!xmlStrcmp(node2->name, "name")) {
|
||||||
|
@ -242,7 +242,7 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
|
|
||||||
rooms = node;
|
rooms = node;
|
||||||
|
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "room")) level->nRooms++;
|
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "room")) level->nRooms++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,21 +251,23 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
|
|
||||||
gates = node;
|
gates = node;
|
||||||
|
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
node2 = node->children;
|
||||||
|
|
||||||
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "gate")) level->nGates++;
|
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "gate")) level->nGates++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!xmlStrcmp(node->name, "textures")) {
|
else if(!xmlStrcmp(node->name, "textures")) {
|
||||||
if(level->textures != NULL) continue;
|
if(level->textures != NULL) continue;
|
||||||
|
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "texture")) level->nTextures++;
|
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "texture")) level->nTextures++;
|
||||||
}
|
}
|
||||||
|
|
||||||
level->textures = calloc(level->nTextures, sizeof(TEXTURE));
|
level->textures = calloc(level->nTextures, sizeof(TEXTURE));
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type != XML_ELEMENT_NODE || xmlStrcmp(node2->name, "texture")) continue;
|
if(node2->type != XML_ELEMENT_NODE || xmlStrcmp(node2->name, "texture")) continue;
|
||||||
|
|
||||||
data = xmlGetProp(node2, "name");
|
data = xmlGetProp(node2, "name");
|
||||||
|
@ -292,7 +294,7 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
level->rooms = calloc(level->nRooms, sizeof(ROOM));
|
level->rooms = calloc(level->nRooms, sizeof(ROOM));
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for(node = rooms->children; node = node->next; node != NULL) {
|
for(node = rooms->children; node != NULL; node = node->next) {
|
||||||
if(node->type != XML_ELEMENT_NODE || xmlStrcmp(node->name, "room")) continue;
|
if(node->type != XML_ELEMENT_NODE || xmlStrcmp(node->name, "room")) continue;
|
||||||
|
|
||||||
data = xmlGetProp(node, "id");
|
data = xmlGetProp(node, "id");
|
||||||
|
@ -302,7 +304,7 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
xmlFree(data);
|
xmlFree(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "triangle")) level->rooms[i].nWalls++;
|
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "triangle")) level->rooms[i].nWalls++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,7 +320,7 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
level->gates = calloc(level->nGates, sizeof(GATE));
|
level->gates = calloc(level->nGates, sizeof(GATE));
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for(node = gates->children; node = node->next; node != NULL) {
|
for(node = gates->children; node != NULL; node = node->next) {
|
||||||
if(node->type != XML_ELEMENT_NODE || xmlStrcmp(node->name, "gate")) continue;
|
if(node->type != XML_ELEMENT_NODE || xmlStrcmp(node->name, "gate")) continue;
|
||||||
|
|
||||||
data = xmlGetProp(node2, "room1");
|
data = xmlGetProp(node2, "room1");
|
||||||
|
@ -341,7 +343,7 @@ LEVEL *LoadLevel(char *filename) {
|
||||||
xmlFree(data);
|
xmlFree(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(node2 = node->children; node2 = node2->next; node2 != NULL) {
|
for(node2 = node->children; node2 != NULL; node2 = node2->next) {
|
||||||
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "triangle")) level->gates[i].nWalls++;
|
if(node2->type == XML_ELEMENT_NODE && !xmlStrcmp(node2->name, "triangle")) level->gates[i].nWalls++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
7
render.c
7
render.c
|
@ -96,10 +96,15 @@ void Render() {
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, lightmap);
|
glBindTexture(GL_TEXTURE_2D, lightmap);
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
glEnable(GL_TEXTURE_2D);
|
|
||||||
|
|
||||||
for(i = 0; i < nLights; i++) {
|
for(i = 0; i < nLights; i++) {
|
||||||
|
if(room->polygons[0].texture) {
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
glBindTexture(GL_TEXTURE_2D, room->polygons[0].texture);
|
glBindTexture(GL_TEXTURE_2D, room->polygons[0].texture);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
last_tex = room->polygons[0].texture;
|
last_tex = room->polygons[0].texture;
|
||||||
|
|
||||||
glBegin(GL_TRIANGLES);
|
glBegin(GL_TRIANGLES);
|
||||||
|
|
Reference in a new issue