diff --git a/arrow.gd b/arrow.gd index c38ac30..92c93c4 100644 --- a/arrow.gd +++ b/arrow.gd @@ -8,13 +8,14 @@ func _ready(): pass func _process(_delta): + var end = global_position + Vector2(0, 50) if repository and repository.objects.has(target): var t = repository.objects[target] - #print(t) - $Line.points[1] = t.global_position - global_position - $Label.position = ($Line.points[0] + $Line.points[1])/2 - $Tip.position = ($Line.points[0] + $Line.points[1])/2 - $Tip.rotation = PI+$Line.points[0].angle_to($Line.points[1]) + end = t.global_position + $Line.points[1] = end - global_position + $Label.position = ($Line.points[0] + $Line.points[1])/2 + $Tip.position = ($Line.points[0] + $Line.points[1])/2 + $Tip.rotation = PI+$Line.points[0].angle_to($Line.points[1]) func label_set(new_label): label = new_label diff --git a/node.gd b/node.gd index 29e4022..61747bc 100644 --- a/node.gd +++ b/node.gd @@ -18,12 +18,14 @@ func _process(_delta): if held: global_position = get_global_mouse_position() + var offset = Vector2(0, 80) + for c in children.keys(): if get_node("..").objects.has(c): var other = get_node("..").objects[c] - var d = other.position.distance_to(position) - var dir = (other.position - position).normalized() - var f = (d*0.01) + 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 diff --git a/repository.gd b/repository.gd index 2c2a499..b850b5d 100644 --- a/repository.gd +++ b/repository.gd @@ -50,29 +50,16 @@ func update_objects(): n.id = o n.type = object_type(o) n.content = object_content(o) - n.position = random_position() n.repository = self if true: - #print(" ") - #print(o) var type = object_type(o) - #print(type) - #print(object_content(o)) match type: "blob": pass "tree": - #print("Children:") - #print(tree_children(o)) n.children = tree_children(o) "commit": - #print("Tree:") - #print(commit_tree(o)) - - #print("Parents:") - #print(commit_parents(o)) - var c = {} c[commit_tree(o)] = "" for p in commit_parents(o): @@ -81,6 +68,8 @@ func update_objects(): "tag": print("tag") n.children = tag_target(o) + + n.position = find_position(n) add_child(n) objects[o] = n @@ -92,8 +81,9 @@ func update_refs(): n.type = "ref" n.content = "" n.repository = self - n.position = random_position() objects[r] = n + n.children = {ref_target(r): ""} + n.position = find_position(n) add_child(n) var n = objects[r] n.children = {ref_target(r): ""} @@ -105,7 +95,7 @@ func apply_forces(): continue var d = o.position.distance_to(o2.position) var dir = (o.global_position - o2.global_position).normalized() - var f = 3000/pow(d+0.00001,1.5) + var f = 2000/pow(d+0.00001,1.5) o.position += dir*f o2.position -= dir*f var center_of_gravity = rect_size/2 @@ -113,6 +103,21 @@ func apply_forces(): var dir = (o.position - center_of_gravity).normalized() var f = (d+0.00001)*Vector2(0.03, 0.01) o.position -= dir*f + +func find_position(n): + var position = Vector2.ZERO + var count = 0 + for child in n.children: + if objects.has(child): + position += objects[child].position + count += 1 + if count > 0: + print(count) + position /= count + n.position = position + Vector2(0, -150) + else: + n.position = random_position() + return n.position func git(args, splitlines = false): var o = shell.run("git " + args) @@ -133,21 +138,12 @@ func update_head(): n.type = "head" n.content = "" n.repository = self - n.position = random_position() + n.position = find_position(n) + objects["HEAD"] = n add_child(n) var n = objects["HEAD"] n.children = {ref_target("HEAD"): ""} - if not objects.has(ref_target("HEAD")): - var n2 = node.instance() - var r = ref_target("HEAD") - n2.id = r - n2.type = "ref" - n2.content = "" - n2.repository = self - n2.position = random_position() - objects[r] = n2 - add_child(n2) func all_objects(): return git("cat-file --batch-check='%(objectname)' --batch-all-objects", true)