oh-my-git/node.gd

101 lines
2.2 KiB
GDScript3
Raw Permalink Normal View History

2020-03-18 16:20:55 +01:00
extends Node2D
var id setget id_set
2020-03-18 16:28:48 +01:00
var content setget content_set
2020-03-18 16:20:55 +01:00
var type setget type_set
var repository: Container
2020-03-18 16:20:55 +01:00
2020-03-18 20:03:17 +01:00
var children = {} setget children_set
2020-09-01 21:25:24 +02:00
var id_always_visible = false
var held = false
2020-03-18 16:20:55 +01:00
var arrow = preload("res://arrow.tscn")
2020-09-15 18:41:06 +02:00
2020-03-18 16:20:55 +01:00
func _ready():
pass
2020-03-18 16:20:55 +01:00
2020-09-08 20:26:14 +02:00
func _process(_delta):
if held:
global_position = get_global_mouse_position()
2020-09-14 16:03:01 +02:00
if visible:
apply_forces()
func apply_forces():
2020-09-14 14:54:30 +02:00
var offset = Vector2(0, 80)
2020-09-14 16:03:01 +02:00
for c in children.keys():
2020-09-15 18:41:06 +02:00
if repository.objects.has(c):
var other = repository.objects[c]
2020-09-14 16:03:01 +02:00
if other.visible:
var d = other.position.distance_to(position+offset)
var dir = (other.position - (position+offset)).normalized()
var f = (d*0.03)
position += dir*f
other.position -= dir*f
2020-03-18 16:20:55 +01:00
func id_set(new_id):
id = new_id
$ID.text = id
2020-03-18 16:28:48 +01:00
func content_set(new_content):
content = new_content
$Content.text = content
2020-03-18 16:20:55 +01:00
func type_set(new_type):
type = new_type
if type != "ref":
$ID.text = $ID.text.substr(0,8)
2020-09-13 21:55:24 +02:00
#elif type == "ref":
#$ID.text = $ID.text.replace("refs/", "")
match new_type:
"blob":
2020-09-01 21:25:24 +02:00
$Rect.color = Color("#333333")
"tree":
$Rect.color = Color.darkgreen
"commit":
$Rect.color = Color.orange
"tag":
$Rect.color = Color.blue
"ref":
$Rect.color = Color("#6680ff")
2020-09-01 21:25:24 +02:00
id_always_visible = true
"head":
$Rect.color = Color.red
2020-09-01 21:25:24 +02:00
id_always_visible = true
if id_always_visible:
$ID.show()
2020-03-18 16:20:55 +01:00
func children_set(new_children):
for c in $Arrows.get_children():
if not new_children.has(c.target):
c.queue_free()
for c in new_children:
if not children.has(c):
var a = arrow.instance()
a.label = new_children[c]
a.target = c
2020-09-01 17:24:21 +02:00
a.repository = repository
$Arrows.add_child(a)
children = new_children
2020-03-18 16:28:48 +01:00
func _on_hover():
$Content.visible = true
2020-09-01 21:25:24 +02:00
$ID.visible = true
2020-03-18 16:28:48 +01:00
func _on_unhover():
2020-09-01 21:25:24 +02:00
if not id_always_visible:
$Content.visible = false
$ID.visible = false
2020-03-18 16:28:48 +01:00
2020-09-08 20:26:14 +02:00
func _input_event(_viewport, event, _shape_idx):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT:
held = event.pressed
if event.button_index == BUTTON_RIGHT:
if event.pressed:
var input = get_tree().get_current_scene().find_node("Terminal").find_node("Control").find_node("Input")
input.text += id
input.caret_position = input.text.length()