X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 190 (tree) |
|---|---|
| Time | 2017-11-18 14:35:10 |
| Author | |
小物の位置修正フラグ有効時の計算を改善、人に被弾した銃弾の攻撃力減衰量を調整
| @@ -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; |