1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-13 01:03:07 +00:00

Add user data for individual tiles

This commit is contained in:
Emmanouil Papadeas 2025-02-10 03:03:29 +02:00
parent c7c79f9203
commit 7902465cf1
3 changed files with 24 additions and 3 deletions

View file

@ -31,6 +31,8 @@ class Tile:
var times_used := 1 var times_used := 1
## The relative probability of this tile appearing when drawing random tiles. ## The relative probability of this tile appearing when drawing random tiles.
var probability := 1.0 var probability := 1.0
## User defined data for each individual tile.
var user_data := ""
func _init(_image: Image) -> void: func _init(_image: Image) -> void:
image = _image image = _image
@ -41,12 +43,13 @@ class Tile:
return times_used <= 0 return times_used <= 0
func serialize() -> Dictionary: func serialize() -> Dictionary:
return {"times_used": times_used, "probability": probability} return {"times_used": times_used, "probability": probability, "user_data": user_data}
func deserialize(dict: Dictionary, skip_times_used := false) -> void: func deserialize(dict: Dictionary, skip_times_used := false) -> void:
if not skip_times_used: if not skip_times_used:
times_used = dict.get("times_used", times_used) times_used = dict.get("times_used", times_used)
probability = dict.get("probability", probability) probability = dict.get("probability", probability)
user_data = dict.get("user_data", user_data)
func _init(_tile_size: Vector2i, _name := "", add_empty_tile := true) -> void: func _init(_tile_size: Vector2i, _name := "", add_empty_tile := true) -> void:

View file

@ -65,6 +65,7 @@ var tile_index_menu_popped := 0
@onready var tile_button_popup_menu: PopupMenu = $TileButtonPopupMenu @onready var tile_button_popup_menu: PopupMenu = $TileButtonPopupMenu
@onready var tile_properties: AcceptDialog = $TileProperties @onready var tile_properties: AcceptDialog = $TileProperties
@onready var tile_probability_slider: ValueSlider = %TileProbabilitySlider @onready var tile_probability_slider: ValueSlider = %TileProbabilitySlider
@onready var tile_user_data_text_edit: TextEdit = %TileUserDataTextEdit
func _ready() -> void: func _ready() -> void:
@ -281,13 +282,15 @@ func _on_show_empty_tile_toggled(toggled_on: bool) -> void:
func _on_tile_button_popup_menu_index_pressed(index: int) -> void: func _on_tile_button_popup_menu_index_pressed(index: int) -> void:
var selected_tile := current_tileset.tiles[tile_index_menu_popped]
if index == 0: # Properties if index == 0: # Properties
tile_probability_slider.value = current_tileset.tiles[tile_index_menu_popped].probability tile_probability_slider.value = selected_tile.probability
tile_user_data_text_edit.text = selected_tile.user_data
tile_properties.popup_centered() tile_properties.popup_centered()
elif index == 1: # Delete elif index == 1: # Delete
if tile_index_menu_popped == 0: if tile_index_menu_popped == 0:
return return
if current_tileset.tiles[tile_index_menu_popped].can_be_removed(): if selected_tile.can_be_removed():
var undo_data := current_tileset.serialize_undo_data() var undo_data := current_tileset.serialize_undo_data()
current_tileset.tiles.remove_at(tile_index_menu_popped) current_tileset.tiles.remove_at(tile_index_menu_popped)
var redo_data := current_tileset.serialize_undo_data() var redo_data := current_tileset.serialize_undo_data()
@ -306,3 +309,7 @@ func _on_tile_button_popup_menu_index_pressed(index: int) -> void:
func _on_tile_probability_slider_value_changed(value: float) -> void: func _on_tile_probability_slider_value_changed(value: float) -> void:
current_tileset.tiles[tile_index_menu_popped].probability = value current_tileset.tiles[tile_index_menu_popped].probability = value
func _on_tile_user_data_text_edit_text_changed() -> void:
current_tileset.tiles[tile_index_menu_popped].user_data = tile_user_data_text_edit.text

View file

@ -387,6 +387,16 @@ stretch_margin_right = 3
stretch_margin_bottom = 3 stretch_margin_bottom = 3
script = ExtResource("10_wfr6s") script = ExtResource("10_wfr6s")
[node name="TileUserDataLabel" type="Label" parent="TileProperties/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "User data:"
[node name="TileUserDataTextEdit" type="TextEdit" parent="TileProperties/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
scroll_fit_content_height = true
[connection signal="toggled" from="VBoxContainer/MarginContainer/VBoxContainer/Buttons/PlaceTiles" to="." method="_on_place_tiles_toggled"] [connection signal="toggled" from="VBoxContainer/MarginContainer/VBoxContainer/Buttons/PlaceTiles" to="." method="_on_place_tiles_toggled"]
[connection signal="pressed" from="VBoxContainer/MarginContainer/VBoxContainer/Buttons/TransformButtonsContainer/RotateLeftButton" to="." method="_on_rotate_pressed" binds= [false]] [connection signal="pressed" from="VBoxContainer/MarginContainer/VBoxContainer/Buttons/TransformButtonsContainer/RotateLeftButton" to="." method="_on_rotate_pressed" binds= [false]]
[connection signal="pressed" from="VBoxContainer/MarginContainer/VBoxContainer/Buttons/TransformButtonsContainer/RotateRightButton" to="." method="_on_rotate_pressed" binds= [true]] [connection signal="pressed" from="VBoxContainer/MarginContainer/VBoxContainer/Buttons/TransformButtonsContainer/RotateRightButton" to="." method="_on_rotate_pressed" binds= [true]]
@ -400,3 +410,4 @@ script = ExtResource("10_wfr6s")
[connection signal="toggled" from="Options/MarginContainer/ScrollContainer/GridContainer/ShowEmptyTile" to="." method="_on_show_empty_tile_toggled"] [connection signal="toggled" from="Options/MarginContainer/ScrollContainer/GridContainer/ShowEmptyTile" to="." method="_on_show_empty_tile_toggled"]
[connection signal="index_pressed" from="TileButtonPopupMenu" to="." method="_on_tile_button_popup_menu_index_pressed"] [connection signal="index_pressed" from="TileButtonPopupMenu" to="." method="_on_tile_button_popup_menu_index_pressed"]
[connection signal="value_changed" from="TileProperties/GridContainer/TileProbabilitySlider" to="." method="_on_tile_probability_slider_value_changed"] [connection signal="value_changed" from="TileProperties/GridContainer/TileProbabilitySlider" to="." method="_on_tile_probability_slider_value_changed"]
[connection signal="text_changed" from="TileProperties/GridContainer/TileUserDataTextEdit" to="." method="_on_tile_user_data_text_edit_text_changed"]