• R/O
  • SSH
  • HTTPS

コミット

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


コミットメタ情報

リビジョン354 (tree)
日時2023-02-28 00:08:08
作者xops-mikan

ログメッセージ

人とマップの当たり判定に関するコードの記述を改善、コメントを追加。

変更サマリ

差分

--- trunk/object.cpp (revision 353)
+++ trunk/object.cpp (revision 354)
@@ -1558,6 +1558,9 @@
15581558 move_x *= HUMAN_ATTENUATION;
15591559 move_z *= HUMAN_ATTENUATION;
15601560
1561+ //※本家XOPSではここで人同士の当たり判定を行う。
1562+ // OpenXOPSにおいては別タイミングで計算するため、以下dist_yは 0.0f 確定であり値としては無意味。
1563+
15611564 //移動ベクトル算出
15621565 dist_x = pos_x - pos_x2;
15631566 dist_y = pos_y - pos_y2;
@@ -1603,7 +1606,7 @@
16031606 if( CheckBlockID[i] == true ){
16041607 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);
16051608 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);
16071610 }
16081611 }
16091612
@@ -1882,11 +1885,11 @@
18821885 }
18831886
18841887 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);
18861889
18871890 //移動先との間にブロックがあるならば元に戻す
18881891 // ※レイの始点がブロックの内側かは判定しない。
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 ){
18901893 pos_x = pos_x2;
18911894 pos_y = pos_y2;
18921895 pos_z = pos_z2;