• R/O
  • SSH
  • HTTPS

コミット

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

javaandroidc++linuxc#windowsobjective-ccocoaqtpython誰得phprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

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


コミットメタ情報

リビジョン350 (tree)
日時2023-02-05 21:27:23
作者xops-mikan

ログメッセージ

弾丸管理クラス(bullet)の弾速をint型からfloat型に変更、弾の当たり判定を修正

変更サマリ

差分

--- trunk/object.cpp (revision 349)
+++ trunk/object.cpp (revision 350)
@@ -2773,10 +2773,10 @@
27732773 rotation_y = 0.0f;
27742774 attacks = 0;
27752775 penetration = 0;
2776- speed = 0;
2776+ speed = 0.0f;
27772777 teamid = 0;
27782778 humanid = 0;
2779- ontargetcnt = 0;
2779+ ontargetcnt = 0.0f;
27802780 cnt = 0;
27812781 }
27822782
@@ -2807,7 +2807,7 @@
28072807 //! @param _humanid 人のデータ番号
28082808 //! @param _ontargetcnt 命中時のカウント数
28092809 //! @param init オブジェクトを初期化
2810-void bullet::SetParamData(int _attacks, int _penetration, int _speed, int _teamid, int _humanid, float _ontargetcnt, bool init)
2810+void bullet::SetParamData(int _attacks, int _penetration, float _speed, int _teamid, int _humanid, float _ontargetcnt, bool init)
28112811 {
28122812 attacks = _attacks;
28132813 penetration = _penetration;
@@ -2843,7 +2843,7 @@
28432843 //! @param _teamid チーム番号を受け取るポインタ(NULL可)
28442844 //! @param _humanid 人のデータ番号を受け取るポインタ(NULL可)
28452845 //! @param _ontargetcnt 命中時のカウント数を受け取るポインタ(NULL可)
2846-void bullet::GetParamData(int *_attacks, int *_penetration, int *_speed, int *_teamid, int *_humanid, float *_ontargetcnt)
2846+void bullet::GetParamData(int *_attacks, int *_penetration, float *_speed, int *_teamid, int *_humanid, float *_ontargetcnt)
28472847 {
28482848 if( _attacks != NULL ){ *_attacks = attacks; }
28492849 if( _penetration != NULL ){ *_penetration = penetration; }
--- trunk/object.h (revision 349)
+++ trunk/object.h (revision 350)
@@ -303,7 +303,7 @@
303303 float rotation_y; //!< 回転角度
304304 int attacks; //!< 攻撃力
305305 int penetration; //!< 貫通力
306- int speed; //!< 弾速
306+ float speed; //!< 弾速
307307 int teamid; //!< チーム番号
308308 int humanid; //!< 人のデータ番号
309309 float ontargetcnt; //!< 命中時のカウント数
@@ -313,9 +313,9 @@
313313 bullet(int modelid = -1, int textureid = -1);
314314 ~bullet();
315315 virtual void SetPosData(float x, float y, float z, float rx, float ry);
316- virtual void SetParamData(int _attacks, int _penetration, int _speed, int _teamid, int _humanid, float _ontargetcnt, bool init);
316+ virtual void SetParamData(int _attacks, int _penetration, float _speed, int _teamid, int _humanid, float _ontargetcnt, bool init);
317317 virtual void GetPosData(float *x, float *y, float *z, float *rx, float *ry);
318- virtual void GetParamData(int *_attacks, int *_penetration, int *_speed, int *_teamid, int *_humanid, float *_ontargetcnt);
318+ virtual void GetParamData(int *_attacks, int *_penetration, float *_speed, int *_teamid, int *_humanid, float *_ontargetcnt);
319319 virtual int ProcessObject();
320320 virtual void Render(class D3DGraphics *d3dg, bool NoModel);
321321 };
--- trunk/objectmanager.cpp (revision 349)
+++ trunk/objectmanager.cpp (revision 350)
@@ -682,7 +682,7 @@
682682 float brx, bry;
683683 int attacks;
684684 int penetration;
685- int speed;
685+ float speed;
686686 int teamid;
687687 int humanid;
688688 float ontargetcnt;
@@ -703,12 +703,12 @@
703703 vz = sinf(brx)*cosf(bry);
704704
705705 //マップとの当たり判定(弾道上にブロックがあるか)
706- if( CollD->CheckALLBlockIntersectRay(bx, by, bz, vx, vy, vz, NULL, NULL, &Dist, (float)speed) == true ){
706+ if( CollD->CheckALLBlockIntersectRay(bx, by, bz, vx, vy, vz, NULL, NULL, &Dist, speed) == true ){
707707 mapflag = 1;
708708 }
709709
710710 // BULLET_SPEEDSCALE定数 の分解能を算出
711- int maxcnt = (int)ceilf(speed / BULLET_SPEEDSCALE);
711+ int maxcnt = (int)roundf(speed / BULLET_SPEEDSCALE);
712712
713713 // BULLET_SPEEDSCALE定数 の分解能で当たり判定
714714 for(int cnt=0; cnt<maxcnt; cnt++){
@@ -720,9 +720,9 @@
720720 }
721721
722722 float bvx, bvy, bvz;
723- bvx = bx + vx * BULLET_SPEEDSCALE * cnt;
724- bvy = by + vy * BULLET_SPEEDSCALE * cnt;
725- bvz = bz + vz * BULLET_SPEEDSCALE * cnt;
723+ bvx = bx + vx * BULLET_SPEEDSCALE * (cnt+1);
724+ bvy = by + vy * BULLET_SPEEDSCALE * (cnt+1);
725+ bvz = bz + vz * BULLET_SPEEDSCALE * (cnt+1);
726726
727727 //人との当たり判定
728728 for(int i=0; i<MAX_HUMAN; i++){
@@ -2015,7 +2015,7 @@
20152015
20162016 //銃弾を発射
20172017 newbullet->SetPosData(pos_x, pos_y + WEAPONSHOT_HEIGHT, pos_z, rx2, ry2);
2018- newbullet->SetParamData(attacks, ParamData.penetration, (int)((float)ParamData.speed * BULLET_SPEEDSCALE), teamid, human_id, ontargetcnt, true);
2018+ newbullet->SetParamData(attacks, ParamData.penetration, (float)ParamData.speed * BULLET_SPEEDSCALE, teamid, human_id, ontargetcnt, true);
20192019 newbullet->SetEnableFlag(true);
20202020
20212021 //対人判定用リスト初期化
@@ -2763,8 +2763,8 @@
27632763 if( demomode == false ){
27642764 //弾オブジェクトの処理
27652765 for(int i=0; i<MAX_BULLET; i++){
2766- float bx, by, bz, brx, bry;
2767- int speed, teamid;
2766+ float bx, by, bz, brx, bry, speed;
2767+ int teamid;
27682768 float mx, my, mz;
27692769
27702770 CollideBullet(&BulletIndex[i]); //当たり判定を実行