OROCHI
 
Loading...
Searching...
No Matches
GxModUnitMotionBlend.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_MOTION_NAMESPACE_BEGIN()
13
14//===========================================================================
16//===========================================================================
18{
19 //-------------------------------------------------------------
21 //-------------------------------------------------------------
23public:
24 // RTTI定義
26
27
28 enum class MOTION_PLAYER
29 {
30 BASE,
31 BLEND_START,
32 BLEND_1 = BLEND_START,
33 BLEND_2,
34 BLEND_3,
35 BLEND_END = BLEND_3,
36 MAX,
37 BLEND_MAX = BLEND_END - BLEND_START + 1,
38 };
39
41 //-------------------------------------------------------------
43 //-------------------------------------------------------------
45public:
49 ~GxModUnitMotionBlend(void) override;
51 void initialize(GxResMotionPackage* pResMotPackage) override;
52
54 //-------------------------------------------------------------
56 //-------------------------------------------------------------
58public:
60 b32 setup(void) override;
62 void preAsyncUpdate(void) override;
64 void asyncUpdate(void) override;
66 void updateMotionJoint(void);
68 void updateFrame(void);
70 b32 change(s32 motionNumber = static_cast<s32>(MOTION_INDEX::BEGIN), f32 startFrame = 0.f, f32 speedRatio = 1.f, f32 transitionFrameNb = 9.f, u32 playbackFlags = 0);
72 b32 changeMotion(s32 motionNumber = static_cast<s32>(MOTION_INDEX::BEGIN));
74 GX_FORCE_INLINE void updateJoints(void) { updateJointLocalData(); updateJointMatrices(static_cast<s32>(NODE::LOCATOR_ROOT), getJointCount()); }
76 void updateJointLocalData(void);
78 void updateJointMatrices(u32 jointStartNumber, u32 jointCount);
80 void updateJointDataFromMotionModule(void);
81private:
83 void executeNonMotionBlend(void);
85 void executeNormalMotionBlend(u32 processKind);
87 void executeDifferenceMotionBlend(u32 processKind);
89 void updateMotionMatrixFromScaleRotationTrans(u32 jointIndex, GxVector3& translate, GxQuaternion& rotate, GxVector3& scale, b32 isScaleExist);
90
92 //-------------------------------------------------------------
94 //-------------------------------------------------------------
96public:
98 GX_FORCE_INLINE static const GxRtti& getOwnerDerivedRtti(void) { return GxUnitModelBase::GX_RTTI; }
99
101 constexpr GxResMotionPackage* getResourceMotionPackage(void) const { return _pResMotionPackage; }
103 constexpr void setResourceMotionPackage(GxResMotionPackage* pResource) { GX_SET_CLASS_BASE_REFERENCE(_pResMotionPackage, pResource); }
104
106 void setFrame(f32 frame);
108 void setSpeed(f32 speed);
110 void setPlaybackFlags(u32 playbackFlags);
112 void setPlaybackFlag(MOTION_PLAYBACK_FLAG flag, b32 value);
114 virtual void setDeltaTime(f32 deltaTime);
116 void setDeltaTimeRatio(f32 deltaTimeRatio);
117
119 GxResMotionBlend::BlendParam* getBlendParamFromMotionModule(u32 paramIndex);
121 b32 getBlendParamFromBlendResource(s32 motionNumber, GxArrayClassBase* pOutBlendParamList) const;
123 virtual void setModMotionBlendResource(GxResMotionBlend* pBlendResource);
125 constexpr GxResMotionBlend* getModMotionBlendResource(void) const { return _pBlendResource; }
127 virtual b32 checkEnableBlend(const GxMotionJoint* pTargetJoint, GxResMotionBlend::BlendParam blendParam);
129 constexpr u32 getNowMotionModuleCount(void) const { return _nowMotionModuleCount; }
131 GX_FORCE_INLINE void setUseBlend(b32 isUseBlend) { _isUseBlend = isUseBlend; }
133 GX_FORCE_INLINE b32 isUseBlend(void) const { return _isUseBlend; }
134
136 constexpr u32 getMotionPlayerCount(void) const { return static_cast<u32>(MOTION_PLAYER::MAX); }
138 constexpr GxMotionPlayer* getMotionPlayer(MOTION_PLAYER index = GxModUnitMotionBlend::MOTION_PLAYER::BASE) const { return _pMotionPlayer[static_cast<u32>(index)]; }
140 constexpr void getMotionPlayer(void* pValue, u32 index) { *static_cast<GxMotionPlayer**>(pValue) = _pMotionPlayer[index]; }
141
143 GX_FORCE_INLINE b32 isMotionChange(void) const { return _motionChangeFlag; }
145 GX_FORCE_INLINE const GxVector3& getRootPositionOld(void) const { return _motionPositionOld; }
146
148 GX_FORCE_INLINE b32 isMotionMoveXZ(void) { return getMotionPlayer(MOTION_PLAYER::BASE)->isPlaybackFlag(MOTION_PLAYBACK_FLAG_USE_ROOT_XZ_TRANSLATE); }
150 GX_FORCE_INLINE void setMotionMoveXZ(b32 flag) { setPlaybackFlag(MOTION_PLAYBACK_FLAG_USE_ROOT_XZ_TRANSLATE, flag); }
152 GX_FORCE_INLINE b32 isMotionMoveY(void) { return getMotionPlayer(MOTION_PLAYER::BASE)->isPlaybackFlag(MOTION_PLAYBACK_FLAG_USE_ROOT_Y_TRANSLATE); }
154 GX_FORCE_INLINE void setMotionMoveY(b32 flag) { setPlaybackFlag(MOTION_PLAYBACK_FLAG_USE_ROOT_Y_TRANSLATE, flag); }
155protected:
157 GX_FORCE_INLINE virtual GxMotionPlayer* allocateMotion(void) { return GX_NEW GxMotionPlayer; }
158private:
160 void getPropertyResourceMotionPackage(void* const pValue);
162 void setPropertyResourceMotionPackage(const void* const pValue);
163
165 //-------------------------------------------------------------
167 //-------------------------------------------------------------
169private:
170 GxResMotionPackage* _pResMotionPackage;
171 GxMotionPlayer* _pMotionPlayer[static_cast<u32>(MOTION_PLAYER::MAX)];
172 GxResMotionBlend::BlendParam* _pBlendParam[static_cast<u32>(MOTION_PLAYER::BLEND_MAX)];
173 GxResMotionBlend* _pBlendResource;
174 u32 _nowMotionModuleCount;
175 b32 _isUseBlend;
176 s32 _oldMotionNumber;
177 b32 _motionChangeFlag;
178 GxVector3 _motionPositionOld;
179
181};
182
183GX_MOTION_NAMESPACE_END()
184
#define GX_SET_CLASS_BASE_REFERENCE(__DST__, __SRC__)
オブジェクト設定(参照カウンタを使用する場合)
Definition GxBase.h:318
@ MAX
定義数
MOTION_PLAYBACK_FLAG
再生設定フラグ
Definition GxMotionDefine.h:131
@ MOTION_PLAYBACK_FLAG_USE_ROOT_XZ_TRANSLATE
移動値XZを使うか
Definition GxMotionDefine.h:135
@ MOTION_PLAYBACK_FLAG_USE_ROOT_Y_TRANSLATE
移動値Yを使うか
Definition GxMotionDefine.h:133
配列クラス
Definition GxArrayClassBase.h:18
モーションモジュール基礎クラス
Definition GxModUnitMotionBase.h:19
モーションブレンドシステムの機能を導入するモジュール
Definition GxModUnitMotionBlend.h:18
constexpr GxResMotionPackage * getResourceMotionPackage(void) const
モーションリソースの取得
Definition GxModUnitMotionBlend.h:101
constexpr void getMotionPlayer(void *pValue, u32 index)
モーションプレイヤーを取得(RTTI用)
Definition GxModUnitMotionBlend.h:140
GX_FORCE_INLINE void setMotionMoveXZ(b32 flag)
モーションXZ移動値を使用するか設定
Definition GxModUnitMotionBlend.h:150
GX_FORCE_INLINE const GxVector3 & getRootPositionOld(void) const
root関節の1フレーム前の座標を取得
Definition GxModUnitMotionBlend.h:145
static GX_FORCE_INLINE const GxRtti & getOwnerDerivedRtti(void)
所持者に必要な継承RTTIを取得
Definition GxModUnitMotionBlend.h:98
GX_FORCE_INLINE void setUseBlend(b32 isUseBlend)
モーションブレンドを使用するかどうかを設定
Definition GxModUnitMotionBlend.h:131
GX_FORCE_INLINE b32 isUseBlend(void) const
モーションブレンドを使用するかどうかを取得
Definition GxModUnitMotionBlend.h:133
GX_FORCE_INLINE b32 isMotionChange(void) const
モーションの切り替わり判定
Definition GxModUnitMotionBlend.h:143
GX_FORCE_INLINE void setMotionMoveY(b32 flag)
モーションY移動値を使用するか設定
Definition GxModUnitMotionBlend.h:154
virtual GX_FORCE_INLINE GxMotionPlayer * allocateMotion(void)
モーションプレイヤーのメモリ確保
Definition GxModUnitMotionBlend.h:157
constexpr GxResMotionBlend * getModMotionBlendResource(void) const
モーションブレンドリソースを取得
Definition GxModUnitMotionBlend.h:125
GX_FORCE_INLINE void updateJoints(void)
各関節を更新
Definition GxModUnitMotionBlend.h:74
GX_FORCE_INLINE b32 isMotionMoveXZ(void)
モーションXZ移動値を使用するか判定
Definition GxModUnitMotionBlend.h:148
constexpr void setResourceMotionPackage(GxResMotionPackage *pResource)
モーションリソースの設定
Definition GxModUnitMotionBlend.h:103
GX_FORCE_INLINE b32 isMotionMoveY(void)
モーションY移動値を使用するか判定
Definition GxModUnitMotionBlend.h:152
constexpr GxMotionPlayer * getMotionPlayer(MOTION_PLAYER index=GxModUnitMotionBlend::MOTION_PLAYER::BASE) const
モーションプレイヤーを取得
Definition GxModUnitMotionBlend.h:138
constexpr u32 getMotionPlayerCount(void) const
モーションプレイヤーの最大数を取得(RTTI用)
Definition GxModUnitMotionBlend.h:136
MOTION_PLAYER
モーションのインデックス
Definition GxModUnitMotionBlend.h:29
@ BASE
ベースモーション
constexpr u32 getNowMotionModuleCount(void) const
現在使用しているモーションモジュール数を取得
Definition GxModUnitMotionBlend.h:129
GxMotionが使う関節クラス
Definition GxMotionJoint.h:150
モーション再生クラス
Definition GxMotionPlayer.h:22
ブレンド用パラメーター
Definition GxResMotionBlend.h:31
モーション補間設定リソースクラス
Definition GxResMotionBlend.h:18
モーションパッケージリソース
Definition GxResMotionPackage.h:20
実行時型情報クラス
Definition GxRtti.h:154
クォータニオン
Definition GxQuaternion.h:19
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173