OSDN Git Service

ジャンプモーションの対応
authorangeart <angeart@git.sourceforge.jp>
Tue, 25 Sep 2012 09:27:16 +0000 (18:27 +0900)
committerangeart <angeart@git.sourceforge.jp>
Tue, 25 Sep 2012 09:27:16 +0000 (18:27 +0900)
新バージョンDXライブラリ対応

client/3d/FieldPlayer.hpp
client/3d/MotionPlayer.cpp
client/3d/MotionPlayer.hpp
client/3d/PlayerCharacter.cpp
client/3d/Stage.cpp
client/3d/dx_vector.hpp
client/3d/model.cpp
client/InputManager.cpp

index 64f0fdc..0199141 100644 (file)
Binary files a/client/3d/FieldPlayer.hpp and b/client/3d/FieldPlayer.hpp differ
index b3b83c1..f1550e9 100644 (file)
@@ -5,12 +5,17 @@
 
 MotionPlayer::MotionPlayer(int model_handle)
     : model_handle_(model_handle), prev_attach_index_(-1), current_attach_index_(-1),
-      connect_prev_(false), prev_blend_rate_(0), blend_time_(0),prev_anim_index_(-1),isloop_(true)
+      connect_prev_(false), prev_blend_rate_(0), blend_time_(0),prev_anim_index_(-1),isloop_(true),isloopcheck_(false)
 {}
 
-void MotionPlayer::Play(int anim_index, bool connect_prev, int blend_time, int anim_src_model_handle, bool check_name, bool isloop)
+void MotionPlayer::Play(int anim_index, bool connect_prev, int blend_time, int anim_src_model_handle, bool check_name, bool isloop, int nextanim_handle, bool isloopcheck)
 {
-       prev_anim_index_ = MV1GetAttachAnim(model_handle_,current_attach_index_);
+       if(nextanim_handle != -1)
+       {
+               prev_anim_index_ = nextanim_handle;
+       }else{
+               prev_anim_index_ = MV1GetAttachAnim(model_handle_,current_attach_index_);
+       }
 
        // まだ前回の移行期間の最中なら、移行を中止する
     DetachPrevMotionIfExist();
@@ -19,6 +24,8 @@ void MotionPlayer::Play(int anim_index, bool connect_prev, int blend_time, int a
     prev_blend_rate_ = blend_time;
     blend_time_ = blend_time;
        isloop_ = isloop;
+       isloopcheck_ = isloopcheck;
+       if(!isloopcheck_)isplayend_ = false;
 
     prev_attach_index_ = current_attach_index_;
     if (blend_time_ <= 0)
@@ -100,7 +107,8 @@ void MotionPlayer::AdvancePlayTime(int diff_time)
                if(!isloop_)
                {
                        Stop();
-                       Play(prev_anim_index_,connect_prev_,200,-1,false);
+                       isplayend_ = true;
+                       Play(prev_anim_index_,connect_prev_,200,-1,false,true,-1,isloopcheck_);
                        return;
                }
         anim_time -= anim_total_time;
@@ -123,4 +131,12 @@ void MotionPlayer::AdvancePlayTime(int diff_time)
     }
 }
 
