OverviewFilesCommitsIssuesDocsReleasesPeers

Attila772-hypergodot commits / 9b332b9

Readme
9b332b953a4e8dd11eaae6a75a8ca907729d2af3
by Attila772 <71554727+Attila772@users.noreply.github.com> · 2025-05-23T09:17:57.000Z

Changed files (77) +396 -151

Camera2D.gd +44 -7
……@@ -51,17 +51,54 @@ func _on_button_button_up() -> void:
5151 Global.high_quality = true
5252 queue_redraw()
5353 await RenderingServer.frame_post_draw # Wait for the high-quality redraw
54
5455 # Capture the screenshot
5556 var image = get_viewport().get_texture().get_image()
5657
57 var dir = DirAccess.open("user://screenshots")
58 var c= 0
59 for n in dir.get_files():
60 c+=1
61 image.save_png("user://screenshots/ss" +str(c)+ ".png")
58 # Determine the save path
59 var config = ConfigFile.new()
60 var err = config.load("res://conf.cfg")
61 var save_path = "user://screenshots/" # Default save path
62
63 if err == OK:
64 var custom_path = config.get_value("graph_settings", "screenshot_path", "")
65 if custom_path != "":
66 save_path = custom_path # Use the custom path if defined in the config file
67 else:
68 print("No valid screenshot_path in conf.cfg. Using default path.")
69 else:
70 print("Error loading conf.cfg. Using default path.")
71
72 # Ensure the directory exists
73 if DirAccess.dir_exists_absolute(save_path) == false:
74 var create_result = DirAccess.make_dir_recursive_absolute(save_path)
75 if create_result != OK:
76 print("Failed to create directory:", save_path)
77 save_path = "user://screenshots/"
78 DirAccess.make_dir_recursive_absolute(save_path)
79
80 # Determine the screenshot file name
81 var dir = DirAccess.open(save_path)
82 var count = 0
83 if dir:
84 dir.list_dir_begin()
85 var file_name = dir.get_next()
86 while file_name != "":
87 if not dir.current_is_dir(): # Count only files
88 count += 1
89 file_name = dir.get_next()
90 dir.list_dir_end()
91 else:
92 print("Failed to open directory:", save_path)
93
94 # Save the screenshot
95 var screenshot_file = save_path + "/ss" + str(count) + ".png"
96 var save_result = image.save_png(screenshot_file)
97 if save_result == OK:
98 print("Screenshot saved to:", screenshot_file)
99 else:
100 print("Failed to save screenshot to:", screenshot_file)
62101
63
64102 # Revert back to normal mode
65103 Global.high_quality = false
66104 get_parent().get_node("CanvasLayer2").get_node("Button").visible = true
67 pass # Replace with function body.
Camera2D.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dkr1g7pe3x5km
EdgeItem.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bi5e4wog6rw37
EdgeItem.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=2 format=3 uid="uid://bcgmtai4ybwjk"]
22
3[ext_resource type="Script" path="res://EdgeItem.gd" id="1_fco0k"]
3[ext_resource type="Script" uid="uid://bi5e4wog6rw37" path="res://EdgeItem.gd" id="1_fco0k"]
44
55[node name="EdgeItem" type="Control"]
66layout_mode = 3
EdgeMenu.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://db4w1l8ndeu6d
EdgeMenu.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=3 format=3 uid="uid://cswt7a6uosun"]
22
3[ext_resource type="Script" path="res://EdgeMenu.gd" id="1_13kk4"]
3[ext_resource type="Script" uid="uid://db4w1l8ndeu6d" path="res://EdgeMenu.gd" id="1_13kk4"]
44
55[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u1fbt"]
66bg_color = Color(0.4, 0.4, 0.4, 1)
Export/HyperGodot.console.exe +0 -0
(no content changes — binary or rename)
Export/HyperGodot.exe +0 -0
(no content changes — binary or rename)
Export/HyperGodot.zip +0 -0
(no content changes — binary or rename)
Export/conf.cfg +34 -0
……@@ -0,0 +1,34 @@
1[graph_settings]
2point_count = 10
3edge_width_expression = "pow(support, 0.35)"
4node_radius_expression = "30 + 100 * (centrality / total_nodes)"
5layout = "circular"
6parameters = [300]
7#screenshot_path = "C:\\Users\\...\\Documents\\screenshots"
8
9# point_count sets the number of points that will be generated around the nodes in order to calculate the curve,
10# More points mean a nicer curve, for the cost of more processing power. If you press the screenshot button a high quality
11# image will be generated from the hypergraph, so you can keep the point_count lower. Less then 200 is advised.
12
13# edge_width_expression is a customizable expression that will apply to the width of the hyper edes. For ex.:
14# edge_width_expression = "20.0" will set the widths to be 20
15# Usable variables:
16# support : Support or weight of the edge
17# node_count: The count of how many nodes are in the given edge
18# total_nodes: How many nodes are in the full hypergraph
19# on the expressions themselves look up the godot documentation's expression page:
20# https://docs.godotengine.org/en/latest/tutorials/scripting/evaluating_expressions.html
21
22
23#node_radius_expression works the same way as edge_width_expression. The available variables are
24# centrality (degree centrality) and total nodes. Note: If the node radius is set below 30 the node will disappear
25
26#Screenshots are saved in the default folder: C:\Users\...\AppData\Roaming\HyperGodot\screenshots
27
28#Layout can be "force-directed" (parameters: iterations: int, repulsion_force: float, spring_length: float)
29#for example:
30#layout = "force-directed"
31#parameters = [10,200,3000]
32
33#or
34#"circular" (parameters: radius: float)
Export/patterns.txt +4 -0
……@@ -0,0 +1,4 @@
1v1 v2 #WEIGHT: 262 #GROUP 2022
2v3 v4 #WEIGHT: 313 #GROUP 2022
3v1 v2 v5 #WEIGHT: 3312 #GROUP 2023
4v1 v3 v6 v7 #WEIGHT: 33001 #GROUP 2023
Global.gd +2 -0
……@@ -3,6 +3,8 @@ extends Node
33var group_dictionary = {}
44var group_count = 0
55var high_quality = false
6var total_nodes = 0
7var edges = null
68
79# Function to initialize the groups from a list of group names
810func initialize_groups(group_names: Array):
Global.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://otd5081xyntp
Global.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=2 format=3 uid="uid://ookb725cjygc"]
22
3[ext_resource type="Script" path="res://Global.gd" id="1_d51fs"]
3[ext_resource type="Script" uid="uid://otd5081xyntp" path="res://Global.gd" id="1_d51fs"]
44
55[node name="Node" type="Node"]
66script = ExtResource("1_d51fs")
HyperEdge.gd +3 -5
……@@ -22,9 +22,6 @@ func _input(event):
2222 dragging = false # Stop dragging
2323 queue_redraw() # Optionally, queue a redraw when you stop dragging
2424
25
26
27
2825func _draw():
2926 var points = []
3027 for node_id in nodes:
……@@ -33,12 +30,13 @@ func _draw():
3330 if node:
3431 var center = node.position
3532 var radius = nodes[node_id]
36
33 var actual_node_radius = node.radius_global
34 radius += actual_node_radius
35 radius -=30
3736
3837 var config = ConfigFile.new()
3938 var err = config.load("res://conf.cfg")
4039 if err == OK:
41 # Get the edge_width value from the config file
4240 point_count = config.get_value("graph_settings", "point_count", 2.0)
4341 if Global.high_quality:
4442 point_count = 300
HyperEdge.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://ci53u6xra62c1
HyperEdge.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=2 format=3 uid="uid://nx4jmlyy1jhv"]
22
3[ext_resource type="Script" path="res://HyperEdge.gd" id="1_rm3x8"]
3[ext_resource type="Script" uid="uid://ci53u6xra62c1" path="res://HyperEdge.gd" id="1_rm3x8"]
44
55[node name="HyperEdge" type="Node2D"]
66script = ExtResource("1_rm3x8")
HyperNode.gd +41 -12
……@@ -8,6 +8,8 @@ var node_id = "name"
88var circle_usage = {} # Edge instance to circle index
99signal node_drag_started(node)
1010signal node_drag_ended(node)
11var drawing_scale = Vector2(1, 1) # Default scale
12var radius_global = 0
1113var NodeMenu = load("res://NodeMenu.tscn")
1214
1315func _set_node_id(value : String):
……@@ -63,33 +65,60 @@ func _draw():
6365 pass
6466
6567func update_size(size_scale: float, new_centrality_score: float):
66 scale = Vector2(size_scale, size_scale)
6768 centrality_score = new_centrality_score
68 make_offset_circles() # Now this will use the updated scale
69
70 # Load the config file
71 var config = ConfigFile.new()
72 var err = config.load("res://conf.cfg")
73 if err != OK:
74 print("Error loading conf.cfg: ", err)
75 return
76
77 # Parse the expression
78 var expression_text = config.get_value("graph_settings", "node_radius_expression", "10 + 40 * (centrality / total_nodes)")
79 var expression = Expression.new()
80 var parse_error = expression.parse(expression_text, ["centrality", "total_nodes"])
81
82 if parse_error != OK:
83 print("Error parsing node radius expression: ", parse_error)
84 return
85
86 # Execute the expression
87 var radius = expression.execute([centrality_score, Global.total_nodes])
88 if radius == null:
89 print("Error executing node radius expression.")
90 return
91 radius_global = radius
92 # Apply the calculated radius
93 scale = Vector2(radius / 25, radius / 25) # Assuming the base radius is 25
94 drawing_scale = scale
95 make_offset_circles()
6996
7097func make_offset_circles():
7198 offset_circles.clear()
72 var scale_factor = (scale.x + scale.y) / 2
73 var base_radius = 25 * scale_factor
74 var cumulative_radius = base_radius
99
100 # Calculate the base radius dynamically based on the node's current drawing scale
101 var node_radius = 25 * ((drawing_scale.x + drawing_scale.y) / 2) # Adjust 25 to match your base radius
102
103 var cumulative_radius = node_radius # Start with the node's outer boundary
104
75105 var edge_widths = []
76106 for edge_id in edges.keys():
77 var edge_support = edges[edge_id]
78 var edge_width = pow(edge_support, 0.35) # Function to calculate edge width based on support
107 var edge_support = edges[edge_id]
108 var edge_width = pow(edge_support, 0.35) # Function to calculate edge width based on support
79109 edge_widths.append(edge_width)
80110
81111 for i in range(edge_widths.size()):
82112 var edge_width = edge_widths[i]
83 # Increase the radius by half of the previous edge's width and half of the current edge's width
84 # This ensures that the edges do not overlap
113 # Add half the previous and current edge widths to ensure proper spacing
85114 if i == 0:
86115 cumulative_radius += edge_width / 2
87116 else:
88117 cumulative_radius += (edge_widths[i - 1] / 2) + (edge_width / 2)
89118
90 offset_circles.append(cumulative_radius)
91 # cumulative_radius += edge_width / 2 # Prepare for the next edge (not needed here)
92 queue_redraw()
119 offset_circles.append(cumulative_radius) # Store the radius for this edge
120
121 queue_redraw() # Ensure the node is redrawn with updated circles
93122
94123
95124
HyperNode.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dtumcbkpovakj
HyperNode.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=4 format=3 uid="uid://dll5p1lerh26o"]
22
3[ext_resource type="Script" path="res://HyperNode.gd" id="1_k5qsc"]
3[ext_resource type="Script" uid="uid://dtumcbkpovakj" path="res://HyperNode.gd" id="1_k5qsc"]
44[ext_resource type="FontFile" uid="uid://bqjrf7m2r0yac" path="res://Times New Roman.ttf" id="2_hcrqc"]
55
66[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jrb2w"]
NodeMenu.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bak4melvht67p
NodeMenu.tscn +38 -35
……@@ -1,52 +1,55 @@
1[gd_scene load_steps=2 format=3 uid="uid://c8fsi0gws3ass"]
1[gd_scene load_steps=3 format=3 uid="uid://c8fsi0gws3ass"]
22
3[ext_resource type="Script" path="res://NodeMenu.gd" id="1_2a42n"]
3[ext_resource type="Script" uid="uid://bak4melvht67p" path="res://NodeMenu.gd" id="1_2a42n"]
4
5[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_m8psx"]
6corner_radius_top_left = 20
7corner_radius_top_right = 20
8corner_radius_bottom_right = 20
9corner_radius_bottom_left = 20
10shadow_size = 10
11shadow_offset = Vector2(2.33, 0)
412
513[node name="NodeMenu" type="Node2D"]
614script = ExtResource("1_2a42n")
715
8[node name="ColorRect" type="ColorRect" parent="."]
16[node name="Panel" type="Panel" parent="."]
17offset_left = -6.0
18offset_top = -59.0
19offset_right = 242.0
20offset_bottom = 118.0
21theme_override_styles/panel = SubResource("StyleBoxFlat_m8psx")
22
23[node name="Button" type="Button" parent="."]
24offset_left = 200.0
25offset_top = -51.0
926offset_right = 234.0
10offset_bottom = 202.0
11color = Color(0.188235, 0.27451, 0.270588, 1)
27offset_bottom = -15.0
28text = "X"
1229
13[node name="OnlySelf" type="Button" parent="."]
14offset_right = 235.0
15offset_bottom = 31.0
16text = "Only this node's edges visible"
17alignment = 0
30[node name="Container" type="Container" parent="."]
31offset_right = 242.0
32offset_bottom = 125.0
1833
19[node name="AllEdges" type="Button" parent="."]
20offset_left = 2.0
21offset_top = 35.0
22offset_right = 234.0
23offset_bottom = 66.0
34[node name="VBoxContainer" type="VBoxContainer" parent="Container"]
35layout_mode = 2
36
37[node name="AllEdges" type="Button" parent="Container/VBoxContainer"]
38layout_mode = 2
2439text = "All edges visible"
2540alignment = 0
2641
27[node name="EdgeColor" type="Button" parent="."]
28offset_left = 1.0
29offset_top = 73.0
30offset_right = 233.0
31offset_bottom = 104.0
42[node name="EdgeColor" type="Button" parent="Container/VBoxContainer"]
43layout_mode = 2
3244text = "Edge color picker"
3345alignment = 0
3446
35[node name="Button4" type="Button" parent="."]
36offset_top = 109.0
37offset_right = 235.0
38offset_bottom = 141.0
39text = "Node color picker"
47[node name="OnlySelf" type="Button" parent="Container/VBoxContainer"]
48layout_mode = 2
49text = "Only this node's edges visible"
4050alignment = 0
4151
42[node name="Button" type="Button" parent="."]
43offset_left = 200.0
44offset_top = -41.0
45offset_right = 236.0
46offset_bottom = -6.0
47text = "X"
48
49[connection signal="pressed" from="OnlySelf" to="." method="only_self_edges_visible"]
50[connection signal="pressed" from="AllEdges" to="." method="_on_all_edges_pressed"]
51[connection signal="pressed" from="EdgeColor" to="." method="_on_edge_color_pressed"]
5252[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
53[connection signal="pressed" from="Container/VBoxContainer/AllEdges" to="." method="_on_all_edges_pressed"]
54[connection signal="pressed" from="Container/VBoxContainer/EdgeColor" to="." method="_on_edge_color_pressed"]
55[connection signal="pressed" from="Container/VBoxContainer/OnlySelf" to="." method="only_self_edges_visible"]
README.md +34 -24
……@@ -1,33 +1,43 @@
1![github-top-lang][lang] ![lic] ![lic-font]
1# HyperGodot: Interactive Hypergraph Visualization Tool
22
3# MaterialIcons for Godot
3**HyperGodot** is an interactive, feature-rich visualization tool for hypergraphs, designed for advanced exploration and analysis of complex multi-actor relationships. Built using the Godot Engine, it supports dynamic layout computation, user customization, and comparative analysis through temporal or grouped hypergraphs.
44
5[*Templarian's Material-Design-Icons*](https://github.com/templarian/MaterialDesign) is a collection of icons for the [Material Design](https://material.io/) specification.
5## 🧠 Key Features
66
7This addon provides the following nodes to use the icons in Godot:
8- **MaterialIcon**: A node that displays an icon from the Material Design Icons collection.
9- **MaterialButton**: A node that displays an icon from the Material Design Icons collection as a button (without label).
7- **Multiple Layouts**: Force-directed and circular layouts for vertex positioning.
8- **Convex Hull Edge Drawing**: Uses Andrew’s monotone chain algorithm for rendering hyperedges with minimal overlap.
9- **Configurable Visualization**:
10 - Define node sizes and edge widths using mathematical expressions.
11 - Adjustable point count for rendering smoothness.
12 - Edge and node coloring.
13- **Temporal and Grouped Hypergraph Support**:
14 - Compare multiple hypergraph structures using groups and line styles (solid/dashed).
15- **Interactive UI**:
16 - Drag to reposition nodes.
17 - Select node to filter visible edges.
18 - Camera controls for navigation and zoom.
1019
11It's also adds **IconsFinder** to the Godot's **Tools** menu.
12So you can find the icons easily.
20## 📁 Input Format
1321
14![IconsFinder Screen Shot](screenshot_if.png)
22Input hypergraphs are plain text files using a space-separated format per hyperedge. Each line defines a hyperedge and may include tags:
1523
16## Exporting
17For emojis to work in exported projects, you need add `*.json` files to include files settings:
18![include files settings](screenshot_export.png)
24```txt
25v1 v2 v3 #WEIGHT: 12 #GROUP: 2023
26v4 v5 #WEIGHT: 8 #GROUP: 2022
27```
28WEIGHT: numeric value representing edge weight (e.g., frequency, strength).
1929
20## Install using gd-plug
21To install it with [gd-plug](https://github.com/imjp94/gd-plug) add in your `plug.gd` script:
22```gdscript
23extends "res://addons/gd-plug/plug.gd"
30GROUP: label for grouping edges (e.g., year, category, temporal slice).
2431
25func _plugging():
26 # your other plugins/addons install instructions
27 # ...
28 plug("rakugoteam/Godot-Material-Icons", {"include": ["addons", ".import/"]})
29```
32#Configuration File (conf.cfg)
33
34Users can customize the behavior and appearance of the visualization using a config file. Parameters include layout type, mathematical expressions for edge width and node size, and camera/export settings.
3035
31[lic]: https://img.shields.io/github/license/rakugoteam/Godot-Material-Icons?style=flat-square&label=📃%20License&
32[lang]: https://img.shields.io/github/languages/top/rakugoteam/Godot-Material-Icons?style=flat-square
33[lic-font]:https://img.shields.io/static/v1.svg?label=📜%20Font%20License&message=Pictogrammers%20Free%20License&color=informational&style=flat-square
36Example configuration:
37 [graph_settings]
38point_count = 12
39edge_width_expression = "weight * 0.2 + 1"
40node_radius_expression = "30 + 100 * (centrality / total_nodes)"
41layout = "force-directed"
42parameters = [500, 250.0, 30.0]
43#screenshot_path = "C:\\Users\\YourName\\Documents\\screenshots"
Times New Roman.ttf.import +1 -0
……@@ -23,6 +23,7 @@ allow_system_fallback=true
2323force_autohinter=false
2424hinting=1
2525subpixel_positioning=1
26keep_rounding_remainders=true
2627oversampling=0.0
2728Fallbacks=null
2829fallbacks=[]
addons/kanban_tasks/data/board.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://der5cy3nggnqm
addons/kanban_tasks/data/category.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://d27427a5moiqa
addons/kanban_tasks/data/kanban_resource.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bhulepo2rpgy6
addons/kanban_tasks/data/layout.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://6e7xmg2w886m
addons/kanban_tasks/data/settings.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://clempbpldb4hm
addons/kanban_tasks/data/stage.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://cc0hhlpqohqhw
addons/kanban_tasks/data/step.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://cljwip0hl3d7e
addons/kanban_tasks/data/task.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://c6a4ohvkhg1yy
addons/kanban_tasks/edit_label/edit_label.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bj3jwa1phfj3t
addons/kanban_tasks/expand_button/expand_button.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dyga42pgcqrsl
addons/kanban_tasks/plugin.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bp8y3h81yydrb
addons/kanban_tasks/plugin_singleton/singletons.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://l7m3xlrfetoy
addons/kanban_tasks/standalone_plugin.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://r51ncwjt2umm
addons/kanban_tasks/uuid/uuid.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dvosrae54se4x
addons/kanban_tasks/view/board/board.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://defjycflkd24g
addons/kanban_tasks/view/board/board.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=3 format=3 uid="uid://c5dk4lnyiag3w"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/board/board.gd" id="1_p7lf4"]
3[ext_resource type="Script" uid="uid://defjycflkd24g" path="res://addons/kanban_tasks/view/board/board.gd" id="1_p7lf4"]
44[ext_resource type="PackedScene" uid="uid://dh1yunmhipirg" path="res://addons/kanban_tasks/view/settings/settings.tscn" id="2_by8mq"]
55
66[node name="BoardView" type="VBoxContainer"]
addons/kanban_tasks/view/category/category_popup_menu.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://c4fyjjklcwapk
addons/kanban_tasks/view/details/details.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://c5cqn5txafqim
addons/kanban_tasks/view/details/details.tscn +3 -3
……@@ -1,9 +1,9 @@
11[gd_scene load_steps=6 format=3 uid="uid://bwi22eyrmeeet"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/details/details.gd" id="1_gh7s6"]
3[ext_resource type="Script" uid="uid://c5cqn5txafqim" path="res://addons/kanban_tasks/view/details/details.gd" id="1_gh7s6"]
44[ext_resource type="PackedScene" uid="uid://dwjg5vyxx4g48" path="res://addons/kanban_tasks/view/details/step_holder.tscn" id="2_0ptaf"]
55
6[sub_resource type="Image" id="Image_fjijb"]
6[sub_resource type="Image" id="Image_bpcvf"]
77data = {
88"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 93, 93, 55, 255, 97, 97, 58, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 98, 98, 47, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 46, 255, 93, 93, 236, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
99"format": "RGBA8",
……@@ -13,7 +13,7 @@ data = {
1313}
1414
1515[sub_resource type="ImageTexture" id="ImageTexture_op8g0"]
16image = SubResource("Image_fjijb")
16image = SubResource("Image_bpcvf")
1717
1818[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_g2k57"]
1919content_margin_left = 4.0
addons/kanban_tasks/view/details/step_entry.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://jdpqqhwk28us
addons/kanban_tasks/view/details/step_holder.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bocmwtj7h6y2r
addons/kanban_tasks/view/details/step_holder.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=3 format=3 uid="uid://dwjg5vyxx4g48"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/details/step_holder.gd" id="1_exd17"]
3[ext_resource type="Script" uid="uid://bocmwtj7h6y2r" path="res://addons/kanban_tasks/view/details/step_holder.gd" id="1_exd17"]
44
55[sub_resource type="Theme" id="Theme_1hs0w"]
66StepHolder/base_type = &"VBoxContainer"
addons/kanban_tasks/view/edit_context.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dtjsuc0ac7p5b
addons/kanban_tasks/view/filter.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://xepb1yyi04s1
addons/kanban_tasks/view/settings/categories/categories.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://cnxvnrtd3anj4
addons/kanban_tasks/view/settings/categories/categories.tscn +3 -3
……@@ -1,8 +1,8 @@
11[gd_scene load_steps=5 format=3 uid="uid://b2likgss81t0s"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/settings/categories/categories.gd" id="1_n36ev"]
3[ext_resource type="Script" uid="uid://cnxvnrtd3anj4" path="res://addons/kanban_tasks/view/settings/categories/categories.gd" id="1_n36ev"]
44
5[sub_resource type="Image" id="Image_ig53p"]
5[sub_resource type="Image" id="Image_jriv5"]
66data = {
77"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 93, 93, 55, 255, 97, 97, 58, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 98, 98, 47, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 46, 255, 93, 93, 236, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
88"format": "RGBA8",
……@@ -12,7 +12,7 @@ data = {
1212}
1313
1414[sub_resource type="ImageTexture" id="ImageTexture_w6wkd"]
15image = SubResource("Image_ig53p")
15image = SubResource("Image_jriv5")
1616
1717[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gsyou"]
1818content_margin_left = 4.0
addons/kanban_tasks/view/settings/categories/category_entry.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://c5flkwp0lqd4
addons/kanban_tasks/view/settings/general/general.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dxelpuascaqc2
addons/kanban_tasks/view/settings/general/general.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=3 format=3 uid="uid://due07vdflx4o"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/settings/general/general.gd" id="1_8tblh"]
3[ext_resource type="Script" uid="uid://dxelpuascaqc2" path="res://addons/kanban_tasks/view/settings/general/general.gd" id="1_8tblh"]
44
55[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7cqkc"]
66content_margin_left = 4.0
addons/kanban_tasks/view/settings/settings.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://ecq3h0pvi24h
addons/kanban_tasks/view/settings/settings.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=5 format=3 uid="uid://dh1yunmhipirg"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/settings/settings.gd" id="1_4eaw3"]
3[ext_resource type="Script" uid="uid://ecq3h0pvi24h" path="res://addons/kanban_tasks/view/settings/settings.gd" id="1_4eaw3"]
44[ext_resource type="PackedScene" uid="uid://due07vdflx4o" path="res://addons/kanban_tasks/view/settings/general/general.tscn" id="1_dk7pg"]
55[ext_resource type="PackedScene" uid="uid://b2likgss81t0s" path="res://addons/kanban_tasks/view/settings/categories/categories.tscn" id="3_iycb0"]
66[ext_resource type="PackedScene" uid="uid://dapkpnkm8sow8" path="res://addons/kanban_tasks/view/settings/stages/stages.tscn" id="4_okolg"]
addons/kanban_tasks/view/settings/stages/stages.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://ccll34x5fagac
addons/kanban_tasks/view/settings/stages/stages.tscn +3 -3
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=5 format=3 uid="uid://dapkpnkm8sow8"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/settings/stages/stages.gd" id="1_1yycq"]
3[ext_resource type="Script" uid="uid://ccll34x5fagac" path="res://addons/kanban_tasks/view/settings/stages/stages.gd" id="1_1yycq"]
44
55[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7cqkc"]
66content_margin_left = 4.0
……@@ -14,7 +14,7 @@ corner_radius_bottom_right = 3
1414corner_radius_bottom_left = 3
1515corner_detail = 5
1616
17[sub_resource type="Image" id="Image_16p4g"]
17[sub_resource type="Image" id="Image_vr1jo"]
1818data = {
1919"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 93, 93, 55, 255, 97, 97, 58, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 98, 98, 47, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 46, 255, 93, 93, 236, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
2020"format": "RGBA8",
……@@ -24,7 +24,7 @@ data = {
2424}
2525
2626[sub_resource type="ImageTexture" id="ImageTexture_frc8x"]
27image = SubResource("Image_16p4g")
27image = SubResource("Image_vr1jo")
2828
2929[node name="Stages" type="VBoxContainer"]
3030anchors_preset = 15
addons/kanban_tasks/view/shortcuts.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://ci13ff1lsstcu
addons/kanban_tasks/view/stage/stage.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://b2ngyvkovxfnp
addons/kanban_tasks/view/stage/stage.tscn +4 -4
……@@ -1,7 +1,7 @@
11[gd_scene load_steps=6 format=3 uid="uid://bjmtdjfx7iqgp"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/stage/stage.gd" id="1_i5556"]
4[ext_resource type="Script" path="res://addons/kanban_tasks/edit_label/edit_label.gd" id="2"]
3[ext_resource type="Script" uid="uid://b2ngyvkovxfnp" path="res://addons/kanban_tasks/view/stage/stage.gd" id="1_i5556"]
4[ext_resource type="Script" uid="uid://bj3jwa1phfj3t" path="res://addons/kanban_tasks/edit_label/edit_label.gd" id="2"]
55
66[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h7hiu"]
77content_margin_left = 4.0
……@@ -15,7 +15,7 @@ corner_radius_bottom_right = 3
1515corner_radius_bottom_left = 3
1616corner_detail = 5
1717
18[sub_resource type="Image" id="Image_kabwd"]
18[sub_resource type="Image" id="Image_y70vq"]
1919data = {
2020"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 93, 93, 55, 255, 97, 97, 58, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 98, 98, 47, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 46, 255, 93, 93, 236, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
2121"format": "RGBA8",
……@@ -25,7 +25,7 @@ data = {
2525}
2626
2727[sub_resource type="ImageTexture" id="ImageTexture_yu4gn"]
28image = SubResource("Image_kabwd")
28image = SubResource("Image_y70vq")
2929
3030[node name="Stage" type="MarginContainer"]
3131editor_description = "This container is needed because the panel style cannot be updated from a script on the panel container."
addons/kanban_tasks/view/start/start.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dkim1ufdoyfwj
addons/kanban_tasks/view/start/start.tscn +1 -1
……@@ -1,6 +1,6 @@
11[gd_scene load_steps=4 format=3 uid="uid://bemcl1rqpeqty"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/start/start.gd" id="1_fkeby"]
3[ext_resource type="Script" uid="uid://dkim1ufdoyfwj" path="res://addons/kanban_tasks/view/start/start.gd" id="1_fkeby"]
44
55[sub_resource type="LabelSettings" id="LabelSettings_0i4nn"]
66font_size = 22
addons/kanban_tasks/view/task/autosize_label.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://bau1py83aff06
addons/kanban_tasks/view/task/task.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://uywctdmttjfw
addons/kanban_tasks/view/task/task.tscn +4 -4
……@@ -1,11 +1,11 @@
11[gd_scene load_steps=8 format=3 uid="uid://ckqrwj5kxr6vl"]
22
3[ext_resource type="Script" path="res://addons/kanban_tasks/view/task/task.gd" id="1_dslv8"]
4[ext_resource type="Script" path="res://addons/kanban_tasks/edit_label/edit_label.gd" id="2_iitpi"]
5[ext_resource type="Script" path="res://addons/kanban_tasks/view/task/autosize_label.gd" id="3_1qkab"]
3[ext_resource type="Script" uid="uid://uywctdmttjfw" path="res://addons/kanban_tasks/view/task/task.gd" id="1_dslv8"]
4[ext_resource type="Script" uid="uid://bj3jwa1phfj3t" path="res://addons/kanban_tasks/edit_label/edit_label.gd" id="2_iitpi"]
5[ext_resource type="Script" uid="uid://bau1py83aff06" path="res://addons/kanban_tasks/view/task/autosize_label.gd" id="3_1qkab"]
66[ext_resource type="PackedScene" uid="uid://bwi22eyrmeeet" path="res://addons/kanban_tasks/view/details/details.tscn" id="3_2ol5j"]
77[ext_resource type="PackedScene" uid="uid://dwjg5vyxx4g48" path="res://addons/kanban_tasks/view/details/step_holder.tscn" id="4_4e7a7"]
8[ext_resource type="Script" path="res://addons/kanban_tasks/expand_button/expand_button.gd" id="5_sgwao"]
8[ext_resource type="Script" uid="uid://dyga42pgcqrsl" path="res://addons/kanban_tasks/expand_button/expand_button.gd" id="5_sgwao"]
99
1010[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3iasq"]
1111bg_color = Color(0.1, 0.1, 0.1, 0.6)
addons/kanban_tasks/view/tooltip.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://c2h3wagifru40
conf.cfg +21 -2
……@@ -1,10 +1,15 @@
11[graph_settings]
22point_count = 10
33edge_width_expression = "pow(support, 0.35)"
4
4node_radius_expression = "30 + 100 * (centrality / total_nodes)"
5layout = "circular"
6parameters = [300]
7#screenshot_path = "C:\\Users\\...\\Documents\\screenshots"
58
69# point_count sets the number of points that will be generated around the nodes in order to calculate the curve,
7# More points mean a nicer curve, for the cost of more processing power.
10# More points mean a nicer curve, for the cost of more processing power. If you press the screenshot button a high quality
11# image will be generated from the hypergraph, so you can keep the point_count lower. Less then 200 is advised.
12
813# edge_width_expression is a customizable expression that will apply to the width of the hyper edes. For ex.:
914# edge_width_expression = "20.0" will set the widths to be 20
1015# Usable variables:
……@@ -13,3 +18,17 @@ edge_width_expression = "pow(support, 0.35)"
1318# total_nodes: How many nodes are in the full hypergraph
1419# on the expressions themselves look up the godot documentation's expression page:
1520# https://docs.godotengine.org/en/latest/tutorials/scripting/evaluating_expressions.html
21
22
23#node_radius_expression works the same way as edge_width_expression. The available variables are
24# centrality (degree centrality) and total nodes. Note: If the node radius is set below 30 the node will disappear
25
26#Screenshots are saved in the default folder: C:\Users\...\AppData\Roaming\HyperGodot\screenshots
27
28#Layout can be "force-directed" (parameters: iterations: int, repulsion_force: float, spring_length: float)
29#for example:
30#layout = "force-directed"
31#parameters = [10,200,3000]
32
33#or
34#"circular" (parameters: radius: float)
export_presets.cfg +21 -12
……@@ -3,40 +3,38 @@
33name="Windows Desktop"
44platform="Windows Desktop"
55runnable=true
6advanced_options=false
67dedicated_server=false
78custom_features=""
89export_filter="all_resources"
910include_filter=""
1011exclude_filter=""
11export_path=""
12export_path="Export/HyperGodot.exe"
13patches=PackedStringArray()
1214encryption_include_filters=""
1315encryption_exclude_filters=""
16seed=0
1417encrypt_pck=false
1518encrypt_directory=false
16script_encryption_key=""
19script_export_mode=2
1720
1821[preset.0.options]
1922
2023custom_template/debug=""
2124custom_template/release=""
22debug/export_console_script=1
23binary_format/embed_pck=false
24texture_format/bptc=true
25texture_format/s3tc=true
26texture_format/etc=false
27texture_format/etc2=false
25debug/export_console_wrapper=1
26binary_format/embed_pck=true
27texture_format/s3tc_bptc=true
28texture_format/etc2_astc=false
2829binary_format/architecture="x86_64"
2930codesign/enable=false
30codesign/identity_type=0
31codesign/identity=""
32codesign/password=""
3331codesign/timestamp=true
3432codesign/timestamp_server_url=""
3533codesign/digest_algorithm=1
3634codesign/description=""
3735codesign/custom_options=PackedStringArray()
3836application/modify_resources=true
39application/icon=""
37application/icon="res://icon.ico"
4038application/console_wrapper_icon=""
4139application/icon_interpolation=4
4240application/file_version=""
……@@ -46,6 +44,9 @@ application/product_name=""
4644application/file_description=""
4745application/copyright=""
4846application/trademarks=""
47application/export_angle=0
48application/export_d3d12=0
49application/d3d12_agility_sdk_multiarch=true
4950ssh_remote_deploy/enabled=false
5051ssh_remote_deploy/host="user@host_ip"
5152ssh_remote_deploy/port="22"
……@@ -63,3 +64,11 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
6364ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
6465Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
6566Remove-Item -Recurse -Force '{temp_dir}'"
67dotnet/include_scripts_content=false
68dotnet/include_debug_symbols=true
69dotnet/embed_build_outputs=false
70debug/export_console_script=1
71texture_format/bptc=true
72texture_format/s3tc=true
73texture_format/etc=false
74texture_format/etc2=false
icon.ico +0 -0
(no content changes — binary or rename)
main.gd +40 -15
……@@ -116,7 +116,7 @@ func populate_edge_data(file_data):
116116 hyperedge_instance.nodes = node_radii_pairs
117117
118118 # Assign a color based on the group
119 var color = Color(randf(), randf(), randf(), 0.3) # Generate a random color
119 var color = Color(randf(), randf(), randf(), 0.4) # Generate a random color
120120 hyperedge_instance.color = color
121121
122122 # Set the group name to the hyperedge instance for future use
……@@ -128,8 +128,7 @@ func populate_edge_data(file_data):
128128 var expression = Expression.new()
129129 var err = config.load("res://conf.cfg")
130130 var expression_text = config.get_value("graph_settings", "edge_width_expression")
131 print(expression_text)
132
131
133132 var error = expression.parse(expression_text, ["support", "node_count", "total_nodes"])
134133
135134 if error != OK:
……@@ -149,9 +148,9 @@ func populate_edge_data(file_data):
149148
150149 # Add the hyperedge instance to the scene tree
151150 add_child(hyperedge_instance)
151 Global.edges = edges
152152
153153
154
155154
156155func _ready():
157156 # Read the file and get both nodes and edges
……@@ -161,13 +160,43 @@ func _ready():
161160 var edges = file_data["edges"]
162161 create_nodes(nodes)
163162 populate_edge_data(file_data)
164 apply_force_directed_layout(10, 150.0, 900.0)
163
164 # Load layout configuration from conf.cfg
165 var config = ConfigFile.new()
166 var err = config.load("res://conf.cfg")
167
168 if err != OK:
169 print("Error loading conf.cfg: ", err)
170 return
171
172 var layout = config.get_value("graph_settings", "layout", "")
173 var parameters = config.get_value("graph_settings", "parameters", [])
174
175 match layout:
176 "force-directed":
177 if parameters.size() == 3:
178 apply_force_directed_layout(parameters[0], parameters[1], parameters[2])
179 print("Applied force-directed layout with parameters: ", parameters)
180 else:
181 print("Invalid parameters for force-directed layout: ", parameters)
182
183 "circular":
184 if parameters.size() == 1:
185 apply_circular_layout(parameters[0])
186 print("Applied circular layout with parameter: ", parameters[0])
187 else:
188 print("Invalid parameters for circular layout: ", parameters)
189
190 _:
191 print("Unknown layout type: ", layout)
192
165193 calculate_centrality_and_resize_nodes(file_data)
166194 #apply_hyperedge_constrained_layout()
167195 #apply_circular_layout(500)
168196 pass # Replace with function body.
169197
170198
199
171200func read_file(path):
172201 var file = FileAccess.open(path, FileAccess.READ)
173202 var nodes = {} # Dictionary to hold all nodes
……@@ -176,10 +205,10 @@ func read_file(path):
176205
177206 while not file.eof_reached():
178207 var line = file.get_line().strip_edges()
179 if line.find("#SUP:") == -1:
208 if line.find("#WEIGHT:") == -1:
180209 continue # Skip this line if no support value
181210
182 var parts = line.split(" #SUP: ")
211 var parts = line.split(" #WEIGHT: ")
183212 var node_ids = parts[0].split(" ") # Nodes involved in this edge
184213
185214 # Extract support and group
……@@ -326,9 +355,9 @@ func calculate_centrality_and_resize_nodes(file_data):
326355 var nodes = file_data["nodes"]
327356 var max_centrality = 0
328357 var centrality_scores = {}
329
330 # Calculate centrality (degree centrality in this case)
358 Global.total_nodes = nodes.size() # Store total node count in a global variable
331359
360 # Calculate centrality (degree centrality in this case)
332361 for node_id in nodes:
333362 var degree = nodes[node_id].edges.size()
334363 centrality_scores[node_id] = degree
……@@ -339,12 +368,8 @@ func calculate_centrality_and_resize_nodes(file_data):
339368 var node_instance = get_node(str(node_id))
340369 if node_instance:
341370 var normalized_centrality = float(centrality_scores[node_id]) / max_centrality
342 var size_scale = lerp(0.5, 2.0, normalized_centrality)
343 node_instance.update_size(size_scale, normalized_centrality)
344
345 # Now update all edge positions
346 for edge in get_tree().get_nodes_in_group("edges"):
347 edge.update_position()
371 node_instance.update_size(normalized_centrality, normalized_centrality)
372
348373
349374
350375
main.gd.uid +1 -0
……@@ -0,0 +1 @@
1uid://dyv5tirbhal6c
main.tscn +2 -2
……@@ -1,7 +1,7 @@
11[gd_scene load_steps=4 format=3 uid="uid://2f8fvrck2f38"]
22
3[ext_resource type="Script" path="res://main.gd" id="1_1hwno"]
4[ext_resource type="Script" path="res://Camera2D.gd" id="2_iiqxp"]
3[ext_resource type="Script" uid="uid://dyv5tirbhal6c" path="res://main.gd" id="1_1hwno"]
4[ext_resource type="Script" uid="uid://dkr1g7pe3x5km" path="res://Camera2D.gd" id="2_iiqxp"]
55[ext_resource type="Texture2D" uid="uid://m1iltai5tk4w" path="res://camera.png" id="3_rymd3"]
66
77[node name="Node2D" type="Node2D"]
patterns.txt +4 -5
……@@ -1,5 +1,4 @@
1Environment_and_Natural_Resources Pollution_Management #SUP: 2662 #GROUP 2022
2Energy_and_Extractives Energy_Efficiency #SUP: 313 #GROUP 2022
3Energy_and_Extractives Health_Emergency_Preparedness_and_Disaster_Response #SUP: 7720 #GROUP 2022
4Environment_and_Natural_Resources Pollution_Management Air_Pollution #SUP: 3312 #GROUP 2023
5Environment_and_Natural_Resources Energy_and_Extractives Climate_Change Renewable_Energy #SUP: 3301 #GROUP 2023
1v1 v2 #WEIGHT: 262 #GROUP 2022
2v3 v4 #WEIGHT: 313 #GROUP 2022
3v1 v2 v5 #WEIGHT: 3312 #GROUP 2023
4v1 v3 v6 v7 #WEIGHT: 33001 #GROUP 2023
project.godot +6 -5
……@@ -13,9 +13,10 @@ config_version=5
1313config/name="Hypergodot"
1414run/main_scene="res://main.tscn"
1515config/use_custom_user_dir=true
16config/custom_user_dir_name="screenshots"
17config/features=PackedStringArray("4.3", "Forward Plus")
18config/icon="res://icon.svg"
16config/custom_user_dir_name="HyperGodot"
17config/features=PackedStringArray("4.4", "Forward Plus")
18config/icon="res://ss6.png"
19config/windows_native_icon="res://ss6.ico"
1920
2021[autoload]
2122
……@@ -36,7 +37,7 @@ project/assembly_name="Hypergodot"
3637
3738[editor_plugins]
3839
39enabled=PackedStringArray("res://addons/material-design-icons/plugin.cfg")
40enabled=PackedStringArray()
4041
4142[input]
4243
……@@ -48,8 +49,8 @@ left_click={
4849
4950[rendering]
5051
51anti_aliasing/screen_space_roughness_limiter/amount=0.55
5252anti_aliasing/quality/msaa_2d=3
5353anti_aliasing/quality/msaa_3d=3
54anti_aliasing/screen_space_roughness_limiter/amount=0.55
5455anti_aliasing/quality/screen_space_aa=1
5556anti_aliasing/quality/use_taa=true
ss6.ico +0 -0
(no content changes — binary or rename)
ss6.png +0 -0
(no content changes — binary or rename)
ss6.png.import +34 -0
……@@ -0,0 +1,34 @@
1[remap]
2
3importer="texture"
4type="CompressedTexture2D"
5uid="uid://d1p3frqaw5gfk"
6path="res://.godot/imported/ss6.png-3e22e0c25e83f5c521df20e97e2a1501.ctex"
7metadata={
8"vram_texture": false
9}
10
11[deps]
12
13source_file="res://ss6.png"
14dest_files=["res://.godot/imported/ss6.png-3e22e0c25e83f5c521df20e97e2a1501.ctex"]
15
16[params]
17
18compress/mode=0
19compress/high_quality=false
20compress/lossy_quality=0.7
21compress/hdr_compression=1
22compress/normal_map=0
23compress/channel_pack=0
24mipmaps/generate=false
25mipmaps/limit=-1
26roughness/mode=0
27roughness/src_normal=""
28process/fix_alpha_border=true
29process/premult_alpha=false
30process/normal_map_invert_y=false
31process/hdr_as_srgb=false
32process/hdr_clamp_exposure=false
33process/size_limit=0
34detect_3d/compress_to=1