+
Rigidbody 2D
+
+ {/* Body Type */}
+
+
+
+
+
+ {/* Mass - only for Dynamic */}
+ {component.bodyType === RigidbodyType2D.Dynamic && (
+
+
+ handleChange('mass', parseFloat(e.target.value) || 1)}
+ className="property-input"
+ />
+
+ )}
+
+ {/* Gravity Scale */}
+
+
+ handleChange('gravityScale', parseFloat(e.target.value) || 0)}
+ className="property-input"
+ />
+
+
+ {/* Damping Section */}
+
Damping
+
+
+
+ handleChange('linearDamping', parseFloat(e.target.value) || 0)}
+ className="property-input"
+ />
+
+
+
+
+ handleChange('angularDamping', parseFloat(e.target.value) || 0)}
+ className="property-input"
+ />
+
+
+ {/* Constraints Section */}
+
Constraints
+
+
+
+ handleChange('constraints', {
+ ...component.constraints,
+ freezePositionX: e.target.checked
+ })}
+ className="property-checkbox"
+ />
+
+
+
+
+ handleChange('constraints', {
+ ...component.constraints,
+ freezePositionY: e.target.checked
+ })}
+ className="property-checkbox"
+ />
+
+
+
+
+ handleChange('constraints', {
+ ...component.constraints,
+ freezeRotation: e.target.checked
+ })}
+ className="property-checkbox"
+ />
+
+
+ {/* Collision Detection */}
+
Collision
+
+
+
+
+
+
+ {/* Sleep */}
+
Sleep
+
+
+
+ handleChange('canSleep', e.target.checked)}
+ className="property-checkbox"
+ />
+
+
+ {/* Runtime Info (read-only) */}
+
Runtime Info
+
+
+
+
+ ({component.velocity.x.toFixed(2)}, {component.velocity.y.toFixed(2)})
+
+
+
+
+
+
+ {component.angularVelocity.toFixed(2)} rad/s
+
+
+
+
+
+
+ {component.isAwake ? 'Yes' : 'No'}
+
+
+