94 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			GDScript3
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			GDScript3
		
	
	
	
extends Node2D
 | 
						|
 | 
						|
var stored = 0
 | 
						|
var capacity = 0
 | 
						|
var texture_resource = ""
 | 
						|
var value = 0
 | 
						|
var node_name = ''
 | 
						|
 | 
						|
var peers = []
 | 
						|
const drag_threshold = 0.2
 | 
						|
var drag = false
 | 
						|
var drag_hold = 0
 | 
						|
 | 
						|
func name_from_index(index):
 | 
						|
	var n = char(index % 26 + 65)
 | 
						|
	if index > 26:
 | 
						|
		n += "%d" % index / 26
 | 
						|
	self.set_node_name(n)
 | 
						|
 | 
						|
func set_node_name(value):
 | 
						|
	self.node_name = value
 | 
						|
	get_node("Label").set_text(self.node_name)
 | 
						|
	
 | 
						|
func is_full():
 | 
						|
	return self.capacity >= self.stored
 | 
						|
 | 
						|
# Declare member variables here. Examples:
 | 
						|
# var a = 2
 | 
						|
# var b = "text"
 | 
						|
 | 
						|
 | 
						|
# Called when the node enters the scene tree for the first time.
 | 
						|
func _ready():
 | 
						|
	add_to_group("nodes")
 | 
						|
	if self.texture_resource != "":
 | 
						|
		get_node("Sprite").set_texture(load(self.texture_resource))
 | 
						|
	self.update_help()
 | 
						|
 | 
						|
func update_help():
 | 
						|
	get_node("Help").set_tooltip("")
 | 
						|
	get_node("Help").set_text("")
 | 
						|
	
 | 
						|
func path_to(destination):
 | 
						|
	pass
 | 
						|
	
 | 
						|
# Called every frame. 'delta' is the elapsed time since the previous frame.
 | 
						|
#func _process(delta):
 | 
						|
#	pass
 | 
						|
 | 
						|
func _process(delta):
 | 
						|
	if self.drag:
 | 
						|
		self.drag_hold += delta
 | 
						|
 | 
						|
func update_position(pos):
 | 
						|
	self.set_position(pos)
 | 
						|
	for link in get_tree().get_nodes_in_group("links"):
 | 
						|
		if link.end == self or link.start == self:
 | 
						|
			link.redraw_line()
 | 
						|
	var c = get_tree().get_nodes_in_group("character")[0]
 | 
						|
	if is_instance_valid(c):
 | 
						|
		if c.location == self:
 | 
						|
			c.set_position(self.get_position() + c.offset)
 | 
						|
 | 
						|
func _on_Help_gui_input(event):
 | 
						|
	if event is InputEventMouseMotion:
 | 
						|
		if self.drag and self.drag_hold > self.drag_threshold:
 | 
						|
			self.set_position(get_global_mouse_position())
 | 
						|
	if event is InputEventMouseButton:
 | 
						|
		if event.button_index == BUTTON_LEFT and event.is_doubleclick():
 | 
						|
			if false:
 | 
						|
				print(self)
 | 
						|
				print("\tPeers: ", self.peers)
 | 
						|
				var links = []
 | 
						|
				for link in get_tree().get_nodes_in_group("links"):
 | 
						|
					if link.start == self or link.end == self:
 | 
						|
						links.append(link)
 | 
						|
				print("\tLinks: ")
 | 
						|
				for link in links:
 | 
						|
					print("\t\t", link, " ", link.start, " <---> ", link.end)
 | 
						|
				
 | 
						|
			var c = get_tree().get_nodes_in_group("character")[0]
 | 
						|
			if c != null and c.can_move(self):
 | 
						|
				c.set_location(self)
 | 
						|
		if event.button_index == BUTTON_LEFT and !event.is_doubleclick():
 | 
						|
			if event.pressed:
 | 
						|
				self.drag = true
 | 
						|
			else:
 | 
						|
				if self.drag:
 | 
						|
					self.drag = false
 | 
						|
					if self.drag_hold > self.drag_threshold:
 | 
						|
						self.update_position(get_global_mouse_position())
 | 
						|
					self.drag_hold = 0
 | 
						|
		
 |