Make Games

Physic blocks

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.
Global settings:
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.
Gravity on/off
Tools:
Constraints (see contraints workflow below)
Solder (see soldering workflow below)
all physic blocks listed in multiple sub-categories
Actuators/wind/water?
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)
Physic category.jpg

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.
Context menu.jpg
Context Menu:
Visuals
rgb tweak (sliders)
Patch button → set color
Hide jolts
Select visual variant (shape / vfx)
Visible
Patch button → set visible
position
lock on/off
tweak (numbers)
Patch Button
spawn Transform
spawn Block_follow
spawn rail
Rotation
tweak (numbers)
Patch Button
Look at
Transform
spawn rotor
Scale
tweak (sliders)
Patch Button
spawn set scale
Physics
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.
Mass
Collisions
friction
bouncyness
Patch
On Collision
Ray cast
proximity sensor
Forces
Braking Force (drag)
Braking Rotation (angular drag)
Patch Button
SetVelocity
SetTorque
If Is Constraint?
Try to present all settings nicely separated in submenus. each one with a “Patch” button.
More
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)
mass
speed drag / rotation drag
gravity on/off (could be optional)
bounciness / frictioness
process physic on/off
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.
Tweaking phase:
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.
Degree of freedom
Movement: Z
Rotation: X/Y/Z
Hinge
Degree of freedom
Rotation: X
Ball Hinge
Degree of freedom
Rotation: X/Y/Z
Suspension
Degree of freedom
Rotation: Z
Free Suspension
Degree of freedom
Movement: Z
Rotation: X/Y/Z

joints blocks.jpg

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

joint handles.jpg

Full inspector setting for full 4 degree of freedom (pos:Z + rot:X/Y/Z):


Forward Movement:
limit 0 - x (0:locked x:limited)
spring force : 0-x
inertia (damper) : 0-x
target position : 0-x (require spring)

Rotation:
Roll
Angle Limit: 0 - 360 (0:locked x:limited x>360 Free)
Target Angle: x
Target Angular Speed: x
Spring 0-x
Inertia (Damper) 0-x
Pitch
Angle Limit: 0 - 360 (0:locked x:limited x>360 Free)
Target Angle: x
Target Angular Speed: x
Yaw
Angle Limit: 0 - 360 (0:locked x:limited x>360 Free)
Target Angle: x
Target Angular Speed: x
Pitch/Yaw Spring 0-x
Pitch/Yaw Inertia (Damper) 0-x

Other Inputs:
Detach
Break Force threshold ?

Outputs:

current rotation/position comparent to its rest position (when physic sim is off)
Is Detached

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

Wheel (rotor)
Torque input: control force
target rotation input: azimuth it should target (control is togglable on/off)
Piston (rail)
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.
Force jolt Input
Propeller
pressure plate

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:

Water:
Boat Hull? (Have low center of mass so it can float straight)
Floats
actuators.jpg

Other Core physic:

Raycast block (since it uses physic, I put it here, but will be mostly used for gameplay)
selector input (filter)
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 subject
selector target direction
jolt input force amount
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.