diff --git a/main.cpp b/main.cpp index 4d23d67..f89b508 100644 --- a/main.cpp +++ b/main.cpp @@ -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); } } }