-
+bool MotionPlayer::GetPlayEnd()
+{
+       if(isplayend_)
+       {
+               isplayend_ = false;
+               return true;
+       }
+       return false;
+}
index fecb6b8..d374be8 100644 (file)
@@ -4,9 +4,10 @@ class MotionPlayer
 {
 public:
     MotionPlayer(int model_handle);
-    void Play(int anim_index, bool connect_prev, int blend_time, int anim_src_model_handle, bool check_name, bool isloop = true);
+    void Play(int anim_index, bool connect_prev, int blend_time, int anim_src_model_handle, bool check_name, bool isloop = true, int nextanim_handle = -1,bool isloopcheck = false);
     void Next(int diff_time);
        void Stop();
+       bool GetPlayEnd();
 
 private:
     int model_handle_;
@@ -16,6 +17,8 @@ private:
     int blend_time_;
        bool isloop_;
        int prev_anim_index_;
+       bool isplayend_;
+       bool isloopcheck_;
 
     void SetBlendRateToModel();
     void DetachPrevMotionIfExist();
index 166f8eb..bf8889f 100644 (file)
@@ -243,8 +243,8 @@ public:
                 //moved_pos.y = std::max(moved_pos.y, floor_y); // 床にあたっているときは床の方がyが高くなる
                                if(!jump_flag_){
                                        // 登ったり下ったりできる段差の大きさの制限を求める
-                                       static const float y_max_limit_factor = sin(45 * PHI_F / 180);
-                                       static const float y_min_limit_factor = sin(-45 * PHI_F / 180);
+                                       static const float y_max_limit_factor = sin(45 * DX_PI_F / 180);
+                                       static const float y_min_limit_factor = sin(-45 * DX_PI_F / 180);
                                        const float y_max_limit = y_max_limit_factor * VSize(diff_pos);
                                        const float y_min_limit = y_min_limit_factor * VSize(diff_pos);
 
index 3b5387a..7e07806 100644 (file)
@@ -196,7 +196,7 @@ std::pair<bool,VECTOR> Stage::FrontCollides(float collision_length, const VECTOR
                        {
                                for(int j = 0; j < slide_coll_info.HitNum; ++j)
                                {
-                                       auto angle = (acos(VDot(slide_coll_info.Dim[j].Normal,current_pos - prev_pos) / (VSize(slide_coll_info.Dim[j].Normal) * VSize(current_pos - prev_pos)))*180.0f)/PHI_F;
+                                       auto angle = (acos(VDot(slide_coll_info.Dim[j].Normal,current_pos - prev_pos) / (VSize(slide_coll_info.Dim[j].Normal) * VSize(current_pos - prev_pos)))*180.0f)/DX_PI_F;
                                        if(angle < 90.0f || angle > 270.0f)
                                        {
                                                NowPos += VScale(slide_coll_info.Dim[j].Normal, 0.1f * map_scale_);
index f46b6ba..3b91dc1 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <ostream>
 
-#define TORADIAN(DEGREE)       ((DEGREE*PHI_F)/180.0f)
+#define TORADIAN(DEGREE)       ((DEGREE*DX_PI_F)/180.0f)
 
 inline VECTOR operator +(const VECTOR& lhs, const VECTOR& rhs)
 {
index 831131e..9ff7ac5 100644 (file)
@@ -44,10 +44,10 @@ const float GameLoop::CAMERA_MAX_RADIUS = 40.0f;
 
 GameLoop::GameLoop(const StagePtr& stage)
     : stage_(stage),
-      camera_default_stat(CameraStatus(7.0f, 0.8f, 0.0f, 20 * PHI_F / 180, false)),
+      camera_default_stat(CameraStatus(7.0f, 0.8f, 0.0f, 20 * DX_PI_F / 180, false)),
       camera(camera_default_stat)
 {
-    SetupCamera_Perspective(PHI_F * 60.0f / 180.0f); // 視野角60度
+    SetupCamera_Perspective(DX_PI_F * 60.0f / 180.0f); // 視野角60度
     SetCameraNearFar(1.0f * stage_->map_scale(), 700.0f * stage_->map_scale());
 }
 
@@ -199,12 +199,12 @@ void GameLoop::MoveCamera(InputManager* input)
                        camera.theta += diff_x * 0.005f;
                        camera.phi += diff_y * 0.005f;
                }
-               if(camera.phi < (-40.0f * PHI_F)/180.0f)
+               if(camera.phi < (-40.0f * DX_PI_F)/180.0f)
                {
-                       camera.phi = (-39.9f * PHI_F)/180.0f;
-               }else if(camera.phi > (220.0f * PHI_F)/180.0f)
+                       camera.phi = (-39.9f * DX_PI_F)/180.0f;
+               }else if(camera.phi > (220.0f * DX_PI_F)/180.0f)
                {
-                       camera.phi = (219.0f * PHI_F)/180.0f;
+                       camera.phi = (219.0f * DX_PI_F)/180.0f;
                }
     }
     else
index 362f502..8819139 100644 (file)
Binary files a/client/InputManager.cpp and b/client/InputManager.cpp differ