Skip to content

Commit 7358aac

Browse files
committed
added auto-reactivating rigid body controls.
1 parent 671561c commit 7358aac

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

src/main/java/com/ss/editor/part3d/editor/impl/scene/AbstractSceneEditor3DPart.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.ss.editor.model.undo.editor.ChangeConsumer;
4444
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
4545
import com.ss.editor.part3d.editor.impl.scene.handler.DisableControlsTransformationHandler;
46+
import com.ss.editor.part3d.editor.impl.scene.handler.ReactivatePhysicsControlsTransformationHandler;
4647
import com.ss.editor.plugin.api.editor.part3d.Advanced3DEditorPart;
4748
import com.ss.editor.ui.component.editor.impl.scene.AbstractSceneFileEditor;
4849
import com.ss.editor.ui.control.property.operation.PropertyOperation;
@@ -159,6 +160,7 @@ public static void registerPostTransformHandler(@NotNull final Consumer<Spatial>
159160

160161
registerPreTransformHandler(transformationHandler::onPreTransform);
161162
registerPostTransformHandler(transformationHandler::onPostTransform);
163+
registerPostTransformHandler(new ReactivatePhysicsControlsTransformationHandler());
162164
}
163165

164166
/**
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.ss.editor.part3d.editor.impl.scene.handler;
2+
3+
import com.jme3.bullet.control.RigidBodyControl;
4+
import com.jme3.bullet.objects.PhysicsRigidBody;
5+
import com.jme3.scene.Spatial;
6+
import com.ss.editor.util.ControlUtils;
7+
import com.ss.editor.util.NodeUtils;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
import java.util.function.Consumer;
11+
12+
/**
13+
* The handler to reactivate enabled physics controls during transforming spatial.
14+
*
15+
* @author JavaSaBr
16+
*/
17+
public class ReactivatePhysicsControlsTransformationHandler implements Consumer<Spatial> {
18+
19+
@Override
20+
public void accept(@NotNull final Spatial spatial) {
21+
NodeUtils.children(spatial)
22+
.flatMap(ControlUtils::controls)
23+
.filter(RigidBodyControl.class::isInstance)
24+
.map(RigidBodyControl.class::cast)
25+
.filter(RigidBodyControl::isEnabled)
26+
.filter(control -> !control.isActive())
27+
.forEach(PhysicsRigidBody::activate);
28+
}
29+
}

src/main/java/com/ss/editor/ui/control/model/ModelPropertyEditor.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.jme3.material.Material;
55
import com.jme3.scene.AssetLinkNode;
66
import com.jme3.scene.Spatial;
7+
import com.jme3.scene.control.Control;
78
import com.ss.editor.annotation.FxThread;
89
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
910
import com.ss.editor.ui.control.property.PropertyEditor;
@@ -70,7 +71,9 @@ protected boolean isNeedUpdate(@Nullable final Object object) {
7071
@FxThread
7172
protected boolean canEdit(@NotNull final Object object, @Nullable final Object parent) {
7273

73-
if (object instanceof Material) {
74+
if (object instanceof Control) {
75+
return true;
76+
} else if (object instanceof Material) {
7477
final Material material = (Material) object;
7578
if (material.getKey() != null) return false;
7679
} else if (object instanceof Spatial) {

src/main/java/com/ss/editor/ui/control/tree/action/impl/control/physics/ReactivatePhysicsControl.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,32 +19,24 @@
1919
*/
2020
public class ReactivatePhysicsControl extends AbstractNodeAction<ModelChangeConsumer> {
2121

22-
/**
23-
* Instantiates a new Reactivate physics control.
24-
*
25-
* @param nodeTree the node tree
26-
* @param node the node
27-
*/
2822
public ReactivatePhysicsControl(@NotNull final NodeTree<?> nodeTree, @NotNull final TreeNode<?> node) {
2923
super(nodeTree, node);
3024
}
3125

32-
@FxThread
33-
@Nullable
3426
@Override
35-
protected Image getIcon() {
27+
@FxThread
28+
protected @Nullable Image getIcon() {
3629
return Icons.REPLAY_16;
3730
}
3831

39-
@FxThread
40-
@NotNull
4132
@Override
42-
protected String getName() {
33+
@FxThread
34+
protected @NotNull String getName() {
4335
return Messages.MODEL_NODE_TREE_ACTION_REACTIVATE;
4436
}
4537

46-
@FxThread
4738
@Override
39+
@FxThread
4840
protected void process() {
4941

5042
final Object element = getNode().getElement();

0 commit comments

Comments
 (0)