| … | … | @@ -51,17 +51,54 @@ func _on_button_button_up() -> void: |
| 51 | 51 | Global.high_quality = true |
| 52 | 52 | queue_redraw() |
| 53 | 53 | await RenderingServer.frame_post_draw # Wait for the high-quality redraw |
| 54 | ||
| 54 | 55 | # Capture the screenshot |
| 55 | 56 | var image = get_viewport().get_texture().get_image() |
| 56 | 57 | |
| 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) | |
| 62 | 101 | |
| 63 | ||
| 64 | 102 | # Revert back to normal mode |
| 65 | 103 | Global.high_quality = false |
| 66 | 104 | get_parent().get_node("CanvasLayer2").get_node("Button").visible = true |
| 67 | pass # Replace with function body. |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dkr1g7pe3x5km |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bi5e4wog6rw37 |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=2 format=3 uid="uid://bcgmtai4ybwjk"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [node name="EdgeItem" type="Control"] |
| 6 | 6 | layout_mode = 3 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://db4w1l8ndeu6d |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=3 format=3 uid="uid://cswt7a6uosun"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_u1fbt"] |
| 6 | 6 | bg_color = Color(0.4, 0.4, 0.4, 1) |
| … | … | @@ -0,0 +1,34 @@ |
| 1 | [graph_settings] | |
| 2 | point_count = 10 | |
| 3 | edge_width_expression = "pow(support, 0.35)" | |
| 4 | node_radius_expression = "30 + 100 * (centrality / total_nodes)" | |
| 5 | layout = "circular" | |
| 6 | parameters = [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) |
| … | … | @@ -0,0 +1,4 @@ |
| 1 | v1 v2 #WEIGHT: 262 #GROUP 2022 | |
| 2 | v3 v4 #WEIGHT: 313 #GROUP 2022 | |
| 3 | v1 v2 v5 #WEIGHT: 3312 #GROUP 2023 | |
| 4 | v1 v3 v6 v7 #WEIGHT: 33001 #GROUP 2023 |
| … | … | @@ -3,6 +3,8 @@ extends Node |
| 3 | 3 | var group_dictionary = {} |
| 4 | 4 | var group_count = 0 |
| 5 | 5 | var high_quality = false |
| 6 | var total_nodes = 0 | |
| 7 | var edges = null | |
| 6 | 8 | |
| 7 | 9 | # Function to initialize the groups from a list of group names |
| 8 | 10 | func initialize_groups(group_names: Array): |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://otd5081xyntp |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=2 format=3 uid="uid://ookb725cjygc"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [node name="Node" type="Node"] |
| 6 | 6 | script = ExtResource("1_d51fs") |
| … | … | @@ -22,9 +22,6 @@ func _input(event): |
| 22 | 22 | dragging = false # Stop dragging |
| 23 | 23 | queue_redraw() # Optionally, queue a redraw when you stop dragging |
| 24 | 24 | |
| 25 | ||
| 26 | ||
| 27 | ||
| 28 | 25 | func _draw(): |
| 29 | 26 | var points = [] |
| 30 | 27 | for node_id in nodes: |
| … | … | @@ -33,12 +30,13 @@ func _draw(): |
| 33 | 30 | if node: |
| 34 | 31 | var center = node.position |
| 35 | 32 | var radius = nodes[node_id] |
| 36 | ||
| 33 | var actual_node_radius = node.radius_global | |
| 34 | radius += actual_node_radius | |
| 35 | radius -=30 | |
| 37 | 36 | |
| 38 | 37 | var config = ConfigFile.new() |
| 39 | 38 | var err = config.load("res://conf.cfg") |
| 40 | 39 | if err == OK: |
| 41 | # Get the edge_width value from the config file | |
| 42 | 40 | point_count = config.get_value("graph_settings", "point_count", 2.0) |
| 43 | 41 | if Global.high_quality: |
| 44 | 42 | point_count = 300 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://ci53u6xra62c1 |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=2 format=3 uid="uid://nx4jmlyy1jhv"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [node name="HyperEdge" type="Node2D"] |
| 6 | 6 | script = ExtResource("1_rm3x8") |
| … | … | @@ -8,6 +8,8 @@ var node_id = "name" |
| 8 | 8 | var circle_usage = {} # Edge instance to circle index |
| 9 | 9 | signal node_drag_started(node) |
| 10 | 10 | signal node_drag_ended(node) |
| 11 | var drawing_scale = Vector2(1, 1) # Default scale | |
| 12 | var radius_global = 0 | |
| 11 | 13 | var NodeMenu = load("res://NodeMenu.tscn") |
| 12 | 14 | |
| 13 | 15 | func _set_node_id(value : String): |
| … | … | @@ -63,33 +65,60 @@ func _draw(): |
| 63 | 65 | pass |
| 64 | 66 | |
| 65 | 67 | func update_size(size_scale: float, new_centrality_score: float): |
| 66 | scale = Vector2(size_scale, size_scale) | |
| 67 | 68 | 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() | |
| 69 | 96 | |
| 70 | 97 | func make_offset_circles(): |
| 71 | 98 | 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 | ||
| 75 | 105 | var edge_widths = [] |
| 76 | 106 | 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 | |
| 79 | 109 | edge_widths.append(edge_width) |
| 80 | 110 | |
| 81 | 111 | for i in range(edge_widths.size()): |
| 82 | 112 | 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 | |
| 85 | 114 | if i == 0: |
| 86 | 115 | cumulative_radius += edge_width / 2 |
| 87 | 116 | else: |
| 88 | 117 | cumulative_radius += (edge_widths[i - 1] / 2) + (edge_width / 2) |
| 89 | 118 | |
| 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 | |
| 93 | 122 | |
| 94 | 123 | |
| 95 | 124 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dtumcbkpovakj |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=4 format=3 uid="uid://dll5p1lerh26o"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | [ext_resource type="FontFile" uid="uid://bqjrf7m2r0yac" path="res://Times New Roman.ttf" id="2_hcrqc"] |
| 5 | 5 | |
| 6 | 6 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jrb2w"] |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bak4melvht67p |
| … | … | @@ -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"] | |
| 2 | 2 | |
| 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"] | |
| 6 | corner_radius_top_left = 20 | |
| 7 | corner_radius_top_right = 20 | |
| 8 | corner_radius_bottom_right = 20 | |
| 9 | corner_radius_bottom_left = 20 | |
| 10 | shadow_size = 10 | |
| 11 | shadow_offset = Vector2(2.33, 0) | |
| 4 | 12 | |
| 5 | 13 | [node name="NodeMenu" type="Node2D"] |
| 6 | 14 | script = ExtResource("1_2a42n") |
| 7 | 15 | |
| 8 | [node name="ColorRect" type="ColorRect" parent="."] | |
| 16 | [node name="Panel" type="Panel" parent="."] | |
| 17 | offset_left = -6.0 | |
| 18 | offset_top = -59.0 | |
| 19 | offset_right = 242.0 | |
| 20 | offset_bottom = 118.0 | |
| 21 | theme_override_styles/panel = SubResource("StyleBoxFlat_m8psx") | |
| 22 | ||
| 23 | [node name="Button" type="Button" parent="."] | |
| 24 | offset_left = 200.0 | |
| 25 | offset_top = -51.0 | |
| 9 | 26 | offset_right = 234.0 |
| 10 | offset_bottom = 202.0 | |
| 11 | color = Color(0.188235, 0.27451, 0.270588, 1) | |
| 27 | offset_bottom = -15.0 | |
| 28 | text = "X" | |
| 12 | 29 | |
| 13 | [node name="OnlySelf" type="Button" parent="."] | |
| 14 | offset_right = 235.0 | |
| 15 | offset_bottom = 31.0 | |
| 16 | text = "Only this node's edges visible" | |
| 17 | alignment = 0 | |
| 30 | [node name="Container" type="Container" parent="."] | |
| 31 | offset_right = 242.0 | |
| 32 | offset_bottom = 125.0 | |
| 18 | 33 | |
| 19 | [node name="AllEdges" type="Button" parent="."] | |
| 20 | offset_left = 2.0 | |
| 21 | offset_top = 35.0 | |
| 22 | offset_right = 234.0 | |
| 23 | offset_bottom = 66.0 | |
| 34 | [node name="VBoxContainer" type="VBoxContainer" parent="Container"] | |
| 35 | layout_mode = 2 | |
| 36 | ||
| 37 | [node name="AllEdges" type="Button" parent="Container/VBoxContainer"] | |
| 38 | layout_mode = 2 | |
| 24 | 39 | text = "All edges visible" |
| 25 | 40 | alignment = 0 |
| 26 | 41 | |
| 27 | [node name="EdgeColor" type="Button" parent="."] | |
| 28 | offset_left = 1.0 | |
| 29 | offset_top = 73.0 | |
| 30 | offset_right = 233.0 | |
| 31 | offset_bottom = 104.0 | |
| 42 | [node name="EdgeColor" type="Button" parent="Container/VBoxContainer"] | |
| 43 | layout_mode = 2 | |
| 32 | 44 | text = "Edge color picker" |
| 33 | 45 | alignment = 0 |
| 34 | 46 | |
| 35 | [node name="Button4" type="Button" parent="."] | |
| 36 | offset_top = 109.0 | |
| 37 | offset_right = 235.0 | |
| 38 | offset_bottom = 141.0 | |
| 39 | text = "Node color picker" | |
| 47 | [node name="OnlySelf" type="Button" parent="Container/VBoxContainer"] | |
| 48 | layout_mode = 2 | |
| 49 | text = "Only this node's edges visible" | |
| 40 | 50 | alignment = 0 |
| 41 | 51 | |
| 42 | [node name="Button" type="Button" parent="."] | |
| 43 | offset_left = 200.0 | |
| 44 | offset_top = -41.0 | |
| 45 | offset_right = 236.0 | |
| 46 | offset_bottom = -6.0 | |
| 47 | text = "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"] | |
| 52 | 52 | [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"] |
| … | … | @@ -1,33 +1,43 @@ |
| 1 | ![github-top-lang][lang] ![lic] ![lic-font] | |
| 1 | # HyperGodot: Interactive Hypergraph Visualization Tool | |
| 2 | 2 | |
| 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. | |
| 4 | 4 | |
| 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 | |
| 6 | 6 | |
| 7 | This 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. | |
| 10 | 19 | |
| 11 | It's also adds **IconsFinder** to the Godot's **Tools** menu. | |
| 12 | So you can find the icons easily. | |
| 20 | ## 📁 Input Format | |
| 13 | 21 | |
| 14 |  | |
| 22 | Input hypergraphs are plain text files using a space-separated format per hyperedge. Each line defines a hyperedge and may include tags: | |
| 15 | 23 | |
| 16 | ## Exporting | |
| 17 | For emojis to work in exported projects, you need add `*.json` files to include files settings: | |
| 18 |  | |
| 24 | ```txt | |
| 25 | v1 v2 v3 #WEIGHT: 12 #GROUP: 2023 | |
| 26 | v4 v5 #WEIGHT: 8 #GROUP: 2022 | |
| 27 | ``` | |
| 28 | WEIGHT: numeric value representing edge weight (e.g., frequency, strength). | |
| 19 | 29 | |
| 20 | ## Install using gd-plug | |
| 21 | To install it with [gd-plug](https://github.com/imjp94/gd-plug) add in your `plug.gd` script: | |
| 22 | ```gdscript | |
| 23 | extends "res://addons/gd-plug/plug.gd" | |
| 30 | GROUP: label for grouping edges (e.g., year, category, temporal slice). | |
| 24 | 31 | |
| 25 | func _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 | ||
| 34 | Users 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. | |
| 30 | 35 | |
| 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 | |
| 36 | Example configuration: | |
| 37 | [graph_settings] | |
| 38 | point_count = 12 | |
| 39 | edge_width_expression = "weight * 0.2 + 1" | |
| 40 | node_radius_expression = "30 + 100 * (centrality / total_nodes)" | |
| 41 | layout = "force-directed" | |
| 42 | parameters = [500, 250.0, 30.0] | |
| 43 | #screenshot_path = "C:\\Users\\YourName\\Documents\\screenshots" |
| … | … | @@ -23,6 +23,7 @@ allow_system_fallback=true |
| 23 | 23 | force_autohinter=false |
| 24 | 24 | hinting=1 |
| 25 | 25 | subpixel_positioning=1 |
| 26 | keep_rounding_remainders=true | |
| 26 | 27 | oversampling=0.0 |
| 27 | 28 | Fallbacks=null |
| 28 | 29 | fallbacks=[] |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://der5cy3nggnqm |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://d27427a5moiqa |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bhulepo2rpgy6 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://6e7xmg2w886m |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://clempbpldb4hm |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://cc0hhlpqohqhw |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://cljwip0hl3d7e |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://c6a4ohvkhg1yy |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bj3jwa1phfj3t |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dyga42pgcqrsl |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bp8y3h81yydrb |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://l7m3xlrfetoy |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://r51ncwjt2umm |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dvosrae54se4x |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://defjycflkd24g |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=3 format=3 uid="uid://c5dk4lnyiag3w"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | [ext_resource type="PackedScene" uid="uid://dh1yunmhipirg" path="res://addons/kanban_tasks/view/settings/settings.tscn" id="2_by8mq"] |
| 5 | 5 | |
| 6 | 6 | [node name="BoardView" type="VBoxContainer"] |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://c4fyjjklcwapk |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://c5cqn5txafqim |
| … | … | @@ -1,9 +1,9 @@ |
| 1 | 1 | [gd_scene load_steps=6 format=3 uid="uid://bwi22eyrmeeet"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | [ext_resource type="PackedScene" uid="uid://dwjg5vyxx4g48" path="res://addons/kanban_tasks/view/details/step_holder.tscn" id="2_0ptaf"] |
| 5 | 5 | |
| 6 | [sub_resource type="Image" id="Image_fjijb"] | |
| 6 | [sub_resource type="Image" id="Image_bpcvf"] | |
| 7 | 7 | data = { |
| 8 | 8 | "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), |
| 9 | 9 | "format": "RGBA8", |
| … | … | @@ -13,7 +13,7 @@ data = { |
| 13 | 13 | } |
| 14 | 14 | |
| 15 | 15 | [sub_resource type="ImageTexture" id="ImageTexture_op8g0"] |
| 16 | image = SubResource("Image_fjijb") | |
| 16 | image = SubResource("Image_bpcvf") | |
| 17 | 17 | |
| 18 | 18 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_g2k57"] |
| 19 | 19 | content_margin_left = 4.0 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://jdpqqhwk28us |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bocmwtj7h6y2r |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=3 format=3 uid="uid://dwjg5vyxx4g48"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [sub_resource type="Theme" id="Theme_1hs0w"] |
| 6 | 6 | StepHolder/base_type = &"VBoxContainer" |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dtjsuc0ac7p5b |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://xepb1yyi04s1 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://cnxvnrtd3anj4 |
| … | … | @@ -1,8 +1,8 @@ |
| 1 | 1 | [gd_scene load_steps=5 format=3 uid="uid://b2likgss81t0s"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | [sub_resource type="Image" id="Image_ig53p"] | |
| 5 | [sub_resource type="Image" id="Image_jriv5"] | |
| 6 | 6 | data = { |
| 7 | 7 | "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), |
| 8 | 8 | "format": "RGBA8", |
| … | … | @@ -12,7 +12,7 @@ data = { |
| 12 | 12 | } |
| 13 | 13 | |
| 14 | 14 | [sub_resource type="ImageTexture" id="ImageTexture_w6wkd"] |
| 15 | image = SubResource("Image_ig53p") | |
| 15 | image = SubResource("Image_jriv5") | |
| 16 | 16 | |
| 17 | 17 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gsyou"] |
| 18 | 18 | content_margin_left = 4.0 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://c5flkwp0lqd4 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dxelpuascaqc2 |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=3 format=3 uid="uid://due07vdflx4o"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7cqkc"] |
| 6 | 6 | content_margin_left = 4.0 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://ecq3h0pvi24h |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=5 format=3 uid="uid://dh1yunmhipirg"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | [ext_resource type="PackedScene" uid="uid://due07vdflx4o" path="res://addons/kanban_tasks/view/settings/general/general.tscn" id="1_dk7pg"] |
| 5 | 5 | [ext_resource type="PackedScene" uid="uid://b2likgss81t0s" path="res://addons/kanban_tasks/view/settings/categories/categories.tscn" id="3_iycb0"] |
| 6 | 6 | [ext_resource type="PackedScene" uid="uid://dapkpnkm8sow8" path="res://addons/kanban_tasks/view/settings/stages/stages.tscn" id="4_okolg"] |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://ccll34x5fagac |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=5 format=3 uid="uid://dapkpnkm8sow8"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7cqkc"] |
| 6 | 6 | content_margin_left = 4.0 |
| … | … | @@ -14,7 +14,7 @@ corner_radius_bottom_right = 3 |
| 14 | 14 | corner_radius_bottom_left = 3 |
| 15 | 15 | corner_detail = 5 |
| 16 | 16 | |
| 17 | [sub_resource type="Image" id="Image_16p4g"] | |
| 17 | [sub_resource type="Image" id="Image_vr1jo"] | |
| 18 | 18 | data = { |
| 19 | 19 | "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), |
| 20 | 20 | "format": "RGBA8", |
| … | … | @@ -24,7 +24,7 @@ data = { |
| 24 | 24 | } |
| 25 | 25 | |
| 26 | 26 | [sub_resource type="ImageTexture" id="ImageTexture_frc8x"] |
| 27 | image = SubResource("Image_16p4g") | |
| 27 | image = SubResource("Image_vr1jo") | |
| 28 | 28 | |
| 29 | 29 | [node name="Stages" type="VBoxContainer"] |
| 30 | 30 | anchors_preset = 15 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://ci13ff1lsstcu |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://b2ngyvkovxfnp |
| … | … | @@ -1,7 +1,7 @@ |
| 1 | 1 | [gd_scene load_steps=6 format=3 uid="uid://bjmtdjfx7iqgp"] |
| 2 | 2 | |
| 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"] | |
| 5 | 5 | |
| 6 | 6 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h7hiu"] |
| 7 | 7 | content_margin_left = 4.0 |
| … | … | @@ -15,7 +15,7 @@ corner_radius_bottom_right = 3 |
| 15 | 15 | corner_radius_bottom_left = 3 |
| 16 | 16 | corner_detail = 5 |
| 17 | 17 | |
| 18 | [sub_resource type="Image" id="Image_kabwd"] | |
| 18 | [sub_resource type="Image" id="Image_y70vq"] | |
| 19 | 19 | data = { |
| 20 | 20 | "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), |
| 21 | 21 | "format": "RGBA8", |
| … | … | @@ -25,7 +25,7 @@ data = { |
| 25 | 25 | } |
| 26 | 26 | |
| 27 | 27 | [sub_resource type="ImageTexture" id="ImageTexture_yu4gn"] |
| 28 | image = SubResource("Image_kabwd") | |
| 28 | image = SubResource("Image_y70vq") | |
| 29 | 29 | |
| 30 | 30 | [node name="Stage" type="MarginContainer"] |
| 31 | 31 | editor_description = "This container is needed because the panel style cannot be updated from a script on the panel container." |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dkim1ufdoyfwj |
| … | … | @@ -1,6 +1,6 @@ |
| 1 | 1 | [gd_scene load_steps=4 format=3 uid="uid://bemcl1rqpeqty"] |
| 2 | 2 | |
| 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"] | |
| 4 | 4 | |
| 5 | 5 | [sub_resource type="LabelSettings" id="LabelSettings_0i4nn"] |
| 6 | 6 | font_size = 22 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://bau1py83aff06 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://uywctdmttjfw |
| … | … | @@ -1,11 +1,11 @@ |
| 1 | 1 | [gd_scene load_steps=8 format=3 uid="uid://ckqrwj5kxr6vl"] |
| 2 | 2 | |
| 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"] | |
| 6 | 6 | [ext_resource type="PackedScene" uid="uid://bwi22eyrmeeet" path="res://addons/kanban_tasks/view/details/details.tscn" id="3_2ol5j"] |
| 7 | 7 | [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"] | |
| 9 | 9 | |
| 10 | 10 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3iasq"] |
| 11 | 11 | bg_color = Color(0.1, 0.1, 0.1, 0.6) |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://c2h3wagifru40 |
| … | … | @@ -1,10 +1,15 @@ |
| 1 | 1 | [graph_settings] |
| 2 | 2 | point_count = 10 |
| 3 | 3 | edge_width_expression = "pow(support, 0.35)" |
| 4 | ||
| 4 | node_radius_expression = "30 + 100 * (centrality / total_nodes)" | |
| 5 | layout = "circular" | |
| 6 | parameters = [300] | |
| 7 | #screenshot_path = "C:\\Users\\...\\Documents\\screenshots" | |
| 5 | 8 | |
| 6 | 9 | # 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 | ||
| 8 | 13 | # edge_width_expression is a customizable expression that will apply to the width of the hyper edes. For ex.: |
| 9 | 14 | # edge_width_expression = "20.0" will set the widths to be 20 |
| 10 | 15 | # Usable variables: |
| … | … | @@ -13,3 +18,17 @@ edge_width_expression = "pow(support, 0.35)" |
| 13 | 18 | # total_nodes: How many nodes are in the full hypergraph |
| 14 | 19 | # on the expressions themselves look up the godot documentation's expression page: |
| 15 | 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) |
| … | … | @@ -3,40 +3,38 @@ |
| 3 | 3 | name="Windows Desktop" |
| 4 | 4 | platform="Windows Desktop" |
| 5 | 5 | runnable=true |
| 6 | advanced_options=false | |
| 6 | 7 | dedicated_server=false |
| 7 | 8 | custom_features="" |
| 8 | 9 | export_filter="all_resources" |
| 9 | 10 | include_filter="" |
| 10 | 11 | exclude_filter="" |
| 11 | export_path="" | |
| 12 | export_path="Export/HyperGodot.exe" | |
| 13 | patches=PackedStringArray() | |
| 12 | 14 | encryption_include_filters="" |
| 13 | 15 | encryption_exclude_filters="" |
| 16 | seed=0 | |
| 14 | 17 | encrypt_pck=false |
| 15 | 18 | encrypt_directory=false |
| 16 | script_encryption_key="" | |
| 19 | script_export_mode=2 | |
| 17 | 20 | |
| 18 | 21 | [preset.0.options] |
| 19 | 22 | |
| 20 | 23 | custom_template/debug="" |
| 21 | 24 | custom_template/release="" |
| 22 | debug/export_console_script=1 | |
| 23 | binary_format/embed_pck=false | |
| 24 | texture_format/bptc=true | |
| 25 | texture_format/s3tc=true | |
| 26 | texture_format/etc=false | |
| 27 | texture_format/etc2=false | |
| 25 | debug/export_console_wrapper=1 | |
| 26 | binary_format/embed_pck=true | |
| 27 | texture_format/s3tc_bptc=true | |
| 28 | texture_format/etc2_astc=false | |
| 28 | 29 | binary_format/architecture="x86_64" |
| 29 | 30 | codesign/enable=false |
| 30 | codesign/identity_type=0 | |
| 31 | codesign/identity="" | |
| 32 | codesign/password="" | |
| 33 | 31 | codesign/timestamp=true |
| 34 | 32 | codesign/timestamp_server_url="" |
| 35 | 33 | codesign/digest_algorithm=1 |
| 36 | 34 | codesign/description="" |
| 37 | 35 | codesign/custom_options=PackedStringArray() |
| 38 | 36 | application/modify_resources=true |
| 39 | application/icon="" | |
| 37 | application/icon="res://icon.ico" | |
| 40 | 38 | application/console_wrapper_icon="" |
| 41 | 39 | application/icon_interpolation=4 |
| 42 | 40 | application/file_version="" |
| … | … | @@ -46,6 +44,9 @@ application/product_name="" |
| 46 | 44 | application/file_description="" |
| 47 | 45 | application/copyright="" |
| 48 | 46 | application/trademarks="" |
| 47 | application/export_angle=0 | |
| 48 | application/export_d3d12=0 | |
| 49 | application/d3d12_agility_sdk_multiarch=true | |
| 49 | 50 | ssh_remote_deploy/enabled=false |
| 50 | 51 | ssh_remote_deploy/host="user@host_ip" |
| 51 | 52 | ssh_remote_deploy/port="22" |
| … | … | @@ -63,3 +64,11 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi |
| 63 | 64 | ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue |
| 64 | 65 | Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue |
| 65 | 66 | Remove-Item -Recurse -Force '{temp_dir}'" |
| 67 | dotnet/include_scripts_content=false | |
| 68 | dotnet/include_debug_symbols=true | |
| 69 | dotnet/embed_build_outputs=false | |
| 70 | debug/export_console_script=1 | |
| 71 | texture_format/bptc=true | |
| 72 | texture_format/s3tc=true | |
| 73 | texture_format/etc=false | |
| 74 | texture_format/etc2=false |
| … | … | @@ -116,7 +116,7 @@ func populate_edge_data(file_data): |
| 116 | 116 | hyperedge_instance.nodes = node_radii_pairs |
| 117 | 117 | |
| 118 | 118 | # 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 | |
| 120 | 120 | hyperedge_instance.color = color |
| 121 | 121 | |
| 122 | 122 | # Set the group name to the hyperedge instance for future use |
| … | … | @@ -128,8 +128,7 @@ func populate_edge_data(file_data): |
| 128 | 128 | var expression = Expression.new() |
| 129 | 129 | var err = config.load("res://conf.cfg") |
| 130 | 130 | var expression_text = config.get_value("graph_settings", "edge_width_expression") |
| 131 | print(expression_text) | |
| 132 | ||
| 131 | ||
| 133 | 132 | var error = expression.parse(expression_text, ["support", "node_count", "total_nodes"]) |
| 134 | 133 | |
| 135 | 134 | if error != OK: |
| … | … | @@ -149,9 +148,9 @@ func populate_edge_data(file_data): |
| 149 | 148 | |
| 150 | 149 | # Add the hyperedge instance to the scene tree |
| 151 | 150 | add_child(hyperedge_instance) |
| 151 | Global.edges = edges | |
| 152 | 152 | |
| 153 | 153 | |
| 154 | ||
| 155 | 154 | |
| 156 | 155 | func _ready(): |
| 157 | 156 | # Read the file and get both nodes and edges |
| … | … | @@ -161,13 +160,43 @@ func _ready(): |
| 161 | 160 | var edges = file_data["edges"] |
| 162 | 161 | create_nodes(nodes) |
| 163 | 162 | 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 | ||
| 165 | 193 | calculate_centrality_and_resize_nodes(file_data) |
| 166 | 194 | #apply_hyperedge_constrained_layout() |
| 167 | 195 | #apply_circular_layout(500) |
| 168 | 196 | pass # Replace with function body. |
| 169 | 197 | |
| 170 | 198 | |
| 199 | ||
| 171 | 200 | func read_file(path): |
| 172 | 201 | var file = FileAccess.open(path, FileAccess.READ) |
| 173 | 202 | var nodes = {} # Dictionary to hold all nodes |
| … | … | @@ -176,10 +205,10 @@ func read_file(path): |
| 176 | 205 | |
| 177 | 206 | while not file.eof_reached(): |
| 178 | 207 | var line = file.get_line().strip_edges() |
| 179 | if line.find("#SUP:") == -1: | |
| 208 | if line.find("#WEIGHT:") == -1: | |
| 180 | 209 | continue # Skip this line if no support value |
| 181 | 210 | |
| 182 | var parts = line.split(" #SUP: ") | |
| 211 | var parts = line.split(" #WEIGHT: ") | |
| 183 | 212 | var node_ids = parts[0].split(" ") # Nodes involved in this edge |
| 184 | 213 | |
| 185 | 214 | # Extract support and group |
| … | … | @@ -326,9 +355,9 @@ func calculate_centrality_and_resize_nodes(file_data): |
| 326 | 355 | var nodes = file_data["nodes"] |
| 327 | 356 | var max_centrality = 0 |
| 328 | 357 | 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 | |
| 331 | 359 | |
| 360 | # Calculate centrality (degree centrality in this case) | |
| 332 | 361 | for node_id in nodes: |
| 333 | 362 | var degree = nodes[node_id].edges.size() |
| 334 | 363 | centrality_scores[node_id] = degree |
| … | … | @@ -339,12 +368,8 @@ func calculate_centrality_and_resize_nodes(file_data): |
| 339 | 368 | var node_instance = get_node(str(node_id)) |
| 340 | 369 | if node_instance: |
| 341 | 370 | 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 | ||
| 348 | 373 | |
| 349 | 374 | |
| 350 | 375 |
| … | … | @@ -0,0 +1 @@ |
| 1 | uid://dyv5tirbhal6c |
| … | … | @@ -1,7 +1,7 @@ |
| 1 | 1 | [gd_scene load_steps=4 format=3 uid="uid://2f8fvrck2f38"] |
| 2 | 2 | |
| 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"] | |
| 5 | 5 | [ext_resource type="Texture2D" uid="uid://m1iltai5tk4w" path="res://camera.png" id="3_rymd3"] |
| 6 | 6 | |
| 7 | 7 | [node name="Node2D" type="Node2D"] |
| … | … | @@ -1,5 +1,4 @@ |
| 1 | Environment_and_Natural_Resources Pollution_Management #SUP: 2662 #GROUP 2022 | |
| 2 | Energy_and_Extractives Energy_Efficiency #SUP: 313 #GROUP 2022 | |
| 3 | Energy_and_Extractives Health_Emergency_Preparedness_and_Disaster_Response #SUP: 7720 #GROUP 2022 | |
| 4 | Environment_and_Natural_Resources Pollution_Management Air_Pollution #SUP: 3312 #GROUP 2023 | |
| 5 | Environment_and_Natural_Resources Energy_and_Extractives Climate_Change Renewable_Energy #SUP: 3301 #GROUP 2023 | |
| 1 | v1 v2 #WEIGHT: 262 #GROUP 2022 | |
| 2 | v3 v4 #WEIGHT: 313 #GROUP 2022 | |
| 3 | v1 v2 v5 #WEIGHT: 3312 #GROUP 2023 | |
| 4 | v1 v3 v6 v7 #WEIGHT: 33001 #GROUP 2023 |
| … | … | @@ -13,9 +13,10 @@ config_version=5 |
| 13 | 13 | config/name="Hypergodot" |
| 14 | 14 | run/main_scene="res://main.tscn" |
| 15 | 15 | config/use_custom_user_dir=true |
| 16 | config/custom_user_dir_name="screenshots" | |
| 17 | config/features=PackedStringArray("4.3", "Forward Plus") | |
| 18 | config/icon="res://icon.svg" | |
| 16 | config/custom_user_dir_name="HyperGodot" | |
| 17 | config/features=PackedStringArray("4.4", "Forward Plus") | |
| 18 | config/icon="res://ss6.png" | |
| 19 | config/windows_native_icon="res://ss6.ico" | |
| 19 | 20 | |
| 20 | 21 | [autoload] |
| 21 | 22 | |
| … | … | @@ -36,7 +37,7 @@ project/assembly_name="Hypergodot" |
| 36 | 37 | |
| 37 | 38 | [editor_plugins] |
| 38 | 39 | |
| 39 | enabled=PackedStringArray("res://addons/material-design-icons/plugin.cfg") | |
| 40 | enabled=PackedStringArray() | |
| 40 | 41 | |
| 41 | 42 | [input] |
| 42 | 43 | |
| … | … | @@ -48,8 +49,8 @@ left_click={ |
| 48 | 49 | |
| 49 | 50 | [rendering] |
| 50 | 51 | |
| 51 | anti_aliasing/screen_space_roughness_limiter/amount=0.55 | |
| 52 | 52 | anti_aliasing/quality/msaa_2d=3 |
| 53 | 53 | anti_aliasing/quality/msaa_3d=3 |
| 54 | anti_aliasing/screen_space_roughness_limiter/amount=0.55 | |
| 54 | 55 | anti_aliasing/quality/screen_space_aa=1 |
| 55 | 56 | anti_aliasing/quality/use_taa=true |
| … | … | @@ -0,0 +1,34 @@ |
| 1 | [remap] | |
| 2 | ||
| 3 | importer="texture" | |
| 4 | type="CompressedTexture2D" | |
| 5 | uid="uid://d1p3frqaw5gfk" | |
| 6 | path="res://.godot/imported/ss6.png-3e22e0c25e83f5c521df20e97e2a1501.ctex" | |
| 7 | metadata={ | |
| 8 | "vram_texture": false | |
| 9 | } | |
| 10 | ||
| 11 | [deps] | |
| 12 | ||
| 13 | source_file="res://ss6.png" | |
| 14 | dest_files=["res://.godot/imported/ss6.png-3e22e0c25e83f5c521df20e97e2a1501.ctex"] | |
| 15 | ||
| 16 | [params] | |
| 17 | ||
| 18 | compress/mode=0 | |
| 19 | compress/high_quality=false | |
| 20 | compress/lossy_quality=0.7 | |
| 21 | compress/hdr_compression=1 | |
| 22 | compress/normal_map=0 | |
| 23 | compress/channel_pack=0 | |
| 24 | mipmaps/generate=false | |
| 25 | mipmaps/limit=-1 | |
| 26 | roughness/mode=0 | |
| 27 | roughness/src_normal="" | |
| 28 | process/fix_alpha_border=true | |
| 29 | process/premult_alpha=false | |
| 30 | process/normal_map_invert_y=false | |
| 31 | process/hdr_as_srgb=false | |
| 32 | process/hdr_clamp_exposure=false | |
| 33 | process/size_limit=0 | |
| 34 | detect_3d/compress_to=1 |