X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
Revisão | 354 (tree) |
---|---|
Hora | 2023-02-28 00:08:08 |
Autor | xops-mikan |
人とマップの当たり判定に関するコードの記述を改善、コメントを追加。
@@ -1558,6 +1558,9 @@ | ||
1558 | 1558 | move_x *= HUMAN_ATTENUATION; |
1559 | 1559 | move_z *= HUMAN_ATTENUATION; |
1560 | 1560 | |
1561 | + //※本家XOPSではここで人同士の当たり判定を行う。 | |
1562 | + // OpenXOPSにおいては別タイミングで計算するため、以下dist_yは 0.0f 確定であり値としては無意味。 | |
1563 | + | |
1561 | 1564 | //移動ベクトル算出 |
1562 | 1565 | dist_x = pos_x - pos_x2; |
1563 | 1566 | dist_y = pos_y - pos_y2; |
@@ -1603,7 +1606,7 @@ | ||
1603 | 1606 | if( CheckBlockID[i] == true ){ |
1604 | 1607 | CollisionBlockScratch(CollD, inblockdata, i, &pos_x, &pos_y, &pos_z, pos_x2, pos_y2, pos_z2, pos_x + dist_x*HUMAN_MAPCOLLISION_R, pos_y + HUMAN_MAPCOLLISION_HEIGHT, pos_z + dist_z*HUMAN_MAPCOLLISION_R, 0x02); |
1605 | 1608 | CollisionBlockScratch(CollD, inblockdata, i, &pos_x, &pos_y, &pos_z, pos_x2, pos_y2, pos_z2, pos_x + dist_z*HUMAN_MAPCOLLISION_R, pos_y + HUMAN_MAPCOLLISION_HEIGHT, pos_z + dist_x*HUMAN_MAPCOLLISION_R, 0x02); |
1606 | - CollisionBlockScratch(CollD, inblockdata, i, &pos_x, &pos_y, &pos_z, pos_x2, pos_y2, pos_z2, pos_x + dist_z*HUMAN_MAPCOLLISION_R*-1, pos_y + HUMAN_MAPCOLLISION_HEIGHT, pos_z + dist_x*HUMAN_MAPCOLLISION_R*-1, 0x02); | |
1609 | + CollisionBlockScratch(CollD, inblockdata, i, &pos_x, &pos_y, &pos_z, pos_x2, pos_y2, pos_z2, pos_x - dist_z*HUMAN_MAPCOLLISION_R, pos_y + HUMAN_MAPCOLLISION_HEIGHT, pos_z - dist_x*HUMAN_MAPCOLLISION_R, 0x02); | |
1607 | 1610 | } |
1608 | 1611 | } |
1609 | 1612 |
@@ -1882,11 +1885,11 @@ | ||
1882 | 1885 | } |
1883 | 1886 | |
1884 | 1887 | if( player == true ){ |
1885 | - speed = sqrtf(dist_x*dist_x + dist_y*dist_y + dist_z*dist_z); | |
1888 | + speed = VectorNormalization(&dist_x, &dist_y, &dist_z); | |
1886 | 1889 | |
1887 | 1890 | //移動先との間にブロックがあるならば元に戻す |
1888 | 1891 | // ※レイの始点がブロックの内側かは判定しない。 |
1889 | - if( CollD->CheckALLBlockIntersectRay(pos_x2, pos_y2 + HUMAN_MAPCOLLISION_CHECK_HEIGHT, pos_z2, dist_x/speed, dist_y/speed, dist_z/speed, NULL, NULL, &Dist, speed) == true ){ | |
1892 | + if( CollD->CheckALLBlockIntersectRay(pos_x2, pos_y2 + HUMAN_MAPCOLLISION_CHECK_HEIGHT, pos_z2, dist_x, dist_y, dist_z, NULL, NULL, &Dist, speed) == true ){ | |
1890 | 1893 | pos_x = pos_x2; |
1891 | 1894 | pos_y = pos_y2; |
1892 | 1895 | pos_z = pos_z2; |