Godot 4 port

This commit is contained in:
don-tnowe 2022-09-26 19:38:20 +03:00
parent 3c3b16970f
commit f8af56d15c
80 changed files with 2420 additions and 2253 deletions

View File

@ -1,14 +0,0 @@
tool
class_name ThemeIconButton
extends Button
export var icon_name := "Node" setget _set_icon_name
func _ready():
_set_icon_name(icon_name)
func _set_icon_name(v):
icon_name = v
icon = get_icon(v, "EditorIcons")

View File

@ -1,21 +0,0 @@
tool
class_name ThemeStylebox
extends Control
export var box_class := "EditorStyles" setget _set_box_class
export var box_name := "Background" setget _set_box_name
func _ready():
_set_box_name(box_name)
_set_box_class(box_class)
func _set_box_name(v):
box_name = v
add_stylebox_override(box_name, get_stylebox(box_name, box_class))
func _set_box_class(v):
box_class = v
add_stylebox_override(box_name, get_stylebox(box_name, box_class))

View File

@ -1,646 +0,0 @@
[gd_scene load_steps=17 format=2]
[ext_resource path="res://addons/resources_speadsheet_view/editor_view.gd" type="Script" id=1]
[ext_resource path="res://addons/resources_speadsheet_view/typed_cells/cell_editor_string.gd" type="Script" id=2]
[ext_resource path="res://addons/resources_speadsheet_view/typed_cells/cell_editor_color.gd" type="Script" id=3]
[ext_resource path="res://addons/resources_speadsheet_view/editor_icon_button.gd" type="Script" id=4]
[ext_resource path="res://addons/resources_speadsheet_view/typed_cells/cell_editor_bool.gd" type="Script" id=5]
[ext_resource path="res://addons/resources_speadsheet_view/table_header.tscn" type="PackedScene" id=6]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_color.tscn" type="PackedScene" id=7]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_number.tscn" type="PackedScene" id=8]
[ext_resource path="res://addons/resources_speadsheet_view/typed_cells/cell_editor_resource.gd" type="Script" id=9]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_texture.tscn" type="PackedScene" id=10]
[ext_resource path="res://addons/resources_speadsheet_view/typed_cells/cell_editor_array.gd" type="Script" id=11]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_array.tscn" type="PackedScene" id=12]
[ext_resource path="res://addons/resources_speadsheet_view/typed_cells/cell_editor_enum.gd" type="Script" id=13]
[ext_resource path="res://addons/resources_speadsheet_view/settings_grid.gd" type="Script" id=14]
[sub_resource type="Image" id=3]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "LumAlpha8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=2]
flags = 4
flags = 4
image = SubResource( 3 )
size = Vector2( 16, 16 )
[node name="Control" type="MarginContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
focus_neighbour_left = NodePath(".")
focus_neighbour_top = NodePath(".")
focus_neighbour_right = NodePath(".")
focus_neighbour_bottom = NodePath(".")
focus_next = NodePath(".")
focus_previous = NodePath(".")
focus_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
custom_constants/margin_right = 2
custom_constants/margin_top = 2
custom_constants/margin_left = 2
custom_constants/margin_bottom = 2
script = ExtResource( 1 )
__meta__ = {
"_edit_lock_": true
}
table_header_scene = ExtResource( 6 )
cell_editor_classes = [ ExtResource( 13 ), ExtResource( 11 ), ExtResource( 3 ), ExtResource( 5 ), ExtResource( 9 ), ExtResource( 2 ) ]
path_folder_path = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Path")
path_recent_paths = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/RecentPaths")
path_table_root = NodePath("HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer/TableGrid")
path_property_editors = NodePath("HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors")
path_columns = NodePath("HeaderContentSplit/VBoxContainer/Columns/Columns")
[node name="HeaderContentSplit" type="VBoxContainer" parent="."]
margin_left = 2.0
margin_top = 2.0
margin_right = 1022.0
margin_bottom = 598.0
__meta__ = {
"_edit_lock_": true
}
[node name="VBoxContainer" type="VBoxContainer" parent="HeaderContentSplit"]
margin_right = 1020.0
margin_bottom = 46.0
custom_constants/separation = 2
__meta__ = {
"_edit_lock_": true
}
[node name="HBoxContainer2" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer"]
margin_right = 1020.0
margin_bottom = 14.0
[node name="Label" type="Label" parent="HeaderContentSplit/VBoxContainer/HBoxContainer2"]
margin_right = 91.0
margin_bottom = 14.0
text = "Folder Display"
[node name="HSeparator" type="HSeparator" parent="HeaderContentSplit/VBoxContainer/HBoxContainer2"]
margin_left = 95.0
margin_right = 1020.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HSplitContainer" parent="HeaderContentSplit/VBoxContainer"]
margin_top = 16.0
margin_right = 1020.0
margin_bottom = 40.0
split_offset = -249
__meta__ = {
"_edit_lock_": true
}
[node name="HBoxContainer" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/HBoxContainer"]
margin_right = 553.0
margin_bottom = 24.0
size_flags_horizontal = 3
custom_constants/separation = 0
__meta__ = {
"_edit_lock_": true
}
[node name="Label" type="Label" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_top = 5.0
margin_right = 107.0
margin_bottom = 19.0
text = "Resource Folder:"
[node name="Path" type="LineEdit" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
unique_name_in_owner = true
margin_left = 107.0
margin_right = 469.0
margin_bottom = 24.0
size_flags_horizontal = 3
caret_blink = true
caret_blink_speed = 0.5
__meta__ = {
"_edit_lock_": true
}
[node name="SelectDir" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 469.0
margin_right = 497.0
margin_bottom = 24.0
hint_tooltip = "Open Folder"
icon = SubResource( 2 )
script = ExtResource( 4 )
__meta__ = {
"_edit_lock_": true
}
icon_name = "Folder"
[node name="Refresh" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 497.0
margin_right = 525.0
margin_bottom = 24.0
hint_tooltip = "Refresh"
icon = SubResource( 2 )
script = ExtResource( 4 )
__meta__ = {
"_edit_lock_": true
}
icon_name = "Refresh"
[node name="DeletePath" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 525.0
margin_right = 553.0
margin_bottom = 24.0
hint_tooltip = "Remove Path from Recent"
icon = SubResource( 2 )
script = ExtResource( 4 )
__meta__ = {
"_edit_lock_": true
}
icon_name = "Remove"
[node name="HBoxContainer2" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/HBoxContainer"]
margin_left = 565.0
margin_right = 1020.0
margin_bottom = 24.0
[node name="Label2" type="Label" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2"]
margin_top = 5.0
margin_right = 87.0
margin_bottom = 19.0
text = "Open Recent:"
__meta__ = {
"_edit_lock_": true
}
[node name="RecentPaths" type="OptionButton" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2"]
unique_name_in_owner = true
margin_left = 91.0
margin_right = 369.0
margin_bottom = 24.0
size_flags_horizontal = 3
clip_text = true
__meta__ = {
"_edit_lock_": true
}
[node name="Info" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2"]
margin_left = 373.0
margin_right = 423.0
margin_bottom = 24.0
text = "About"
__meta__ = {
"_edit_lock_": true
}
[node name="Settings" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2"]
margin_left = 427.0
margin_right = 455.0
margin_bottom = 24.0
hint_tooltip = "Settings"
icon = SubResource( 2 )
script = ExtResource( 4 )
icon_name = "GDScript"
[node name="Sep" type="Control" parent="HeaderContentSplit/VBoxContainer"]
margin_top = 42.0
margin_right = 1020.0
margin_bottom = 42.0
[node name="Columns" type="Control" parent="HeaderContentSplit/VBoxContainer"]
margin_top = 44.0
margin_right = 1020.0
margin_bottom = 44.0
rect_clip_content = true
[node name="Columns" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/Columns"]
margin_right = 1020.0
custom_constants/separation = 0
[node name="Sep2" type="Control" parent="HeaderContentSplit/VBoxContainer"]
margin_top = 46.0
margin_right = 1020.0
margin_bottom = 46.0
[node name="MarginContainer" type="MarginContainer" parent="HeaderContentSplit"]
margin_top = 50.0
margin_right = 1020.0
margin_bottom = 596.0
mouse_filter = 2
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_lock_": true
}
[node name="FooterContentSplit" type="VBoxContainer" parent="HeaderContentSplit/MarginContainer"]
margin_right = 1020.0
margin_bottom = 546.0
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_lock_": true
}
[node name="Panel" type="MarginContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit"]
margin_right = 1020.0
margin_bottom = 496.0
mouse_filter = 2
size_flags_vertical = 3
__meta__ = {
"_edit_lock_": true
}
[node name="Panel" type="Panel" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel"]
margin_right = 1020.0
margin_bottom = 496.0
__meta__ = {
"_edit_lock_": true
}
[node name="Scroll" type="ScrollContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel"]
margin_right = 1020.0
margin_bottom = 496.0
mouse_filter = 1
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_lock_": true
}
[node name="MarginContainer" type="MarginContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll"]
margin_right = 5.65
custom_constants/margin_right = 0
custom_constants/margin_top = 0
__meta__ = {
"_edit_lock_": true
}
[node name="TableGrid" type="GridContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer"]
margin_right = 5.65
rect_min_size = Vector2( 5.65, 0 )
custom_constants/vseparation = 0
custom_constants/hseparation = 0
__meta__ = {
"_edit_lock_": true
}
[node name="Label" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel"]
self_modulate = Color( 1, 1, 1, 0.498039 )
margin_right = 1020.0
margin_bottom = 496.0
size_flags_horizontal = 3
size_flags_vertical = 3
text = "No folder selected!
Please select a folder to edit using the controls above.
Then, Shift+Click or Ctrl+Click cells to edit them using the keyboard,
Inspector dock or this screen's bottom panels.
To find out keybindings available, open the \"About\" menu."
align = 1
valign = 1
[node name="Footer" type="VBoxContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit"]
margin_top = 500.0
margin_right = 1020.0
margin_bottom = 546.0
__meta__ = {
"_edit_lock_": true
}
[node name="PropertyEditors" type="VBoxContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer"]
unique_name_in_owner = true
margin_right = 1020.0
[node name="EditArray" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource( 12 )]
visible = false
anchor_right = 0.0
margin_right = 1020.0
margin_bottom = 2.22834e+06
[node name="EditColor" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource( 7 )]
visible = false
anchor_right = 0.0
margin_right = 1020.0
[node name="EditNumber" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource( 8 )]
visible = false
anchor_right = 0.0
margin_right = 1020.0
margin_bottom = 84.0
[node name="EditTexture" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource( 10 )]
visible = false
anchor_right = 0.0
margin_right = 1020.0
margin_bottom = 84.0
[node name="HBoxContainer" type="HBoxContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer"]
margin_top = 4.0
margin_right = 1020.0
margin_bottom = 18.0
[node name="Label" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/HBoxContainer"]
margin_right = 183.0
margin_bottom = 14.0
text = "GDScript Search and Process"
[node name="HSeparator" type="HSeparator" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/HBoxContainer"]
margin_left = 187.0
margin_right = 1020.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Search" type="HBoxContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer"]
margin_top = 22.0
margin_right = 1020.0
margin_bottom = 46.0
[node name="Label" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_top = 5.0
margin_right = 65.0
margin_bottom = 19.0
text = "Condition:"
[node name="Label2" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_left = 69.0
margin_top = 3.0
margin_right = 87.0
margin_bottom = 21.0
rect_min_size = Vector2( 18, 18 )
hint_tooltip = "Enter an expression. The table only show rows where the expression returns `true`.
You can use `res.<property_name>` to get a property, and `index` to get row number. Hit ENTER to run the search.
Try out these:
- (res.number_property > 0 and res.number_property < 100)
- (res.text_property != \"\")
- (\"a\" in res.text_property)
- (index < 5)"
mouse_filter = 0
mouse_default_cursor_shape = 16
text = "(?)"
align = 1
[node name="SearchCond" type="LineEdit" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_left = 91.0
margin_right = 509.0
margin_bottom = 24.0
size_flags_horizontal = 3
text = "true"
[node name="VSeparator" type="VSeparator" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_left = 513.0
margin_right = 517.0
margin_bottom = 24.0
[node name="Label3" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_left = 521.0
margin_top = 5.0
margin_right = 575.0
margin_bottom = 19.0
text = "Process:"
[node name="Label4" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_left = 579.0
margin_top = 3.0
margin_right = 597.0
margin_bottom = 21.0
rect_min_size = Vector2( 18, 18 )
hint_tooltip = "Enter an expression. The values in selected cells will be replaced with calculated new values.
You can use `value` to get the cell's value, `res.<property_name>` to get a property, `row_index` to get row number
and `cell_index` to get the cell's selection order. Hit ENTER to run the search.
These are some valid expressions:
- (res.property1 + res.property2)
- (res.property1.replace(\"old_string\", \"new_string\"))
- (load(\"res://path/to_resource.tres\"))
Don't forget quotation marks on strings and str() on non-strings."
mouse_filter = 0
mouse_default_cursor_shape = 16
text = "(?)"
align = 1
[node name="ProcessExpr" type="LineEdit" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search"]
margin_left = 601.0
margin_right = 1020.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="Control" type="Control" parent="."]
margin_left = 2.0
margin_top = 2.0
margin_right = 1022.0
margin_bottom = 598.0
mouse_filter = 2
__meta__ = {
"_edit_lock_": true
}
[node name="FileDialog" type="FileDialog" parent="Control"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -307.0
margin_top = -192.0
margin_right = 307.0
margin_bottom = 192.0
rect_min_size = Vector2( 150, 52.5 )
window_title = "Open a Folder"
mode_overrides_title = false
mode = 2
[node name="Info" type="AcceptDialog" parent="Control"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -320.0
margin_top = -152.0
margin_right = 320.0
margin_bottom = 152.0
window_title = "About"
__meta__ = {
"_edit_group_": true
}
[node name="MarginContainer" type="MarginContainer" parent="Control/Info"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 8.0
margin_top = 8.0
margin_right = -8.0
margin_bottom = -36.0
[node name="RichTextLabel" type="RichTextLabel" parent="Control/Info/MarginContainer"]
margin_right = 624.0
margin_bottom = 260.0
bbcode_enabled = true
bbcode_text = "[center]Edit Resources as Spreadsheet[/center]
\"Welp, it is what it sounds like!\"
Possible inputs:
- [code]Ctrl + Click / Cmd + Click[/code] - Select multiple cells in one column
- [code]Shift + Click[/code] - Select all cells between A and B in one column
- [code]Left/Right[/code] - Move cursor along cell text
- [code]Backspace/Delete[/code] - Erase text Left / Right from cursor
- [code]Home/End[/code] - Move cursor to start/end of cell
- [code]Ctrl + <move/erase> / Cmd + <move/erase>[/code] - Move through / Erase whole word
- [code]Ctrl/Cmd + C/V[/code] - Copy cells / Paste text into cells
- [code]Ctrl/Cmd + (Shift) + Z[/code] - The Savior
If clipboard contains as many lines as there are cells selected, each line is pasted into a separate cell.
Made by Don Tnowe. 2022.
[url]https://twitter.com/don_tnowe[/url]
Issues and contribution:
[url]https://github.com/don-tnowe/godot-resources-as-sheets-plugin[/url]"
text = "Edit Resources as Spreadsheet
\"Welp, it is what it sounds like!\"
Possible inputs:
- Ctrl + Click / Cmd + Click - Select multiple cells in one column
- Shift + Click - Select all cells between A and B in one column
- Left/Right - Move cursor along cell text
- Backspace/Delete - Erase text Left / Right from cursor
- Home/End - Move cursor to start/end of cell
- Ctrl + <move/erase> / Cmd + <move/erase> - Move through / Erase whole word
- Ctrl/Cmd + C/V - Copy cells / Paste text into cells
- Ctrl/Cmd + (Shift) + Z - The Savior
If clipboard contains as many lines as there are cells selected, each line is pasted into a separate cell.
Made by Don Tnowe. 2022.
https://twitter.com/don_tnowe
Issues and contribution:
https://github.com/don-tnowe/godot-resources-as-sheets-plugin"
[node name="Settings" type="AcceptDialog" parent="Control"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -235.0
margin_top = -123.0
margin_right = 185.0
margin_bottom = 88.0
window_title = "Settings"
__meta__ = {
"_edit_group_": true
}
[node name="MarginContainer" type="ScrollContainer" parent="Control/Settings"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 8.0
margin_top = 8.0
margin_right = -8.0
margin_bottom = -36.0
scroll_horizontal_enabled = false
[node name="RichTextLabel" type="VBoxContainer" parent="Control/Settings/MarginContainer"]
margin_right = 404.0
margin_bottom = 167.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="GridContainer" type="GridContainer" parent="Control/Settings/MarginContainer/RichTextLabel"]
margin_right = 404.0
margin_bottom = 150.0
columns = 2
script = ExtResource( 14 )
[node name="Label" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_top = 5.0
margin_right = 326.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Color-type cells style rows"
[node name="ColorRows" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_left = 330.0
margin_right = 404.0
margin_bottom = 24.0
pressed = true
text = "Enable"
[node name="Label2" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_top = 33.0
margin_right = 326.0
margin_bottom = 47.0
size_flags_horizontal = 3
text = "Colored array elements"
[node name="ColorArrays" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_left = 330.0
margin_top = 28.0
margin_right = 404.0
margin_bottom = 52.0
pressed = true
text = "Enable"
[node name="Label3" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_top = 61.0
margin_right = 326.0
margin_bottom = 75.0
size_flags_horizontal = 3
text = "Array cell min width"
[node name="ArrayMinWidth" type="SpinBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_left = 330.0
margin_top = 56.0
margin_right = 404.0
margin_bottom = 80.0
min_value = 32.0
max_value = 512.0
value = 128.0
[node name="Label4" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_top = 84.0
margin_right = 326.0
margin_bottom = 115.0
size_flags_horizontal = 3
text = "Clip header text (more compact view but header text wont be fully visible) (restart when switching)"
autowrap = true
[node name="ClipHeaders" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_left = 330.0
margin_top = 84.0
margin_right = 404.0
margin_bottom = 115.0
pressed = true
text = "Enable"
[node name="Label5" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_top = 119.0
margin_right = 326.0
margin_bottom = 150.0
size_flags_horizontal = 3
text = "Duplicate arrays on edit (slower, but can be undone)"
autowrap = true
[node name="DupeArrays" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
margin_left = 330.0
margin_top = 119.0
margin_right = 404.0
margin_bottom = 150.0
pressed = true
text = "Enable"
[connection signal="text_entered" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Path" to="." method="_on_Path_text_entered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/SelectDir" to="Control/FileDialog" method="popup_centered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Refresh" to="." method="_on_Path_text_entered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/DeletePath" to="." method="remove_selected_path_from_recent"]
[connection signal="item_selected" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/RecentPaths" to="." method="_on_RecentPaths_item_selected"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/Info" to="Control/Info" method="popup_centered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/Settings" to="Control/Settings" method="popup_centered"]
[connection signal="text_entered" from="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search/SearchCond" to="." method="_on_SearchCond_text_entered"]
[connection signal="text_entered" from="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/Search/ProcessExpr" to="." method="_on_ProcessExpr_text_entered"]
[connection signal="dir_selected" from="Control/FileDialog" to="." method="_on_FileDialog_dir_selected"]

View File

@ -1,41 +0,0 @@
tool
class_name SettingsGrid
extends GridContainer
const SETTING_PREFIX = "addons/resources_spreadsheet_view/"
func _ready():
for x in get_children():
var setting = SETTING_PREFIX + camel_case_to_snake_case(x.name)
if x is BaseButton:
x.connect("toggled", self, "_set_setting", [setting])
if !ProjectSettings.has_setting(setting):
call("_set_setting", x.pressed, setting)
else:
x.pressed = ProjectSettings.get_setting(setting)
elif x is Range:
x.connect("value_changed", self, "_set_setting", [setting])
if !ProjectSettings.has_setting(setting):
call("_set_setting", x.value, setting)
else:
x.value = ProjectSettings.get_setting(setting)
static func camel_case_to_snake_case(string : String) -> String:
var i = 0
while i < string.length():
if string.ord_at(i) < 97:
string = string.left(i) + ("_" if i > 0 else "") + string[i].to_lower() + string.substr(i + 1)
i += 1
i += 1
return string
func _set_setting(new_value, setting):
ProjectSettings.set_setting(setting, new_value)

View File

@ -1,23 +0,0 @@
[gd_scene format=2]
[node name="Header" type="HBoxContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_right = -892.0
margin_bottom = -580.0
size_flags_horizontal = 3
custom_constants/separation = 0
[node name="Button" type="Button" parent="."]
margin_right = 102.0
margin_bottom = 20.0
size_flags_horizontal = 3
size_flags_vertical = 0
text = "resource_name"
clip_text = true
[node name="Label" type="Button" parent="."]
margin_left = 102.0
margin_right = 132.0
margin_bottom = 20.0
text = "|| "

View File

@ -1,44 +0,0 @@
[gd_scene load_steps=2 format=2]
[sub_resource type="DynamicFont" id=1]
size = 8
[node name="Label" type="MarginContainer"]
margin_right = 58.0
margin_bottom = 14.0
rect_min_size = Vector2( 128, 0 )
size_flags_vertical = 9
__meta__ = {
"_edit_lock_": true
}
[node name="Box" type="HFlowContainer" parent="."]
margin_right = 128.0
margin_bottom = 14.0
mouse_filter = 2
custom_constants/vseparation = 0
custom_constants/hseparation = 0
[node name="Back" type="LineEdit" parent="."]
show_behind_parent = true
margin_right = 128.0
margin_bottom = 14.0
focus_mode = 0
mouse_filter = 2
custom_fonts/font = SubResource( 1 )
editable = false
expand_to_text_length = true
context_menu_enabled = false
virtual_keyboard_enabled = false
caret_blink = true
caret_blink_speed = 0.5
__meta__ = {
"_edit_lock_": true
}
[node name="Selected" type="ColorRect" parent="."]
visible = false
margin_right = 128.0
margin_bottom = 14.0
mouse_filter = 2
color = Color( 1, 1, 1, 0.247059 )

View File

@ -1,38 +0,0 @@
[gd_scene load_steps=2 format=2]
[sub_resource type="DynamicFont" id=1]
size = 8
[node name="Label" type="Label"]
margin_right = 58.0
margin_bottom = 14.0
rect_min_size = Vector2( 58, 0 )
mouse_filter = 0
size_flags_vertical = 9
__meta__ = {
"_edit_lock_": true
}
[node name="Back" type="LineEdit" parent="."]
show_behind_parent = true
anchor_right = 1.0
anchor_bottom = 1.0
focus_mode = 0
mouse_filter = 2
custom_fonts/font = SubResource( 1 )
editable = false
expand_to_text_length = true
context_menu_enabled = false
virtual_keyboard_enabled = false
caret_blink = true
caret_blink_speed = 0.5
__meta__ = {
"_edit_lock_": true
}
[node name="Selected" type="ColorRect" parent="."]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
color = Color( 1, 1, 1, 0.247059 )

View File

@ -1,32 +0,0 @@
class_name CellEditor
extends Reference
const CELL_SCENE_DIR = "res://addons/resources_speadsheet_view/typed_cells/"
var hint_strings_array := []
# Override to define where the cell should be shown.
func can_edit_value(value, type, property_hint) -> bool:
return value != null
# Override to change how the cell is created; preload a scene or create nodes from code.
# Caller is an instance of `editor_view.tscn`.
func create_cell(caller : Control) -> Control:
return load(CELL_SCENE_DIR + "basic.tscn").instance()
# Override to change behaviour when the cell is clicked to be selected.
func set_selected(node : Control, selected : bool):
node.get_node("Selected").visible = selected
# Override to change how the value is displayed.
func set_value(node : Control, value):
node.text = TextEditingUtils.show_non_typing(str(value))
# Override to prevent the cell from being edited as text.
func is_text():
return true
func set_color(node : Control, color : Color):
node.get_node("Back").modulate = color * 1.0

View File

@ -1,30 +0,0 @@
extends CellEditor
var _cached_color := Color.white
func create_cell(caller : Control) -> Control:
var node = load(CELL_SCENE_DIR + "basic.tscn").instance()
var color = ColorRect.new()
node.align = Label.ALIGN_RIGHT
node.rect_min_size.x = 56
node.add_child(color)
color.name = "Color"
color.anchor_bottom = 1.0
color.rect_size = Vector2(8, 0)
return node
func can_edit_value(value, type, property_hint) -> bool:
return type == TYPE_COLOR
func set_value(node : Control, value):
if value is String:
node.text = TextEditingUtils.show_non_typing(str(value))
else:
node.text = value.to_html(true)
_cached_color = value
node.get_node("Color").color = value

View File

@ -1,60 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://icon.png" type="Texture" id=1]
[sub_resource type="DynamicFont" id=1]
size = 8
[node name="Label" type="MarginContainer"]
margin_right = 58.0
margin_bottom = 14.0
size_flags_vertical = 9
__meta__ = {
"_edit_lock_": true
}
[node name="Back" type="LineEdit" parent="."]
show_behind_parent = true
margin_right = 85.0
margin_bottom = 32.0
focus_mode = 0
mouse_filter = 2
custom_fonts/font = SubResource( 1 )
editable = false
expand_to_text_length = true
context_menu_enabled = false
virtual_keyboard_enabled = false
caret_blink = true
caret_blink_speed = 0.5
__meta__ = {
"_edit_lock_": true
}
[node name="Selected" type="ColorRect" parent="."]
visible = false
margin_right = 85.0
margin_bottom = 32.0
mouse_filter = 2
color = Color( 1, 1, 1, 0.247059 )
[node name="Box" type="HBoxContainer" parent="."]
margin_right = 85.0
margin_bottom = 32.0
[node name="Tex" type="TextureRect" parent="Box"]
margin_right = 32.0
margin_bottom = 32.0
rect_min_size = Vector2( 32, 32 )
texture = ExtResource( 1 )
expand = true
stretch_mode = 6
[node name="Label" type="Label" parent="Box"]
margin_left = 36.0
margin_top = 9.0
margin_right = 85.0
margin_bottom = 23.0
size_flags_horizontal = 3
text = "res.tres"
align = 1
valign = 1

View File

@ -1,222 +0,0 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_array.gd" type="Script" id=1]
[ext_resource path="res://addons/resources_speadsheet_view/editor_icon_button.gd" type="Script" id=2]
[sub_resource type="Image" id=3]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "LumAlpha8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=2]
flags = 4
flags = 4
image = SubResource( 3 )
size = Vector2( 16, 16 )
[node name="EditArray" type="VBoxContainer"]
anchor_right = 1.0
margin_bottom = 62.0
rect_pivot_offset = Vector2( -460, -28 )
mouse_filter = 0
script = ExtResource( 1 )
[node name="Header" type="HBoxContainer" parent="."]
margin_right = 1024.0
margin_bottom = 14.0
[node name="HBoxContainer" type="HBoxContainer" parent="Header"]
margin_right = 455.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header/HBoxContainer"]
margin_right = 70.0
margin_bottom = 14.0
text = "EDIT: Array"
[node name="HSeparator" type="HSeparator" parent="Header/HBoxContainer"]
margin_left = 74.0
margin_right = 455.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
margin_left = 459.0
margin_right = 565.0
margin_bottom = 14.0
text = "PROPERTY NAME"
[node name="HSeparator2" type="HSeparator" parent="Header"]
margin_left = 569.0
margin_right = 1024.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HSplitContainer" parent="."]
margin_top = 18.0
margin_right = 1024.0
margin_bottom = 70.0
split_offset = 192
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer"]
margin_right = 571.0
margin_bottom = 52.0
alignment = 2
[node name="Panel" type="MarginContainer" parent="HBoxContainer/HBoxContainer"]
margin_right = 320.0
margin_bottom = 52.0
size_flags_horizontal = 3
[node name="Label" type="TextEdit" parent="HBoxContainer/HBoxContainer/Panel"]
margin_right = 320.0
margin_bottom = 52.0
rect_min_size = Vector2( 128, 0 )
size_flags_vertical = 5
text = "[]"
readonly = true
[node name="VSeparator2" type="VSeparator" parent="HBoxContainer/HBoxContainer"]
margin_left = 324.0
margin_right = 328.0
margin_bottom = 52.0
[node name="Control" type="MarginContainer" parent="HBoxContainer/HBoxContainer"]
margin_left = 332.0
margin_right = 563.0
margin_bottom = 52.0
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/HBoxContainer/Control"]
margin_right = 231.0
margin_bottom = 52.0
[node name="LineEdit" type="LineEdit" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer"]
margin_right = 231.0
margin_bottom = 26.0
rect_min_size = Vector2( 128, 0 )
clear_button_enabled = true
placeholder_text = "Input value to add/remove..."
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer"]
margin_top = 30.0
margin_right = 231.0
margin_bottom = 52.0
[node name="Label" type="Label" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_top = 4.0
margin_right = 29.0
margin_bottom = 18.0
text = "Add:"
[node name="String" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_left = 33.0
margin_right = 61.0
margin_bottom = 22.0
hint_tooltip = "Add String"
icon = SubResource( 2 )
script = ExtResource( 2 )
icon_name = "String"
[node name="Int" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_left = 65.0
margin_right = 93.0
margin_bottom = 22.0
hint_tooltip = "Add Integer"
icon = SubResource( 2 )
script = ExtResource( 2 )
icon_name = "int"
[node name="Float" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_left = 97.0
margin_right = 125.0
margin_bottom = 22.0
hint_tooltip = "Add Float"
icon = SubResource( 2 )
script = ExtResource( 2 )
icon_name = "float"
[node name="Variant" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_left = 129.0
margin_right = 157.0
margin_bottom = 22.0
hint_tooltip = "Guess Type and Add"
icon = SubResource( 2 )
script = ExtResource( 2 )
icon_name = "Variant"
[node name="Label2" type="Label" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_left = 161.0
margin_top = 4.0
margin_right = 199.0
margin_bottom = 18.0
text = "Erase:"
[node name="Remove" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
margin_left = 203.0
margin_right = 231.0
margin_bottom = 22.0
hint_tooltip = "Erase Value from Array"
icon = SubResource( 2 )
script = ExtResource( 2 )
icon_name = "Remove"
[node name="VSeparator" type="VSeparator" parent="HBoxContainer/HBoxContainer"]
margin_left = 567.0
margin_right = 571.0
margin_bottom = 52.0
[node name="Control2" type="MarginContainer" parent="HBoxContainer"]
margin_left = 583.0
margin_right = 1024.0
margin_bottom = 52.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/Control2"]
margin_right = 441.0
margin_bottom = 52.0
alignment = 2
[node name="VSeparator2" type="VSeparator" parent="HBoxContainer/Control2/HBoxContainer"]
margin_right = 4.0
margin_bottom = 52.0
[node name="HFlowContainer" type="HFlowContainer" parent="HBoxContainer/Control2/HBoxContainer"]
margin_left = 8.0
margin_right = 441.0
margin_bottom = 52.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
margin_top = 4.0
margin_right = 48.0
margin_bottom = 18.0
text = "Recent:"
[node name="OptionButton" type="OptionButton" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
margin_left = 52.0
margin_right = 106.0
margin_bottom = 22.0
text = "Add"
items = [ "Add", null, false, 0, null, "Erase", null, false, 1, null, "Delete From Recent", null, false, 2, null ]
selected = 0
[node name="AddRecentFromSel" type="Button" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
margin_left = 110.0
margin_right = 138.0
margin_bottom = 22.0
hint_tooltip = "Copy Selection into this List"
icon = SubResource( 2 )
script = ExtResource( 2 )
icon_name = "ListSelect"
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/String" to="." method="_on_String_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Int" to="." method="_on_Int_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Float" to="." method="_on_Float_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Variant" to="." method="_on_Variant_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Remove" to="." method="_on_Remove_pressed"]
[connection signal="pressed" from="HBoxContainer/Control2/HBoxContainer/HFlowContainer/AddRecentFromSel" to="." method="_on_AddRecentFromSel_pressed"]

View File

@ -1,424 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_color.gd" type="Script" id=1]
[node name="EditColor" type="VBoxContainer"]
anchor_right = 1.0
margin_bottom = 86.0
rect_pivot_offset = Vector2( -460, -28 )
mouse_filter = 0
script = ExtResource( 1 )
[node name="Header" type="HBoxContainer" parent="."]
margin_right = 1024.0
margin_bottom = 14.0
[node name="HBoxContainer" type="HBoxContainer" parent="Header"]
margin_right = 455.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header/HBoxContainer"]
margin_right = 70.0
margin_bottom = 14.0
text = "EDIT: Color"
[node name="HSeparator" type="HSeparator" parent="Header/HBoxContainer"]
margin_left = 74.0
margin_right = 455.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
margin_left = 459.0
margin_right = 565.0
margin_bottom = 14.0
text = "PROPERTY NAME"
[node name="HSeparator2" type="HSeparator" parent="Header"]
margin_left = 569.0
margin_right = 1024.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="EditColor" type="HBoxContainer" parent="."]
margin_top = 18.0
margin_right = 1024.0
margin_bottom = 86.0
alignment = 1
[node name="VSeparator7" type="Control" parent="EditColor"]
margin_right = 172.0
margin_bottom = 68.0
rect_min_size = Vector2( 16, 0 )
size_flags_horizontal = 3
[node name="VSeparator3" type="Control" parent="EditColor"]
visible = false
margin_right = 16.0
margin_bottom = 68.0
rect_min_size = Vector2( 16, 0 )
[node name="ButtonRowTemplate" type="Control" parent="EditColor"]
visible = false
margin_left = 20.0
margin_right = 20.0
margin_bottom = 42.0
[node name="Button3" type="Button" parent="EditColor/ButtonRowTemplate"]
margin_right = 25.0
margin_bottom = 20.0
text = "-X"
[node name="Button2" type="Button" parent="EditColor/ButtonRowTemplate"]
margin_left = 29.0
margin_right = 54.0
margin_bottom = 20.0
text = "-5"
[node name="Label" type="Label" parent="EditColor/ButtonRowTemplate"]
margin_left = 87.0
margin_top = 3.0
margin_right = 111.0
margin_bottom = 17.0
text = "Red"
align = 1
[node name="Button5" type="Button" parent="EditColor/ButtonRowTemplate"]
margin_left = 147.0
margin_right = 175.0
margin_bottom = 20.0
text = "+5"
[node name="Button6" type="Button" parent="EditColor/ButtonRowTemplate"]
margin_left = 179.0
margin_right = 207.0
margin_bottom = 20.0
text = "+X"
[node name="RGBGrid" type="GridContainer" parent="EditColor"]
margin_left = 176.0
margin_right = 353.0
margin_bottom = 68.0
columns = 5
[node name="Button3" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 1, 0.780392, 0.780392, 1 )
margin_right = 25.0
margin_bottom = 20.0
text = "-X"
[node name="Button2" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 1, 0.780392, 0.780392, 1 )
margin_left = 29.0
margin_right = 62.0
margin_bottom = 20.0
text = "-10"
[node name="Label" type="Label" parent="EditColor/RGBGrid"]
margin_left = 66.0
margin_top = 3.0
margin_right = 105.0
margin_bottom = 17.0
text = "Red"
align = 1
[node name="Button5" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 1, 0.780392, 0.780392, 1 )
margin_left = 109.0
margin_right = 145.0
margin_bottom = 20.0
text = "+10"
[node name="Button6" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 1, 0.780392, 0.780392, 1 )
margin_left = 149.0
margin_right = 177.0
margin_bottom = 20.0
text = "+X"
[node name="Button7" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.666667, 1, 0.745098, 1 )
margin_top = 24.0
margin_right = 25.0
margin_bottom = 44.0
text = "-X"
[node name="Button8" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.666667, 1, 0.745098, 1 )
margin_left = 29.0
margin_top = 24.0
margin_right = 62.0
margin_bottom = 44.0
text = "-10"
[node name="Label2" type="Label" parent="EditColor/RGBGrid"]
margin_left = 66.0
margin_top = 27.0
margin_right = 105.0
margin_bottom = 41.0
text = "Green"
align = 1
[node name="Button11" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.666667, 1, 0.745098, 1 )
margin_left = 109.0
margin_top = 24.0
margin_right = 145.0
margin_bottom = 44.0
text = "+10"
[node name="Button12" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.666667, 1, 0.745098, 1 )
margin_left = 149.0
margin_top = 24.0
margin_right = 177.0
margin_bottom = 44.0
text = "+X"
[node name="Button13" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.772549, 0.792157, 1, 1 )
margin_top = 48.0
margin_right = 25.0
margin_bottom = 68.0
text = "-X"
[node name="Button14" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.772549, 0.792157, 1, 1 )
margin_left = 29.0
margin_top = 48.0
margin_right = 62.0
margin_bottom = 68.0
text = "-10"
[node name="Label3" type="Label" parent="EditColor/RGBGrid"]
margin_left = 66.0
margin_top = 51.0
margin_right = 105.0
margin_bottom = 65.0
text = "Blue"
align = 1
[node name="Button17" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.772549, 0.792157, 1, 1 )
margin_left = 109.0
margin_top = 48.0
margin_right = 145.0
margin_bottom = 68.0
text = "+10"
[node name="Button18" type="Button" parent="EditColor/RGBGrid"]
modulate = Color( 0.772549, 0.792157, 1, 1 )
margin_left = 149.0
margin_top = 48.0
margin_right = 177.0
margin_bottom = 68.0
text = "+X"
[node name="VSeparator" type="VSeparator" parent="EditColor"]
margin_left = 357.0
margin_right = 361.0
margin_bottom = 68.0
[node name="ColorProper" type="VBoxContainer" parent="EditColor"]
margin_left = 365.0
margin_right = 461.0
margin_bottom = 68.0
[node name="ColorRect" type="ColorRect" parent="EditColor/ColorProper"]
margin_right = 96.0
margin_bottom = 44.0
size_flags_vertical = 3
[node name="Button" type="Button" parent="EditColor/ColorProper"]
margin_top = 48.0
margin_right = 96.0
margin_bottom = 68.0
text = "Choose Color"
[node name="VSeparator2" type="VSeparator" parent="EditColor"]
margin_left = 465.0
margin_right = 469.0
margin_bottom = 68.0
[node name="HSVGrid" type="GridContainer" parent="EditColor"]
margin_left = 473.0
margin_right = 646.0
margin_bottom = 68.0
columns = 5
[node name="Button3" type="Button" parent="EditColor/HSVGrid"]
modulate = Color( 1, 0.913725, 0.776471, 1 )
margin_right = 25.0
margin_bottom = 20.0
text = "-X"
[node name="Button2" type="Button" parent="EditColor/HSVGrid"]
modulate = Color( 0.898039, 1, 0.698039, 1 )
margin_left = 29.0
margin_right = 62.0
margin_bottom = 20.0
text = "-10"
[node name="Label" type="Label" parent="EditColor/HSVGrid"]
margin_left = 66.0
margin_top = 3.0
margin_right = 101.0
margin_bottom = 17.0
text = "Hue"
align = 1
[node name="Button5" type="Button" parent="EditColor/HSVGrid"]
modulate = Color( 0.717647, 1, 0.980392, 1 )
margin_left = 105.0
margin_right = 141.0
margin_bottom = 20.0
text = "+10"
[node name="Button6" type="Button" parent="EditColor/HSVGrid"]
modulate = Color( 0.74902, 0.729412, 1, 1 )
margin_left = 145.0
margin_right = 173.0
margin_bottom = 20.0
text = "+X"
[node name="Button7" type="Button" parent="EditColor/HSVGrid"]
margin_top = 24.0
margin_right = 25.0
margin_bottom = 44.0
text = "-X"
[node name="Button8" type="Button" parent="EditColor/HSVGrid"]
margin_left = 29.0
margin_top = 24.0
margin_right = 62.0
margin_bottom = 44.0
text = "-5"
[node name="Label2" type="Label" parent="EditColor/HSVGrid"]
margin_left = 66.0
margin_top = 27.0
margin_right = 101.0
margin_bottom = 41.0
text = "Sat"
align = 1
[node name="Button11" type="Button" parent="EditColor/HSVGrid"]
margin_left = 105.0
margin_top = 24.0
margin_right = 141.0
margin_bottom = 44.0
text = "+5"
[node name="Button12" type="Button" parent="EditColor/HSVGrid"]
margin_left = 145.0
margin_top = 24.0
margin_right = 173.0
margin_bottom = 44.0
text = "+X"
[node name="Button13" type="Button" parent="EditColor/HSVGrid"]
margin_top = 48.0
margin_right = 25.0
margin_bottom = 68.0
text = "-X"
[node name="Button14" type="Button" parent="EditColor/HSVGrid"]
margin_left = 29.0
margin_top = 48.0
margin_right = 62.0
margin_bottom = 68.0
text = "-5"
[node name="Label3" type="Label" parent="EditColor/HSVGrid"]
margin_left = 66.0
margin_top = 51.0
margin_right = 101.0
margin_bottom = 65.0
text = "Value"
align = 1
[node name="Button17" type="Button" parent="EditColor/HSVGrid"]
margin_left = 105.0
margin_top = 48.0
margin_right = 141.0
margin_bottom = 68.0
text = "+5"
[node name="Button18" type="Button" parent="EditColor/HSVGrid"]
margin_left = 145.0
margin_top = 48.0
margin_right = 173.0
margin_bottom = 68.0
text = "+X"
[node name="VSeparator4" type="VSeparator" parent="EditColor"]
margin_left = 650.0
margin_right = 654.0
margin_bottom = 68.0
[node name="CustomX" type="VBoxContainer" parent="EditColor"]
margin_left = 658.0
margin_right = 848.0
margin_bottom = 68.0
[node name="Label" type="Label" parent="EditColor/CustomX"]
margin_top = 13.0
margin_right = 190.0
margin_bottom = 27.0
size_flags_vertical = 6
text = "Custom Value (for +X buttons)"
[node name="LineEdit" type="LineEdit" parent="EditColor/CustomX"]
margin_top = 44.0
margin_right = 190.0
margin_bottom = 68.0
text = "20"
[node name="VSeparator6" type="Control" parent="EditColor"]
margin_left = 852.0
margin_right = 1024.0
margin_bottom = 68.0
rect_min_size = Vector2( 16, 0 )
size_flags_horizontal = 3
[node name="Panel" type="PanelContainer" parent="EditColor/VSeparator6"]
visible = false
anchor_top = 1.0
anchor_bottom = 1.0
margin_left = -601.0
margin_top = -504.0
margin_right = -278.0
[node name="Panel2" type="Panel" parent="EditColor/VSeparator6/Panel"]
self_modulate = Color( 1.5, 1.5, 1.5, 1 )
margin_left = 7.0
margin_top = 7.0
margin_right = 316.0
margin_bottom = 497.0
[node name="MarginContainer" type="MarginContainer" parent="EditColor/VSeparator6/Panel"]
margin_left = 7.0
margin_top = 7.0
margin_right = 316.0
margin_bottom = 497.0
custom_constants/margin_right = 4
custom_constants/margin_top = 4
custom_constants/margin_left = 4
custom_constants/margin_bottom = 4
[node name="ColorPicker" type="ColorPicker" parent="EditColor/VSeparator6/Panel/MarginContainer"]
margin_left = 4.0
margin_top = 4.0
margin_right = 305.0
margin_bottom = 486.0
[node name="Button" type="Button" parent="EditColor/VSeparator6/Panel/MarginContainer/ColorPicker"]
margin_top = 462.0
margin_right = 301.0
margin_bottom = 482.0
text = "OK"
[connection signal="pressed" from="EditColor/ColorProper/Button" to="." method="_on_Button_pressed"]
[connection signal="gui_input" from="EditColor/VSeparator6/Panel/MarginContainer/ColorPicker" to="." method="_on_ColorPicker_gui_input"]
[connection signal="pressed" from="EditColor/VSeparator6/Panel/MarginContainer/ColorPicker/Button" to="." method="_on_Button_pressed"]

View File

@ -1,108 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_texture.gd" type="Script" id=1]
[ext_resource path="res://icon.png" type="Texture" id=2]
[node name="EditTexture" type="VBoxContainer"]
anchor_right = 1.0
margin_bottom = 86.0
rect_pivot_offset = Vector2( -460, -28 )
mouse_filter = 0
script = ExtResource( 1 )
[node name="Header" type="HBoxContainer" parent="."]
margin_right = 1024.0
margin_bottom = 14.0
[node name="HBoxContainer" type="HBoxContainer" parent="Header"]
margin_right = 455.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header/HBoxContainer"]
margin_right = 85.0
margin_bottom = 14.0
text = "EDIT: Texture"
[node name="HSeparator" type="HSeparator" parent="Header/HBoxContainer"]
margin_left = 89.0
margin_right = 455.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
margin_left = 459.0
margin_right = 565.0
margin_bottom = 14.0
text = "PROPERTY NAME"
[node name="HSeparator2" type="HSeparator" parent="Header"]
margin_left = 569.0
margin_right = 1024.0
margin_bottom = 14.0
size_flags_horizontal = 3
[node name="CenterContainer" type="CenterContainer" parent="."]
margin_top = 18.0
margin_right = 1024.0
margin_bottom = 84.0
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer"]
margin_left = 384.0
margin_right = 640.0
margin_bottom = 66.0
alignment = 1
[node name="TextureRect" type="TextureRect" parent="CenterContainer/HBoxContainer"]
margin_right = 48.0
margin_bottom = 66.0
rect_min_size = Vector2( 48, 48 )
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource( 2 )
expand = true
stretch_mode = 6
[node name="VSeparator" type="VSeparator" parent="CenterContainer/HBoxContainer"]
margin_left = 52.0
margin_right = 56.0
margin_bottom = 66.0
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/HBoxContainer"]
margin_left = 60.0
margin_right = 256.0
margin_bottom = 66.0
[node name="Label" type="Label" parent="CenterContainer/HBoxContainer/VBoxContainer"]
margin_right = 196.0
margin_bottom = 14.0
text = "Atlas Chopper"
align = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/HBoxContainer/VBoxContainer"]
margin_top = 18.0
margin_right = 196.0
margin_bottom = 42.0
[node name="LineEdit" type="LineEdit" parent="CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
margin_right = 96.0
margin_bottom = 24.0
rect_min_size = Vector2( 96, 0 )
size_flags_horizontal = 3
placeholder_text = "H Count"
[node name="LineEdit2" type="LineEdit" parent="CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
margin_left = 100.0
margin_right = 196.0
margin_bottom = 24.0
rect_min_size = Vector2( 96, 0 )
size_flags_horizontal = 3
placeholder_text = "V Count"
[node name="Button" type="Button" parent="CenterContainer/HBoxContainer/VBoxContainer"]
margin_top = 46.0
margin_right = 196.0
margin_bottom = 66.0
text = "Chop chop chop!!!"
[connection signal="pressed" from="CenterContainer/HBoxContainer/VBoxContainer/Button" to="." method="_on_Button_pressed"]

View File

@ -0,0 +1,7 @@
@tool
class_name ThemeColorSetter
extends Control
func _ready():
modulate = get_theme_color("accent_color", "Editor")

View File

@ -0,0 +1,12 @@
@tool
class_name ThemeIconButton
extends Button
@export var icon_name := "Node" :
set(v):
icon_name = v
icon = get_theme_icon(v, "EditorIcons")
func _ready():
self.icon_name = (icon_name)

View File

@ -0,0 +1,21 @@
@tool
class_name ThemeStylebox
extends Control
@export var box_class := "EditorStyles"
@export var box_name := "Background"
func _ready():
_set_box_name(box_name)
_set_box_class(box_class)
func _set_box_name(v):
box_name = v
add_theme_stylebox_override(box_name, get_theme_stylebox(box_name, box_class))
func _set_box_class(v):
box_class = v
add_theme_stylebox_override(box_name, get_theme_stylebox(box_name, box_class))

View File

@ -1,15 +1,15 @@
tool
@tool
extends Control
export var table_header_scene : PackedScene
@export var table_header_scene : PackedScene
export(Array, Script) var cell_editor_classes := []
@export var cell_editor_classes : Array[Script] = []
export var path_folder_path := NodePath("")
export var path_recent_paths := NodePath("")
export var path_table_root := NodePath("")
export var path_property_editors := NodePath("")
export var path_columns := NodePath("")
@export @onready var node_folder_path : LineEdit = $"HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Path"
@export @onready var node_recent_paths : OptionButton = $"HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/RecentPaths"
@export @onready var node_table_root : GridContainer = $"HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer/TableGrid"
@export @onready var node_property_editors : VBoxContainer = $"HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors"
@export @onready var node_columns : HBoxContainer = $"HeaderContentSplit/VBoxContainer/Columns/Columns"
var editor_interface : EditorInterface
var editor_plugin : EditorPlugin
@ -35,16 +35,16 @@ var edited_cells := []
var edited_cells_text := []
var edit_cursor_positions := []
var inspector_resource : Resource
var search_cond : Reference
var search_cond : RefCounted
var my_undo_redo : UndoRedo
func _ready():
get_node(path_recent_paths).clear()
editor_plugin.get_undo_redo().connect("version_changed", self, "_on_undo_redo_version_changed")
editor_interface.get_resource_filesystem()\
.connect("filesystem_changed", self, "_on_filesystem_changed")
editor_interface.get_inspector()\
.connect("property_edited", self, "_on_inspector_property_edited")
node_recent_paths.clear()
my_undo_redo = editor_plugin.get_undo_redo().get_history_undo_redo(editor_plugin.get_undo_redo().get_object_history_id(self))
my_undo_redo.version_changed.connect(_on_undo_redo_version_changed)
editor_interface.get_resource_filesystem().filesystem_changed.connect(_on_filesystem_changed)
editor_interface.get_inspector().property_edited.connect(_on_inspector_property_edited)
# Load saved recent paths
var file := File.new()
@ -52,7 +52,7 @@ func _ready():
file.open(save_data_path, File.READ)
var as_text = file.get_as_text()
var as_var = str2var(as_text)
var as_var = JSON.parse_string(as_text)
for x in as_var["recent_paths"]:
add_path_to_recent(x, true)
@ -60,8 +60,9 @@ func _ready():
for x in cell_editor_classes:
all_cell_editors.append(x.new())
all_cell_editors[all_cell_editors.size() - 1].hint_strings_array = column_hints
display_folder(recent_paths[0], "resource_name", false, true)
if recent_paths.size() > 0:
display_folder(recent_paths[0], "resource_name", false, true)
func _on_undo_redo_version_changed():
@ -93,12 +94,12 @@ func display_folder(folderpath : String, sort_by : String = "", sort_reverse : b
_load_resources_from_folder(folderpath, sort_by, sort_reverse)
if columns.size() == 0: return
get_node(path_folder_path).text = folderpath
node_folder_path.text = folderpath
_create_table(force_rebuild or current_path != folderpath)
_apply_search_cond()
current_path = folderpath
yield(get_tree(), "idle_frame")
if get_node(path_table_root).get_child_count() == 0:
await get_tree().process_frame
if node_table_root.get_child_count() == 0:
display_folder(folderpath, sort_by, sort_reverse, force_rebuild)
@ -161,7 +162,7 @@ func _compare_values(a, b) -> bool:
if a is Resource:
return a.resource_path > b.resource_path
if a is Array or a is PoolStringArray or a is PoolRealArray or a is PoolIntArray:
if a is Array:
return a.size() > b.size()
return a > b
@ -174,32 +175,37 @@ func _set_sorting(sort_by):
sorting_by = sort_by
func _select_column(column_name):
deselect_all_cells()
select_cell(node_table_root.get_child(columns.find(column_name)))
select_cells_to(node_table_root.get_child(columns.find(column_name) + columns.size() * (rows.size() - 1)))
func _create_table(columns_changed : bool):
var root_node = get_node(path_table_root)
var headers_node = get_node(path_columns)
deselect_all_cells()
edited_cells = []
edited_cells_text = []
edit_cursor_positions = []
var new_node : Control
if columns_changed:
root_node.columns = columns.size()
for x in root_node.get_children():
node_table_root.columns = columns.size()
for x in node_table_root.get_children():
x.queue_free()
for x in headers_node.get_children():
for x in node_columns.get_children():
x.queue_free()
for x in columns:
new_node = table_header_scene.instance()
headers_node.add_child(new_node)
new_node = table_header_scene.instantiate()
node_columns.add_child(new_node)
new_node.get_node("Button").text = x
new_node.get_node("Button").hint_tooltip = x
new_node.get_node("Button").connect("pressed", self, "_set_sorting", [x])
new_node.get_node("Button").tooltip_text = x
new_node.get_node("Button").pressed.connect(_set_sorting.bind(x))
new_node.get_node("Button2").pressed.connect(_select_column.bind(x))
var to_free = root_node.get_child_count() - rows.size() * columns.size()
var to_free = node_table_root.get_child_count() - rows.size() * columns.size()
while to_free > 0:
root_node.get_child(columns.size()).free()
node_table_root.get_child(columns.size()).free()
to_free -= 1
for i in rows.size():
@ -209,44 +215,45 @@ func _create_table(columns_changed : bool):
func _update_column_sizes():
yield(get_tree(), "idle_frame")
var column_headers := get_node(path_columns).get_children()
var table_root := get_node(path_table_root)
if node_table_root.get_child_count() == 0:
return
await get_tree().process_frame
var column_headers := node_columns.get_children()
var clip_text : bool = ProjectSettings.get_setting(SettingsGrid.SETTING_PREFIX + "clip_headers")
var min_width := 0
var cell : Control
get_node(path_columns).get_parent().rect_min_size.y = get_node(path_columns).rect_size.y
node_columns.get_parent().custom_minimum_size.y = node_columns.size.y
for i in column_headers.size():
cell = table_root.get_child(i)
cell = node_table_root.get_child(i)
column_headers[i].get_child(0).clip_text = clip_text
column_headers[i].rect_min_size.x = 0
cell.rect_min_size.x = 0
column_headers[i].rect_size.x = 0
get_node(path_columns).queue_sort()
column_headers[i].custom_minimum_size.x = 0
cell.custom_minimum_size.x = 0
column_headers[i].size.x = 0
node_columns.queue_sort()
min_width = max(column_headers[i].rect_size.x, cell.rect_size.x)
column_headers[i].rect_min_size.x = min_width
cell.rect_min_size.x = column_headers[i].get_minimum_size().x
column_headers[i].rect_size.x = min_width
min_width = max(column_headers[i].size.x, cell.size.x)
column_headers[i].custom_minimum_size.x = min_width
cell.custom_minimum_size.x = column_headers[i].get_minimum_size().x
column_headers[i].size.x = min_width
get_node(path_columns).queue_sort()
node_columns.queue_sort()
func _update_row(row_index : int, color_rows : bool = true):
var root_node = get_node(path_table_root)
var current_node : Control
var next_color := Color.white
var next_color := Color.WHITE
for i in columns.size():
if root_node.get_child_count() <= row_index * columns.size() + i:
if node_table_root.get_child_count() <= row_index * columns.size() + i:
current_node = column_editors[i].create_cell(self)
current_node.connect("gui_input", self, "_on_cell_gui_input", [current_node])
root_node.add_child(current_node)
current_node.gui_input.connect(_on_cell_gui_input.bind(current_node))
node_table_root.add_child(current_node)
else:
current_node = root_node.get_child(row_index * columns.size() + i)
current_node.hint_tooltip = columns[i] + "\nOf " + rows[row_index].resource_path.get_file().get_basename()
current_node = node_table_root.get_child(row_index * columns.size() + i)
current_node.tooltip_text = columns[i] + "\nOf " + rows[row_index].resource_path.get_file().get_basename()
column_editors[i].set_value(current_node, rows[row_index].get(columns[i]))
if columns[i] == "resource_path":
@ -262,7 +269,7 @@ func _apply_search_cond():
if search_cond == null:
_on_SearchCond_text_entered("true")
var table_elements = get_node(path_table_root).get_children()
var table_elements = node_table_root.get_children()
for i in rows.size():
var row_visible = search_cond.can_show(rows[i], i)
@ -273,30 +280,29 @@ func _apply_search_cond():
func add_path_to_recent(path : String, is_loading : bool = false):
if path in recent_paths: return
var node_recent := get_node(path_recent_paths)
var idx_in_array := recent_paths.find(path)
if idx_in_array != -1:
node_recent.remove_item(idx_in_array)
recent_paths.remove(idx_in_array)
node_recent_paths.remove_item(idx_in_array)
recent_paths.remove_at(idx_in_array)
recent_paths.append(path)
node_recent.add_item(path)
node_recent.select(node_recent.get_item_count() - 1)
node_recent_paths.add_item(path)
node_recent_paths.select(node_recent_paths.get_item_count() - 1)
if !is_loading:
save_data()
func remove_selected_path_from_recent():
if get_node(path_recent_paths).get_item_count() == 0:
if node_recent_paths.get_item_count() == 0:
return
var idx_in_array = get_node(path_recent_paths).selected
recent_paths.remove(idx_in_array)
get_node(path_recent_paths).remove_item(idx_in_array)
var idx_in_array = node_recent_paths.selected
recent_paths.remove_at(idx_in_array)
node_recent_paths.remove_item(idx_in_array)
if get_node(path_recent_paths).get_item_count() != 0:
get_node(path_recent_paths).select(0)
if node_recent_paths.get_item_count() != 0:
node_recent_paths.select(0)
display_folder(recent_paths[0])
save_data()
@ -304,7 +310,7 @@ func remove_selected_path_from_recent():
func save_data():
var file = File.new()
file.open(save_data_path, File.WRITE)
file.store_string(var2str(
file.store_string(str(
{
"recent_paths" : recent_paths,
}
@ -323,12 +329,12 @@ func _on_Path_text_entered(new_text : String = ""):
func _on_RecentPaths_item_selected(index : int):
current_path = recent_paths[index]
get_node(path_folder_path).text = recent_paths[index]
node_folder_path.text = recent_paths[index]
display_folder(current_path)
func _on_FileDialog_dir_selected(dir : String):
get_node(path_folder_path).text = dir
node_folder_path.text = dir
add_path_to_recent(dir)
display_folder(dir)
@ -347,10 +353,10 @@ func deselect_cell(cell : Control):
if idx == -1: return
column_editors[_get_cell_column(cell)].set_selected(cell, false)
edited_cells.remove(idx)
edited_cells.remove_at(idx)
if edited_cells_text.size() != 0:
edited_cells_text.remove(idx)
edit_cursor_positions.remove(idx)
edited_cells_text.remove_at(idx)
edit_cursor_positions.remove_at(idx)
func select_cell(cell : Control):
@ -358,7 +364,8 @@ func select_cell(cell : Control):
if _can_select_cell(cell):
_add_cell_to_selection(cell)
_try_open_docks(cell)
inspector_resource = rows[_get_cell_row(cell)].duplicate()
# inspector_resource = rows[_get_cell_row(cell)].duplicate() #
inspector_resource = rows[_get_cell_row(cell)]
editor_plugin.get_editor_interface().edit_resource(inspector_resource)
@ -372,10 +379,9 @@ func select_cells_to(cell : Control):
var edge_shift = -1 if row_start > row_end else 1
row_start += edge_shift
row_end += edge_shift
var table_root := get_node(path_table_root)
for i in range(row_start, row_end, edge_shift):
var cur_cell := table_root.get_child(i * columns.size() + column_index)
var cur_cell := node_table_root.get_child(i * columns.size() + column_index)
if !cur_cell.visible:
# When search is active, some cells will be hidden.
continue
@ -398,7 +404,7 @@ func _add_cell_to_selection(cell : Control):
func _try_open_docks(cell : Control):
var column_index = _get_cell_column(cell)
for x in get_node(path_property_editors).get_children():
for x in node_property_editors.get_children():
x.visible = x.try_edit_value(
rows[_get_cell_row(cell)].get(columns[column_index]),
column_types[column_index],
@ -438,7 +444,7 @@ func set_edited_cells_values(new_cell_values : Array):
)
editor_plugin.undo_redo.commit_action()
editor_interface.get_resource_filesystem().scan()
undo_redo_version = editor_plugin.undo_redo.get_version()
undo_redo_version = my_undo_redo.get_version()
_update_column_sizes()
@ -469,7 +475,7 @@ func _can_select_cell(cell : Control) -> bool:
if edited_cells.size() == 0:
return true
if !Input.is_key_pressed(KEY_CONTROL):
if !Input.is_key_pressed(KEY_CTRL):
return false
if (
@ -482,26 +488,26 @@ func _can_select_cell(cell : Control) -> bool:
func _get_cell_column(cell) -> int:
return cell.get_position_in_parent() % columns.size()
return cell.get_index() % columns.size()
func _get_cell_row(cell) -> int:
return cell.get_position_in_parent() / columns.size()
return cell.get_index() / columns.size()
func _update_scroll():
get_node(path_columns).rect_position.x = -get_node(path_table_root).get_node("../..").scroll_horizontal
node_columns.position.x = -node_table_root.get_node("../..").scroll_horizontal
func _on_cell_gui_input(event : InputEvent, cell : Control):
if event is InputEventMouseButton:
grab_focus()
_update_scroll()
if event.button_index != BUTTON_LEFT:
if event.button_index != MOUSE_BUTTON_LEFT:
return
grab_focus()
if event.pressed:
if Input.is_key_pressed(KEY_CONTROL):
if Input.is_key_pressed(KEY_CTRL):
if cell in edited_cells:
deselect_cell(cell)
@ -519,7 +525,7 @@ func _on_cell_gui_input(event : InputEvent, cell : Control):
func _gui_input(event : InputEvent):
if event is InputEventMouseButton:
_update_scroll()
if event.button_index != BUTTON_LEFT:
if event.button_index != MOUSE_BUTTON_LEFT:
return
grab_focus()
@ -534,100 +540,96 @@ func _input(event : InputEvent):
if !has_focus() or edited_cells.size() == 0:
return
var column = _get_cell_column(edited_cells[0])
if column_types[column] == TYPE_OBJECT || columns[column] == "resource_path":
return
if event.scancode == KEY_CONTROL or event.scancode == KEY_SHIFT:
if event.keycode == KEY_CTRL or event.keycode == KEY_SHIFT:
# Modifier keys do not get processed.
return
# Ctrl + Z (before, and instead of, committing the action!)
if Input.is_key_pressed(KEY_CONTROL) and event.scancode == KEY_Z:
if Input.is_key_pressed(KEY_CTRL) and event.keycode == KEY_Z:
if Input.is_key_pressed(KEY_SHIFT):
editor_plugin.undo_redo.redo()
my_undo_redo.redo()
# Ctrl + z
else:
editor_plugin.undo_redo.undo()
my_undo_redo.undo()
return
# This shortcut is used by Godot as well.
if Input.is_key_pressed(KEY_CONTROL) and event.scancode == KEY_Y:
editor_plugin.undo_redo.redo()
if Input.is_key_pressed(KEY_CTRL) and event.keycode == KEY_Y:
my_undo_redo.redo()
return
_key_specific_action(event)
grab_focus()
editor_interface.get_resource_filesystem().scan()
undo_redo_version = my_undo_redo.get_version()
func _key_specific_action(event : InputEvent):
var column = _get_cell_column(edited_cells[0])
var ctrl_pressed := Input.is_key_pressed(KEY_CTRL)
# BETWEEN-CELL NAVIGATION
if event.keycode == KEY_UP:
_move_selection_on_grid(0, (-1 if !ctrl_pressed else -10))
elif event.keycode == KEY_DOWN:
_move_selection_on_grid(0, (1 if !ctrl_pressed else 10))
elif Input.is_key_pressed(KEY_SHIFT) and event.keycode == KEY_TAB:
_move_selection_on_grid((-1 if !ctrl_pressed else -10), 0)
elif event.keycode == KEY_TAB:
_move_selection_on_grid((1 if !ctrl_pressed else 10), 0)
# Non-text and paths can't be edited.
if columns[column] == "resource_path":
return
if !column_editors[column].is_text():
return
_key_specific_action(event)
grab_focus()
editor_interface.get_resource_filesystem().scan()
undo_redo_version = editor_plugin.undo_redo.get_version()
func _key_specific_action(event : InputEvent):
var column = _get_cell_column(edited_cells[0])
var ctrl_pressed := Input.is_key_pressed(KEY_CONTROL)
if ctrl_pressed:
editor_plugin.hide_bottom_panel()
# CURSOR MOVEMENT
if event.scancode == KEY_LEFT:
if event.keycode == KEY_LEFT:
TextEditingUtils.multi_move_left(
edited_cells_text, edit_cursor_positions, Input.is_key_pressed(KEY_CONTROL)
edited_cells_text, edit_cursor_positions, ctrl_pressed
)
elif event.scancode == KEY_RIGHT:
elif event.keycode == KEY_RIGHT:
TextEditingUtils.multi_move_right(
edited_cells_text, edit_cursor_positions, Input.is_key_pressed(KEY_CONTROL)
edited_cells_text, edit_cursor_positions, ctrl_pressed
)
elif event.scancode == KEY_HOME:
elif event.keycode == KEY_HOME:
for i in edit_cursor_positions.size():
edit_cursor_positions[i] = 0
elif event.scancode == KEY_END:
elif event.keycode == KEY_END:
for i in edit_cursor_positions.size():
edit_cursor_positions[i] = edited_cells_text[i].length()
# BETWEEN-CELL NAVIGATION
elif event.scancode == KEY_UP:
_move_selection_on_grid(0, (-1 if !ctrl_pressed else -10))
elif event.scancode == KEY_DOWN:
_move_selection_on_grid(0, (1 if !ctrl_pressed else 10))
elif Input.is_key_pressed(KEY_SHIFT) and event.scancode == KEY_TAB:
_move_selection_on_grid((-1 if !ctrl_pressed else -10), 0)
get_tree().set_input_as_handled()
elif event.scancode == KEY_TAB:
_move_selection_on_grid((1 if !ctrl_pressed else 10), 0)
get_tree().set_input_as_handled()
# Ctrl + C (so you can edit in a proper text editor instead of this wacky nonsense)
elif ctrl_pressed and event.scancode == KEY_C:
elif ctrl_pressed and event.keycode == KEY_C:
TextEditingUtils.multi_copy(edited_cells_text)
# Ctrl + V
elif ctrl_pressed and event.scancode == KEY_V:
elif ctrl_pressed and event.keycode == KEY_V:
set_edited_cells_values(TextEditingUtils.multi_paste(
edited_cells_text, edit_cursor_positions
))
# ERASING
elif event.scancode == KEY_BACKSPACE:
elif event.keycode == KEY_BACKSPACE:
set_edited_cells_values(TextEditingUtils.multi_erase_left(
edited_cells_text, edit_cursor_positions, Input.is_key_pressed(KEY_CONTROL)
edited_cells_text, edit_cursor_positions, ctrl_pressed
))
elif event.scancode == KEY_DELETE:
elif event.keycode == KEY_DELETE:
set_edited_cells_values(TextEditingUtils.multi_erase_right(
edited_cells_text, edit_cursor_positions, Input.is_key_pressed(KEY_CONTROL)
edited_cells_text, edit_cursor_positions, ctrl_pressed
))
get_tree().set_input_as_handled() # Because this is one dangerous action.
get_viewport().set_input_as_handled() # Because this is one dangerous action
# And finally, text typing.
elif event.unicode != 0 and event.unicode != 127:
@ -637,13 +639,15 @@ func _key_specific_action(event : InputEvent):
func _move_selection_on_grid(move_h : int, move_v : int):
var cell = edited_cells[0]
grab_focus()
deselect_all_cells()
select_cell(
get_node(path_table_root).get_child(
edited_cells[0].get_position_in_parent()
node_table_root.get_child(
cell.get_index()
+ move_h + move_v * columns.size()
)
)
deselect_cell(edited_cells[0])
func set_cell(cell, value):
@ -657,12 +661,16 @@ func set_cell(cell, value):
func _update_resources(update_rows : Array, update_cells : Array, update_column : int, values : Array):
for i in update_rows.size():
column_editors[update_column].set_value(update_cells[i], values[i])
values[i] = _try_convert(values[i], column_types[update_column])
if values[i] is String:
print(values[i])
values[i] = _try_convert(values[i], column_types[update_column])
if values[i] == null:
continue
update_rows[i].set(columns[update_column], convert(values[i], column_types[update_column]))
ResourceSaver.save(update_rows[i].resource_path, update_rows[i])
update_rows[i].set(columns[update_column], values[i])
ResourceSaver.save(update_rows[i])
if column_types[update_column] == TYPE_COLOR:
for j in columns.size() - update_column:
if j != 0 and column_types[j + update_column] == TYPE_COLOR:
@ -728,7 +736,8 @@ func _on_ProcessExpr_text_entered(new_text : String):
func _on_inspector_property_edited(property : String):
if !visible: return
if inspector_resource == null: return
if undo_redo_version > editor_plugin.undo_redo.get_version(): return
undo_redo_version = my_undo_redo.get_version()
var value = inspector_resource.get(property)
var values = []
@ -744,7 +753,19 @@ func _on_inspector_property_edited(property : String):
var index := 0
for i in previously_edited.size():
index = _get_cell_row(previously_edited[i]) * columns.size() + new_column
_add_cell_to_selection(get_node(path_table_root).get_child(index))
_add_cell_to_selection(node_table_root.get_child(index))
await get_tree().process_frame
set_edited_cells_values(values)
_try_open_docks(edited_cells[0])
for i in edited_cells.size():
set_cell(edited_cells[i], values[i])
func _on_File_pressed():
node_folder_path.get_parent().get_parent().visible = !node_folder_path.get_parent().get_parent().visible
func _on_SearchProcess_pressed():
$"HeaderContentSplit/VBoxContainer/Search".visible = !$"HeaderContentSplit/VBoxContainer/Search".visible

View File

@ -0,0 +1,731 @@
[gd_scene load_steps=20 format=3 uid="uid://dpdgrocww8a51"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_view.gd" id="1"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_cells/cell_editor_string.gd" id="2"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_cells/cell_editor_color.gd" id="3"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_icon_button.gd" id="4"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_cells/cell_editor_bool.gd" id="5"]
[ext_resource type="PackedScene" uid="uid://bvafuebbwx7yl" path="res://addons/resources_spreadsheet_view/table_header.tscn" id="6"]
[ext_resource type="PackedScene" uid="uid://b3a3bo6cfyh5t" path="res://addons/resources_spreadsheet_view/typed_editors/dock_color.tscn" id="7"]
[ext_resource type="PackedScene" path="res://addons/resources_spreadsheet_view/typed_editors/dock_number.tscn" id="8"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_cells/cell_editor_resource.gd" id="9"]
[ext_resource type="PackedScene" uid="uid://rww3gpl052bn" path="res://addons/resources_spreadsheet_view/typed_editors/dock_texture.tscn" id="10"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_color_setter.gd" id="10_b87c7"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_cells/cell_editor_array.gd" id="11"]
[ext_resource type="PackedScene" uid="uid://c3a2cip8ffccv" path="res://addons/resources_spreadsheet_view/typed_editors/dock_array.tscn" id="12"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_cells/cell_editor_enum.gd" id="13"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/settings_grid.gd" id="14"]
[sub_resource type="Gradient" id="Gradient_8kp6w"]
offsets = PackedFloat32Array(0, 0.995413, 1)
colors = PackedColorArray(1, 1, 1, 0.490196, 1, 1, 1, 0.0458716, 1, 1, 1, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_18il8"]
gradient = SubResource("Gradient_8kp6w")
[sub_resource type="Image" id="Image_7onqo"]
data = {
"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),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id="ImageTexture_5qo8i"]
image = SubResource("Image_7onqo")
[node name="Control" type="MarginContainer" node_paths=PackedStringArray("node_folder_path", "node_recent_paths", "node_table_root", "node_property_editors", "node_columns")]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
focus_neighbor_left = NodePath(".")
focus_neighbor_top = NodePath(".")
focus_neighbor_right = NodePath(".")
focus_neighbor_bottom = NodePath(".")
focus_next = NodePath(".")
focus_previous = NodePath(".")
focus_mode = 2
theme_override_constants/margin_left = 3
theme_override_constants/margin_right = 3
theme_override_constants/margin_bottom = 5
script = ExtResource("1")
table_header_scene = ExtResource("6")
cell_editor_classes = [ExtResource("13"), ExtResource("11"), ExtResource("3"), ExtResource("5"), ExtResource("9"), ExtResource("2")]
node_folder_path = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Path")
node_recent_paths = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/RecentPaths")
node_table_root = NodePath("HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer/TableGrid")
node_property_editors = NodePath("HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors")
node_columns = NodePath("HeaderContentSplit/VBoxContainer/Columns/Columns")
metadata/_edit_lock_ = true
[node name="HeaderContentSplit" type="VBoxContainer" parent="."]
layout_mode = 2
offset_left = 3.0
offset_right = 1149.0
offset_bottom = 643.0
[node name="VBoxContainer" type="VBoxContainer" parent="HeaderContentSplit"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 108.0
[node name="MenuStrip" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 31.0
[node name="File" type="Button" parent="HeaderContentSplit/VBoxContainer/MenuStrip"]
layout_mode = 2
offset_right = 35.0
offset_bottom = 31.0
tooltip_text = "Settings"
focus_mode = 0
toggle_mode = true
button_pressed = true
text = "File"
flat = true
[node name="SearchProcess" type="Button" parent="HeaderContentSplit/VBoxContainer/MenuStrip"]
layout_mode = 2
offset_left = 39.0
offset_right = 153.0
offset_bottom = 31.0
tooltip_text = "Settings"
focus_mode = 0
toggle_mode = true
text = "Filter/Process"
flat = true
[node name="Settings" type="Button" parent="HeaderContentSplit/VBoxContainer/MenuStrip"]
layout_mode = 2
offset_left = 157.0
offset_right = 227.0
offset_bottom = 31.0
tooltip_text = "Settings"
focus_mode = 0
text = "Settings"
flat = true
[node name="Info" type="Button" parent="HeaderContentSplit/VBoxContainer/MenuStrip"]
layout_mode = 2
offset_left = 231.0
offset_right = 286.0
offset_bottom = 31.0
focus_mode = 0
text = "About"
flat = true
[node name="HBoxContainer" type="HSplitContainer" parent="HeaderContentSplit/VBoxContainer"]
layout_mode = 2
offset_top = 35.0
offset_right = 1146.0
offset_bottom = 66.0
split_offset = -249
[node name="HBoxContainer" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_right = 885.0
offset_bottom = 31.0
size_flags_horizontal = 3
theme_override_constants/separation = 0
[node name="ColorRect4" type="ColorRect" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
modulate = Color(0, 0, 0, 1)
custom_minimum_size = Vector2i(6, 18)
layout_mode = 2
offset_right = 6.0
offset_bottom = 31.0
script = ExtResource("10_b87c7")
[node name="TextureRect" type="TextureRect" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/ColorRect4"]
layout_mode = 1
anchors_preset = 11
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = 48.0
grow_horizontal = 0
grow_vertical = 2
texture = SubResource("GradientTexture2D_18il8")
ignore_texture_size = true
[node name="ColorRect3" type="Control" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2i(2, 0)
layout_mode = 2
anchors_preset = 0
offset_left = 6.0
offset_right = 8.0
offset_bottom = 31.0
[node name="Label" type="Label" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 8.0
offset_top = 2.0
offset_right = 137.0
offset_bottom = 28.0
text = "Resource Folder:"
[node name="Path" type="LineEdit" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
offset_left = 137.0
offset_right = 837.0
offset_bottom = 31.0
size_flags_horizontal = 3
caret_blink = true
[node name="SelectDir" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 837.0
offset_right = 861.0
offset_bottom = 31.0
tooltip_text = "Open Folder"
icon = SubResource("ImageTexture_5qo8i")
script = ExtResource("4")
icon_name = "Folder"
[node name="DeletePath" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 861.0
offset_right = 885.0
offset_bottom = 31.0
tooltip_text = "Remove Path from Recent"
icon = SubResource("ImageTexture_5qo8i")
script = ExtResource("4")
icon_name = "Remove"
[node name="HBoxContainer2" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 897.0
offset_right = 1146.0
offset_bottom = 31.0
[node name="Label2" type="Label" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2"]
layout_mode = 2
offset_top = 2.0
offset_right = 104.0
offset_bottom = 28.0
text = "Open Recent:"
[node name="RecentPaths" type="OptionButton" parent="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2"]
unique_name_in_owner = true
layout_mode = 2
offset_left = 108.0
offset_right = 249.0
offset_bottom = 31.0
size_flags_horizontal = 3
clip_text = true
fit_to_longest_item = false
[node name="Search" type="VBoxContainer" parent="HeaderContentSplit/VBoxContainer"]
visible = false
layout_mode = 2
offset_top = 70.0
offset_right = 1146.0
offset_bottom = 127.0
theme_override_constants/separation = 0
[node name="HBoxContainer" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/Search"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 26.0
[node name="ColorRect4" type="ColorRect" parent="HeaderContentSplit/VBoxContainer/Search/HBoxContainer"]
modulate = Color(0, 0, 0, 1)
custom_minimum_size = Vector2i(6, 18)
layout_mode = 2
offset_right = 6.0
offset_bottom = 26.0
size_flags_vertical = 5
script = ExtResource("10_b87c7")
[node name="TextureRect" type="TextureRect" parent="HeaderContentSplit/VBoxContainer/Search/HBoxContainer/ColorRect4"]
layout_mode = 1
anchors_preset = 11
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = 48.0
grow_horizontal = 0
grow_vertical = 2
texture = SubResource("GradientTexture2D_18il8")
ignore_texture_size = true
[node name="Label" type="Label" parent="HeaderContentSplit/VBoxContainer/Search/HBoxContainer"]
layout_mode = 2
offset_left = 10.0
offset_right = 219.0
offset_bottom = 26.0
text = "GDScript Filter and Process"
[node name="HSeparator" type="HSeparator" parent="HeaderContentSplit/VBoxContainer/Search/HBoxContainer"]
layout_mode = 2
offset_left = 223.0
offset_right = 1146.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Search" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/Search"]
layout_mode = 2
offset_top = 26.0
offset_right = 1146.0
offset_bottom = 57.0
[node name="ColorRect2" type="ColorRect" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
modulate = Color(0, 0, 0, 1)
custom_minimum_size = Vector2i(6, 18)
layout_mode = 2
offset_right = 6.0
offset_bottom = 31.0
size_flags_vertical = 5
script = ExtResource("10_b87c7")
[node name="TextureRect" type="TextureRect" parent="HeaderContentSplit/VBoxContainer/Search/Search/ColorRect2"]
layout_mode = 1
anchors_preset = 11
anchor_left = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = 48.0
grow_horizontal = 0
grow_vertical = 2
texture = SubResource("GradientTexture2D_18il8")
ignore_texture_size = true
[node name="Label" type="Label" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 10.0
offset_top = 2.0
offset_right = 90.0
offset_bottom = 28.0
text = "Condition:"
[node name="Label2" type="Label" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 94.0
offset_top = 2.0
offset_right = 112.0
offset_bottom = 28.0
tooltip_text = "Enter an expression. The table only show rows where the expression returns `true`.
You can use `res.<property_name>` to get a property, and `index` to get row number. Hit ENTER to run the search.
Try out these:
- (res.number_property > 0 and res.number_property < 100)
- (res.text_property != \\\"\\\")
- (\\\"a\\\" in res.text_property)
- (index < 5)"
mouse_filter = 0
mouse_default_cursor_shape = 16
text = "(?)"
[node name="SearchCond" type="LineEdit" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 116.0
offset_right = 580.0
offset_bottom = 31.0
size_flags_horizontal = 3
text = "true"
[node name="VSeparator" type="VSeparator" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 584.0
offset_right = 588.0
offset_bottom = 31.0
[node name="Label3" type="Label" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 592.0
offset_top = 2.0
offset_right = 656.0
offset_bottom = 28.0
text = "Process:"
[node name="Label4" type="Label" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 660.0
offset_top = 2.0
offset_right = 678.0
offset_bottom = 28.0
tooltip_text = "Enter an expression. The values in selected cells will be replaced with calculated new values.
You can use `value` to get the cell's value, `res.<property_name>` to get a property, `row_index` to get row number
and `cell_index` to get the cell's selection order. Hit ENTER to run the search.
These are some valid expressions:
- (res.property1 + res.property2)
- (res.property1.replace(\\\"old_string\\\", \\\"new_string\\\"))
- (load(\\\"res://path/to_resource.tres\\\"))
Don't forget quotation marks on strings and str() on non-strings."
mouse_filter = 0
mouse_default_cursor_shape = 16
text = "(?)"
[node name="ProcessExpr" type="LineEdit" parent="HeaderContentSplit/VBoxContainer/Search/Search"]
layout_mode = 2
offset_left = 682.0
offset_right = 1146.0
offset_bottom = 31.0
size_flags_horizontal = 3
[node name="HBoxContainer3" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer"]
layout_mode = 2
offset_top = 70.0
offset_right = 1146.0
offset_bottom = 96.0
[node name="Label" type="Label" parent="HeaderContentSplit/VBoxContainer/HBoxContainer3"]
layout_mode = 2
offset_right = 33.0
offset_bottom = 26.0
text = "Grid"
[node name="Refresh" type="Button" parent="HeaderContentSplit/VBoxContainer/HBoxContainer3"]
layout_mode = 2
offset_left = 37.0
offset_right = 61.0
offset_bottom = 26.0
tooltip_text = "Refresh"
icon = SubResource("ImageTexture_5qo8i")
script = ExtResource("4")
icon_name = "Loop"
[node name="HSeparator" type="HSeparator" parent="HeaderContentSplit/VBoxContainer/HBoxContainer3"]
layout_mode = 2
offset_left = 65.0
offset_right = 1146.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Sep" type="Control" parent="HeaderContentSplit/VBoxContainer"]
layout_mode = 2
anchors_preset = 0
offset_top = 100.0
offset_right = 1146.0
offset_bottom = 100.0
[node name="Columns" type="Control" parent="HeaderContentSplit/VBoxContainer"]
clip_contents = true
layout_mode = 2
anchors_preset = 0
offset_top = 104.0
offset_right = 1146.0
offset_bottom = 104.0
[node name="Columns" type="HBoxContainer" parent="HeaderContentSplit/VBoxContainer/Columns"]
layout_mode = 0
theme_override_constants/separation = 0
[node name="Sep2" type="Control" parent="HeaderContentSplit/VBoxContainer"]
layout_mode = 2
anchors_preset = 0
offset_top = 108.0
offset_right = 1146.0
offset_bottom = 108.0
[node name="MarginContainer" type="MarginContainer" parent="HeaderContentSplit"]
layout_mode = 2
offset_top = 112.0
offset_right = 1146.0
offset_bottom = 643.0
size_flags_horizontal = 3
size_flags_vertical = 3
mouse_filter = 2
[node name="FooterContentSplit" type="VBoxContainer" parent="HeaderContentSplit/MarginContainer"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 531.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="Panel" type="MarginContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 527.0
size_flags_vertical = 3
mouse_filter = 2
[node name="Panel" type="Panel" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 527.0
[node name="Scroll" type="ScrollContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel"]
layout_mode = 2
offset_right = 1146.0
offset_bottom = 527.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="MarginContainer" type="MarginContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll"]
layout_mode = 2
[node name="TableGrid" type="GridContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer"]
layout_mode = 2
theme_override_constants/h_separation = 0
theme_override_constants/v_separation = 0
[node name="Label" type="Label" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Panel"]
self_modulate = Color(1, 1, 1, 0.498039)
layout_mode = 2
offset_right = 1146.0
offset_bottom = 527.0
size_flags_horizontal = 3
size_flags_vertical = 3
text = "No folder selected!
Please select a folder to edit using the text field or Open button above.
Then, Shift+Click or Ctrl+Click cells to edit them using the keyboard,
Inspector dock or this screen's bottom panels.
To find out keybindings available, open the \"About\" menu."
horizontal_alignment = 1
vertical_alignment = 1
[node name="Footer" type="VBoxContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit"]
layout_mode = 2
offset_top = 531.0
offset_right = 1146.0
offset_bottom = 531.0
[node name="PropertyEditors" type="VBoxContainer" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer"]
unique_name_in_owner = true
layout_mode = 2
offset_right = 1146.0
[node name="EditArray" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource("12")]
visible = false
layout_mode = 2
[node name="EditColor" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource("7")]
visible = false
layout_mode = 2
anchors_preset = 0
grow_horizontal = 1
[node name="EditNumber" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource("8")]
visible = false
layout_mode = 2
offset_bottom = 126.0
grow_horizontal = 2
[node name="EditTexture" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource("10")]
visible = false
layout_mode = 2
offset_bottom = 286.0
[node name="Control" type="Control" parent="."]
layout_mode = 2
anchors_preset = 0
offset_left = 3.0
offset_right = 1149.0
offset_bottom = 643.0
mouse_filter = 2
[node name="FileDialog" type="FileDialog" parent="Control"]
title = "Open"
size = Vector2i(1168, 630)
popup_window = true
ok_button_text = "Select Current Folder"
mode_overrides_title = false
file_mode = 2
[node name="Control" type="Control" parent="Control/FileDialog"]
custom_minimum_size = Vector2i(1152, 573)
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = 8.0
offset_bottom = -67.0
grow_horizontal = 2
grow_vertical = 2
auto_translate = false
mouse_filter = 2
[node name="Info" type="AcceptDialog" parent="Control"]
title = "About"
size = Vector2i(1000, 500)
popup_window = true
[node name="MarginContainer" type="MarginContainer" parent="Control/Info"]
custom_minimum_size = Vector2i(1000, 500)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = -144.0
offset_bottom = -140.0
grow_horizontal = 2
grow_vertical = 2
[node name="Panel" type="Panel" parent="Control/Info/MarginContainer"]
layout_mode = 2
offset_right = 1000.0
offset_bottom = 500.0
[node name="RichTextLabel" type="RichTextLabel" parent="Control/Info/MarginContainer"]
layout_mode = 2
offset_right = 1000.0
offset_bottom = 500.0
bbcode_enabled = true
text = "Edit Resources as Spreadsheet
\"Welp, it is what it sounds like!\"
Possible inputs:
- Ctrl + Click / Cmd + Click - Select multiple cells in one column
- Shift + Click - Select all cells between A and B in one column
- Left/Right - Move cursor along cell text
- Backspace/Delete - Erase text Left / Right from cursor
- Home/End - Move cursor to start/end of cell
- Ctrl + <move/erase> / Cmd + <move/erase> - Move through / Erase whole word
- Ctrl/Cmd + C/V - Copy cells / Paste text into cells
- Ctrl/Cmd + (Shift) + Z - The Savior
If clipboard contains as many lines as there are cells selected, each line is pasted into a separate cell.
Made by Don Tnowe. 2022.
https://twitter.com/don_tnowe
Issues and contribution:
https://github.com/don-tnowe/godot-resources-as-sheets-plugin"
[node name="Settings" type="AcceptDialog" parent="Control"]
title = "Settings"
size = Vector2i(600, 320)
popup_window = true
[node name="MarginContainer" type="ScrollContainer" parent="Control/Settings"]
custom_minimum_size = Vector2i(600, 320)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = -556.0
offset_bottom = -377.0
grow_horizontal = 2
grow_vertical = 2
[node name="RichTextLabel" type="VBoxContainer" parent="Control/Settings/MarginContainer"]
layout_mode = 2
offset_right = 600.0
offset_bottom = 320.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="GridContainer" type="GridContainer" parent="Control/Settings/MarginContainer/RichTextLabel"]
layout_mode = 2
offset_right = 588.0
offset_bottom = 192.0
columns = 2
script = ExtResource("14")
[node name="Label" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_top = 2.0
offset_right = 501.0
offset_bottom = 28.0
size_flags_horizontal = 3
text = "Color-type cells style rows"
autowrap_mode = 2
[node name="ColorRows" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_left = 505.0
offset_right = 588.0
offset_bottom = 31.0
button_pressed = true
text = "Enable"
[node name="Label2" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_top = 37.0
offset_right = 501.0
offset_bottom = 63.0
size_flags_horizontal = 3
text = "Colored array elements"
autowrap_mode = 2
[node name="ColorArrays" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_left = 505.0
offset_top = 35.0
offset_right = 588.0
offset_bottom = 66.0
button_pressed = true
text = "Enable"
[node name="Label3" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_top = 72.0
offset_right = 501.0
offset_bottom = 98.0
size_flags_horizontal = 3
text = "Array cell min width"
autowrap_mode = 2
[node name="ArrayMinWidth" type="SpinBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_left = 505.0
offset_top = 70.0
offset_right = 588.0
offset_bottom = 101.0
min_value = 32.0
max_value = 512.0
value = 128.0
[node name="Label4" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_top = 105.0
offset_right = 501.0
offset_bottom = 157.0
size_flags_horizontal = 3
text = "Clip header text (more compact view but header text wont be fully visible) (restart when switching)"
autowrap_mode = 2
[node name="ClipHeaders" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_left = 505.0
offset_top = 105.0
offset_right = 588.0
offset_bottom = 157.0
button_pressed = true
text = "Enable"
[node name="Label5" type="Label" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_top = 163.0
offset_right = 501.0
offset_bottom = 189.0
size_flags_horizontal = 3
text = "Duplicate arrays on edit (slower, but can be undone)"
autowrap_mode = 2
[node name="DupeArrays" type="CheckBox" parent="Control/Settings/MarginContainer/RichTextLabel/GridContainer"]
layout_mode = 2
offset_left = 505.0
offset_top = 161.0
offset_right = 588.0
offset_bottom = 192.0
button_pressed = true
text = "Enable"
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/MenuStrip/File" to="." method="_on_File_pressed"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/MenuStrip/SearchProcess" to="." method="_on_SearchProcess_pressed"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/MenuStrip/Settings" to="Control/Settings" method="popup_centered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/MenuStrip/Info" to="Control/Info" method="popup_centered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/SelectDir" to="Control/FileDialog" method="popup_centered"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/DeletePath" to="." method="remove_selected_path_from_recent"]
[connection signal="item_selected" from="HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer2/RecentPaths" to="." method="_on_RecentPaths_item_selected"]
[connection signal="pressed" from="HeaderContentSplit/VBoxContainer/HBoxContainer3/Refresh" to="." method="_on_Path_text_entered"]
[connection signal="dir_selected" from="Control/FileDialog" to="." method="_on_FileDialog_dir_selected"]

View File

@ -5,5 +5,5 @@ description="Edit Many Resources from one Folder as a table.
Heavily inspired by Multi-Cursor-Editing in text editors, so after selecting multiple cells (in the same column!) using Ctrl+Click or Shift+Click, most Basic-to-Intermediate movements should be available."
author="Don Tnowe"
version="1.4.1"
version="2.0"
script="plugin.gd"

View File

@ -1,17 +1,17 @@
tool
@tool
extends EditorPlugin
var editor_view : Control
var undo_redo : UndoRedo
var undo_redo : EditorUndoRedoManager
func _enter_tree() -> void:
editor_view = load(get_script().resource_path.get_base_dir() + "/editor_view.tscn").instance()
editor_view = load(get_script().resource_path.get_base_dir() + "/editor_view.tscn").instantiate()
editor_view.editor_interface = get_editor_interface()
editor_view.editor_plugin = self
undo_redo = get_undo_redo()
get_editor_interface().get_editor_viewport().add_child(editor_view)
make_visible(false)
get_editor_interface().get_editor_main_screen().add_child(editor_view)
_make_visible(false)
func _exit_tree() -> void:
@ -19,21 +19,21 @@ func _exit_tree() -> void:
editor_view.queue_free()
func get_plugin_name():
func _get_plugin_name():
return "Sheets"
func make_visible(visible):
func _make_visible(visible):
if is_instance_valid(editor_view):
editor_view.visible = visible
if visible:
editor_view.display_folder(editor_view.current_path)
func has_main_screen():
func _has_main_screen():
return true
func get_plugin_icon():
func _get_plugin_icon():
# Until I add an actual icon, this'll do.
return get_editor_interface().get_base_control().get_icon("VisualScriptComment", "EditorIcons")
return get_editor_interface().get_base_control().get_theme_icon("GridContainer", "EditorIcons")

View File

@ -0,0 +1 @@
{"recent_paths":["res://example/Random Upgrades/upgrades"]}

View File

@ -0,0 +1,41 @@
@tool
class_name SettingsGrid
extends GridContainer
const SETTING_PREFIX = "addons/resources_spreadsheet_view/"
func _ready():
for x in get_children():
var setting = SETTING_PREFIX + camel_case_to_snake_case(x.name)
if x is BaseButton:
x.toggled.connect(_set_setting.bind(setting))
if !ProjectSettings.has_setting(setting):
_set_setting(x.button_pressed, setting)
else:
x.button_pressed = ProjectSettings.get_setting(setting)
elif x is Range:
x.value_changed.connect(_set_setting.bind(setting))
if !ProjectSettings.has_setting(setting):
_set_setting(x.value, setting)
else:
x.value = ProjectSettings.get_setting(setting)
static func camel_case_to_snake_case(string : String) -> String:
var i = 0
while i < string.length():
if string.unicode_at(i) < 97:
string = string.left(i) + ("_" if i > 0 else "") + string[i].to_lower() + string.substr(i + 1)
i += 1
i += 1
return string
func _set_setting(new_value, setting):
ProjectSettings.set_setting(setting, new_value)

View File

@ -0,0 +1,23 @@
[gd_scene format=3 uid="uid://bvafuebbwx7yl"]
[node name="Header" type="HBoxContainer"]
offset_bottom = 31.0
grow_horizontal = 2
size_flags_horizontal = 3
theme_override_constants/separation = 0
[node name="Button" type="Button" parent="."]
layout_mode = 2
offset_right = 8.0
offset_bottom = 31.0
size_flags_horizontal = 3
size_flags_vertical = 0
text = "resource_name"
clip_text = true
[node name="Button2" type="Button" parent="."]
layout_mode = 2
offset_left = 8.0
offset_right = 38.0
offset_bottom = 31.0
text = "|| "

View File

@ -1,26 +1,26 @@
class_name TextEditingUtils
extends Reference
extends RefCounted
const non_typing_paragraph := ""
const non_typing_space := ""
const whitespace_chars := [
ord(" "),
ord(","),
ord(":"),
ord("-"),
ord(";"),
ord("("),
ord(")"),
ord("."),
ord(non_typing_paragraph),
ord(non_typing_space),
32, # " "
44, # ","
58, # ":"
45, # "-"
59, # ";"
40, # "("
41, # ")"
46, # "."
182, # "¶" Linefeed
967, # "●" Whitespace
]
static func is_character_whitespace(text : String, idx : int) -> bool:
if idx <= 0: return true # Stop at the edges.
if idx >= text.length(): return true
return text.ord_at(idx) in whitespace_chars
return text.unicode_at(idx) in whitespace_chars
static func show_non_typing(text : String) -> String:
@ -89,7 +89,7 @@ static func multi_move_right(values : Array, cursor_positions : Array, ctrl_pres
static func multi_paste(values : Array, cursor_positions : Array):
var pasted_lines := OS.clipboard.split("\n")
var pasted_lines := DisplayServer.clipboard_get().split("\n")
var paste_each_line := pasted_lines.size() == values.size()
for i in values.size():
@ -112,7 +112,7 @@ static func multi_copy(values : Array):
for i in values.size():
values[i] = values[i]
OS.clipboard = "\n".join(values)
DisplayServer.clipboard_set("\n".join(values))
static func multi_input(input_char : String, values : Array, cursor_positions : Array):

View File

@ -0,0 +1,33 @@
[gd_scene format=3 uid="uid://cmy06m1kg5ukf"]
[node name="Label" type="MarginContainer"]
custom_minimum_size = Vector2i(80, 32)
size_flags_vertical = 9
mouse_filter = 0
[node name="Box" type="HFlowContainer" parent="."]
layout_mode = 2
offset_right = 80.0
offset_bottom = 32.0
mouse_filter = 2
[node name="Back" type="LineEdit" parent="."]
show_behind_parent = true
layout_mode = 2
offset_right = 80.0
offset_bottom = 32.0
focus_mode = 0
mouse_filter = 2
editable = false
expand_to_text_length = true
context_menu_enabled = false
virtual_keyboard_enabled = false
caret_blink = true
[node name="Selected" type="ColorRect" parent="."]
visible = false
layout_mode = 2
offset_right = 80.0
offset_bottom = 32.0
mouse_filter = 2
color = Color(1, 1, 1, 0.247059)

View File

@ -0,0 +1,29 @@
[gd_scene format=3 uid="uid://cf55cbb2buavn"]
[node name="Label" type="Label"]
custom_minimum_size = Vector2i(80, 32)
size_flags_vertical = 9
mouse_filter = 0
[node name="Back" type="LineEdit" parent="."]
show_behind_parent = true
layout_mode = 1
anchors_preset = 15
grow_horizontal = 2
grow_vertical = 2
focus_mode = 0
mouse_filter = 2
editable = false
expand_to_text_length = true
context_menu_enabled = false
virtual_keyboard_enabled = false
caret_blink = true
[node name="Selected" type="ColorRect" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
color = Color(1, 1, 1, 0.247059)

View File

@ -0,0 +1,32 @@
class_name CellEditor
extends RefCounted
const CELL_SCENE_DIR = "res://addons/resources_spreadsheet_view/typed_cells/"
var hint_strings_array := []
## Override to define where the cell should be shown.
func can_edit_value(value, type, property_hint) -> bool:
return value != null
## Override to change how the cell is created; preload a scene or create nodes from code.
## Caller is an instance of `editor_view.tscn`.
func create_cell(caller : Control) -> Control:
return load(CELL_SCENE_DIR + "basic.tscn").instantiate()
## Override to change behaviour when the cell is clicked to be selected.
func set_selected(node : Control, selected : bool):
node.get_node("Selected").visible = selected
## Override to change how the value is displayed.
func set_value(node : Control, value):
node.text = TextEditingUtils.show_non_typing(str(value))
## Override to prevent the cell from being edited as text.
func is_text():
return true
## Override to change behaviour when the cell's color changes.
func set_color(node : Control, color : Color):
node.get_node("Back").modulate = color * 1.0

View File

@ -2,16 +2,16 @@ extends CellEditor
func can_edit_value(value, type, property_hint) -> bool:
return type == TYPE_STRING_ARRAY || type == TYPE_ARRAY
return type == TYPE_PACKED_STRING_ARRAY || type == TYPE_ARRAY
func create_cell(caller : Control) -> Control:
return load(CELL_SCENE_DIR + "array.tscn").instance()
return load(CELL_SCENE_DIR + "array.tscn").instantiate()
func set_value(node : Control, value):
var children = node.get_node("Box").get_children()
node.rect_min_size.x = ProjectSettings.get_setting(SettingsGrid.SETTING_PREFIX + "array_min_width")
node.custom_minimum_size.x = ProjectSettings.get_setting(SettingsGrid.SETTING_PREFIX + "array_min_width")
var colored = ProjectSettings.get_setting(SettingsGrid.SETTING_PREFIX + "color_arrays")
while children.size() < value.size():
children.append(Label.new())
@ -24,7 +24,9 @@ func set_value(node : Control, value):
else:
children[i].visible = true
children[i].text = str(value[i])
children[i].self_modulate = Color.white if !colored else Color(str(value[i]).hash()) + Color(0.25, 0.25, 0.25, 1.0)
children[i].self_modulate = \
Color.WHITE if !colored else \
Color(str(value[i]).hash()) + Color(0.25, 0.25, 0.25, 1.0)
func is_text():

View File

@ -0,0 +1,36 @@
extends CellEditor
var _cached_color := Color.WHITE
func create_cell(caller : Control) -> Control:
var node : Label = load(CELL_SCENE_DIR + "basic.tscn").instantiate()
var color := ColorRect.new()
node.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT
node.custom_minimum_size.x = 56
node.add_child(color)
color.name = "Color"
call_deferred("_resize_color_rect", color)
return node
func _resize_color_rect(rect : ColorRect):
rect.size = Vector2(8, 0)
rect.anchors_preset = Control.PRESET_LEFT_WIDE
await rect.get_tree().process_frame
rect.size.x = 8
func can_edit_value(value, type, property_hint) -> bool:
return type == TYPE_COLOR
func set_value(node : Control, value):
if value is String:
node.text = TextEditingUtils.show_non_typing(str(value))
else:
node.text = value.to_html(true)
_cached_color = value
node.get_node("Color").color = value

View File

@ -6,9 +6,9 @@ func can_edit_value(value, type, property_hint) -> bool:
func set_value(node : Control, value):
node.text = "<" + hint_strings_array[node.get_position_in_parent() % node.get_parent().columns][value] + ">"
node.text = "<" + hint_strings_array[node.get_index() % node.get_parent().columns][value] + ">"
node.self_modulate = Color(node.text.hash()) + Color(0.25, 0.25, 0.25, 1.0)
node.align = Label.ALIGN_CENTER
node.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
func is_text():

View File

@ -11,7 +11,7 @@ func create_cell(caller : Control) -> Control:
if previewer == null:
previewer = caller.editor_plugin.get_editor_interface().get_resource_previewer()
var node = load(CELL_SCENE_DIR + "resource.tscn").instance()
var node = load(CELL_SCENE_DIR + "resource.tscn").instantiate()
return node
@ -24,14 +24,14 @@ func set_value(node : Control, value):
if !value is Resource: return
node.editor_description = value.resource_path
node.get_node("Box/Label").text = value.resource_name + "[" + value.resource_path.get_file().get_basename() + "]"
node.get_node("Box/Label").text = "[" + value.resource_path.get_file().get_basename() + "]"
if value is Texture:
node.get_node("Box/Tex").visible = true
node.get_node("Box/Tex").texture = value
else:
node.get_node("Box/Tex").visible = false
previewer.queue_resource_preview(value.resource_path, self, "_on_preview_loaded", node)
previewer.queue_resource_preview(value.resource_path, self, &"_on_preview_loaded", node)
func set_color(node : Control, color : Color):

View File

@ -0,0 +1,55 @@
[gd_scene load_steps=2 format=3 uid="uid://c883vslpx6ajp"]
[ext_resource type="Texture2D" uid="uid://c08qavfwqr3k7" path="res://icon.png" id="1"]
[node name="Label" type="MarginContainer"]
offset_right = 127.0
offset_bottom = 64.0
mouse_filter = 0
[node name="Back" type="LineEdit" parent="."]
show_behind_parent = true
layout_mode = 2
offset_right = 127.0
offset_bottom = 64.0
focus_mode = 0
mouse_filter = 2
editable = false
expand_to_text_length = true
context_menu_enabled = false
virtual_keyboard_enabled = false
caret_blink = true
[node name="Selected" type="ColorRect" parent="."]
visible = false
layout_mode = 2
offset_right = 127.0
offset_bottom = 64.0
mouse_filter = 2
color = Color(1, 1, 1, 0.247059)
[node name="Box" type="HBoxContainer" parent="."]
layout_mode = 2
offset_right = 127.0
offset_bottom = 64.0
mouse_filter = 2
[node name="Tex" type="TextureRect" parent="Box"]
custom_minimum_size = Vector2i(64, 64)
layout_mode = 2
offset_right = 64.0
offset_bottom = 64.0
mouse_filter = 2
texture = ExtResource("1")
ignore_texture_size = true
stretch_mode = 5
[node name="Label" type="Label" parent="Box"]
layout_mode = 2
offset_left = 68.0
offset_top = 19.0
offset_right = 127.0
offset_bottom = 45.0
size_flags_horizontal = 3
text = "res.tres"
horizontal_alignment = 1

View File

@ -1,16 +1,17 @@
tool
@tool
extends SheetsDockEditor
onready var recent_container := $"HBoxContainer/Control2/HBoxContainer/HFlowContainer"
onready var contents_label := $"HBoxContainer/HBoxContainer/Panel/Label"
onready var button_box := $"HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"
onready var value_input := $"HBoxContainer/HBoxContainer/Control/VBoxContainer/LineEdit"
@onready var recent_container := $"HBoxContainer/Control2/HBoxContainer/HFlowContainer"
@onready var contents_label := $"HBoxContainer/HBoxContainer/Panel/Label"
@onready var button_box := $"HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"
@onready var value_input := $"HBoxContainer/HBoxContainer/Control/VBoxContainer/LineEdit"
var _stored_value
var _stored_type := 0
func _ready():
super._ready()
if recent_container.get_child(1).get_item_count() < 3:
recent_container.get_child(1).add_item("Add")
recent_container.get_child(1).add_item("Erase")
@ -20,8 +21,9 @@ func _ready():
func try_edit_value(value, type, propert_hint) -> bool:
if (
type != TYPE_ARRAY and type != TYPE_STRING_ARRAY
and type != TYPE_INT_ARRAY and type != TYPE_REAL_ARRAY
type != TYPE_ARRAY and type != TYPE_PACKED_STRING_ARRAY
and type != TYPE_PACKED_INT32_ARRAY and type != TYPE_PACKED_FLOAT32_ARRAY
and type != TYPE_PACKED_INT64_ARRAY and type != TYPE_PACKED_FLOAT64_ARRAY
):
return false
@ -30,9 +32,9 @@ func try_edit_value(value, type, propert_hint) -> bool:
contents_label.text = str(value)
var is_generic_array = _stored_type == TYPE_ARRAY
button_box.get_child(1).visible = is_generic_array or _stored_type == TYPE_STRING_ARRAY
button_box.get_child(2).visible = is_generic_array or _stored_type == TYPE_INT_ARRAY
button_box.get_child(3).visible = is_generic_array or _stored_type == TYPE_REAL_ARRAY
button_box.get_child(1).visible = is_generic_array or _stored_type == TYPE_PACKED_STRING_ARRAY
button_box.get_child(2).visible = is_generic_array or _stored_type == TYPE_PACKED_INT32_ARRAY or _stored_type == TYPE_PACKED_INT64_ARRAY
button_box.get_child(3).visible = is_generic_array or _stored_type == TYPE_PACKED_FLOAT32_ARRAY or _stored_type == TYPE_PACKED_FLOAT64_ARRAY
button_box.get_child(4).visible = is_generic_array
return true
@ -55,9 +57,9 @@ func _add_value(value):
func _remove_value(value):
_stored_value.erase(value)
_stored_value.remove_at(_stored_value.find(value))
var values = sheet.get_edited_cells_values()
var cur_value
var cur_value : Array
var dupe_array : bool = ProjectSettings.get_setting(SettingsGrid.SETTING_PREFIX + "dupe_arrays")
for i in values.size():
cur_value = values[i]
@ -65,7 +67,7 @@ func _remove_value(value):
cur_value = cur_value.duplicate()
if cur_value.has(value): # erase() not defined in PoolArrays
cur_value.remove(cur_value.find(value))
cur_value.remove_at(cur_value.find(value))
values[i] = cur_value
@ -80,7 +82,7 @@ func _add_recent(value):
var node := Button.new()
node.text = str(value)
node.self_modulate = Color(value.hash()) + Color(0.25, 0.25, 0.25, 1.0)
node.connect("pressed", self, "_on_recent_clicked", [node, value])
node.pressed.connect(_on_recent_clicked.bind(node, value))
recent_container.add_child(node)
@ -98,7 +100,11 @@ func _on_recent_clicked(button, value):
func _on_Remove_pressed():
_remove_value(str2var(value_input.text))
if str_to_var(value_input.text) != null:
_remove_value(str_to_var(value_input.text))
else:
_remove_value(value_input.text)
func _on_ClearRecent_pressed():
@ -108,20 +114,21 @@ func _on_ClearRecent_pressed():
func _on_Float_pressed():
_add_value(float(value_input.text))
_add_value(value_input.text.to_float())
func _on_Int_pressed():
_add_value(int(value_input.text))
_add_value(value_input.text.to_int())
func _on_String_pressed():
if value_input.text == "": return
_add_value(value_input.text)
_add_recent(value_input.text)
func _on_Variant_pressed():
_add_value(str2var(value_input.text))
_add_value(str_to_var(value_input.text))
func _on_AddRecentFromSel_pressed():

View File

@ -0,0 +1,251 @@
[gd_scene load_steps=5 format=3 uid="uid://c3a2cip8ffccv"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_editors/dock_array.gd" id="1"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/editor_icon_button.gd" id="2"]
[sub_resource type="Image" id="Image_x42cr"]
data = {
"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),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id="ImageTexture_x5nai"]
image = SubResource("Image_x42cr")
[node name="EditArray" type="VBoxContainer"]
anchors_preset = 10
anchor_right = 1.0
offset_bottom = 91.0
grow_horizontal = 2
size_flags_vertical = 0
mouse_filter = 0
script = ExtResource("1")
[node name="Header" type="HBoxContainer" parent="."]
layout_mode = 2
offset_right = 1152.0
offset_bottom = 26.0
[node name="HBoxContainer" type="HBoxContainer" parent="Header"]
layout_mode = 2
offset_right = 506.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header/HBoxContainer"]
layout_mode = 2
offset_right = 86.0
offset_bottom = 26.0
text = "EDIT: Array"
[node name="HSeparator" type="HSeparator" parent="Header/HBoxContainer"]
layout_mode = 2
offset_left = 90.0
offset_right = 506.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
layout_mode = 2
offset_left = 510.0
offset_right = 642.0
offset_bottom = 26.0
text = "PROPERTY NAME"
[node name="HSeparator2" type="HSeparator" parent="Header"]
layout_mode = 2
offset_left = 646.0
offset_right = 1152.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HSplitContainer" parent="."]
layout_mode = 2
offset_top = 30.0
offset_right = 1152.0
offset_bottom = 91.0
split_offset = 640
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer"]
layout_mode = 2
offset_right = 640.0
offset_bottom = 61.0
alignment = 2
[node name="Panel" type="MarginContainer" parent="HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_right = 394.0
offset_bottom = 61.0
size_flags_horizontal = 3
[node name="Label" type="TextEdit" parent="HBoxContainer/HBoxContainer/Panel"]
layout_mode = 2
offset_right = 394.0
offset_bottom = 61.0
size_flags_vertical = 5
text = "[]"
[node name="VSeparator2" type="VSeparator" parent="HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 398.0
offset_right = 402.0
offset_bottom = 61.0
[node name="Control" type="MarginContainer" parent="HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 406.0
offset_right = 632.0
offset_bottom = 61.0
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/HBoxContainer/Control"]
layout_mode = 2
offset_right = 226.0
offset_bottom = 61.0
[node name="LineEdit" type="LineEdit" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer"]
layout_mode = 2
offset_right = 226.0
offset_bottom = 31.0
placeholder_text = "Input value to add/remove..."
clear_button_enabled = true
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer"]
layout_mode = 2
offset_top = 35.0
offset_right = 226.0
offset_bottom = 61.0
[node name="Label" type="Label" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_right = 35.0
offset_bottom = 26.0
text = "Add:"
[node name="String" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 39.0
offset_right = 63.0
offset_bottom = 26.0
tooltip_text = "Add String"
icon = SubResource("ImageTexture_x5nai")
script = ExtResource("2")
icon_name = "String"
[node name="Int" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 67.0
offset_right = 91.0
offset_bottom = 26.0
tooltip_text = "Add Integer"
icon = SubResource("ImageTexture_x5nai")
script = ExtResource("2")
icon_name = "int"
[node name="Float" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 95.0
offset_right = 119.0
offset_bottom = 26.0
tooltip_text = "Add Float"
icon = SubResource("ImageTexture_x5nai")
script = ExtResource("2")
icon_name = "float"
[node name="Variant" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 123.0
offset_right = 147.0
offset_bottom = 26.0
tooltip_text = "Guess Type and Add"
icon = SubResource("ImageTexture_x5nai")
script = ExtResource("2")
icon_name = "Variant"
[node name="Label2" type="Label" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 151.0
offset_right = 198.0
offset_bottom = 26.0
text = "Erase:"
[node name="Remove" type="Button" parent="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 202.0
offset_right = 226.0
offset_bottom = 26.0
tooltip_text = "Erase Value from Array"
icon = SubResource("ImageTexture_x5nai")
script = ExtResource("2")
icon_name = "Remove"
[node name="VSeparator" type="VSeparator" parent="HBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 636.0
offset_right = 640.0
offset_bottom = 61.0
[node name="Control2" type="MarginContainer" parent="HBoxContainer"]
layout_mode = 2
offset_left = 652.0
offset_right = 1152.0
offset_bottom = 61.0
size_flags_horizontal = 3
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer/Control2"]
layout_mode = 2
offset_right = 500.0
offset_bottom = 61.0
alignment = 2
[node name="VSeparator2" type="VSeparator" parent="HBoxContainer/Control2/HBoxContainer"]
layout_mode = 2
offset_right = 4.0
offset_bottom = 61.0
[node name="HFlowContainer" type="HFlowContainer" parent="HBoxContainer/Control2/HBoxContainer"]
layout_mode = 2
offset_left = 8.0
offset_right = 500.0
offset_bottom = 61.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
layout_mode = 2
offset_top = 2.0
offset_right = 58.0
offset_bottom = 28.0
text = "Recent:"
[node name="OptionButton" type="OptionButton" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
layout_mode = 2
offset_left = 62.0
offset_right = 258.0
offset_bottom = 31.0
item_count = 3
selected = 0
popup/item_0/text = "Add"
popup/item_0/id = 0
popup/item_1/text = "Erase"
popup/item_1/id = 1
popup/item_2/text = "Delete From Recent"
popup/item_2/id = 2
[node name="AddRecentFromSel" type="Button" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
layout_mode = 2
offset_left = 262.0
offset_right = 286.0
offset_bottom = 31.0
tooltip_text = "Copy Selection into this List"
icon = SubResource("ImageTexture_x5nai")
script = ExtResource("2")
icon_name = "ListSelect"
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/String" to="." method="_on_String_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Int" to="." method="_on_Int_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Float" to="." method="_on_Float_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Variant" to="." method="_on_Variant_pressed"]
[connection signal="pressed" from="HBoxContainer/HBoxContainer/Control/VBoxContainer/HBoxContainer/Remove" to="." method="_on_Remove_pressed"]
[connection signal="pressed" from="HBoxContainer/Control2/HBoxContainer/HFlowContainer/AddRecentFromSel" to="." method="_on_AddRecentFromSel_pressed"]

View File

@ -1,8 +1,8 @@
tool
@tool
class_name SheetsDockEditor
extends Control
export var path_property_name := NodePath("Header/Label")
@export var path_property_name := NodePath("Header/Label")
var sheet : Control
var selection : Array
@ -14,8 +14,8 @@ func _ready():
parent = parent.get_parent()
sheet = parent
get_node(path_property_name).add_font_override("bold", get_font("bold", "EditorFonts"))
get_node(path_property_name).add_theme_font_override("normal", get_theme_font("bold", "EditorFonts"))
# Override to define when to show the dock and, if it can edit the value, how to handle it.
## Override to define when to show the dock and, if it can edit the value, how to handle it.
func try_edit_value(value, type, property_hint) -> bool:
return true

View File

@ -1,15 +1,16 @@
tool
@tool
extends SheetsDockEditor
onready var _value_rect := $"EditColor/ColorProper/ColorRect"
onready var _color_picker_panel := $"EditColor/VSeparator6/Panel"
onready var _color_picker := $"EditColor/VSeparator6/Panel/MarginContainer/ColorPicker"
onready var _custom_value_edit := $"EditColor/CustomX/LineEdit"
@onready var _value_rect := $"EditColor/ColorProper/ColorRect"
@onready var _color_picker_panel := $"EditColor/VSeparator6/Panel"
@onready var _color_picker := $"EditColor/VSeparator6/Panel/MarginContainer/ColorPicker"
@onready var _custom_value_edit := $"EditColor/CustomX/LineEdit"
var _stored_value := Color.white
var _stored_value := Color.WHITE
func _ready():
super._ready()
_connect_buttons($"EditColor/RGBGrid", 0, 0)
_connect_buttons($"EditColor/RGBGrid", 5, 1)
_connect_buttons($"EditColor/RGBGrid", 10, 2)
@ -19,14 +20,14 @@ func _ready():
func _connect_buttons(grid, start_index, property_bind):
grid.get_child(start_index + 0).connect("pressed", self, "_increment_values_custom", [-1.0, property_bind])
grid.get_child(start_index + 1).connect("pressed", self, "_increment_values", [-10.0, property_bind])
grid.get_child(start_index + 3).connect("pressed", self, "_increment_values", [10.0, property_bind])
grid.get_child(start_index + 4).connect("pressed", self, "_increment_values_custom", [1.0, property_bind])
grid.get_child(start_index + 0).pressed.connect(_increment_values_custom.bind(-1.0, property_bind))
grid.get_child(start_index + 1).pressed.connect(_increment_values.bind(-10.0, property_bind))
grid.get_child(start_index + 3).pressed.connect(_increment_values.bind(10.0, property_bind))
grid.get_child(start_index + 4).pressed.connect(_increment_values_custom.bind(1.0, property_bind))
func try_edit_value(value, type, property_hint) -> bool:
_color_picker_panel.set_as_toplevel(false)
_color_picker_panel.top_level = false
if type != TYPE_COLOR:
return false
@ -84,22 +85,22 @@ func _increment_values_custom(multiplier : float, property : int):
# Numbered buttons increment by 5 for Sat and Value, so hue is x0.5 effect. Negate it here
multiplier *= 2.0
_increment_values(float(_custom_value_edit.text) * multiplier, property)
_increment_values(_custom_value_edit.text.to_float() * multiplier, property)
func _on_Button_pressed():
_color_picker_panel.visible = !_color_picker_panel.visible
if _color_picker_panel.visible:
_color_picker_panel.set_as_toplevel(true)
_color_picker_panel.rect_global_position = (
sheet.rect_global_position
+ Vector2(0, sheet.rect_size.y - _color_picker_panel.rect_size.y)
_color_picker_panel.top_level = true
_color_picker_panel.global_position = (
sheet.global_position
+ Vector2(0, sheet.size.y - _color_picker_panel.size.y)
+ Vector2(16, -16)
)
_color_picker_panel.rect_global_position.y = clamp(
_color_picker_panel.rect_global_position.y,
_color_picker_panel.global_position.y = clamp(
_color_picker_panel.global_position.y,
0,
sheet.editor_plugin.get_editor_interface().get_base_control().rect_size.y
sheet.editor_plugin.get_editor_interface().get_base_control().size.y
)
_color_picker.color = _stored_value

View File

@ -0,0 +1,446 @@
[gd_scene load_steps=2 format=3 uid="uid://b3a3bo6cfyh5t"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_editors/dock_color.gd" id="1"]
[node name="EditColor" type="VBoxContainer"]
anchors_preset = 10
offset_bottom = 131.0
grow_horizontal = 2
mouse_filter = 0
script = ExtResource("1")
[node name="Header" type="HBoxContainer" parent="."]
layout_mode = 2
offset_right = 1152.0
offset_bottom = 26.0
[node name="HBoxContainer" type="HBoxContainer" parent="Header"]
layout_mode = 2
offset_right = 506.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header/HBoxContainer"]
layout_mode = 2
offset_right = 85.0
offset_bottom = 26.0
text = "EDIT: Color"
[node name="HSeparator" type="HSeparator" parent="Header/HBoxContainer"]
layout_mode = 2
offset_left = 89.0
offset_right = 506.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
layout_mode = 2
offset_left = 510.0
offset_right = 642.0
offset_bottom = 26.0
text = "PROPERTY NAME"
[node name="HSeparator2" type="HSeparator" parent="Header"]
layout_mode = 2
offset_left = 646.0
offset_right = 1152.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="EditColor" type="HBoxContainer" parent="."]
layout_mode = 2
offset_top = 30.0
offset_right = 1152.0
offset_bottom = 131.0
alignment = 1
[node name="VSeparator7" type="Control" parent="EditColor"]
layout_mode = 2
anchors_preset = 0
offset_right = 200.0
offset_bottom = 101.0
size_flags_horizontal = 3
[node name="VSeparator3" type="Control" parent="EditColor"]
visible = false
layout_mode = 2
anchors_preset = 0
[node name="ButtonRowTemplate" type="Control" parent="EditColor"]
visible = false
layout_mode = 2
anchors_preset = 0
[node name="Button3" type="Button" parent="EditColor/ButtonRowTemplate"]
layout_mode = 0
text = "-X"
[node name="Button2" type="Button" parent="EditColor/ButtonRowTemplate"]
layout_mode = 0
text = "-5"
[node name="Label" type="Label" parent="EditColor/ButtonRowTemplate"]
layout_mode = 0
text = "Red"
[node name="Button5" type="Button" parent="EditColor/ButtonRowTemplate"]
layout_mode = 0
text = "+5"
[node name="Button6" type="Button" parent="EditColor/ButtonRowTemplate"]
layout_mode = 0
text = "+X"
[node name="RGBGrid" type="GridContainer" parent="EditColor"]
layout_mode = 2
offset_left = 204.0
offset_right = 388.0
offset_bottom = 101.0
columns = 5
[node name="Button3" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(1, 0.780392, 0.780392, 1)
layout_mode = 2
offset_right = 24.0
offset_bottom = 31.0
text = "-X"
[node name="Button2" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(1, 0.780392, 0.780392, 1)
layout_mode = 2
offset_left = 28.0
offset_right = 60.0
offset_bottom = 31.0
text = "-10"
[node name="Label" type="Label" parent="EditColor/RGBGrid"]
layout_mode = 2
offset_left = 64.0
offset_top = 2.0
offset_right = 112.0
offset_bottom = 28.0
text = "Red"
horizontal_alignment = 1
[node name="Button5" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(1, 0.780392, 0.780392, 1)
layout_mode = 2
offset_left = 116.0
offset_right = 152.0
offset_bottom = 31.0
text = "+10"
[node name="Button6" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(1, 0.780392, 0.780392, 1)
layout_mode = 2
offset_left = 156.0
offset_right = 184.0
offset_bottom = 31.0
text = "+X"
[node name="Button7" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.666667, 1, 0.745098, 1)
layout_mode = 2
offset_top = 35.0
offset_right = 24.0
offset_bottom = 66.0
text = "-X"
[node name="Button8" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.666667, 1, 0.745098, 1)
layout_mode = 2
offset_left = 28.0
offset_top = 35.0
offset_right = 60.0
offset_bottom = 66.0
text = "-10"
[node name="Label2" type="Label" parent="EditColor/RGBGrid"]
layout_mode = 2
offset_left = 64.0
offset_top = 37.0
offset_right = 112.0
offset_bottom = 63.0
text = "Green"
horizontal_alignment = 1
[node name="Button11" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.666667, 1, 0.745098, 1)
layout_mode = 2
offset_left = 116.0
offset_top = 35.0
offset_right = 152.0
offset_bottom = 66.0
text = "+10"
[node name="Button12" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.666667, 1, 0.745098, 1)
layout_mode = 2
offset_left = 156.0
offset_top = 35.0
offset_right = 184.0
offset_bottom = 66.0
text = "+X"
[node name="Button13" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.772549, 0.792157, 1, 1)
layout_mode = 2
offset_top = 70.0
offset_right = 24.0
offset_bottom = 101.0
text = "-X"
[node name="Button14" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.772549, 0.792157, 1, 1)
layout_mode = 2
offset_left = 28.0
offset_top = 70.0
offset_right = 60.0
offset_bottom = 101.0
text = "-10"
[node name="Label3" type="Label" parent="EditColor/RGBGrid"]
layout_mode = 2
offset_left = 64.0
offset_top = 72.0
offset_right = 112.0
offset_bottom = 98.0
text = "Blue"
horizontal_alignment = 1
[node name="Button17" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.772549, 0.792157, 1, 1)
layout_mode = 2
offset_left = 116.0
offset_top = 70.0
offset_right = 152.0
offset_bottom = 101.0
text = "+10"
[node name="Button18" type="Button" parent="EditColor/RGBGrid"]
modulate = Color(0.772549, 0.792157, 1, 1)
layout_mode = 2
offset_left = 156.0
offset_top = 70.0
offset_right = 184.0
offset_bottom = 101.0
text = "+X"
[node name="VSeparator" type="VSeparator" parent="EditColor"]
layout_mode = 2
offset_left = 392.0
offset_right = 396.0
offset_bottom = 101.0
[node name="ColorProper" type="VBoxContainer" parent="EditColor"]
layout_mode = 2
offset_left = 400.0
offset_right = 511.0
offset_bottom = 101.0
[node name="ColorRect" type="ColorRect" parent="EditColor/ColorProper"]
layout_mode = 2
offset_right = 111.0
offset_bottom = 66.0
size_flags_vertical = 3
[node name="Button" type="Button" parent="EditColor/ColorProper"]
layout_mode = 2
offset_top = 70.0
offset_right = 111.0
offset_bottom = 101.0
text = "Choose Color"
[node name="VSeparator2" type="VSeparator" parent="EditColor"]
layout_mode = 2
offset_left = 515.0
offset_right = 519.0
offset_bottom = 101.0
[node name="HSVGrid" type="GridContainer" parent="EditColor"]
layout_mode = 2
offset_left = 523.0
offset_right = 703.0
offset_bottom = 101.0
columns = 5
[node name="Button3" type="Button" parent="EditColor/HSVGrid"]
modulate = Color(1, 0.913725, 0.776471, 1)
layout_mode = 2
offset_right = 24.0
offset_bottom = 31.0
text = "-X"
[node name="Button2" type="Button" parent="EditColor/HSVGrid"]
modulate = Color(0.898039, 1, 0.698039, 1)
layout_mode = 2
offset_left = 28.0
offset_right = 60.0
offset_bottom = 31.0
text = "-10"
[node name="Label" type="Label" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 64.0
offset_top = 2.0
offset_right = 108.0
offset_bottom = 28.0
text = "Hue"
horizontal_alignment = 1
[node name="Button5" type="Button" parent="EditColor/HSVGrid"]
modulate = Color(0.717647, 1, 0.980392, 1)
layout_mode = 2
offset_left = 112.0
offset_right = 148.0
offset_bottom = 31.0
text = "+10"
[node name="Button6" type="Button" parent="EditColor/HSVGrid"]
modulate = Color(0.74902, 0.729412, 1, 1)
layout_mode = 2
offset_left = 152.0
offset_right = 180.0
offset_bottom = 31.0
text = "+X"
[node name="Button7" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_top = 35.0
offset_right = 24.0
offset_bottom = 66.0
text = "-X"
[node name="Button8" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 28.0
offset_top = 35.0
offset_right = 60.0
offset_bottom = 66.0
text = "-5"
[node name="Label2" type="Label" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 64.0
offset_top = 37.0
offset_right = 108.0
offset_bottom = 63.0
text = "Sat"
horizontal_alignment = 1
[node name="Button11" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 112.0
offset_top = 35.0
offset_right = 148.0
offset_bottom = 66.0
text = "+5"
[node name="Button12" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 152.0
offset_top = 35.0
offset_right = 180.0
offset_bottom = 66.0
text = "+X"
[node name="Button13" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_top = 70.0
offset_right = 24.0
offset_bottom = 101.0
text = "-X"
[node name="Button14" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 28.0
offset_top = 70.0
offset_right = 60.0
offset_bottom = 101.0
text = "-5"
[node name="Label3" type="Label" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 64.0
offset_top = 72.0
offset_right = 108.0
offset_bottom = 98.0
text = "Value"
horizontal_alignment = 1
[node name="Button17" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 112.0
offset_top = 70.0
offset_right = 148.0
offset_bottom = 101.0
text = "+5"
[node name="Button18" type="Button" parent="EditColor/HSVGrid"]
layout_mode = 2
offset_left = 152.0
offset_top = 70.0
offset_right = 180.0
offset_bottom = 101.0
text = "+X"
[node name="VSeparator4" type="VSeparator" parent="EditColor"]
layout_mode = 2
offset_left = 707.0
offset_right = 711.0
offset_bottom = 101.0
[node name="CustomX" type="VBoxContainer" parent="EditColor"]
layout_mode = 2
offset_left = 715.0
offset_right = 947.0
offset_bottom = 101.0
[node name="Label" type="Label" parent="EditColor/CustomX"]
layout_mode = 2
offset_top = 20.0
offset_right = 232.0
offset_bottom = 46.0
size_flags_vertical = 6
text = "Custom Value (for +X buttons)"
[node name="LineEdit" type="LineEdit" parent="EditColor/CustomX"]
layout_mode = 2
offset_top = 70.0
offset_right = 232.0
offset_bottom = 101.0
text = "20"
[node name="VSeparator6" type="Control" parent="EditColor"]
layout_mode = 2
anchors_preset = 0
offset_left = 951.0
offset_right = 1152.0
offset_bottom = 101.0
size_flags_horizontal = 3
[node name="Panel" type="PanelContainer" parent="EditColor/VSeparator6"]
visible = false
layout_mode = 1
anchors_preset = 2
grow_vertical = 0
[node name="Panel2" type="Panel" parent="EditColor/VSeparator6/Panel"]
self_modulate = Color(1.5, 1.5, 1.5, 1)
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="EditColor/VSeparator6/Panel"]
layout_mode = 2
[node name="ColorPicker" type="ColorPicker" parent="EditColor/VSeparator6/Panel/MarginContainer"]
layout_mode = 2
offset_right = 290.0
offset_bottom = 542.0
[node name="Button" type="Button" parent="EditColor/VSeparator6/Panel/MarginContainer/ColorPicker"]
layout_mode = 2
text = "OK"
[connection signal="pressed" from="EditColor/ColorProper/Button" to="." method="_on_Button_pressed"]
[connection signal="gui_input" from="EditColor/VSeparator6/Panel/MarginContainer/ColorPicker" to="." method="_on_ColorPicker_gui_input"]
[connection signal="pressed" from="EditColor/VSeparator6/Panel/MarginContainer/ColorPicker/Button" to="." method="_on_Button_pressed"]

View File

@ -1,10 +1,10 @@
tool
@tool
extends SheetsDockEditor
onready var _value_label := $"HBoxContainer/HBoxContainer/NumberPanel/Label"
onready var _button_grid := $"HBoxContainer/HBoxContainer/GridContainer"
onready var _sequence_gen_inputs := $"HBoxContainer/CustomX2/HBoxContainer"
onready var _custom_value_edit := $"HBoxContainer/CustomX/LineEdit"
@onready var _value_label := $"HBoxContainer/HBoxContainer/NumberPanel/Label"
@onready var _button_grid := $"HBoxContainer/HBoxContainer/GridContainer"
@onready var _sequence_gen_inputs := $"HBoxContainer/CustomX2/HBoxContainer"
@onready var _custom_value_edit := $"HBoxContainer/CustomX/LineEdit"
var _stored_value = 0
var _stored_value_is_int := false
@ -13,29 +13,30 @@ var _mouse_down := false
func _ready():
_button_grid.get_child(0).connect("pressed", self, "_increment_values", [0.1])
_button_grid.get_child(1).connect("pressed", self, "_increment_values", [1])
_button_grid.get_child(2).connect("pressed", self, "_increment_values", [10])
_button_grid.get_child(3).connect("pressed", self, "_increment_values", [100])
_button_grid.get_child(4).connect("pressed", self, "_increment_values_custom", [true, false])
_button_grid.get_child(5).connect("pressed", self, "_increment_values_custom", [true, true])
super._ready()
_button_grid.get_child(0).pressed.connect(_increment_values.bind(0.1))
_button_grid.get_child(1).pressed.connect(_increment_values.bind(1))
_button_grid.get_child(2).pressed.connect(_increment_values.bind(10))
_button_grid.get_child(3).pressed.connect(_increment_values.bind(100))
_button_grid.get_child(4).pressed.connect(_increment_values_custom.bind(true, false))
_button_grid.get_child(5).pressed.connect(_increment_values_custom.bind(true, true))
_button_grid.get_child(6).connect("pressed", self, "_increment_values", [-0.1])
_button_grid.get_child(7).connect("pressed", self, "_increment_values", [-1])
_button_grid.get_child(8).connect("pressed", self, "_increment_values", [-10])
_button_grid.get_child(9).connect("pressed", self, "_increment_values", [-100])
_button_grid.get_child(10).connect("pressed", self, "_increment_values_custom",[false, false])
_button_grid.get_child(11).connect("pressed", self, "_increment_values_custom",[false, true])
_button_grid.get_child(6).pressed.connect(_increment_values.bind(-0.1))
_button_grid.get_child(7).pressed.connect(_increment_values.bind(-1))
_button_grid.get_child(8).pressed.connect(_increment_values.bind(-10))
_button_grid.get_child(9).pressed.connect(_increment_values.bind(-100))
_button_grid.get_child(10).pressed.connect(_increment_values_custom.bind(false, false))
_button_grid.get_child(11).pressed.connect(_increment_values_custom.bind(false, true))
func try_edit_value(value, type, property_hint) -> bool:
if type != TYPE_REAL and type != TYPE_INT:
if type != TYPE_FLOAT and type != TYPE_INT:
return false
_stored_value = value
_value_label.text = str(value)
_stored_value_is_int = type != TYPE_REAL
_stored_value_is_int = type != TYPE_FLOAT
_button_grid.columns = 5 if _stored_value_is_int else 6
_button_grid.get_child(0).visible = !_stored_value_is_int
_button_grid.get_child(6).visible = !_stored_value_is_int
@ -78,7 +79,7 @@ func _increment_values_custom(positive : bool, multiplier : bool):
func _on_NumberPanel_gui_input(event):
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
_mouse_drag_increment = 0.0
@ -87,7 +88,7 @@ func _on_NumberPanel_gui_input(event):
else:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
if _mouse_down:
Input.warp_mouse_position(_value_label.rect_global_position + _value_label.rect_size * 0.5)
Input.warp_mouse(_value_label.global_position + _value_label.size * 0.5)
_increment_values(_mouse_drag_increment)
_mouse_down = false

View File

@ -1,9 +1,8 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/resources_speadsheet_view/typed_editors/dock_number.gd" type="Script" id=1]
[ext_resource path="res://addons/resources_spreadsheet_view/typed_editors/dock_number.gd" type="Script" id=1]
[node name="EditNumber" type="VBoxContainer"]
anchor_right = 1.0
margin_bottom = 86.0
rect_pivot_offset = Vector2( -460, -28 )
mouse_filter = 0
@ -66,7 +65,7 @@ text = "Fill with Sequence"
margin_left = 120.0
margin_right = 134.0
margin_bottom = 14.0
hint_tooltip = "Fill selected cells with a number sequence. Order is the same as the cells were selected.
tooltip_text = "Fill selected cells with a number sequence. Order is the same as the cells were selected.
- You must specify Start.
- If all values specified, selected cells will have a repeating sequence
of numbers from Start to End, with increment of Step, not including End.
@ -87,21 +86,21 @@ margin_bottom = 42.0
[node name="LineEdit" type="LineEdit" parent="HBoxContainer/CustomX2/HBoxContainer"]
margin_right = 58.0
margin_bottom = 24.0
hint_tooltip = "Start (must not be blank)"
tooltip_text = "Start (must not be blank)"
placeholder_text = "Start *"
[node name="LineEdit2" type="LineEdit" parent="HBoxContainer/CustomX2/HBoxContainer"]
margin_left = 62.0
margin_right = 120.0
margin_bottom = 24.0
hint_tooltip = "End"
tooltip_text = "End"
placeholder_text = "End"
[node name="LineEdit3" type="LineEdit" parent="HBoxContainer/CustomX2/HBoxContainer"]
margin_left = 124.0
margin_right = 182.0
margin_bottom = 24.0
hint_tooltip = "End"
tooltip_text = "End"
placeholder_text = "Step"
[node name="HBoxContainer2" type="HBoxContainer" parent="HBoxContainer/CustomX2"]

View File

@ -1,7 +1,7 @@
tool
@tool
extends SheetsDockEditor
var _stored_value : Texture
var _stored_value : Texture2D
func try_edit_value(value, type, property_hint) -> bool:
@ -14,8 +14,8 @@ func try_edit_value(value, type, property_hint) -> bool:
func _on_Button_pressed():
var h_count = int($"CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer/LineEdit".text)
var v_count = int($"CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer/LineEdit2".text)
var h_count = $"CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer/LineEdit".text.to_int()
var v_count = $"CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer/LineEdit2".text.to_int()
# No, Scene Unique Names can not be used in-editor (last time i checked)
var folder_name := _stored_value.resource_path.get_basename()
@ -32,7 +32,7 @@ func _on_Button_pressed():
tile.atlas = _stored_value
tile_array.append(tile)
tile.take_over_path(folder_name + "/" + folder_name.get_file() + "_" + str(j * v_count + i + 1) + ".tres")
ResourceSaver.save(tile.resource_path, tile)
ResourceSaver.save(tile)
tile_array.resize(sheet.edited_cells.size())
sheet.set_edited_cells_values(tile_array)

View File

@ -0,0 +1,132 @@
[gd_scene load_steps=3 format=3 uid="uid://rww3gpl052bn"]
[ext_resource type="Script" path="res://addons/resources_spreadsheet_view/typed_editors/dock_texture.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://c08qavfwqr3k7" path="res://icon.png" id="2"]
[node name="EditTexture" type="VBoxContainer"]
anchors_preset = -1
anchor_right = 1.0
anchor_bottom = 0.0694444
offset_bottom = 126.0
grow_horizontal = 2
mouse_filter = 0
script = ExtResource("1")
metadata/_edit_use_anchors_ = true
[node name="Header" type="HBoxContainer" parent="."]
layout_mode = 2
offset_right = 1152.0
offset_bottom = 26.0
[node name="HBoxContainer" type="HBoxContainer" parent="Header"]
layout_mode = 2
offset_right = 506.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header/HBoxContainer"]
layout_mode = 2
offset_right = 103.0
offset_bottom = 26.0
text = "EDIT: Texture"
[node name="HSeparator" type="HSeparator" parent="Header/HBoxContainer"]
layout_mode = 2
offset_left = 107.0
offset_right = 506.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="Label" type="Label" parent="Header"]
layout_mode = 2
offset_left = 510.0
offset_right = 642.0
offset_bottom = 26.0
text = "PROPERTY NAME"
[node name="HSeparator2" type="HSeparator" parent="Header"]
layout_mode = 2
offset_left = 646.0
offset_right = 1152.0
offset_bottom = 26.0
size_flags_horizontal = 3
[node name="CenterContainer" type="CenterContainer" parent="."]
layout_mode = 2
offset_top = 30.0
offset_right = 1152.0
offset_bottom = 126.0
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer"]
layout_mode = 2
offset_left = 394.0
offset_right = 758.0
offset_bottom = 96.0
alignment = 1
[node name="TextureRect" type="TextureRect" parent="CenterContainer/HBoxContainer"]
custom_minimum_size = Vector2i(96, 96)
layout_mode = 2
offset_right = 96.0
offset_bottom = 96.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = ExtResource("2")
ignore_texture_size = true
stretch_mode = 5
[node name="VSeparator" type="VSeparator" parent="CenterContainer/HBoxContainer"]
layout_mode = 2
offset_left = 100.0
offset_right = 104.0
offset_bottom = 96.0
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/HBoxContainer"]
layout_mode = 2
offset_left = 108.0
offset_right = 364.0
offset_bottom = 96.0
size_flags_horizontal = 3
auto_translate = false
[node name="Label" type="Label" parent="CenterContainer/HBoxContainer/VBoxContainer"]
layout_mode = 2
offset_right = 256.0
offset_bottom = 26.0
size_flags_vertical = 3
text = "Atlas Chopper"
horizontal_alignment = 1
vertical_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/HBoxContainer/VBoxContainer"]
layout_mode = 2
offset_top = 30.0
offset_right = 256.0
offset_bottom = 61.0
size_flags_vertical = 4
[node name="LineEdit" type="LineEdit" parent="CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_right = 126.0
offset_bottom = 31.0
size_flags_horizontal = 3
placeholder_text = "H Count"
[node name="LineEdit2" type="LineEdit" parent="CenterContainer/HBoxContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
offset_left = 130.0
offset_right = 256.0
offset_bottom = 31.0
size_flags_horizontal = 3
placeholder_text = "V Count"
[node name="Button" type="Button" parent="CenterContainer/HBoxContainer/VBoxContainer"]
custom_minimum_size = Vector2i(256, 0)
layout_mode = 2
offset_top = 65.0
offset_right = 256.0
offset_bottom = 96.0
size_flags_vertical = 4
text = "Chop chop chop!!!"
[connection signal="pressed" from="CenterContainer/HBoxContainer/VBoxContainer/Button" to="." method="_on_Button_pressed"]

View File

@ -1,8 +1,9 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/all_icons.png-28909f8bd099d79f5d095eb93a9167e6.stex"
type="CompressedTexture2D"
uid="uid://b7e3wp7i33ye5"
path="res://.godot/imported/all_icons.png-28909f8bd099d79f5d095eb93a9167e6.ctex"
metadata={
"vram_texture": false
}
@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://example/Random Upgrades/icons/all_icons.png"
dest_files=[ "res://.import/all_icons.png-28909f8bd099d79f5d095eb93a9167e6.stex" ]
dest_files=["res://.godot/imported/all_icons.png-28909f8bd099d79f5d095eb93a9167e6.ctex"]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://c3bx6kf7frbwk"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 0, 0, 64, 64 )
atlas = ExtResource("1")
region = Rect2(0, 0, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cak6lra5ej68c"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_6pmrx"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 64, 128, 64, 64 )
atlas = ExtResource("1_6pmrx")
region = Rect2(64, 128, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dkc8d2p0xbl1n"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_lk0lg"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 128, 128, 64, 64 )
atlas = ExtResource("1_lk0lg")
region = Rect2(128, 128, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ciiykhulvckp7"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_fd56b"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 192, 128, 64, 64 )
atlas = ExtResource("1_fd56b")
region = Rect2(192, 128, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dki1d3uksoyfj"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_ds6ve"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 0, 192, 64, 64 )
atlas = ExtResource("1_ds6ve")
region = Rect2(0, 192, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cpenn4qsfhx28"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_icesd"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 64, 192, 64, 64 )
atlas = ExtResource("1_icesd")
region = Rect2(64, 192, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cm6cb8uou75x0"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_mlqxi"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 128, 192, 64, 64 )
atlas = ExtResource("1_mlqxi")
region = Rect2(128, 192, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://0c7ngrkwn42u"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_jk82p"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 192, 192, 64, 64 )
atlas = ExtResource("1_jk82p")
region = Rect2(192, 192, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dfpwu4ra3fxgx"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 64, 0, 64, 64 )
atlas = ExtResource("1")
region = Rect2(64, 0, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://d38giyxvkhl6g"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 128, 0, 64, 64 )
atlas = ExtResource("1")
region = Rect2(128, 0, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cluvoehgeqmcu"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 192, 0, 64, 64 )
atlas = ExtResource("1")
region = Rect2(192, 0, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://djjpa8lluue1g"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 0, 64, 64, 64 )
atlas = ExtResource("1")
region = Rect2(0, 64, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://butx3l1jdcgcc"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_em1jn"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 64, 64, 64, 64 )
atlas = ExtResource("1_em1jn")
region = Rect2(64, 64, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dfhgifwrrigrw"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_bpiay"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 128, 64, 64, 64 )
atlas = ExtResource("1_bpiay")
region = Rect2(128, 64, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dacww8ptt8uyo"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_mbxiu"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 192, 64, 64, 64 )
atlas = ExtResource("1_mbxiu")
region = Rect2(192, 64, 64, 64)

View File

@ -1,8 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dbbgxcs806sy8"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons.png" type="Texture" id=1]
[ext_resource type="Texture2D" uid="uid://b7e3wp7i33ye5" path="res://example/Random Upgrades/icons/all_icons.png" id="1_bw3gq"]
[resource]
flags = 4
atlas = ExtResource( 1 )
region = Rect2( 0, 128, 64, 64 )
atlas = ExtResource("1_bw3gq")
region = Rect2(0, 128, 64, 64)

View File

@ -1,34 +1,31 @@
[gd_scene format=2]
[gd_scene format=3 uid="uid://b4cix5ebtpdbf"]
[node name="Node2D" type="Node2D"]
[node name="ColorRect" type="ColorRect" parent="."]
margin_left = 51.0
margin_top = 54.0
margin_right = 374.0
margin_bottom = 371.0
rect_rotation = -15.0
color = Color( 0, 1, 0.0156863, 1 )
offset_left = 363.0
offset_top = 83.0
offset_right = 718.0
offset_bottom = 632.0
color = Color(0, 1, 0.0156863, 1)
[node name="ColorRect2" type="ColorRect" parent="."]
margin_left = 484.0
margin_top = 66.0
margin_right = 807.0
margin_bottom = 383.0
rect_rotation = 15.0
color = Color( 0, 0.905882, 1, 1 )
offset_left = 833.0
offset_top = 304.0
offset_right = 1095.0
offset_bottom = 653.0
color = Color(0, 0.905882, 1, 1)
[node name="ColorRect3" type="ColorRect" parent="."]
margin_left = -39.0
margin_top = 324.0
margin_right = 284.0
margin_bottom = 641.0
rect_rotation = -30.0
color = Color( 0, 0.0156863, 1, 1 )
offset_left = 553.0
offset_top = 491.0
offset_right = 929.0
offset_bottom = 770.0
color = Color(0, 0.0156863, 1, 1)
[node name="ColorRect4" type="ColorRect" parent="."]
margin_left = 271.0
margin_top = 219.0
margin_right = 594.0
margin_bottom = 536.0
color = Color( 0.686275, 0, 1, 1 )
offset_left = 746.0
offset_top = 397.0
offset_right = 1077.0
offset_bottom = 632.0
color = Color(0.686275, 0, 1, 1)

View File

@ -1,18 +1,18 @@
tool
@tool
extends Resource
export var color1 := Color.white
export var max_duplicates := 0
export var tags : Array
export(int, "Weapon", "Passive", "Mastery") var type := 0
export var icon : Texture
export var custom_scene : PackedScene
export var color2 := Color.white
export var base_weight := 10.0
export var is_notable := false
export(String, MULTILINE) var multiplier_per_tag := ""
export(String, MULTILINE) var multiplier_if_tag_present := ""
export(String, MULTILINE) var multiplier_if_tag_not_present := ""
export(String, MULTILINE) var max_tags_present := ""
export var list_item_delimeter := " "
export var list_row_delimeter := ";"
@export var color1 := Color.WHITE
@export var max_duplicates := 0
@export var tags : Array
@export_enum("Weapon", "Passive", "Mastery") var type := 0
@export var icon : Texture
@export var custom_scene : PackedScene
@export var color2 := Color.WHITE
@export var base_weight := 10.0
@export var is_notable := false
@export_multiline var multiplier_per_tag := ""
@export_multiline var multiplier_if_tag_present := ""
@export_multiline var multiplier_if_tag_not_present := ""
@export_multiline var max_tags_present := ""
@export var list_item_delimeter := " "
@export var list_row_delimeter := ";"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://df0gymb6kab1q"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_6.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://butx3l1jdcgcc" path="res://example/Random Upgrades/icons/all_icons/all_icons_6.tres" id="1_utkae"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Upgrade: Elemental Damage"
script = ExtResource( 2 )
color1 = Color( 1, 1, 1, 1 )
script = ExtResource("2")
color1 = Color(1, 1, 1, 1)
max_duplicates = 9
tags = [ "elemental" ]
tags = ["elemental"]
type = 1
icon = ExtResource( 1 )
color2 = Color( 0.964706, 0.298039, 0.298039, 1 )
icon = ExtResource("1_utkae")
color2 = Color(0.964706, 0.298039, 0.298039, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = ""

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://dys7hpijn82t0"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_1.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://c3bx6kf7frbwk" path="res://example/Random Upgrades/icons/all_icons/all_icons_1.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Upgrade: Health"
script = ExtResource( 2 )
color1 = Color( 1, 1, 1, 1 )
script = ExtResource("2")
color1 = Color(1, 1, 1, 1)
max_duplicates = 9
tags = [ "health", "melee" ]
tags = ["health", "melee"]
type = 1
icon = ExtResource( 1 )
color2 = Color( 0.129412, 1, 0.243137, 1 )
icon = ExtResource("1")
color2 = Color(0.129412, 1, 0.243137, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "strength 1.5 melee 2.0"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://dmrklxbnskel8"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_5.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://djjpa8lluue1g" path="res://example/Random Upgrades/icons/all_icons/all_icons_5.tres" id="1_ardng"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Mastery: Magic"
script = ExtResource( 2 )
color1 = Color( 1, 0.847059, 0.160784, 1 )
script = ExtResource("2")
color1 = Color(1, 0.847059, 0.160784, 1)
max_duplicates = 9
tags = [ "magic", "mastery" ]
tags = ["magic", "mastery"]
type = 2
icon = ExtResource( 1 )
color2 = Color( 0.407843, 0.192157, 0.827451, 1 )
icon = ExtResource("1_ardng")
color2 = Color(0.407843, 0.192157, 0.827451, 1)
base_weight = 1.0
is_notable = true
multiplier_per_tag = "magic 1.2"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://d1suh8iai43st"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_2.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://dfpwu4ra3fxgx" path="res://example/Random Upgrades/icons/all_icons/all_icons_2.tres" id="1_442ey"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Mastery: Strength"
script = ExtResource( 2 )
color1 = Color( 1, 0.847059, 0.160784, 1 )
script = ExtResource("2")
color1 = Color(1, 0.847059, 0.160784, 1)
max_duplicates = 9
tags = [ "strength", "mastery" ]
tags = ["strength", "mastery"]
type = 2
icon = ExtResource( 1 )
color2 = Color( 0.992157, 0.941176, 0.2, 1 )
icon = ExtResource("1_442ey")
color2 = Color(0.992157, 0.941176, 0.2, 1)
base_weight = 1.0
is_notable = true
multiplier_per_tag = ""

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://2y7extlq12d5"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_6.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://butx3l1jdcgcc" path="res://example/Random Upgrades/icons/all_icons/all_icons_6.tres" id="1_prpsx"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Upgrade: Area of Effect"
script = ExtResource( 2 )
color1 = Color( 1, 1, 1, 1 )
script = ExtResource("2")
color1 = Color(1, 1, 1, 1)
max_duplicates = 4
tags = [ "aoe" ]
tags = ["aoe"]
type = 1
icon = ExtResource( 1 )
color2 = Color( 0.964706, 0.298039, 0.298039, 1 )
icon = ExtResource("1_prpsx")
color2 = Color(0.964706, 0.298039, 0.298039, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = ""

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://ce2kulhm7amkp"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_5.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://djjpa8lluue1g" path="res://example/Random Upgrades/icons/all_icons/all_icons_5.tres" id="1_we1lq"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Upgrade: Magic"
script = ExtResource( 2 )
color1 = Color( 1, 1, 1, 1 )
script = ExtResource("2")
color1 = Color(1, 1, 1, 1)
max_duplicates = 9
tags = [ "magic" ]
tags = ["magic"]
type = 1
icon = ExtResource( 1 )
color2 = Color( 0.188235, 0.45098, 0.901961, 1 )
icon = ExtResource("1_we1lq")
color2 = Color(0.188235, 0.45098, 0.901961, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = ""

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://c6hsg3j74vm56"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_2.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://dfpwu4ra3fxgx" path="res://example/Random Upgrades/icons/all_icons/all_icons_2.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Upgrade: Strength"
script = ExtResource( 2 )
color1 = Color( 1, 1, 1, 1 )
script = ExtResource("2")
color1 = Color(1, 1, 1, 1)
max_duplicates = 9
tags = [ "strength" ]
tags = ["strength"]
type = 1
icon = ExtResource( 1 )
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
icon = ExtResource("1")
color2 = Color(0.980392, 0.584314, 0.203922, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = ""

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://b78jqcpgef2ud"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://d38giyxvkhl6g" path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Weapon: Axe"
script = ExtResource( 2 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("2")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "strength", "melee", "weapon" ]
tags = ["strength", "melee", "weapon"]
type = 0
icon = ExtResource( 1 )
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
icon = ExtResource("1")
color2 = Color(0.980392, 0.584314, 0.203922, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "strength 2.0"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://djqq1lqaevth5"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://cluvoehgeqmcu" path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" id="1_xleln"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Weapon: Blizzard"
script = ExtResource( 2 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("2")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "magic", "elemental" ]
tags = ["weapon", "magic", "elemental"]
type = 0
icon = ExtResource( 1 )
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
icon = ExtResource("1_xleln")
color2 = Color(0.189457, 0.452246, 0.902344, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "magic 2.0"

View File

@ -1,19 +1,19 @@
[gd_resource type="Resource" load_steps=4 format=2]
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://60buw33oe30f"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/new scene.tscn" type="PackedScene" id=2]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=3]
[ext_resource type="PackedScene" uid="uid://b4cix5ebtpdbf" path="res://example/Random Upgrades/new scene.tscn" id="2"]
[ext_resource type="Texture2D" uid="uid://cluvoehgeqmcu" path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" id="2_eyyv1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="3"]
[resource]
resource_name = "Weapon: Chaos Blast"
script = ExtResource( 3 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("3")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "magic", "projectile", "legendary" ]
tags = ["weapon", "magic", "projectile", "legendary"]
type = 0
icon = ExtResource( 1 )
custom_scene = ExtResource( 2 )
color2 = Color( 0.407843, 0.192157, 0.827451, 1 )
icon = ExtResource("2_eyyv1")
custom_scene = ExtResource("2")
color2 = Color(0.407843, 0.192157, 0.827451, 1)
base_weight = 1.0
is_notable = true
multiplier_per_tag = "magic 2.0"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://cux4x0qopwiqk"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://d38giyxvkhl6g" path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Weapon: Daggers"
script = ExtResource( 2 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("2")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "strength", "projectile" ]
tags = ["weapon", "strength", "projectile"]
type = 0
icon = ExtResource( 1 )
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
icon = ExtResource("1")
color2 = Color(0.980392, 0.584314, 0.203922, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "strength 2.0"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://rjxr4qtfc6qd"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://cluvoehgeqmcu" path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Weapon: Fireball"
script = ExtResource( 2 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("2")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "magic", "projectile", "elemental" ]
tags = ["weapon", "magic", "projectile", "elemental"]
type = 0
icon = ExtResource( 1 )
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
icon = ExtResource("1")
color2 = Color(0.189457, 0.452246, 0.902344, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "magic 2.0"

View File

@ -1,19 +1,19 @@
[gd_resource type="Resource" load_steps=4 format=2]
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://c1mrcevxrm5kv"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/new scene.tscn" type="PackedScene" id=2]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=3]
[ext_resource type="PackedScene" uid="uid://b4cix5ebtpdbf" path="res://example/Random Upgrades/new scene.tscn" id="2"]
[ext_resource type="Texture2D" uid="uid://d38giyxvkhl6g" path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" id="2_kfnh0"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="3"]
[resource]
resource_name = "Weapon: Giga Sword"
script = ExtResource( 3 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("3")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "strength", "melee", "legendary" ]
tags = ["weapon", "strength", "melee", "legendary"]
type = 0
icon = ExtResource( 1 )
custom_scene = ExtResource( 2 )
color2 = Color( 0.992157, 0.941176, 0.2, 1 )
icon = ExtResource("2_kfnh0")
custom_scene = ExtResource("2")
color2 = Color(0.992157, 0.941176, 0.2, 1)
base_weight = 1.0
is_notable = true
multiplier_per_tag = "strength 2.0"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://b0kdw067vtgvn"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://cluvoehgeqmcu" path="res://example/Random Upgrades/icons/all_icons/all_icons_4.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Weapon: Lightning"
script = ExtResource( 2 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("2")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "magic", "elemental" ]
tags = ["weapon", "magic", "elemental"]
type = 0
icon = ExtResource( 1 )
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
icon = ExtResource("1")
color2 = Color(0.189457, 0.452246, 0.902344, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "magic 2.0"

View File

@ -1,17 +1,17 @@
[gd_resource type="Resource" load_steps=3 format=2]
[gd_resource type="Resource" load_steps=3 format=3 uid="uid://xl0yx8uq6bfp"]
[ext_resource path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" type="Texture" id=1]
[ext_resource path="res://example/Random Upgrades/upgrade_data.gd" type="Script" id=2]
[ext_resource type="Texture2D" uid="uid://d38giyxvkhl6g" path="res://example/Random Upgrades/icons/all_icons/all_icons_3.tres" id="1"]
[ext_resource type="Script" path="res://example/Random Upgrades/upgrade_data.gd" id="2"]
[resource]
resource_name = "Weapon: Spear"
script = ExtResource( 2 )
color1 = Color( 0.635294, 0.760784, 1, 1 )
script = ExtResource("2")
color1 = Color(0.635294, 0.760784, 1, 1)
max_duplicates = 1
tags = [ "weapon", "strength", "melee" ]
tags = ["weapon", "strength", "melee"]
type = 0
icon = ExtResource( 1 )
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
icon = ExtResource("1")
color2 = Color(0.980392, 0.584314, 0.203922, 1)
base_weight = 10.0
is_notable = false
multiplier_per_tag = "strength 2.0"

View File

@ -1,8 +1,9 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
type="CompressedTexture2D"
uid="uid://c08qavfwqr3k7"
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
metadata={
"vram_texture": false
}
@ -10,26 +11,24 @@ metadata={
[deps]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -6,44 +6,50 @@
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
config_version=5
_global_script_classes=[ {
"base": "Reference",
"class": "CellEditor",
"language": "GDScript",
"path": "res://addons/resources_speadsheet_view/typed_cells/cell_editor.gd"
_global_script_classes=[{
"base": "RefCounted",
"class": &"CellEditor",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/typed_cells/cell_editor.gd"
}, {
"base": "GridContainer",
"class": "SettingsGrid",
"language": "GDScript",
"path": "res://addons/resources_speadsheet_view/settings_grid.gd"
"class": &"SettingsGrid",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/settings_grid.gd"
}, {
"base": "Control",
"class": "SheetsDockEditor",
"language": "GDScript",
"path": "res://addons/resources_speadsheet_view/typed_editors/dock_base.gd"
"class": &"SheetsDockEditor",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/typed_editors/dock_base.gd"
}, {
"base": "Reference",
"class": "TextEditingUtils",
"language": "GDScript",
"path": "res://addons/resources_speadsheet_view/text_editing_utils.gd"
"base": "RefCounted",
"class": &"TextEditingUtils",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/text_editing_utils.gd"
}, {
"base": "Control",
"class": &"ThemeColorSetter",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/editor_color_setter.gd"
}, {
"base": "Button",
"class": "ThemeIconButton",
"language": "GDScript",
"path": "res://addons/resources_speadsheet_view/editor_icon_button.gd"
"class": &"ThemeIconButton",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/editor_icon_button.gd"
}, {
"base": "Control",
"class": "ThemeStylebox",
"language": "GDScript",
"path": "res://addons/resources_speadsheet_view/editor_stylebox_overrider.gd"
} ]
"class": &"ThemeStylebox",
"language": &"GDScript",
"path": "res://addons/resources_spreadsheet_view/editor_stylebox_overrider.gd"
}]
_global_script_class_icons={
"CellEditor": "",
"SettingsGrid": "",
"SheetsDockEditor": "",
"TextEditingUtils": "",
"ThemeColorSetter": "",
"ThemeIconButton": "",
"ThemeStylebox": ""
}
@ -58,9 +64,13 @@ resources_spreadsheet_view/clip_headers=true
resources_spreadsheet_view/dupe_arrays=true
resources_spreadsheet_view/array_min_width=128.0
[application]
config/features=PackedStringArray("4.0")
[editor_plugins]
enabled=PoolStringArray( "res://addons/resources_speadsheet_view/plugin.cfg" )
enabled=PackedStringArray("res://addons/resources_spreadsheet_view/plugin.cfg")
[rendering]