X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 269 (tree) |
|---|---|
| Time | 2021-03-07 15:59:01 |
| Author | |
オブジェクトログにて地形による死亡が取得・判定できないバグの修正、エフェクトのビルボード化処理タイミングを変更
| @@ -299,7 +299,7 @@ | ||
| 299 | 299 | void opening::Process() |
| 300 | 300 | { |
| 301 | 301 | //オブジェクトマネージャーを実行 |
| 302 | - ObjMgr.Process(-1, false, camera_rx, camera_ry, false); | |
| 302 | + ObjMgr.Process(-1, false, false); | |
| 303 | 303 | |
| 304 | 304 | //AIを実行 |
| 305 | 305 | for(int i=0; i<MAX_HUMAN; i++){ |
| @@ -372,7 +372,7 @@ | ||
| 372 | 372 | d3dg->RenderMapdata(false); |
| 373 | 373 | |
| 374 | 374 | //オブジェクトを描画 |
| 375 | - ObjMgr.Render(camera_x, camera_y, camera_z, 0, false); | |
| 375 | + ObjMgr.Render(camera_x, camera_y, camera_z, camera_rx, camera_ry, 0, false); | |
| 376 | 376 | } |
| 377 | 377 | |
| 378 | 378 | void opening::Render2D() |
| @@ -708,7 +708,7 @@ | ||
| 708 | 708 | void mainmenu::Process() |
| 709 | 709 | { |
| 710 | 710 | //オブジェクトマネージャーを実行 |
| 711 | - ObjMgr.Process(-1, true, camera_rx, camera_ry, false); | |
| 711 | + ObjMgr.Process(-1, true, false); | |
| 712 | 712 | |
| 713 | 713 | //AIを実行 |
| 714 | 714 | for(int i=0; i<MAX_HUMAN; i++){ |
| @@ -747,7 +747,7 @@ | ||
| 747 | 747 | d3dg->RenderMapdata(false); |
| 748 | 748 | |
| 749 | 749 | //オブジェクトを描画 |
| 750 | - ObjMgr.Render(camera_x, camera_y, camera_z, 0, false); | |
| 750 | + ObjMgr.Render(camera_x, camera_y, camera_z, camera_rx, camera_ry, 0, false); | |
| 751 | 751 | } |
| 752 | 752 | |
| 753 | 753 | void mainmenu::Render2D() |
| @@ -2428,7 +2428,7 @@ | ||
| 2428 | 2428 | else{ |
| 2429 | 2429 | cmdF5id = -1; |
| 2430 | 2430 | } |
| 2431 | - ObjMgr.Process(cmdF5id, false, camera_rx, camera_ry, DarkScreenFlag); | |
| 2431 | + ObjMgr.Process(cmdF5id, false, DarkScreenFlag); | |
| 2432 | 2432 | |
| 2433 | 2433 | //プレイヤーの戦歴を加算 |
| 2434 | 2434 | ObjMgr.GetHumanShotInfo( ObjMgr.GetPlayerID(), &ontarget, &kill, &headshot); |
| @@ -2673,7 +2673,7 @@ | ||
| 2673 | 2673 | } |
| 2674 | 2674 | } |
| 2675 | 2675 | //オブジェクトを描画 |
| 2676 | - ObjMgr.Render(camera_x, camera_y, camera_z, DrawPlayer, nomodel); | |
| 2676 | + ObjMgr.Render(camera_x, camera_y, camera_z, camera_rx, camera_ry, DrawPlayer, nomodel); | |
| 2677 | 2677 | |
| 2678 | 2678 | //AIデバック情報表示 |
| 2679 | 2679 | if( AIdebuginfoID != -1 ){ |
| @@ -1807,6 +1807,8 @@ | ||
| 1807 | 1807 | |
| 1808 | 1808 | //if( CheckDead == 0 ){ |
| 1809 | 1809 | if( (CheckDead == 0)||(deadstate == 1) ){ |
| 1810 | + int hp_old = hp; | |
| 1811 | + | |
| 1810 | 1812 | //進行方向と速度を決定 |
| 1811 | 1813 | ControlProcess(); |
| 1812 | 1814 |
| @@ -1813,6 +1815,11 @@ | ||
| 1813 | 1815 | //マップとの当たり判定 |
| 1814 | 1816 | CollisionMap(CollD, inblockdata, AddCollisionFlag, player); |
| 1815 | 1817 | |
| 1818 | + //今回のマップとの当たり判定でHPがゼロになったなら、地形による死亡 | |
| 1819 | + if( (hp_old >0)&&(hp <= 0) ){ | |
| 1820 | + return 4; | |
| 1821 | + } | |
| 1822 | + | |
| 1816 | 1823 | //今回の当たり判定で-100.0より下に落ちたら、死亡 |
| 1817 | 1824 | if( CheckDead == 0 ){ |
| 1818 | 1825 | if( pos_y < HUMAN_DEADLINE ){ |
| @@ -2849,11 +2856,9 @@ | ||
| 2849 | 2856 | //} |
| 2850 | 2857 | } |
| 2851 | 2858 | |
| 2852 | -//! @brief 計算を実行(ビルボード化) | |
| 2853 | -//! @param camera_rx カメラの横軸角度 | |
| 2854 | -//! @param camera_ry カメラの縦軸角度 | |
| 2859 | +//! @brief 計算を実行(エフェクト移動・時間消滅) | |
| 2855 | 2860 | //! @return 処理実行:1 描画最終フレーム:2 処理なし:0 |
| 2856 | -int effect::RunFrame(float camera_rx, float camera_ry) | |
| 2861 | +int effect::RunFrame() | |
| 2857 | 2862 | { |
| 2858 | 2863 | //初期化されていなければ処理しない |
| 2859 | 2864 | if( EnableFlag == false ){ return 0; } |
| @@ -2864,12 +2869,6 @@ | ||
| 2864 | 2869 | return 2; |
| 2865 | 2870 | } |
| 2866 | 2871 | |
| 2867 | - if( (type & EFFECT_NOBILLBOARD) == 0 ){ | |
| 2868 | - //カメラ座標を適用し、ビルボード化する | |
| 2869 | - rotation_x = camera_rx*-1; | |
| 2870 | - rotation_y = camera_ry; | |
| 2871 | - } | |
| 2872 | - | |
| 2873 | 2872 | //座標移動 |
| 2874 | 2873 | pos_x += move_x; |
| 2875 | 2874 | pos_y += move_y; |
| @@ -2902,8 +2901,10 @@ | ||
| 2902 | 2901 | |
| 2903 | 2902 | //! @brief 描画 |
| 2904 | 2903 | //! @param d3dg D3DGraphicsのポインタ |
| 2904 | +//! @param camera_rx カメラの横軸角度 | |
| 2905 | +//! @param camera_ry カメラの縦軸角度 | |
| 2905 | 2906 | //! @param NoModel モデル描画無効化 |
| 2906 | -void effect::Render(class D3DGraphics *d3dg, bool NoModel) | |
| 2907 | +void effect::Render(class D3DGraphics *d3dg, float camera_rx, float camera_ry, bool NoModel) | |
| 2907 | 2908 | { |
| 2908 | 2909 | //クラスが設定されていなければ失敗 |
| 2909 | 2910 | if( d3dg == NULL ){ return; } |
| @@ -2911,6 +2912,12 @@ | ||
| 2911 | 2912 | //初期化されていなければ処理しない。 |
| 2912 | 2913 | if( EnableFlag == false ){ return; } |
| 2913 | 2914 | |
| 2915 | + if( (type & EFFECT_NOBILLBOARD) == 0 ){ | |
| 2916 | + //カメラ座標を適用し、ビルボード化する | |
| 2917 | + rotation_x = camera_rx*-1; | |
| 2918 | + rotation_y = camera_ry; | |
| 2919 | + } | |
| 2920 | + | |
| 2914 | 2921 | //描画 |
| 2915 | 2922 | d3dg->SetWorldTransformEffect(pos_x, pos_y, pos_z, rotation_x, rotation_y, rotation_texture, model_size); |
| 2916 | 2923 | d3dg->RenderBoard(id_texture, alpha, NoModel); |
| @@ -359,8 +359,8 @@ | ||
| 359 | 359 | virtual int GetTextureID(); |
| 360 | 360 | virtual void GetMove(float *mx, float *my, float *mz); |
| 361 | 361 | virtual bool GetCollideMapFlag(); |
| 362 | - virtual int RunFrame(float camera_rx, float camera_ry); | |
| 363 | - virtual void Render(class D3DGraphics *d3dg, bool NoModel); | |
| 362 | + virtual int RunFrame(); | |
| 363 | + virtual void Render(class D3DGraphics *d3dg, float camera_rx, float camera_ry, bool NoModel); | |
| 364 | 364 | }; |
| 365 | 365 | |
| 366 | 366 | //! @brief 人モーション制御クラス |
| @@ -2616,13 +2616,11 @@ | ||
| 2616 | 2616 | //! @brief オブジェクトの主計算処理 |
| 2617 | 2617 | //! @param cmdF5id 上昇機能(F5裏技)させる人データ番号(-1で機能無効) |
| 2618 | 2618 | //! @param demomode デモモード |
| 2619 | -//! @param camera_rx カメラの横軸角度 | |
| 2620 | -//! @param camera_ry カメラの縦軸角度 | |
| 2621 | 2619 | //! @param screen 画面を暗くする |
| 2622 | 2620 | //! @return 常に 0 |
| 2623 | 2621 | //! @attention 一般的に cmdF5id は、F5裏技使用中はプレイヤー番号(GetPlayerID()関数で取得)、未使用時は -1 を指定します。 |
| 2624 | 2622 | //! @attention demomode は主にメニュー画面で使用します。有効にすると、銃弾・手榴弾を処理しません。 |
| 2625 | -int ObjectManager::Process(int cmdF5id, bool demomode, float camera_rx, float camera_ry, bool screen) | |
| 2623 | +int ObjectManager::Process(int cmdF5id, bool demomode, bool screen) | |
| 2626 | 2624 | { |
| 2627 | 2625 | //このフレームの戦歴を初期化 |
| 2628 | 2626 | for(int i=0; i<MAX_HUMAN; i++){ |
| @@ -2738,7 +2736,7 @@ | ||
| 2738 | 2736 | EffectIndex[i].SetEnableFlag(false); |
| 2739 | 2737 | } |
| 2740 | 2738 | else{ |
| 2741 | - EffectIndex[i].RunFrame(camera_rx, camera_ry); | |
| 2739 | + EffectIndex[i].RunFrame(); | |
| 2742 | 2740 | EffectIndex[i].SetDarkModelFlag(screen); |
| 2743 | 2741 | } |
| 2744 | 2742 | } |
| @@ -2874,9 +2872,11 @@ | ||
| 2874 | 2872 | //! @param camera_x カメラのX座標 |
| 2875 | 2873 | //! @param camera_y カメラのY座標 |
| 2876 | 2874 | //! @param camera_z カメラのZ座標 |
| 2875 | +//! @param camera_rx カメラの横軸角度 | |
| 2876 | +//! @param camera_ry カメラの縦軸角度 | |
| 2877 | 2877 | //! @param HidePlayer プレイヤーの描画設定 (描画する:0 描画しない:1 腕と武器のみ描画する:2) |
| 2878 | 2878 | //! @param NoModel モデル描画無効化 |
| 2879 | -void ObjectManager::Render(float camera_x, float camera_y, float camera_z, int HidePlayer, bool NoModel) | |
| 2879 | +void ObjectManager::Render(float camera_x, float camera_y, float camera_z, float camera_rx, float camera_ry, int HidePlayer, bool NoModel) | |
| 2880 | 2880 | { |
| 2881 | 2881 | //ワールド座標を原点へ |
| 2882 | 2882 | d3dg->ResetWorldTransform(); |
| @@ -2969,13 +2969,13 @@ | ||
| 2969 | 2969 | d3dg->StartEffectRender(); |
| 2970 | 2970 | /* |
| 2971 | 2971 | for(int i=0; i<MAX_EFFECT; i++){ |
| 2972 | - EffectIndex[i].Render(d3dg, NoModel); | |
| 2972 | + EffectIndex[i].Render(d3dg, camera_rx, camera_ry, NoModel); | |
| 2973 | 2973 | } |
| 2974 | 2974 | */ |
| 2975 | 2975 | effectdata data[MAX_EFFECT]; |
| 2976 | 2976 | int cnt = SortEffect(camera_x, camera_y, camera_z, data); |
| 2977 | 2977 | for(int i=0; i<cnt; i++) { |
| 2978 | - EffectIndex[ data[i].id ].Render(d3dg, NoModel); | |
| 2978 | + EffectIndex[ data[i].id ].Render(d3dg, camera_rx, camera_ry, NoModel); | |
| 2979 | 2979 | } |
| 2980 | 2980 | d3dg->EndEffectRender(); |
| 2981 | 2981 | } |
| @@ -171,9 +171,9 @@ | ||
| 171 | 171 | bool HumanResuscitation(int id); |
| 172 | 172 | int CheckGameOverorComplete(); |
| 173 | 173 | bool GetObjectInfoTag(float camera_x, float camera_y, float camera_z, float camera_rx, float camera_ry, int *color, char *infostr); |
| 174 | - int Process(int cmdF5id, bool demomode, float camera_rx, float camera_ry, bool screen); | |
| 174 | + int Process(int cmdF5id, bool demomode, bool screen); | |
| 175 | 175 | bool GetHumanShotInfo(int id, float *ontarget, int *kill, int *headshot); |
| 176 | - void Render(float camera_x, float camera_y, float camera_z, int HidePlayer, bool NoModel); | |
| 176 | + void Render(float camera_x, float camera_y, float camera_z, float camera_rx, float camera_ry, int HidePlayer, bool NoModel); | |
| 177 | 177 | void RenderLog(int x, int y); |
| 178 | 178 | void Cleanup(); |
| 179 | 179 | }; |