X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
Revision | 190 (tree) |
---|---|
Zeit | 2017-11-18 14:35:10 |
Autor | xops-mikan |
小物の位置修正フラグ有効時の計算を改善、人に被弾した銃弾の攻撃力減衰量を調整
@@ -100,7 +100,7 @@ | ||
100 | 100 | r = sqrt(x*x + y*y + z*z); |
101 | 101 | |
102 | 102 | //大きくする |
103 | - r += 0.1f; | |
103 | + r += COLLISION_ADDSIZE; | |
104 | 104 | |
105 | 105 | //座標を再計算 |
106 | 106 | cbdata[i].x[j] = cx + cos(rx) * cos(ry) * r; |
@@ -210,12 +210,12 @@ | ||
210 | 210 | } |
211 | 211 | |
212 | 212 | //計算誤差対策のため、わずかに大きめにする。 |
213 | - *min_x -= 0.1f; | |
214 | - *min_y -= 0.1f; | |
215 | - *min_z -= 0.1f; | |
216 | - *max_x += 0.1f; | |
217 | - *max_y += 0.1f; | |
218 | - *max_z += 0.1f; | |
213 | + *min_x -= COLLISION_ADDSIZE; | |
214 | + *min_y -= COLLISION_ADDSIZE; | |
215 | + *min_z -= COLLISION_ADDSIZE; | |
216 | + *max_x += COLLISION_ADDSIZE; | |
217 | + *max_y += COLLISION_ADDSIZE; | |
218 | + *max_z += COLLISION_ADDSIZE; | |
219 | 219 | } |
220 | 220 | |
221 | 221 | //! @brief 空間分割のグループを算出 |
@@ -538,12 +538,12 @@ | ||
538 | 538 | if( rmax_z < RayPos_z ){ rmax_z = RayPos_z; } |
539 | 539 | |
540 | 540 | //計算誤差対策のため、わずかに大きめにする。 |
541 | - rmin_x -= 0.1f; | |
542 | - rmin_y -= 0.1f; | |
543 | - rmin_z -= 0.1f; | |
544 | - rmax_x += 0.1f; | |
545 | - rmax_y += 0.1f; | |
546 | - rmax_z += 0.1f; | |
541 | + rmin_x -= COLLISION_ADDSIZE; | |
542 | + rmin_y -= COLLISION_ADDSIZE; | |
543 | + rmin_z -= COLLISION_ADDSIZE; | |
544 | + rmax_x += COLLISION_ADDSIZE; | |
545 | + rmax_y += COLLISION_ADDSIZE; | |
546 | + rmax_z += COLLISION_ADDSIZE; | |
547 | 547 | } |
548 | 548 | |
549 | 549 | if( maxDist > 0.0f ){ |
@@ -656,12 +656,12 @@ | ||
656 | 656 | if( rmax_z < RayPos_z ){ rmax_z = RayPos_z; } |
657 | 657 | |
658 | 658 | //計算誤差対策のため、わずかに大きめにする。 |
659 | - rmin_x -= 0.1f; | |
660 | - rmin_y -= 0.1f; | |
661 | - rmin_z -= 0.1f; | |
662 | - rmax_x += 0.1f; | |
663 | - rmax_y += 0.1f; | |
664 | - rmax_z += 0.1f; | |
659 | + rmin_x -= COLLISION_ADDSIZE; | |
660 | + rmin_y -= COLLISION_ADDSIZE; | |
661 | + rmin_z -= COLLISION_ADDSIZE; | |
662 | + rmax_x += COLLISION_ADDSIZE; | |
663 | + rmax_y += COLLISION_ADDSIZE; | |
664 | + rmax_z += COLLISION_ADDSIZE; | |
665 | 665 | } |
666 | 666 | |
667 | 667 | if( maxDist > 0.0f ){ |
@@ -976,12 +976,12 @@ | ||
976 | 976 | if( pmax_z < RayPos_z ){ pmax_z = RayPos_z; } |
977 | 977 | |
978 | 978 | //計算誤差対策のため、わずかに大きめにする。 |
979 | - pmin_x -= 0.1f; | |
980 | - pmin_y -= 0.1f; | |
981 | - pmin_z -= 0.1f; | |
982 | - pmax_x += 0.1f; | |
983 | - pmax_y += 0.1f; | |
984 | - pmax_z += 0.1f; | |
979 | + pmin_x -= COLLISION_ADDSIZE; | |
980 | + pmin_y -= COLLISION_ADDSIZE; | |
981 | + pmin_z -= COLLISION_ADDSIZE; | |
982 | + pmax_x += COLLISION_ADDSIZE; | |
983 | + pmax_y += COLLISION_ADDSIZE; | |
984 | + pmax_z += COLLISION_ADDSIZE; | |
985 | 985 | |
986 | 986 | //境界ボックス同士で判定 |
987 | 987 | if( CollideBoxAABB(s_x - s_r, s_y - s_r, s_z - s_r, s_x + s_r, s_y + s_r, s_z + s_r, pmin_x, pmin_y, pmin_z, pmax_x, pmax_y, pmax_z) == false ){ |
@@ -1071,12 +1071,12 @@ | ||
1071 | 1071 | if( pmax_z < RayPos_z ){ pmax_z = RayPos_z; } |
1072 | 1072 | |
1073 | 1073 | //計算誤差対策のため、わずかに大きめにする。 |
1074 | - pmin_x -= 0.1f; | |
1075 | - pmin_y -= 0.1f; | |
1076 | - pmin_z -= 0.1f; | |
1077 | - pmax_x += 0.1f; | |
1078 | - pmax_y += 0.1f; | |
1079 | - pmax_z += 0.1f; | |
1074 | + pmin_x -= COLLISION_ADDSIZE; | |
1075 | + pmin_y -= COLLISION_ADDSIZE; | |
1076 | + pmin_z -= COLLISION_ADDSIZE; | |
1077 | + pmax_x += COLLISION_ADDSIZE; | |
1078 | + pmax_y += COLLISION_ADDSIZE; | |
1079 | + pmax_z += COLLISION_ADDSIZE; | |
1080 | 1080 | |
1081 | 1081 | //境界ボックス同士で判定 |
1082 | 1082 | if( CollideBoxAABB(box_min_x, box_min_y, box_min_z, box_max_x, box_max_y, box_max_z, pmin_x, pmin_y, pmin_z, pmax_x, pmax_y, pmax_z) == false ){ |
@@ -32,6 +32,8 @@ | ||
32 | 32 | #ifndef COLLISION_H |
33 | 33 | #define COLLISION_H |
34 | 34 | |
35 | +#define COLLISION_ADDSIZE 0.1f //!< 当たり判定範囲の加算量 | |
36 | + | |
35 | 37 | #ifndef H_LAYERLEVEL |
36 | 38 | #define H_LAYERLEVEL 2 //!< Select include file. |
37 | 39 | #endif |
@@ -2204,6 +2204,7 @@ | ||
2204 | 2204 | //! @brief ブロックの上に移動 |
2205 | 2205 | //! @param CollD Collisionのポインタ |
2206 | 2206 | //! @return 元の座標からの移動量(0で移動なし) |
2207 | +//! @attention ブロックに埋まっている場合でも、下のブロックまで すり抜けます。 | |
2207 | 2208 | float smallobject::CollisionMap(class Collision *CollD) |
2208 | 2209 | { |
2209 | 2210 | //クラスが設定されていなければ失敗 |
@@ -2212,11 +2213,8 @@ | ||
2212 | 2213 | float Dist; |
2213 | 2214 | SmallObjectParameter ParamData; |
2214 | 2215 | |
2215 | - //ブロックに埋まっていれば、そのまま | |
2216 | - if( CollD->CheckALLBlockInside(pos_x, pos_y, pos_z) == true ){ return 0.0f; } | |
2217 | - | |
2218 | 2216 | //下方向に当たり判定 |
2219 | - if( CollD->CheckALLBlockIntersectRay(pos_x, pos_y, pos_z, 0, -1, 0, NULL, NULL, &Dist, 1000.0f) == true ){ | |
2217 | + if( CollD->CheckALLBlockIntersectRay(pos_x, pos_y + COLLISION_ADDSIZE, pos_z, 0, -1, 0, NULL, NULL, &Dist, 1000.0f) == true ){ | |
2220 | 2218 | //当たり判定の大きさを取得 |
2221 | 2219 | if( id_parameter == TOTAL_PARAMETERINFO_SMALLOBJECT+1 -1 ){ |
2222 | 2220 | Dist -= (float)MIFdata->GetAddSmallobjectDecide()/10.0f; |
@@ -823,7 +823,7 @@ | ||
823 | 823 | BulletObj_HumanIndex[objectID].SetIndexFlag(HumanHead_id); |
824 | 824 | |
825 | 825 | //攻撃力と貫通力を計算 |
826 | - attacks = (int)((float)attacks * 0.6f); | |
826 | + attacks = (int)((float)attacks * 0.5f); | |
827 | 827 | penetration -= 1; |
828 | 828 | |
829 | 829 | CheckDist = HumanHead_Dist + 1.0f; |