@tool
extends RigidBody3D

# Store the original scale of the RigidBody3D
var original_scale: Vector3 = Vector3.ONE

# Store the original properties of the collision shape
var original_extents: Vector3  # For BoxShape3D
var original_radius: float     # For SphereShape3D and CapsuleShape3D
var original_height: float     # For CapsuleShape3D

func _ready():
	# Save the original properties of the collision shape
	if $CollisionShape3D.shape:
		if $CollisionShape3D.shape is BoxShape3D:
			original_extents = $CollisionShape3D.shape.extents
		elif $CollisionShape3D.shape is SphereShape3D:
			original_radius = $CollisionShape3D.shape.radius
		elif $CollisionShape3D.shape is CapsuleShape3D:
			original_radius = $CollisionShape3D.shape.radius
			original_height = $CollisionShape3D.shape.height

func _process(delta):
	if Engine.is_editor_hint():  # Only run in the editor
		if scale != original_scale:
			# Apply the scale to the MeshInstance3D
			$MeshInstance3D.scale = scale

			# Apply the scale to the CollisionShape3D
			if $CollisionShape3D.shape:
				var average_scale = (scale.x + scale.y + scale.z) / 3.0  # Uniform scaling

				if $CollisionShape3D.shape is BoxShape3D:
					# Scale the extents of the BoxShape3D
					$CollisionShape3D.shape.extents = original_extents * average_scale
				elif $CollisionShape3D.shape is SphereShape3D:
					# Scale the radius of the SphereShape3D
					$CollisionShape3D.shape.radius = original_radius * average_scale
				elif $CollisionShape3D.shape is CapsuleShape3D:
					# Scale the radius and height of the CapsuleShape3D
					$CollisionShape3D.shape.radius = original_radius * average_scale
					$CollisionShape3D.shape.height = original_height * average_scale

			# Reset the RigidBody3D's scale to avoid physics issues
			scale = Vector3.ONE
			original_scale = scale
