extends StateAnimatedActor

var debugTimeTracker := 0.0

export (NodePath) var jump_node
export (NodePath) var fall_node
export (NodePath) var idle_node
export (NodePath) var dash_node

onready var jump_state: State = get_node(jump_node)
onready var fall_state: State = get_node(fall_node)
onready var idle_state: State = get_node(idle_node)
onready var dash_state: State = get_node(dash_node)

func process_input(_event: InputEvent) -> State:
	if move_component.wants_jump() and parent.is_on_floor():
		return jump_state

	move_component.get_movement_direction()

	return null


func process_physics(delta: float) -> State:
#	if move_component.wants_jump() and parent.is_on_floor():
#		return jump_state
	if debug_state:
		debugTimeTracker += delta
		if debugTimeTracker > 2:
			debugTimeTracker = 0.0
			print("DEBUG TRANSFORM:", parent.transform)

	move_component.velocity.y += gravity * delta

#	var movement = move_component.get_movement_direction() * move_speed
#
#	# only detecting input not actual movement
#	if movement == 0:
#		return idle_state		
	
#	parent.velocity.x = movement
#	parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))

	move_component.velocity.x = move_component.desired_movement_vector.x * move_speed
	move_component.velocity = parent.move_and_slide(move_component.velocity, Vector2(0, -1))

	if move_component.velocity.x == 0.0:
		return idle_state

	if move_component.get_movement_direction() != 0.0:
		parent.transform.x.x = move_component.get_movement_direction()

#	if move_component.flipped_sprite == true:
#		animations.flip_h = parent.direction.x > 0
#	else:
#		animations.flip_h = parent.direction.x < 0
	# Attempting to flip based on scale instead of sprite flip so that
	# all children nodes get flipped as well:
#	if move_component.flipped_sprite == false:
#		#parent.scale.x = parent.direction.x * -1
#		parent.transform.x.x = parent.direction.x * -1 # -1
#	else:
#		#parent.scale.x = parent.direction.x
#		parent.transform.x.x = parent.direction.x # 1
	


	# Another approach of changing state based on actual achieved velocity 	
#	if parent.velocity.x == 0:
#		return idle_state
	
	if !parent.is_on_floor():
		return fall_state
	return null
