Lexical:
“Physic Constraint” : Hinge/Suspension/piston... “Physical Part” : can be blocks or groups. They are either made "physical" using "make physical" block. Or implicitely, because player connected a block to another block using a Physic Constraint. “Physical Assembly” ? : Multiple "Physical Part" connected together by constraints/hinge/pistons/suspension. “Ball joint”: articulation which can let connect part rotate around the other one in 3 axis. (roll is optional) “Hinge Joint”: Let other part rotate only around 1 axis
Physic Category UI
I'm still thinking, but since spawning constraint would be nicer by doing click and drag from 1 block to another, compared to "spawn block from library" then place them with grabbing. And since we might need also physics “tools”, or different global physisc settings. I think an intermediate UI would be great. A good solution could be to add a special "physic" category in the hub. (it's something we can do in a second pass). In this category there would be all the physic blocks, divide in sub categories, plus some tools, and general physic options.
Physic Sim On off. (I expect players to use it a lot. It would be really laborious to edit my robot collapsed on the ground like a rad doll, or my car wheel while it’s sitting on the ground. Physical Assemblies can only be edited with Physic Sim Off, restoring the position of each block in its edit mode state. So my Robot go back to its T pose, or my car is back floating in the air not subject to gravity. But as soon as I want to test the springyness of my suspension, or the torque of the wheel I need to have this button easily accessible. Constraints (see contraints workflow below) Solder (see soldering workflow below) all physic blocks listed in multiple sub-categories block properties (could be in inspector, would need to improve the inspector a little bit) Is Affected by mirror ? if mirror is enabled All properties are listed, with a button "Make Patchable" (will spawn jolt inputs/output near the block, our current code base doesn't really like this, but we could find a solution)
Improved Inspector?
Inspector could be a powerful tool. Need a little more love probably. Making it nicer, more customizable for devs with sub sections, ability to add description to properties, secondary expandable panel on the side. And a “Make Patchable” button to edit properties with jolt. So player can start with simple block, and add more and more settings as he wants to go deeper. Also Edo wants this context menu, helping with scaling/positioning, maybe spawning coresponding blocks without having to dive into library.
Maybe we do radial Up → Tweak, then a context menu appear with multiple categories. Each one opening a different “inspector” windows with related properties. New “Patch” Button (in front of “almost” all properties) will spawn block that affect this property. Or, for physic blocks, add new jolt input directly on the “make physical” block, or the “constraint” block.
Select visual variant (shape / vfx) Patch button → set visible Not physical ? “Patch Button” spawns Make Physical Physical ? Show sliders if already physical Try to present all settings nicely separated in submenus. each one with a “Patch” button to jolt input to the “Make Physical” block. Braking Rotation (angular drag) Try to present all settings nicely separated in submenus. each one with a “Patch” button. Former Inspector settings open from here
“Physical Part”
Should have these parameters (maybe they can tweak via inspector, or a "Physic mode new menu", or adding extra blocks) speed drag / rotation drag gravity on/off (could be optional) is Pushable? player can move it without using grab. example: door (actually I don’t see that many example... nice to have) Player can still use a “racket” or “stick” with make_physical on it. Simulate physics when grabbed (in this mode, when player is grabbing the block and it's attached via a hinge, it does not move the block but instead make it rotate around it's hinge, could be default play mode behavior?, maybe the way it’s working currently is find)
Contraints Tool:
Block to Block physics constraint, workflow: Player select the constraint button in the Libray/Physics/Constraints Library closes itself, Player has visual feedback on tip of controller player click & drag from a block to another to create constraint. Then he can choose which type of constraint he want with left/right joystick on it (see “Constraint Blocks section below) Can choose visual variant with joystick up/down Some visual 3D axis, segments, arcs, with little handles, let player visualize and tweak the freedom of rotation/translation. Player click & drag each ends of the constraint to reposition them Player can also have to option to patch all parameters via the inspector. Common parameter for all joints, see Constraint Tweaking below Contraints blocks:
Flexible Attachement (attach two block together, Player can control how solid the connection is, will make the block to wobble more or less when other move) It's like all in one joint.
Constraint Tweaking:
Once a constraint is created there are visual element visible:
Rotation X/Y/Z handles, to limit rotation max angle Position X/Y/Z handles, to limit movement 2 handle, one at each end to reposition the constraint to a different place on the block or another block. A Visual indicator showing joystick left/right to change type N A Visual indicator showing joystick up/down to change visuals
Full inspector setting for full 4 degree of freedom (pos:Z + rot:X/Y/Z):
Forward Movement:
limit 0 - x (0:locked x:limited) target position : 0-x (require spring)
Rotation:
Angle Limit: 0 - 360 (0:locked x:limited x>360 Free) Angle Limit: 0 - 360 (0:locked x:limited x>360 Free) Angle Limit: 0 - 360 (0:locked x:limited x>360 Free) Pitch/Yaw Inertia (Damper) 0-x
Other Inputs:
Outputs:
current rotation/position comparent to its rest position (when physic sim is off)
Soldering Tool:
It achieves the group/ungroup feature in a more convenient way, so player can easily add to a group / remove from group individual blocks without having to dive inside.
Click on the “Solder” tool in the Library/Physics Library closes it self, visual feedback on the controller “soldering” is on Click and drag one block to another to solder them (make them inside the same group) Press “A” to change between “Solder” / “Unsolder” modes trigger click to unsolder
Actuator
Torque input: control force target rotation input: azimuth it should target (control is togglable on/off) Force input: number (can be negative) which control direction it goes Target Distance: attempt to move the given distance (control is togglable on/off) Thruster: Apply a force to the block it's attached to, at the position it stands. Wind/Aerodynamics:
Wing/Sail: apply a force to a block the faster it moves (could also react to "wind area") (aircraft/arrow/boat) Should be put inside a vehicle, the faster the wings is moving in the air, and the less the wing is pointing toward the direction the vehicle is moving (angle of attack > 0), then the more it applies a lift force to the vehicle at the position of the wing. Can have multiple shapes: Square/triangle/trapezoid Has Force Multiplier setting / jolt input Wind area: linear ? tornado? Water:
Boat Hull? (Have low center of mass so it can float straight)
Other Core physic:
Raycast block (since it uses physic, I put it here, but will be mostly used for gameplay) jolt input (max distance) selector output (0-n like foreach) detected block jolt output (0-n like foreach) distances (if it's too much, we can just output list of raycasted blocks, and assign do implicit SetValue("RayCastDistance") to be optionally used later) inspector setting "stop to first block raycasted" Set Velocity (Force) X/Y/Z selector target direction