Skip to content

Commit e716e08

Browse files
authored
Merge pull request #135 from MizunagiKB/bugfix_none_parameter_mode
Bugfix none parameter mode
2 parents b832827 + f8dddda commit e716e08

File tree

7 files changed

+84
-2
lines changed

7 files changed

+84
-2
lines changed

demo/addons/gd_cubism/cs/gd_cubism_user_model_cs.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,17 @@ public ParameterModeEnum ParameterMode
185185
}
186186
}
187187

188+
/// <value>
189+
/// Property <c>PhysicsEvaluate</c>
190+
/// <br />
191+
/// Setting this parameter to `false` disables physical calculations.
192+
/// </value>
193+
public bool PhysicsEvaluate
194+
{
195+
set { this.InternalObject.Call("set_physics_evaluate", value); }
196+
get { return (bool)this.InternalObject.Call("get_physics_evaluate"); }
197+
}
198+
188199
/// <value>
189200
/// Property <c>PlaybackProcessMode</c>
190201
/// <br />
@@ -200,6 +211,18 @@ public MotionProcessCallbackEnum PlaybackProcessMode
200211
}
201212
}
202213

214+
/// <value>
215+
/// Property <c>PoseUpdate</c>
216+
/// <br />
217+
/// Setting this parameter to `false` disables transparency calculations between drawing parts specified in the pose group.
218+
/// If you want to manually handle all transparency calculations, set this parameter to `false`.
219+
/// </value>
220+
public bool PoseUpdate
221+
{
222+
set { this.InternalObject.Call("set_pose_update", value); }
223+
get { return (bool)this.InternalObject.Call("get_pose_update"); }
224+
}
225+
203226
public Shader ShaderAdd
204227
{
205228
set { this.InternalObject.Call("set_shader_add", (Shader)value); }

doc_classes/GDCubismUserModel.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,16 @@
200200
<member name="parameter_mode" type="int" setter="set_parameter_mode" getter="get_parameter_mode" enum="GDCubismUserModel.ParameterMode" default="0">
201201
Specifies the control method for the currently held Live2D model.
202202
</member>
203+
<member name="physics_evaluate" type="int" setter="set_physics_evaluate" getter="get_physics_evaluate" enum="GDCubismUserModel.PhysicsEvaluate" default="true">
204+
Setting this parameter to [code]false[/code] disables physical calculations.
205+
</member>
203206
<member name="playback_process_mode" type="int" setter="set_process_callback" getter="get_process_callback" enum="GDCubismUserModel.MotionProcessCallback" default="1">
204207
Specifies the playback method for the currently held Live2D model.
205208
</member>
209+
<member name="pose_update" type="int" setter="set_pose_update" getter="get_pose_update" enum="GDCubismUserModel.PoseUpdate" default="true">
210+
Setting this parameter to [code]false[/code] disables transparency calculations between drawing parts specified in the pose group.
211+
If you want to manually handle all transparency calculations, set this parameter to [code]false[/code].
212+
</member>
206213
<member name="shader_add" type="Shader" setter="set_shader_add" getter="get_shader_add">
207214
Specifies the [i]shader[/i] used to render the Live2D model.
208215
By default, the following [i]shader[/i] is used.

docs-src/modules/ROOT/pages/en/api/gd_cubism_user_model.adoc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ This is a _SubViewport_ subclass for loading the Live2D model, generating the _T
3535
>|bool <|<<id-property-load_motions,load_motions>> |[default: true]
3636
>|Vector2i <|<<id-property-mask_viewport_size,mask_viewport_size>> |[default: Vector2i(0, 0)]
3737
>|ParameterMode <|<<id-property-parameter_mode,parameter_mode>> |[default: 0]
38+
>|bool <|<<physics_evaluate>> |[default: true]
3839
>|MotionProcessCallback <|<<id-property-playback_process_mode,playback_process_mode>> |[default: 1]
40+
>|bool <|<<pose_update>> |[default: true]
3941
>|Shader <|<<id-property-shader_add,shader_add>> |
4042
>|Shader <|<<id-property-shader_mask,shader_mask>> |
4143
>|Shader <|<<id-property-shader_mask_add,shader_mask_add>> |
@@ -209,11 +211,23 @@ Since GDCubism assumes the same aspect ratio as the Viewport for rendering, usin
209211
ParameterMode parameter_mode [default: 0]::
210212
Specifies the control method for the currently held Live2D model.
211213

214+
215+
[[id-property-physics_evaluate]]
216+
bool physics_evaluate [default: true]::
217+
Setting this parameter to `false` disables physical calculations.
218+
219+
212220
[[id-property-playback_process_mode]]
213221
MotionProcessCallback playback_process_mode [default: 1]::
214222
Specifies the playback method for the currently held Live2D model.
215223

216224

225+
[[id-property-pose_update]]
226+
bool pose_update [default: true]::
227+
Setting this parameter to `false` disables transparency calculations between drawing parts specified in the pose group. +
228+
If you want to manually handle all transparency calculations, set this parameter to `false`.
229+
230+
217231
[[id-property-shader_add]]
218232
Shader shader_add::
219233
Specifies the _shader_ used to render the Live2D model. +

docs-src/modules/ROOT/pages/ja/api/gd_cubism_user_model.adoc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ endif::env-github,env-vscode[]
2222
Live2Dモデルを読み込み、表示に必要な _Texture_ を生成したり操作を行うための _SubVieport_ 継承クラスです。
2323

2424

25+
2526
== Properties
2627

2728
[cols="3",frame=none,grid=none]
@@ -32,8 +33,11 @@ Live2Dモデルを読み込み、表示に必要な _Texture_ を生成したり
3233
>|bool <|<<id-property-auto_scale,auto_scale>> |[default: true]
3334
>|bool <|<<id-property-load_expressions,load_expressions>> |[default: true]
3435
>|bool <|<<id-property-load_motions,load_motions>> |[default: true]
36+
>|Vector2i <|<<id-property-mask_viewport_size>> |[default: Vector2i(0, 0)]
3537
>|ParameterMode <|<<id-property-parameter_mode,parameter_mode>> |[default: 0]
38+
>|bool <|<<physics_evaluate>> |[default: true]
3639
>|MotionProcessCallback <|<<id-property-playback_process_mode,playback_process_mode>> |[default: 1]
40+
>|bool <|<<pose_update>> |[default: true]
3741
>|Shader <|<<id-property-shader_add,shader_add>> |
3842
>|Shader <|<<id-property-shader_mask,shader_mask>> |
3943
>|Shader <|<<id-property-shader_mask_add,shader_mask_add>> |
@@ -205,11 +209,22 @@ ParameterMode parameter_mode [default: 0]::
205209
現在保持しているLive2Dモデルのコントロール方法を指定します。
206210

207211

212+
[[id-property-physics_evaluate]]
213+
bool physics_evaluate [default: true]::
214+
_false_ にすると、物理計算を行わなくなります。
215+
216+
208217
[[id-property-playback_process_mode]]
209218
MotionProcessCallback playback_process_mode [default: 1]::
210219
現在保持しているLive2Dモデルの再生方法を指定します。
211220

212221

222+
[[id-property-pose_update]]
223+
bool pose_update [default: true]::
224+
_false_ にすると、ポーズグループに指定された描画パーツ同士で透明度の計算を行わなくなります。 +
225+
全ての透明度計算を手動で行いたい場合は _false_ にしてください。
226+
227+
213228
[[id-property-shader_add]]
214229
Shader shader_mask_add::
215230
Live2Dモデルの描画に使用する _shader_ を指定します。 +

src/gd_cubism_user_model.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ GDCubismUserModel::GDCubismUserModel()
4141
, adjust_pos(0.0, 0.0)
4242
, mask_viewport_size(0, 0)
4343
, parameter_mode(ParameterMode::FULL_PARAMETER)
44+
, physics_evaluate(true)
45+
, pose_update(true)
4446
, playback_process_mode(MotionProcessCallback::IDLE)
4547
, anim_loop(DEFAULT_PROP_ANIM_LOOP)
4648
, anim_loop_fade_in(DEFAULT_PROP_ANIM_LOOP_FADE_IN)
@@ -81,6 +83,14 @@ void GDCubismUserModel::_bind_methods() {
8183
ClassDB::bind_method(D_METHOD("get_parameter_mode"), &GDCubismUserModel::get_parameter_mode);
8284
ADD_PROPERTY(PropertyInfo(Variant::INT, "parameter_mode", PROPERTY_HINT_ENUM, "FullParameter,NoneParameter"), "set_parameter_mode", "get_parameter_mode");
8385

86+
ClassDB::bind_method(D_METHOD("set_physics_evaluate", "enable"), &GDCubismUserModel::set_physics_evaluate);
87+
ClassDB::bind_method(D_METHOD("get_physics_evaluate"), &GDCubismUserModel::get_physics_evaluate);
88+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "physics_evaluate"), "set_physics_evaluate", "get_physics_evaluate");
89+
90+
ClassDB::bind_method(D_METHOD("set_pose_update", "enable"), &GDCubismUserModel::set_pose_update);
91+
ClassDB::bind_method(D_METHOD("get_pose_update"), &GDCubismUserModel::get_pose_update);
92+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "pose_update"), "set_pose_update", "get_pose_update");
93+
8494
ClassDB::bind_method(D_METHOD("set_process_callback", "value"), &GDCubismUserModel::set_process_callback);
8595
ClassDB::bind_method(D_METHOD("get_process_callback"), &GDCubismUserModel::get_process_callback);
8696
ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle,Manual"), "set_process_callback", "get_process_callback");

