mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-12 08:43:08 +00:00
Don't delete tiles that have been added using the stack mode
This commit is contained in:
parent
8f46338d50
commit
67d4eb67c1
|
@ -20,6 +20,9 @@ func update_tileset() -> void:
|
|||
if TileSetPanel.tile_editing_mode == TileSetPanel.TileEditingMode.AUTO:
|
||||
for j in range(tileset.tiles.size() - 1, 0, -1):
|
||||
var tile := tileset.tiles[j]
|
||||
if tile.mode_added == TileSetPanel.TileEditingMode.STACK:
|
||||
# Don't delete tiles that have been added using the stack mode.
|
||||
continue
|
||||
var tile_used := false
|
||||
for i in indices.size():
|
||||
var x_coord := float(tileset.tile_size.x) * (i % indices_x)
|
||||
|
@ -28,7 +31,7 @@ func update_tileset() -> void:
|
|||
var image_portion := image.get_region(rect)
|
||||
if image_portion.is_invisible():
|
||||
continue
|
||||
if image_portion.get_data() == tile.get_data():
|
||||
if image_portion.get_data() == tile.image.get_data():
|
||||
tile_used = true
|
||||
break
|
||||
if not tile_used:
|
||||
|
@ -45,27 +48,29 @@ func update_tileset() -> void:
|
|||
if TileSetPanel.tile_editing_mode == TileSetPanel.TileEditingMode.MANUAL:
|
||||
if index == 0 or tileset.tiles.size() <= index:
|
||||
if tileset.tiles.size() <= 1:
|
||||
tileset.add_tile(image_portion)
|
||||
tileset.add_tile(image_portion, TileSetPanel.tile_editing_mode)
|
||||
indices[i] = tileset.tiles.size() - 1
|
||||
continue
|
||||
if image_portion.get_data() != tileset.tiles[index].get_data():
|
||||
if image_portion.get_data() != tileset.tiles[index].image.get_data():
|
||||
tileset.replace_tile_at(image_portion, index)
|
||||
# TODO: Update the rest of the tilemap
|
||||
else:
|
||||
else: # Auto or stack
|
||||
var found_tile := false
|
||||
for j in range(1, tileset.tiles.size()):
|
||||
var tile := tileset.tiles[j]
|
||||
if image_portion.get_data() == tile.get_data():
|
||||
if image_portion.get_data() == tile.image.get_data():
|
||||
indices[i] = j
|
||||
found_tile = true
|
||||
break
|
||||
if not found_tile:
|
||||
if removed_tile_indices.is_empty():
|
||||
tileset.add_tile(image_portion)
|
||||
tileset.add_tile(image_portion, TileSetPanel.tile_editing_mode)
|
||||
indices[i] = tileset.tiles.size() - 1
|
||||
else:
|
||||
var index_position := removed_tile_indices.pop_back() as int
|
||||
tileset.insert_tile(image_portion, index_position)
|
||||
tileset.insert_tile(
|
||||
image_portion, index_position, TileSetPanel.tile_editing_mode
|
||||
)
|
||||
indices[i] = index_position
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,16 @@ signal updated
|
|||
|
||||
var name := ""
|
||||
var tile_size: Vector2i
|
||||
var tiles: Array[Image] = []
|
||||
var tiles: Array[Tile] = []
|
||||
|
||||
|
||||
class Tile:
|
||||
var image: Image
|
||||
var mode_added: TileSetPanel.TileEditingMode
|
||||
|
||||
func _init(_image: Image, _mode_added: TileSetPanel.TileEditingMode) -> void:
|
||||
image = _image
|
||||
mode_added = _mode_added
|
||||
|
||||
|
||||
func _init(_tile_size: Vector2i, _name := "") -> void:
|
||||
|
@ -15,15 +24,17 @@ func _init(_tile_size: Vector2i, _name := "") -> void:
|
|||
#var indices_y := ceili(float(_project_size.y) / tile_size.y)
|
||||
#tiles.resize(indices_x * indices_y + 1)
|
||||
var empty_image := Image.create_empty(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8)
|
||||
tiles.append(empty_image)
|
||||
tiles.append(Tile.new(empty_image, TileSetPanel.tile_editing_mode))
|
||||
|
||||
|
||||
func add_tile(tile: Image) -> void:
|
||||
func add_tile(image: Image, edit_mode: TileSetPanel.TileEditingMode) -> void:
|
||||
var tile := Tile.new(image, edit_mode)
|
||||
tiles.append(tile)
|
||||
updated.emit()
|
||||
|
||||
|
||||
func insert_tile(tile: Image, position: int) -> void:
|
||||
func insert_tile(image: Image, position: int, edit_mode: TileSetPanel.TileEditingMode) -> void:
|
||||
var tile := Tile.new(image, edit_mode)
|
||||
tiles.insert(position, tile)
|
||||
updated.emit()
|
||||
|
||||
|
@ -34,5 +45,5 @@ func remove_tile_at_index(index: int) -> void:
|
|||
|
||||
|
||||
func replace_tile_at(new_tile: Image, index: int) -> void:
|
||||
tiles[index].copy_from(new_tile)
|
||||
tiles[index].image.copy_from(new_tile)
|
||||
updated.emit()
|
||||
|
|
|
@ -38,7 +38,7 @@ func _update_tileset() -> void:
|
|||
for tile in tileset.tiles:
|
||||
var texture_rect := TextureButton.new()
|
||||
texture_rect.custom_minimum_size = Vector2i(32, 32)
|
||||
texture_rect.texture_normal = ImageTexture.create_from_image(tile)
|
||||
texture_rect.texture_normal = ImageTexture.create_from_image(tile.image)
|
||||
h_flow_container.add_child(texture_rect)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue