extends CharacterBody2D


const SPEED = 300.0
const JUMP_VELOCITY = -500.0
const PUSH_FORCE = 50
var hard_gravity := 1
# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")


func _physics_process(delta):
	# Gravity applies any time character is not on floor
	if not is_on_floor():
		# Try modifying the properties for a unique game feel
		# In this case, once gravity overcomes the jump a multiplier is
		# applied that speeds up falling.
		if velocity.y > 0:
			hard_gravity*=1.8
		velocity.y += gravity * hard_gravity * delta
		#eventually, gravity overcomes jump velocity (see below)
	else:
		hard_gravity = 1
	# Only allow jump from starting on floor
	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = JUMP_VELOCITY

	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var direction = Input.get_axis("ui_left", "ui_right")
	if direction:
		velocity.x = direction * SPEED
	else:
		velocity.x = move_toward(velocity.x, 0, SPEED)
	
	#movde_and_slide is the big function - calculates all the positions and collisions
	move_and_slide()
	for i in get_slide_collision_count():
		var c = get_slide_collision(i)
		if c.get_collider() is RigidBody2D:
			c.get_collider().apply_central_impulse(-c.get_normal() * PUSH_FORCE)
