tool
extends Control
class_name Point

const OFFSET : Vector2 = Vector2(13,13)
var point_value : Array setget set_value,get_value
var point_position : Vector2
var color : Color setget set_color_point, get_color_point
var color_outline : Color
var function : String setget set_function, get_function

var mouse_entered : bool = false

enum SHAPES {
	Dot, Triangle, Square, Cross
}

var shape : int = 0 setget set_shape, get_shape

signal _mouse_entered(point)
signal _mouse_exited()
signal _point_pressed(point)

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

func _draw():
	if mouse_entered:
		draw_point(7,color_outline)
	draw_point(5,color)

func draw_point(size : float, color : Color):
	var factor : float
	match shape:
		SHAPES.Dot:
			draw_circle(OFFSET, size, color)
		SHAPES.Triangle:
			size+=6
			factor = 2
			draw_colored_polygon([
					OFFSET-Vector2(0,size/factor), OFFSET+Vector2(1,1)*size/factor, OFFSET-Vector2(1,-1)*size/factor
			], color,[],null,null,false)
		SHAPES.Square:
			size+=4
			factor = 2
			draw_colored_polygon([
					OFFSET-Vector2(1,1)*size/factor, OFFSET-Vector2(-1,1)*size/factor, OFFSET+Vector2(1,1)*size/factor, OFFSET-Vector2(1,-1)*size/factor
			], color,[],null,null,false)
		SHAPES.Cross:
			size+=2
			draw_line(OFFSET-Vector2(size,0), OFFSET+Vector2(size,0), color, size-5, true)
			draw_line(OFFSET-Vector2(0,size), OFFSET+Vector2(0,size), color, size-5, true)

func create_point(shape : int, color : Color, color_outline : Color, position : Vector2, value : Array, function : String):
	self.shape = shape
	self.color = color
	self.color_outline = color_outline
	self.point_position = position
	self.rect_position = point_position - OFFSET
	self.point_value = value
	self.function = function


func _on_Point_mouse_entered():
	mouse_entered = true
	emit_signal("_mouse_entered",self)
	update()

func _on_Point_mouse_exited():
	mouse_entered = false
	emit_signal("_mouse_exited")
	update()

func _on_Point_gui_input(event):
	if event is InputEventMouseButton:
		if event.is_pressed():
			if event.button_index == 1:
				emit_signal("_point_pressed",self)

func format_value(v : Array, format_x : bool, format_y : bool):
	var x : String = str(v[0])
	var y : String = str(v[1])
	
	if format_x:
		x = format(v[1])
	if format_y:
		y = format(v[1])
	
	return [x,y]

func format(n):
	n = str(n)
	var size = n.length()
	var s
	for i in range(size):
		if((size - i) % 3 == 0 and i > 0):
			s = str(s,",", n[i])
		else:
			s = str(s,n[i])
	
	return s.replace("Null","")

func set_value( v : Array = [] ) :
	point_value = v

func set_color_point( c : Color ):
	color = c

func set_function( f : String ):
	function = f

func set_shape(s : int):
	shape = s

# Public Getters
func get_value() -> Array:
	return point_value

func get_color_point() -> Color:
	return color

func get_function() -> String:
	return function

func get_shape() -> int:
	return shape