SHOW:
|
|
- or go back to the newest paste.
1 | float posX = 9, posY = 12.5; | |
2 | float dirX = -1, dirY = 0; | |
3 | float planeX = 0, planeY = 0.9; | |
4 | float time = 0, oldTime = 0; | |
5 | ||
6 | float cameraX, rayPosX, rayPosY, rayDirX, rayDirY, sideDistX, sideDistY, deltaDistX, deltaDistY, perpWallDist, frameTime, moveSpeed, rotSpeed, oldDirX, oldPlaneX; | |
7 | int x, y, mapX, mapY, stepX, stepY, hit, side, lineHeight, drawStart, drawEnd; | |
8 | ||
9 | - | cameraX = fdiv(FIX(2 * x), FIX(screenWidth)) - FIX(1); |
9 | + | cameraX = 2 * x / (float)(screenWidth) -1; |
10 | rayPosX = posX; | |
11 | rayPosY = posY; | |
12 | - | rayDirX = dirX + fmul(planeX, cameraX); |
12 | + | rayDirX = dirX + planeX * cameraX; |
13 | - | rayDirY = dirY + fmul(planeY, cameraX); |
13 | + | rayDirY = dirY + planeY * cameraX; |
14 | ||
15 | - | mapX = UNFIX(rayPosX); |
15 | + | mapX = (int)(rayPosX); |
16 | - | mapY = UNFIX(rayPosY); |
16 | + | mapY = (int)(rayPosY); |
17 | - | deltaDistX = ftofix(SquareRootFloat(fixtof(FIX(1) + fdiv(fmul(rayDirY, rayDirY), fmul(rayDirX, rayDirX))))); |
17 | + | deltaDistX = SquareRootFloat(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX)); |
18 | - | deltaDistY = ftofix(SquareRootFloat(fixtof(FIX(1) + fdiv(fmul(rayDirX, rayDirX), fmul(rayDirY, rayDirY))))); |
18 | + | deltaDistY = SquareRootFloat(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY)); |
19 | hit = 0; | |
20 | ||
21 | - | if (rayDirX < FIX(0)) |
21 | + | if (rayDirX < 0) |
22 | { | |
23 | stepX = -1; | |
24 | - | sideDistX = fmul(rayPosX - FIX(mapX), deltaDistX); |
24 | + | sideDistX = (rayPosX - mapX) * deltaDistX; |
25 | } | |
26 | else | |
27 | { | |
28 | stepX = 1; | |
29 | - | sideDistX = fmul(FIX(mapX + 1) - rayPosX, deltaDistX); |
29 | + | sideDistX = (mapX + 1.0 - rayPosX) * deltaDistX; |
30 | } | |
31 | - | if (rayDirY < FIX(0)) |
31 | + | if (rayDirY < 0) |
32 | { | |
33 | stepY = -1; | |
34 | - | sideDistY = fmul(rayPosY - FIX(mapY), deltaDistY); |
34 | + | sideDistY = (rayPosY - mapY) * deltaDistY; |
35 | } | |
36 | else | |
37 | { | |
38 | stepY = 1; | |
39 | - | sideDistY = fmul(FIX(mapY + 1) - rayPosY, deltaDistY); |
39 | + | sideDistY = (mapY + 1.0 - rayPosY) * deltaDistY; |
40 | } | |
41 | ||
42 | while (hit == 0) | |
43 | { | |
44 | if (sideDistX < sideDistY) | |
45 | { | |
46 | sideDistX += deltaDistX; | |
47 | mapX += stepX; | |
48 | side = 0; | |
49 | } | |
50 | else | |
51 | { | |
52 | sideDistY += deltaDistY; | |
53 | mapY += stepY; | |
54 | side = 1; | |
55 | } | |
56 | ||
57 | if (worldMap[mapX][mapY] > 0) hit = 1; | |
58 | } |