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 selector position where force is applied (optional) inspector force type (Force/Acceleration/impulse) (optional) inspector force type (Force/Acceleration/impulse) (optional) Proximity Detector (see gameplay )
Mirror feature:
Very nice to have in this situation. since I expect player to make vehicles.
Fun Device:
Throttle Handle (grabbed back and front to control the jolt output) Seat (press trigger on it, player is attached to device) What can I build with this ?
Landing on the moon simulator aircraft/helicopter/rockets/spachships/boat
Tasks
Check why grabbed “racket” feels laggy, physic not working properly (even when alone in the live session) Soldering tool, make groups without having to deal with groups. Also subtle things to do here. When soldering a physical part with a normal block, need to make group, and make it physical instead. so both block are inside the same physical part. Click and Drag UX + joystick ux Auto detect surface to snap ends onto. Support grab adjustments after the constraint is in place. 3D Models (maybe react procedurally to settings/length) Implement their different behaviors tweak best settings DoF Visual feedback + handles Other blocks Actuators/wind/water Compound inputs / outputs. For block with numerous inputs/outputs, If we want player to be able to control which jolt input is available from the inspector, 2 solutions: we can simply toggle visible/not visible, depending on which is selected from inspector or a more optimized way would be to have a code layer, which dynamically spawn the necessary jolt ins/outs. But this is a little laborious.
Multiplayer
When a player plays with a physical part, the physic of this part must be processed for him locally. Otherwise, if another player is processing the physic of this part, the latency might make the physical part impossible to control. If everybody controls the physics, the physical parts might do some inconsistent back and forth.
Ideal cases:
Tennis case / basket ball: last player touching/striking theball has authority. Billard/Cue: a ball we touch which touches other balls should get controlled by the player touching the first ball Paint Ball: Player spawning/launching the projectile should have authority, and collision processed by himself Manned vehicle: Player “driving” vehicle should have authority