extends RigidBody3D

@export var float_force := 40
@export var water_drag := 0.05
@export var water_angular_drag := 0.05

@onready var gravity:float = ProjectSettings.get_setting("physics/3d/default_gravity")

const upforce_max := 500.0
const water_height :=0.0

var inWater := false

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
	pass
	
	
func _physics_process(_delta: float) -> void:
	var currentDepth = water_height - global_position.y

	if currentDepth > 0:
		inWater = true
		var force_to_apply:Vector3 = Vector3.UP * clamp(float_force * gravity * currentDepth,0.0,upforce_max)

		apply_central_force(force_to_apply)
	else:
		inWater = false
		
func _integrate_forces(state: PhysicsDirectBodyState3D) -> void:
	# Change comportement based on if in water or not
	if inWater:
		state.linear_velocity *= 1 - water_drag
		state.angular_velocity *= 1 - water_angular_drag
	
