extends CharacterBody2D


var speed = 150
var accel = 10
var immobile = false

var inventory = {
	"points": 0,
	"stone": 0,
	"wood": 0,
	"food": 0
}
var status = {
	"health": 100,
	"stamina": 100,
	"level": 1
}
var current_tool = "none"


func get_total_points_for_next_level(): #Yes, this name is very long. Deal with it
	return status.level*10

func change_tool(tool):
	current_tool = tool
	$body_pivot/body/tool.texture = load(game_data.tools[tool].image)
	$body_pivot/body/tool.position = game_data.tools[tool].offset

func _ready():
	change_tool("stick") #this is when the starting tool is set

func _physics_process(delta):
	var pre_velocity = Vector2(0, 0)
	if !immobile:
		pre_velocity = Input.get_vector("move_left", "move_right", "move_up", "move_down")
	velocity = lerp(velocity, pre_velocity * speed, accel*delta)
	move_and_slide()

func _process(delta):
	if Input.is_action_pressed("game_interact"):
		if !$animation.is_playing():
			$animation.play("hit")
			if $body_pivot/raycast.is_colliding():
				var hit_object = $body_pivot/raycast.get_collider()
				if hit_object.type == "resource":
					inventory[hit_object.resource_type] += 1
					inventory.points += 1
					hit_object.get_node("animation").play("hit")
	
	#update inventory HUD
	$hud/inventory/stone_label.text = str(inventory.stone)
	$hud/inventory/wood_label.text = str(inventory.wood)
	$hud/level/points.text = str(inventory.points) + "/" + str(get_total_points_for_next_level())
	$hud/level/level_bar.value = inventory.points
	
	#update status HUD
	$hud/bars/health.value = status.health
	$hud/bars/stamina.value = status.stamina
	$hud/level/level.text = "Level " + str(status.level)
	$hud/level/level_bar.max_value = get_total_points_for_next_level()
	
	#level up
	if inventory.points >= (get_total_points_for_next_level()):
		inventory.points -= get_total_points_for_next_level()
		status.level += 1
		level_up()


func level_up():
	if status.level in game_data.level_tools:
		change_tool(game_data.level_tools[status.level])

func _input(event):
	if event is InputEventMouseMotion:
		var mouse_pos = get_global_mouse_position()
		$body_pivot.rotation = atan2((mouse_pos.y-position.y), (mouse_pos.x-position.x)) + (PI * 0.5)