mirror of
https://github.com/Relintai/godot-resources-as-sheets-plugin.git
synced 2025-02-21 08:34:26 +01:00
Implement array editing
This commit is contained in:
parent
9570619972
commit
da2af14c30
@ -154,6 +154,9 @@ func _compare_values(a, b) -> bool:
|
|||||||
if a is Resource:
|
if a is Resource:
|
||||||
return a.resource_path > b.resource_path
|
return a.resource_path > b.resource_path
|
||||||
|
|
||||||
|
if a is Array or a is PoolStringArray or a is PoolRealArray or a is PoolIntArray:
|
||||||
|
return a.size() > b.size()
|
||||||
|
|
||||||
return a > b
|
return a > b
|
||||||
|
|
||||||
|
|
||||||
@ -361,7 +364,7 @@ func _try_open_docks(cell : Control):
|
|||||||
var column_index = _get_cell_column(cell)
|
var column_index = _get_cell_column(cell)
|
||||||
for x in get_node(path_property_editors).get_children():
|
for x in get_node(path_property_editors).get_children():
|
||||||
x.visible = x.try_edit_value(
|
x.visible = x.try_edit_value(
|
||||||
column_editors[column_index].get_value(cell),
|
rows[_get_cell_row(cell)].get(columns[column_index]),
|
||||||
column_types[column_index],
|
column_types[column_index],
|
||||||
column_hints[column_index]
|
column_hints[column_index]
|
||||||
)
|
)
|
||||||
@ -402,9 +405,10 @@ func set_edited_cells_values(new_cell_values : Array, update_whole_row : bool =
|
|||||||
|
|
||||||
func get_edited_cells_values() -> Array:
|
func get_edited_cells_values() -> Array:
|
||||||
var arr := edited_cells.duplicate()
|
var arr := edited_cells.duplicate()
|
||||||
var cell_editor = column_editors[_get_cell_column(edited_cells[0])]
|
var column_index := _get_cell_column(edited_cells[0])
|
||||||
|
var cell_editor = column_editors[column_index]
|
||||||
for i in arr.size():
|
for i in arr.size():
|
||||||
arr[i] = cell_editor.get_value(arr[i])
|
arr[i] = rows[_get_cell_row(arr[i])].get(columns[column_index])
|
||||||
|
|
||||||
return arr
|
return arr
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=13 format=2]
|
[gd_scene load_steps=15 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/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_string.gd" type="Script" id=2]
|
||||||
@ -10,6 +10,8 @@
|
|||||||
[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_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_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_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]
|
||||||
|
|
||||||
[sub_resource type="Image" id=3]
|
[sub_resource type="Image" id=3]
|
||||||
data = {
|
data = {
|
||||||
@ -47,7 +49,7 @@ __meta__ = {
|
|||||||
"_edit_lock_": true
|
"_edit_lock_": true
|
||||||
}
|
}
|
||||||
table_header_scene = ExtResource( 6 )
|
table_header_scene = ExtResource( 6 )
|
||||||
cell_editor_classes = [ ExtResource( 3 ), ExtResource( 5 ), ExtResource( 9 ), ExtResource( 2 ) ]
|
cell_editor_classes = [ ExtResource( 11 ), ExtResource( 3 ), ExtResource( 5 ), ExtResource( 9 ), ExtResource( 2 ) ]
|
||||||
path_folder_path = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Path")
|
path_folder_path = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/HBoxContainer/Path")
|
||||||
path_recent_paths = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/RecentPaths")
|
path_recent_paths = NodePath("HeaderContentSplit/VBoxContainer/HBoxContainer/RecentPaths")
|
||||||
path_table_root = NodePath("HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer/TableGrid")
|
path_table_root = NodePath("HeaderContentSplit/MarginContainer/FooterContentSplit/Panel/Scroll/MarginContainer/TableGrid")
|
||||||
@ -297,6 +299,12 @@ __meta__ = {
|
|||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
margin_right = 1020.0
|
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 )]
|
[node name="EditColor" parent="HeaderContentSplit/MarginContainer/FooterContentSplit/Footer/PropertyEditors" instance=ExtResource( 7 )]
|
||||||
visible = false
|
visible = false
|
||||||
anchor_right = 0.0
|
anchor_right = 0.0
|
||||||
|
45
addons/resources_speadsheet_view/typed_cells/array.tscn
Normal file
45
addons/resources_speadsheet_view/typed_cells/array.tscn
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
[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( 58, 0 )
|
||||||
|
size_flags_vertical = 9
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_lock_": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Box" type="HFlowContainer" parent="."]
|
||||||
|
margin_right = 128.0
|
||||||
|
margin_bottom = 14.0
|
||||||
|
rect_min_size = Vector2( 128, 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 )
|
@ -22,10 +22,6 @@ func set_value(node : Control, value):
|
|||||||
node.text = TextEditingUtils.show_non_typing(str(value))
|
node.text = TextEditingUtils.show_non_typing(str(value))
|
||||||
|
|
||||||
|
|
||||||
func get_value(node : Control):
|
|
||||||
return str2var(TextEditingUtils.revert_non_typing(node.text))
|
|
||||||
|
|
||||||
|
|
||||||
func get_text_value(node : Control):
|
func get_text_value(node : Control):
|
||||||
return node.text
|
return node.text
|
||||||
|
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
extends CellEditor
|
||||||
|
|
||||||
|
|
||||||
|
func can_edit_value(value, type, property_hint) -> bool:
|
||||||
|
return type == TYPE_STRING_ARRAY || type == TYPE_ARRAY
|
||||||
|
|
||||||
|
|
||||||
|
func create_cell(caller : Control) -> Control:
|
||||||
|
return load(CELL_SCENE_DIR + "array.tscn").instance()
|
||||||
|
|
||||||
|
|
||||||
|
func set_value(node : Control, value):
|
||||||
|
var children = node.get_node("Box").get_children()
|
||||||
|
while children.size() < value.size():
|
||||||
|
children.append(Label.new())
|
||||||
|
node.get_node("Box").add_child(children[children.size() - 1])
|
||||||
|
|
||||||
|
for i in children.size():
|
||||||
|
if i >= value.size():
|
||||||
|
children[i].visible = false
|
||||||
|
|
||||||
|
else:
|
||||||
|
children[i].visible = true
|
||||||
|
children[i].text = str(value[i])
|
||||||
|
children[i].self_modulate = Color(str(value[i]).hash()) + Color(0.25, 0.25, 0.25, 1.0)
|
||||||
|
|
||||||
|
|
||||||
|
func get_text_value(node : Control):
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
func get_text_length(node : Control):
|
||||||
|
return -1
|
@ -13,10 +13,6 @@ func set_value(node : Control, value):
|
|||||||
_set_value_internal(node, !node.text.begins_with("O"))
|
_set_value_internal(node, !node.text.begins_with("O"))
|
||||||
|
|
||||||
|
|
||||||
func get_value(node : Control):
|
|
||||||
return node.text == "ON"
|
|
||||||
|
|
||||||
|
|
||||||
func _set_value_internal(node, value):
|
func _set_value_internal(node, value):
|
||||||
node.text = "ON" if value else "off"
|
node.text = "ON" if value else "off"
|
||||||
node.self_modulate.a = 1.0 if value else 0.2
|
node.self_modulate.a = 1.0 if value else 0.2
|
||||||
|
@ -19,15 +19,6 @@ func can_edit_value(value, type, property_hint) -> bool:
|
|||||||
return type == TYPE_COLOR
|
return type == TYPE_COLOR
|
||||||
|
|
||||||
|
|
||||||
func get_value(node : Control):
|
|
||||||
var val = TextEditingUtils.revert_non_typing(node.text)
|
|
||||||
if val.length() == 3 or val.length() == 6 or val.length() == 8:
|
|
||||||
return Color(val)
|
|
||||||
|
|
||||||
else:
|
|
||||||
return _cached_color
|
|
||||||
|
|
||||||
|
|
||||||
func set_value(node : Control, value):
|
func set_value(node : Control, value):
|
||||||
if value is String:
|
if value is String:
|
||||||
node.text = TextEditingUtils.show_non_typing(str(value))
|
node.text = TextEditingUtils.show_non_typing(str(value))
|
||||||
|
@ -34,11 +34,6 @@ func set_value(node : Control, value):
|
|||||||
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 get_value(node : Control):
|
|
||||||
if node.editor_description == "": return null
|
|
||||||
return load(node.editor_description)
|
|
||||||
|
|
||||||
|
|
||||||
func set_color(node : Control, color : Color):
|
func set_color(node : Control, color : Color):
|
||||||
node.get_node("Back").modulate = color * 0.6 if node.editor_description == "" else color
|
node.get_node("Back").modulate = color * 0.6 if node.editor_description == "" else color
|
||||||
|
|
||||||
|
114
addons/resources_speadsheet_view/typed_editors/dock_array.gd
Normal file
114
addons/resources_speadsheet_view/typed_editors/dock_array.gd
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
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"
|
||||||
|
|
||||||
|
var _stored_value
|
||||||
|
var _stored_type := 0
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
recent_container.get_child(1).add_item("Add")
|
||||||
|
recent_container.get_child(1).add_item("Erase")
|
||||||
|
recent_container.get_child(1).add_item("Delete From Recent")
|
||||||
|
recent_container.get_child(1).select(0)
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
):
|
||||||
|
return false
|
||||||
|
|
||||||
|
_stored_type = type
|
||||||
|
_stored_value = value.duplicate() # Generic arrays are passed by reference
|
||||||
|
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(4).visible = is_generic_array
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
|
||||||
|
func _add_value(value):
|
||||||
|
_stored_value.append(value)
|
||||||
|
var values = sheet.get_edited_cells_values()
|
||||||
|
var cur_value
|
||||||
|
for i in values.size():
|
||||||
|
cur_value = values[i]
|
||||||
|
cur_value.append(value)
|
||||||
|
values[i] = cur_value
|
||||||
|
|
||||||
|
sheet.set_edited_cells_values(values)
|
||||||
|
|
||||||
|
|
||||||
|
func _remove_value(value):
|
||||||
|
_stored_value.erase(value)
|
||||||
|
var values = sheet.get_edited_cells_values()
|
||||||
|
var cur_value
|
||||||
|
for i in values.size():
|
||||||
|
cur_value = values[i]
|
||||||
|
if cur_value.has(value): # erase() not defined in PoolArrays
|
||||||
|
cur_value.remove(cur_value.find(value))
|
||||||
|
|
||||||
|
values[i] = cur_value
|
||||||
|
|
||||||
|
sheet.set_edited_cells_values(values)
|
||||||
|
|
||||||
|
|
||||||
|
func _add_recent(value):
|
||||||
|
for x in recent_container.get_children():
|
||||||
|
if x.text == str(value):
|
||||||
|
return
|
||||||
|
|
||||||
|
var node := Button.new()
|
||||||
|
node.text = str(value)
|
||||||
|
node.connect("pressed", self, "_on_recent_clicked", [node, value])
|
||||||
|
recent_container.add_child(node)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_recent_clicked(button, value):
|
||||||
|
var val = recent_container.get_child(1).selected
|
||||||
|
value_input.text = str(value)
|
||||||
|
if val == 0:
|
||||||
|
_add_value(value)
|
||||||
|
|
||||||
|
if val == 1:
|
||||||
|
_remove_value(value)
|
||||||
|
|
||||||
|
if val == 2:
|
||||||
|
button.queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_Remove_pressed():
|
||||||
|
_remove_value(str2var(value_input.text))
|
||||||
|
|
||||||
|
|
||||||
|
func _on_ClearRecent_pressed():
|
||||||
|
for i in recent_container.get_child_count():
|
||||||
|
if i == 0: continue
|
||||||
|
recent_container.get_child(i).free()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_Float_pressed():
|
||||||
|
_add_value(float(value_input.text))
|
||||||
|
|
||||||
|
|
||||||
|
func _on_Int_pressed():
|
||||||
|
_add_value(int(value_input.text))
|
||||||
|
|
||||||
|
|
||||||
|
func _on_String_pressed():
|
||||||
|
_add_value(value_input.text)
|
||||||
|
_add_recent(value_input.text)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_Variant_pressed():
|
||||||
|
_add_value(str2var(value_input.text))
|
210
addons/resources_speadsheet_view/typed_editors/dock_array.tscn
Normal file
210
addons/resources_speadsheet_view/typed_editors/dock_array.tscn
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
[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="Panel" type="Panel" parent="HBoxContainer/HBoxContainer/Panel"]
|
||||||
|
margin_right = 320.0
|
||||||
|
margin_bottom = 52.0
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="HBoxContainer/HBoxContainer/Panel"]
|
||||||
|
margin_right = 320.0
|
||||||
|
margin_bottom = 52.0
|
||||||
|
rect_min_size = Vector2( 128, 0 )
|
||||||
|
size_flags_vertical = 5
|
||||||
|
text = "[]"
|
||||||
|
align = 2
|
||||||
|
autowrap = 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
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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 = 3.0
|
||||||
|
margin_right = 48.0
|
||||||
|
margin_bottom = 17.0
|
||||||
|
text = "Recent:"
|
||||||
|
|
||||||
|
[node name="OptionButton" type="OptionButton" parent="HBoxContainer/Control2/HBoxContainer/HFlowContainer"]
|
||||||
|
margin_left = 52.0
|
||||||
|
margin_right = 141.0
|
||||||
|
margin_bottom = 20.0
|
||||||
|
text = "Set Mode"
|
||||||
|
|
||||||
|
[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"]
|
@ -4,11 +4,10 @@ extends Resource
|
|||||||
|
|
||||||
export var color1 := Color.white
|
export var color1 := Color.white
|
||||||
export var max_duplicates := 0
|
export var max_duplicates := 0
|
||||||
export var tags := "tag_1 tag_2 tag_3"
|
export var tags : Array
|
||||||
export var icon : Texture
|
export var icon : Texture
|
||||||
export var custom_scene : PackedScene
|
export var custom_scene : PackedScene
|
||||||
export var color2 := Color.white
|
export var color2 := Color.white
|
||||||
export var tag_delimeter := " "
|
|
||||||
export var base_weight := 10.0
|
export var base_weight := 10.0
|
||||||
export var is_notable := false
|
export var is_notable := false
|
||||||
export(String, MULTILINE) var multiplier_per_tag := ""
|
export(String, MULTILINE) var multiplier_per_tag := ""
|
||||||
@ -17,11 +16,3 @@ export(String, MULTILINE) var multiplier_if_tag_not_present := ""
|
|||||||
export(String, MULTILINE) var max_tags_present := ""
|
export(String, MULTILINE) var max_tags_present := ""
|
||||||
export var list_item_delimeter := " "
|
export var list_item_delimeter := " "
|
||||||
export var list_row_delimeter := ";"
|
export var list_row_delimeter := ";"
|
||||||
|
|
||||||
var is_cached := false
|
|
||||||
var tag_array := []
|
|
||||||
var requires_one_of_tags_array := []
|
|
||||||
var multiplier_per_tag_dict := {}
|
|
||||||
var multiplier_if_tag_present_dict := {}
|
|
||||||
var multiplier_if_tag_not_present_dict := {}
|
|
||||||
var max_tags_present_dict := {}
|
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Upgrade: Elemental Damage"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 1, 1 )
|
color1 = Color( 1, 1, 1, 1 )
|
||||||
max_duplicates = 9
|
max_duplicates = 9
|
||||||
tags = "elemental"
|
tags = [ "elemental" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.964706, 0.298039, 0.298039, 1 )
|
color2 = Color( 0.964706, 0.298039, 0.298039, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = ""
|
multiplier_per_tag = ""
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Upgrade: Health"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 1, 1 )
|
color1 = Color( 1, 1, 1, 1 )
|
||||||
max_duplicates = 9
|
max_duplicates = 9
|
||||||
tags = "health melee"
|
tags = [ "health", "melee" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.129412, 1, 0.243137, 1 )
|
color2 = Color( 0.129412, 1, 0.243137, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = "strength 1.5 melee 2.0"
|
multiplier_per_tag = "strength 1.5 melee 2.0"
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Upgrade: Area of Effect"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 1, 1 )
|
color1 = Color( 1, 1, 1, 1 )
|
||||||
max_duplicates = 4
|
max_duplicates = 4
|
||||||
tags = "aoe"
|
tags = [ "aoe" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.964706, 0.298039, 0.298039, 1 )
|
color2 = Color( 0.964706, 0.298039, 0.298039, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = ""
|
multiplier_per_tag = ""
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Upgrade: Magic"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 1, 1 )
|
color1 = Color( 1, 1, 1, 1 )
|
||||||
max_duplicates = 9
|
max_duplicates = 9
|
||||||
tags = "magic"
|
tags = [ "magic" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.188235, 0.45098, 0.901961, 1 )
|
color2 = Color( 0.188235, 0.45098, 0.901961, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = ""
|
multiplier_per_tag = ""
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Upgrade: Strength"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 1, 1 )
|
color1 = Color( 1, 1, 1, 1 )
|
||||||
max_duplicates = 9
|
max_duplicates = 9
|
||||||
tags = "strength"
|
tags = [ "strength" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = ""
|
multiplier_per_tag = ""
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Weapon: Axe"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon strength aoe melee"
|
tags = [ "strength", "melee", "weapon" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = "strength 2.0"
|
multiplier_per_tag = "strength 2.0"
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Weapon: Blizzard"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon magic aoe elemental"
|
tags = [ "weapon", "magic", "elemental" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
|
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = "magic 2.0"
|
multiplier_per_tag = "magic 2.0"
|
||||||
|
@ -9,11 +9,10 @@ resource_name = "Weapon: Chaos Blast"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon magic legendary chaosblast aoe"
|
tags = [ "weapon", "magic", "projectile" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
custom_scene = ExtResource( 3 )
|
custom_scene = ExtResource( 3 )
|
||||||
color2 = Color( 0.40631, 0.190945, 0.832031, 1 )
|
color2 = Color( 0.40631, 0.190945, 0.832031, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 1.0
|
base_weight = 1.0
|
||||||
is_notable = false
|
is_notable = false
|
||||||
multiplier_per_tag = "magic 2.0"
|
multiplier_per_tag = "magic 2.0"
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Weapon: Daggers"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon strength dagger projectile"
|
tags = [ "weapon", "strength", "projectile" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = true
|
is_notable = true
|
||||||
multiplier_per_tag = "strength 2.0"
|
multiplier_per_tag = "strength 2.0"
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Weapon: Fireball"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon magic fireball projectile elemental"
|
tags = [ "weapon", "magic", "projectile", "elemental" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
|
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = true
|
is_notable = true
|
||||||
multiplier_per_tag = "magic 2.0"
|
multiplier_per_tag = "magic 2.0"
|
||||||
|
@ -9,11 +9,10 @@ resource_name = "Weapon: Giga Sword"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon strength legendary gigasword melee"
|
tags = [ "weapon", "strength", "melee" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
custom_scene = ExtResource( 3 )
|
custom_scene = ExtResource( 3 )
|
||||||
color2 = Color( 0.988235, 0.93848, 0.192157, 1 )
|
color2 = Color( 0.988235, 0.93848, 0.192157, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 1.0
|
base_weight = 1.0
|
||||||
is_notable = true
|
is_notable = true
|
||||||
multiplier_per_tag = "strength 2.0"
|
multiplier_per_tag = "strength 2.0"
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Weapon: Lightning"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon magic lightning elemental"
|
tags = [ "weapon", "magic", "elemental" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
|
color2 = Color( 0.189457, 0.452246, 0.902344, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = true
|
is_notable = true
|
||||||
multiplier_per_tag = "magic 2.0"
|
multiplier_per_tag = "magic 2.0"
|
||||||
|
@ -8,10 +8,9 @@ resource_name = "Weapon: Spear"
|
|||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
color1 = Color( 1, 1, 0.2, 1 )
|
color1 = Color( 1, 1, 0.2, 1 )
|
||||||
max_duplicates = 1
|
max_duplicates = 1
|
||||||
tags = "weapon strength spear melee"
|
tags = [ "weapon", "strength", "melee" ]
|
||||||
icon = ExtResource( 2 )
|
icon = ExtResource( 2 )
|
||||||
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
color2 = Color( 0.988235, 0.584314, 0.192157, 1 )
|
||||||
tag_delimeter = " "
|
|
||||||
base_weight = 10.0
|
base_weight = 10.0
|
||||||
is_notable = true
|
is_notable = true
|
||||||
multiplier_per_tag = "strength 2.0"
|
multiplier_per_tag = "strength 2.0"
|
||||||
|
BIN
images/2022-09-23-17-25-28.png
Normal file
BIN
images/2022-09-23-17-25-28.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 86 KiB |
Loading…
Reference in New Issue
Block a user