src/gd_cubism_user_model.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class GDCubismUserModel : public SubViewport {
115115
Vector2i mask_viewport_size;
116116

117117
ParameterMode parameter_mode;
118+
bool physics_evaluate;
119+
bool pose_update;
118120
MotionProcessCallback playback_process_mode;
119121

120122
Array ary_shader;
@@ -159,6 +161,12 @@ class GDCubismUserModel : public SubViewport {
159161
void set_parameter_mode(const ParameterMode value);
160162
GDCubismUserModel::ParameterMode get_parameter_mode() const;
161163

164+
void set_physics_evaluate(const bool enable) { this->physics_evaluate = enable; }
165+
bool get_physics_evaluate() const { return this->physics_evaluate; }
166+
167+
void set_pose_update(const bool enable) { this->pose_update = enable; }
168+
bool get_pose_update() const { return this->pose_update; }
169+
162170
void set_process_callback(const MotionProcessCallback value);
163171
GDCubismUserModel::MotionProcessCallback get_process_callback() const;
164172

src/private/internal_cubism_user_model.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,13 @@ void InternalCubismUserModel::epi_update(const float delta) {
217217
if(this->_model_setting == nullptr) return;
218218
if(this->_model == nullptr) return;
219219

220-
if(this->_physics != nullptr) { this->_physics->Evaluate(this->_model, delta); }
221-
if(this->_pose != nullptr) { this->_pose->UpdateParameters(this->_model, delta); }
220+
if(this->_owner_viewport->physics_evaluate == true) {
221+
if(this->_physics != nullptr) { this->_physics->Evaluate(this->_model, delta); }
222+
}
223+
224+
if(this->_owner_viewport->pose_update == true) {
225+
if(this->_pose != nullptr) { this->_pose->UpdateParameters(this->_model, delta); }
226+
}
222227

223228
this->_model->Update();
224229
this->effect_batch(delta, EFFECT_CALL_EPILOGUE);

0 commit comments

Comments
 (0)