|
|
|
@ -101,11 +101,64 @@ int main(int /*argc*/, char */*argv*/[]) |
|
|
|
mapY += stepY; |
|
|
|
side = 1; |
|
|
|
} |
|
|
|
if(worldMap[mapX][mapY] > 0) hit = 1; |
|
|
|
if(side == 0) perpWallDist = (sideDistX - deltaDistX); |
|
|
|
else perpWallDist = (sideDistY - deltaDistY); |
|
|
|
int lineHeight = (int)(h /perpWallDist); |
|
|
|
} |
|
|
|
if(worldMap[mapX][mapY] > 0) hit = 1; |
|
|
|
if(side == 0) perpWallDist = (sideDistX - deltaDistX); |
|
|
|
else perpWallDist = (sideDistY - deltaDistY); |
|
|
|
int lineHeight = (int)(h / perpWallDist); |
|
|
|
int drawStart = -lineHeight / 2 + h / 2; |
|
|
|
if(drawStart < 0) drawStart = 0; |
|
|
|
int drawEnd = lineHeight / 2 + h / 2; |
|
|
|
if(drawEnd >= h) drawEnd = h - 1; |
|
|
|
ColorRGB color; |
|
|
|
switch(worldMap[mapX][mapY]) |
|
|
|
{ |
|
|
|
case 1: color = RGB_Red; break; |
|
|
|
case 2: color = RGB_Green; break; |
|
|
|
case 3: color = RGB_Blue; break; |
|
|
|
case 4: color = RGB_White; break; |
|
|
|
default: colort = RGB_Yellow; break; |
|
|
|
} |
|
|
|
if(side == 1) {color = color / 2;} |
|
|
|
verLine(x, drawStart, drawEnd, color); |
|
|
|
} |
|
|
|
oldTime = time; |
|
|
|
time = getTicks(); |
|
|
|
double frameTime = (time - oldTime) / 1000.0; |
|
|
|
print(1.0 / frameTime); |
|
|
|
redraw(); |
|
|
|
cls(); |
|
|
|
|
|
|
|
double moveSpeed = frameTime * 5.0; |
|
|
|
double rotSpeed = frameTime * 3.0; |
|
|
|
readKeys(); |
|
|
|
if(keyDown(SDLK_UP)) |
|
|
|
{ |
|
|
|
if(worldMap[int(posX + dirX * moveSpeed)][int(posY)] == false) posX += dirX * moveSpeed; |
|
|
|
if(worldMap[int(posX)][int(posY + dirY * moveSpeed)] == false) posY += dirY * moveSpeed; |
|
|
|
} |
|
|
|
if(keyDown(SDLK_DOWN)) |
|
|
|
{ |
|
|
|
if(worldMap[int(posX - dirX * moveSpeed)][int(posY)] == false) posX -= dirX * moveSpeed; |
|
|
|
if(worldMap[int(posX)][int(posY - dirY * moveSpeed)] == false) posY -= dirY * moveSpeed; |
|
|
|
} |
|
|
|
if(keyDown(SDLK_RIGHT)) |
|
|
|
{ |
|
|
|
double oldDirX = dirX; |
|
|
|
dirX = dirC * cos(-rotSpeed) - dirY * sin(-rotSpeed); |
|
|
|
dirY = oldDirX * sin(-rotSpeed) + dirY * cos(-rotSpeed); |
|
|
|
double oldPlaneX = planeX; |
|
|
|
planeX = planeX * cos(-rotSpeed) - planeY * sin(-rotSpeed); |
|
|
|
planeY = oldPlaneX * sin(-rotSpeed) + planeY * cos(-rotSpeed); |
|
|
|
} |
|
|
|
if(keyDown(SDLK_LEFT)) |
|
|
|
{ |
|
|
|
double oldDirX = dirX; |
|
|
|
dirX = dirX * cos(rotSpeed) - dirY * sin(rotSpeed); |
|
|
|
dirY = oldDirX * sin(rotSpeed) + dirY * cos(rotSpeed); |
|
|
|
double oldPlaneX = planeX; |
|
|
|
planeX = planeX * cos(rotSpeed) - planeY * sin(rotSpeed); |
|
|
|
planeY = oldPlaneX * sin(rotSpeed) + planeY * cos(rotSpeed); |
|
|
|
} |
|
|
|
} |
|
|
|
} |