Skip to content

Commit 57dd5c2

Browse files
committed
implemented editing default controls
1 parent 16282eb commit 57dd5c2

14 files changed

+488
-10
lines changed

src/com/ss/editor/ui/control/model/node/spatial/SpatialModelNode.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import com.ss.editor.ui.control.model.tree.action.AddUserDataAction;
1818
import com.ss.editor.ui.control.model.tree.action.RemoveNodeAction;
1919
import com.ss.editor.ui.control.model.tree.action.RenameNodeAction;
20+
import com.ss.editor.ui.control.model.tree.action.control.CreateCharacterAction;
21+
import com.ss.editor.ui.control.model.tree.action.control.CreateMotionControlAction;
22+
import com.ss.editor.ui.control.model.tree.action.control.CreateRigidBodyControlAction;
2023
import com.ss.editor.ui.control.model.tree.action.operation.RenameNodeOperation;
2124
import com.ss.editor.ui.control.tree.AbstractNodeTree;
2225
import com.ss.editor.ui.control.tree.node.ModelNode;
@@ -59,7 +62,17 @@ public boolean canRemove() {
5962

6063
@Nullable
6164
protected Menu createCreationMenu(@NotNull final AbstractNodeTree<?> nodeTree) {
62-
return new Menu(Messages.MODEL_NODE_TREE_ACTION_CREATE, new ImageView(Icons.ADD_18));
65+
66+
final Menu menu = new Menu(Messages.MODEL_NODE_TREE_ACTION_CREATE, new ImageView(Icons.ADD_18));
67+
68+
final Menu createControlsMenu = new Menu("Control", new ImageView(Icons.ADD_18));
69+
createControlsMenu.getItems().addAll(new CreateRigidBodyControlAction(nodeTree, this),
70+
new CreateMotionControlAction(nodeTree, this),
71+
new CreateCharacterAction(nodeTree, this));
72+
73+
menu.getItems().add(createControlsMenu);
74+
75+
return menu;
6376
}
6477

6578
@NotNull

src/com/ss/editor/ui/control/model/property/builder/impl/AudioNodePropertyBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import rlib.ui.util.FXUtils;
2525

2626
/**
27-
* The implementation of the {@link PropertyBuilder} for building property controls for {@link AudioNode} objects.
27+
* The implementation of the {@link PropertyBuilder} to build property controls for {@link AudioNode} objects.
2828
*
2929
* @author JavaSaBr
3030
*/
Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
package com.ss.editor.ui.control.model.property.builder.impl;
2+
3+
import com.jme3.animation.SkeletonControl;
4+
import com.jme3.bullet.control.CharacterControl;
5+
import com.jme3.bullet.control.RigidBodyControl;
6+
import com.jme3.bullet.objects.PhysicsRigidBody;
7+
import com.jme3.math.Vector3f;
8+
import com.jme3.scene.control.AbstractControl;
9+
import com.jme3.scene.control.Control;
10+
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
11+
import com.ss.editor.ui.control.model.property.control.BooleanModelPropertyControl;
12+
import com.ss.editor.ui.control.model.property.control.FloatModelPropertyControl;
13+
import com.ss.editor.ui.control.model.property.control.Vector3fModelPropertyControl;
14+
import com.ss.editor.ui.control.property.builder.PropertyBuilder;
15+
import com.ss.editor.ui.control.property.builder.impl.AbstractPropertyBuilder;
16+
17+
import org.jetbrains.annotations.NotNull;
18+
import org.jetbrains.annotations.Nullable;
19+
20+
import javafx.scene.layout.VBox;
21+
import rlib.ui.util.FXUtils;
22+
23+
/**
24+
* The implementation of the {@link PropertyBuilder} to build property controls for default controls.
25+
*
26+
* @author JavaSaBr
27+
*/
28+
public class DefaultControlPropertyBuilder extends AbstractPropertyBuilder<ModelChangeConsumer> {
29+
30+
private static final PropertyBuilder INSTANCE = new DefaultControlPropertyBuilder();
31+
32+
public static PropertyBuilder getInstance() {
33+
return INSTANCE;
34+
}
35+
36+
public DefaultControlPropertyBuilder() {
37+
super(ModelChangeConsumer.class);
38+
}
39+
40+
@Override
41+
protected void buildForImpl(@NotNull final Object object, @Nullable final Object parent, @NotNull final VBox container,
42+
@NotNull final ModelChangeConsumer changeConsumer) {
43+
44+
if (!(object instanceof Control)) return;
45+
46+
if (object instanceof AbstractControl) {
47+
48+
final AbstractControl control = (AbstractControl) object;
49+
50+
final boolean enabled = control.isEnabled();
51+
52+
final BooleanModelPropertyControl<AbstractControl> enabledControl =
53+
new BooleanModelPropertyControl<>(enabled, "Enabled", changeConsumer);
54+
55+
enabledControl.setApplyHandler(AbstractControl::setEnabled);
56+
enabledControl.setSyncHandler(AbstractControl::isEnabled);
57+
enabledControl.setEditObject(control);
58+
59+
FXUtils.addToPane(enabledControl, container);
60+
}
61+
62+
if (object instanceof SkeletonControl) {
63+
build((SkeletonControl) object, container, changeConsumer);
64+
} else if (object instanceof CharacterControl) {
65+
build((CharacterControl) object, container, changeConsumer);
66+
} else if (object instanceof RigidBodyControl) {
67+
build((RigidBodyControl) object, container, changeConsumer);
68+
}
69+
}
70+
71+
private void build(final @NotNull RigidBodyControl control, final @NotNull VBox container,
72+
final @NotNull ModelChangeConsumer changeConsumer) {
73+
74+
final Vector3f angularVelocity = control.getAngularVelocity();
75+
final Vector3f gravity = control.getGravity();
76+
final Vector3f linearFactor = control.getLinearFactor();
77+
78+
final float angularDamping = control.getAngularDamping();
79+
final float angularFactor = control.getAngularFactor();
80+
final float angularSleepingThreshold = control.getAngularSleepingThreshold();
81+
final float friction = control.getFriction();
82+
final float linearDamping = control.getLinearDamping();
83+
final float mass = control.getMass();
84+
final float restitution = control.getRestitution();
85+
86+
final boolean kinematicSpatial = control.isKinematicSpatial();
87+
final boolean kinematic = control.isKinematic();
88+
89+
final BooleanModelPropertyControl<RigidBodyControl> kinematicSpatialControl =
90+
new BooleanModelPropertyControl<>(kinematicSpatial, "Kinematic spatial", changeConsumer);
91+
92+
kinematicSpatialControl.setApplyHandler(RigidBodyControl::setKinematicSpatial);
93+
kinematicSpatialControl.setSyncHandler(RigidBodyControl::isKinematicSpatial);
94+
kinematicSpatialControl.setEditObject(control);
95+
96+
final BooleanModelPropertyControl<RigidBodyControl> kinematicControl =
97+
new BooleanModelPropertyControl<>(kinematic, "Kinematic", changeConsumer);
98+
99+
kinematicControl.setApplyHandler(RigidBodyControl::setKinematic);
100+
kinematicControl.setSyncHandler(RigidBodyControl::isKinematic);
101+
kinematicControl.setEditObject(control);
102+
103+
final Vector3fModelPropertyControl<RigidBodyControl> angularVelocityControl =
104+
new Vector3fModelPropertyControl<>(angularVelocity, "Angular velocity", changeConsumer);
105+
106+
angularVelocityControl.setApplyHandler(RigidBodyControl::setAngularVelocity);
107+
angularVelocityControl.setSyncHandler(RigidBodyControl::getAngularVelocity);
108+
angularVelocityControl.setEditObject(control);
109+
110+
final Vector3fModelPropertyControl<RigidBodyControl> gravityControl =
111+
new Vector3fModelPropertyControl<>(gravity, "Gravity", changeConsumer);
112+
113+
gravityControl.setApplyHandler(RigidBodyControl::setGravity);
114+
gravityControl.setSyncHandler(RigidBodyControl::getGravity);
115+
gravityControl.setEditObject(control);
116+
117+
final Vector3fModelPropertyControl<RigidBodyControl> linearFactorControl =
118+
new Vector3fModelPropertyControl<>(linearFactor, "Linear factor", changeConsumer);
119+
120+
linearFactorControl.setApplyHandler(RigidBodyControl::setLinearFactor);
121+
linearFactorControl.setSyncHandler(RigidBodyControl::getLinearFactor);
122+
linearFactorControl.setEditObject(control);
123+
124+
final FloatModelPropertyControl<RigidBodyControl> angularDampingControl =
125+
new FloatModelPropertyControl<>(angularDamping, "Angular damping", changeConsumer);
126+
127+
angularDampingControl.setApplyHandler(RigidBodyControl::setAngularDamping);
128+
angularDampingControl.setSyncHandler(PhysicsRigidBody::getAngularDamping);
129+
angularDampingControl.setEditObject(control);
130+
131+
final FloatModelPropertyControl<RigidBodyControl> angularFactorControl =
132+
new FloatModelPropertyControl<>(angularFactor, "Angular factor", changeConsumer);
133+
134+
angularFactorControl.setApplyHandler(RigidBodyControl::setAngularFactor);
135+
angularFactorControl.setSyncHandler(PhysicsRigidBody::getAngularFactor);
136+
angularFactorControl.setEditObject(control);
137+
138+
final FloatModelPropertyControl<RigidBodyControl> angularSleepingThresholdControl =
139+
new FloatModelPropertyControl<>(angularSleepingThreshold, "Angular sleeping threshold", changeConsumer);
140+
141+
angularSleepingThresholdControl.setApplyHandler(RigidBodyControl::setAngularSleepingThreshold);
142+
angularSleepingThresholdControl.setSyncHandler(PhysicsRigidBody::getAngularSleepingThreshold);
143+
angularSleepingThresholdControl.setEditObject(control);
144+
145+
final FloatModelPropertyControl<RigidBodyControl> frictionControl =
146+
new FloatModelPropertyControl<>(friction, "Friction", changeConsumer);
147+
148+
frictionControl.setApplyHandler(RigidBodyControl::setFriction);
149+
frictionControl.setSyncHandler(PhysicsRigidBody::getFriction);
150+
frictionControl.setEditObject(control);
151+
152+
final FloatModelPropertyControl<RigidBodyControl> linearDampingControl =
153+
new FloatModelPropertyControl<>(linearDamping, "Linear damping", changeConsumer);
154+
155+
linearDampingControl.setApplyHandler(RigidBodyControl::setLinearDamping);
156+
linearDampingControl.setSyncHandler(PhysicsRigidBody::getLinearDamping);
157+
linearDampingControl.setEditObject(control);
158+
159+
final FloatModelPropertyControl<RigidBodyControl> massControl =
160+
new FloatModelPropertyControl<>(mass, "Mass", changeConsumer);
161+
162+
massControl.setApplyHandler(RigidBodyControl::setMass);
163+
massControl.setSyncHandler(PhysicsRigidBody::getMass);
164+
165+
final FloatModelPropertyControl<RigidBodyControl> restitutionControl =
166+
new FloatModelPropertyControl<>(restitution, "Restitution", changeConsumer);
167+
168+
restitutionControl.setApplyHandler(RigidBodyControl::setRestitution);
169+
restitutionControl.setSyncHandler(PhysicsRigidBody::getRestitution);
170+
restitutionControl.setEditObject(control);
171+
172+
FXUtils.addToPane(kinematicSpatialControl, container);
173+
FXUtils.addToPane(kinematicControl, container);
174+
FXUtils.addToPane(angularDampingControl, container);
175+
FXUtils.addToPane(angularFactorControl, container);
176+
FXUtils.addToPane(angularSleepingThresholdControl, container);
177+
FXUtils.addToPane(frictionControl, container);
178+
FXUtils.addToPane(linearDampingControl, container);
179+
FXUtils.addToPane(massControl, container);
180+
FXUtils.addToPane(restitutionControl, container);
181+
FXUtils.addToPane(angularVelocityControl, container);
182+
FXUtils.addToPane(gravityControl, container);
183+
FXUtils.addToPane(linearFactorControl, container);
184+
}
185+
186+
private void build(final @NotNull CharacterControl control, final @NotNull VBox container,
187+
final @NotNull ModelChangeConsumer changeConsumer) {
188+
189+
final Vector3f viewDirection = control.getViewDirection();
190+
final Vector3f walkDirection = control.getWalkDirection();
191+
192+
final float fallSpeed = control.getFallSpeed();
193+
final float gravity = control.getGravity();
194+
final float jumpSpeed = control.getJumpSpeed();
195+
final float maxSlope = control.getMaxSlope();
196+
197+
final boolean applyPhysicsLocal = control.isApplyPhysicsLocal();
198+
final boolean useViewDirection = control.isUseViewDirection();
199+
200+
final Vector3fModelPropertyControl<CharacterControl> viewDirectionControl =
201+
new Vector3fModelPropertyControl<>(viewDirection, "View direction", changeConsumer);
202+
203+
viewDirectionControl.setApplyHandler(CharacterControl::setViewDirection);
204+
viewDirectionControl.setSyncHandler(CharacterControl::getViewDirection);
205+
viewDirectionControl.setEditObject(control);
206+
207+
final Vector3fModelPropertyControl<CharacterControl> walkDirectionControl =
208+
new Vector3fModelPropertyControl<>(walkDirection, "Walk direction", changeConsumer);
209+
210+
walkDirectionControl.setApplyHandler(CharacterControl::setWalkDirection);
211+
walkDirectionControl.setSyncHandler(CharacterControl::getWalkDirection);
212+
walkDirectionControl.setEditObject(control);
213+
214+
final FloatModelPropertyControl<CharacterControl> fallSpeedControl =
215+
new FloatModelPropertyControl<>(fallSpeed, "Fall speed", changeConsumer);
216+
217+
fallSpeedControl.setApplyHandler(CharacterControl::setFallSpeed);
218+
fallSpeedControl.setSyncHandler(CharacterControl::getFallSpeed);
219+
fallSpeedControl.setEditObject(control);
220+
221+
final FloatModelPropertyControl<CharacterControl> gravityControl =
222+
new FloatModelPropertyControl<>(gravity, "Gravity", changeConsumer);
223+
224+
gravityControl.setApplyHandler(CharacterControl::setGravity);
225+
gravityControl.setSyncHandler(CharacterControl::getGravity);
226+
gravityControl.setEditObject(control);
227+
228+
final FloatModelPropertyControl<CharacterControl> jumpSpeedControl =
229+
new FloatModelPropertyControl<>(jumpSpeed, "Jump speed", changeConsumer);
230+
231+
jumpSpeedControl.setApplyHandler(CharacterControl::setJumpSpeed);
232+
jumpSpeedControl.setSyncHandler(CharacterControl::getJumpSpeed);
233+
jumpSpeedControl.setEditObject(control);
234+
235+
final FloatModelPropertyControl<CharacterControl> maxSlopeControl =
236+
new FloatModelPropertyControl<>(maxSlope, "Max slope", changeConsumer);
237+
238+
maxSlopeControl.setApplyHandler(CharacterControl::setMaxSlope);
239+
maxSlopeControl.setSyncHandler(CharacterControl::getMaxSlope);
240+
maxSlopeControl.setEditObject(control);
241+
242+
final BooleanModelPropertyControl<CharacterControl> applyPhysicsLocalControl =
243+
new BooleanModelPropertyControl<>(applyPhysicsLocal, "Apply physics local", changeConsumer);
244+
245+
applyPhysicsLocalControl.setApplyHandler(CharacterControl::setApplyPhysicsLocal);
246+
applyPhysicsLocalControl.setSyncHandler(CharacterControl::isApplyPhysicsLocal);
247+
applyPhysicsLocalControl.setEditObject(control);
248+
249+
final BooleanModelPropertyControl<CharacterControl> useViewDirectionControl =
250+
new BooleanModelPropertyControl<>(useViewDirection, "Use view direction", changeConsumer);
251+
252+
useViewDirectionControl.setApplyHandler(CharacterControl::setUseViewDirection);
253+
useViewDirectionControl.setSyncHandler(CharacterControl::isUseViewDirection);
254+
useViewDirectionControl.setEditObject(control);
255+
256+
FXUtils.addToPane(applyPhysicsLocalControl, container);
257+
FXUtils.addToPane(useViewDirectionControl, container);
258+
FXUtils.addToPane(fallSpeedControl, container);
259+
FXUtils.addToPane(gravityControl, container);
260+
FXUtils.addToPane(jumpSpeedControl, container);
261+
FXUtils.addToPane(maxSlopeControl, container);
262+
FXUtils.addToPane(viewDirectionControl, container);
263+
FXUtils.addToPane(walkDirectionControl, container);
264+
}
265+
266+
private void build(final @NotNull SkeletonControl control, final @NotNull VBox container,
267+
final @NotNull ModelChangeConsumer changeConsumer) {
268+
269+
final boolean hardwareSkinningPreferred = control.isHardwareSkinningPreferred();
270+
271+
final BooleanModelPropertyControl<SkeletonControl> hardwareSkinningPreferredControl =
272+
new BooleanModelPropertyControl<>(hardwareSkinningPreferred, "Hardware skinning preferred", changeConsumer);
273+
274+
hardwareSkinningPreferredControl.setApplyHandler(SkeletonControl::setHardwareSkinningPreferred);
275+
hardwareSkinningPreferredControl.setSyncHandler(SkeletonControl::isHardwareSkinningPreferred);
276+
hardwareSkinningPreferredControl.setEditObject(control);
277+
278+
FXUtils.addToPane(hardwareSkinningPreferredControl, container);
279+
}
280+
}

src/com/ss/editor/ui/control/model/property/builder/impl/GeometryPropertyBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import tonegod.emitter.geometry.ParticleGeometry;
3232

3333
/**
34-
* The implementation of the {@link PropertyBuilder} for building property controls for {@link Geometry} objects.
34+
* The implementation of the {@link PropertyBuilder} to build property controls for {@link Geometry} objects.
3535
*
3636
* @author JavaSaBr
3737
*/

src/com/ss/editor/ui/control/model/property/builder/impl/LightPropertyBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import rlib.ui.util.FXUtils;
2525

2626
/**
27-
* The implementation of the {@link PropertyBuilder} for building property controls for {@link Light} objects.
27+
* The implementation of the {@link PropertyBuilder} to build property controls for {@link Light} objects.
2828
*
2929
* @author JavaSaBr
3030
*/

src/com/ss/editor/ui/control/model/property/builder/impl/ParticleInfluencerPropertyBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import tonegod.emitter.influencers.impl.SpriteInfluencer;
4242

4343
/**
44-
* The implementation of the {@link PropertyBuilder} for building property controls for {@link ParticleInfluencer}.
44+
* The implementation of the {@link PropertyBuilder} to build property controls for {@link ParticleInfluencer}.
4545
*
4646
* @author JavaSaBr
4747
*/

src/com/ss/editor/ui/control/model/property/builder/impl/ParticlesPropertyBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import tonegod.emitter.node.ParticleNode;
3232

3333
/**
34-
* The implementation of the {@link PropertyBuilder} for building property controls for {@link ParticleEmitterNode}
34+
* The implementation of the {@link PropertyBuilder} to build property controls for {@link ParticleEmitterNode}
3535
* objects.
3636
*
3737
* @author JavaSaBr

src/com/ss/editor/ui/control/model/property/builder/impl/SpatialPropertyBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import rlib.util.array.ArrayFactory;
3939

4040
/**
41-
* The implementation of the {@link PropertyBuilder} for building property controls for {@link Spatial} objects.
41+
* The implementation of the {@link PropertyBuilder} to build property controls for {@link Spatial} objects.
4242
*
4343
* @author JavaSaBr
4444
*/

0 commit comments

Comments
 (0)