• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

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

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


Commit MetaInfo

Revision263 (tree)
Time2021-02-21 10:55:18
Authorxops-mikan

Log Message

人とマップの当たり判定でブロック面の判定処理を改良、コメントを追加

Change Summary

Incremental Difference

--- trunk/object.cpp (revision 262)
+++ trunk/object.cpp (revision 263)
@@ -1524,10 +1524,13 @@
15241524 int cnt = 0;
15251525 float ang = atan2(move_z, move_x);
15261526
1527+ //落下
15271528 pos_y += move_y*0.33f;
15281529
15291530 if( player == true ){
15301531 cnt = 0;
1532+
1533+ //4方向判定 No.1
15311534 if( CollD->CheckALLBlockInside(pos_x + cos(ang)*0.15f, pos_y - 0.5f, pos_z + sin(ang)*0.15f) == true ){ cnt += 1; }
15321535 if( CollD->CheckALLBlockInside(pos_x - cos(ang)*0.15f, pos_y - 0.5f, pos_z - sin(ang)*0.15f) == true ){ cnt += 1; }
15331536 if( CollD->CheckALLBlockInside(pos_x + cos(ang + (float)M_PI/2)*0.15f, pos_y - 0.5f, pos_z + sin(ang + (float)M_PI/2)*0.15f) == true ){ cnt += 1; }
@@ -1534,6 +1537,7 @@
15341537 if( CollD->CheckALLBlockInside(pos_x + cos(ang - (float)M_PI/2)*0.15f, pos_y - 0.5f, pos_z + sin(ang - (float)M_PI/2)*0.15f) == true ){ cnt += 1; }
15351538 if( cnt == 4 ){ FallFlag = true; break; }
15361539
1540+ //4方向判定 No.2
15371541 if( CollD->CheckALLBlockInside(pos_x + cos(ang)*0.5f, pos_y - 0.5f, pos_z + sin(ang)*0.5f) == true ){ cnt += 1; }
15381542 if( CollD->CheckALLBlockInside(pos_x - cos(ang)*0.5f, pos_y - 0.5f, pos_z - sin(ang)*0.5f) == true ){ cnt += 1; }
15391543 if( CollD->CheckALLBlockInside(pos_x + cos(ang + (float)M_PI/2)*0.5f, pos_y - 0.5f, pos_z + sin(ang + (float)M_PI/2)*0.5f) == true ){ cnt += 1; }
@@ -1541,7 +1545,10 @@
15411545 if( cnt == 4 ){ FallFlag = true; break; }
15421546 }
15431547 else{
1548+ //真下判定
15441549 if( CollD->CheckALLBlockInside(pos_x, pos_y - 0.5f, pos_z) == true ){ FallFlag = true; break; }
1550+
1551+ //外側へ0.3だけ外して判定
15451552 if( CollD->CheckALLBlockInside(pos_x + cos(ang)*0.3f, pos_y - 0.5f, pos_z + sin(ang)*0.3f) == true ){ FallFlag = true; break; }
15461553 }
15471554
@@ -1552,6 +1559,7 @@
15521559 move_y_flag = true;
15531560 }
15541561
1562+ //地面に接地している場合の処理
15551563 if( FallFlag == true ){
15561564 int id, face;
15571565 struct blockdata bdata;
@@ -1653,7 +1661,6 @@
16531661
16541662 float px2, py2, pz2;
16551663 float vx, vy, vz;
1656- float speed;
16571664 float dist;
16581665 int id, face;
16591666 float face_vx, face_vy, face_vz, face_angle, face_angle_per;
@@ -1663,14 +1670,6 @@
16631670 py2 = *py;
16641671 pz2 = *pz;
16651672
1666- //追突したブロック面取得
1667- vx = in_vx - px_old;
1668- vy = in_vy - py_old;
1669- vz = in_vz - pz_old;
1670- speed = VectorNormalization(&vx, &vy, &vz);
1671- if( CollD->CheckALLBlockIntersectDummyRay(px_old, py_old, pz_old, vx, vy, vz, NULL, NULL, &dist, speed) == false ){ return false; }
1672- if( CollD->CheckALLBlockIntersectRay(px_old, py_old, pz_old, vx, vy, vz, &id, &face, &dist, speed) == false ){ return false; }
1673-
16741673 //現在の移動ベクトルと距離算出
16751674 vx = *px - px_old;
16761675 vy = *py - py_old;
@@ -1677,6 +1676,10 @@
16771676 vz = *pz - pz_old;
16781677 dist = VectorNormalization(&vx, &vy, &vz);
16791678
1679+ //追突したブロック面取得
1680+ if( CollD->CheckALLBlockIntersectDummyRay(in_vx - vx, in_vy - vy, in_vz - vz, vx, vy, vz, NULL, NULL, &temp, dist) == false ){ return false; }
1681+ if( CollD->CheckALLBlockIntersectRay(in_vx - vx, in_vy - vy, in_vz - vz, vx, vy, vz, &id, &face, &temp, dist) == false ){ return false; }
1682+
16801683 //ブロックに沿って移動するベクトルと進入角度を求める
16811684 if( CollD->ScratchAngleVector(id, face, vx, vy, vz, &vx, &vy, &vz, &face_angle) == false ){ return false; }
16821685