-
Notifications
You must be signed in to change notification settings - Fork 1
/
cScene.cpp
86 lines (71 loc) · 1.79 KB
/
cScene.cpp
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "cScene.h"
#include "Globals.h"
cScene::cScene(void)
{
}
cScene::~cScene(void)
{
}
bool cScene::LoadLevel(int level)
{
bool res;
FILE *fd;
char file[16];
int i,j,px,py;
char tile;
float coordx_tile, coordy_tile;
res=true;
if(level<10) sprintf(file,"%s0%d%s",(char *)FILENAME,level,(char *)FILENAME_EXT);
else sprintf(file,"%s%d%s",(char *)FILENAME,level,(char *)FILENAME_EXT);
fd=fopen(file,"r");
if(fd==NULL) return false;
id_DL=glGenLists(1);
glNewList(id_DL,GL_COMPILE);
glBegin(GL_QUADS);
for(j=SCENE_HEIGHT-1;j>=0;j--)
{
px=SCENE_Xo;
py=SCENE_Yo+(j*TILE_SIZE);
for(i=0;i<SCENE_WIDTH;i++)
{
fscanf(fd,"%c",&tile);
if(tile==' ')
{
//Tiles must be != 0 !!!
map[(j*SCENE_WIDTH)+i]=0;
}
else
{
//Tiles = 1,2,3,...
map[(j*SCENE_WIDTH)+i] = tile-48;
if(map[(j*SCENE_WIDTH)+i]%2) coordx_tile = 0.0f;
else coordx_tile = 0.5f;
if(map[(j*SCENE_WIDTH)+i]<3) coordy_tile = 0.0f;
else coordy_tile = 0.5f;
//BLOCK_SIZE = 24, FILE_SIZE = 64
// 24 / 64 = 0.375
glTexCoord2f(coordx_tile ,coordy_tile+0.375f); glVertex2i(px ,py );
glTexCoord2f(coordx_tile+0.375f,coordy_tile+0.375f); glVertex2i(px+BLOCK_SIZE,py );
glTexCoord2f(coordx_tile+0.375f,coordy_tile ); glVertex2i(px+BLOCK_SIZE,py+BLOCK_SIZE);
glTexCoord2f(coordx_tile ,coordy_tile ); glVertex2i(px ,py+BLOCK_SIZE);
}
px+=TILE_SIZE;
}
fscanf(fd,"%c",&tile); //pass enter
}
glEnd();
glEndList();
fclose(fd);
return res;
}
void cScene::Draw(int tex_id)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,tex_id);
glCallList(id_DL);
glDisable(GL_TEXTURE_2D);
}
int* cScene::GetMap()
{
return map;
}