2024-11-16 03:41:32 +02:00
|
|
|
class_name TileSetCustom
|
|
|
|
extends RefCounted
|
|
|
|
|
2024-11-18 03:09:46 +02:00
|
|
|
signal updated
|
|
|
|
|
2024-11-16 03:41:32 +02:00
|
|
|
var name := ""
|
|
|
|
var tile_size: Vector2i
|
2024-11-22 01:43:07 +02:00
|
|
|
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
|
2024-11-16 03:41:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
func _init(_tile_size: Vector2i, _name := "") -> void:
|
|
|
|
tile_size = _tile_size
|
|
|
|
name = _name
|
|
|
|
#var indices_x := ceili(float(_project_size.x) / tile_size.x)
|
|
|
|
#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)
|
2024-11-22 01:43:07 +02:00
|
|
|
tiles.append(Tile.new(empty_image, TileSetPanel.tile_editing_mode))
|
2024-11-18 03:09:46 +02:00
|
|
|
|
|
|
|
|
2024-11-22 01:43:07 +02:00
|
|
|
func add_tile(image: Image, edit_mode: TileSetPanel.TileEditingMode) -> void:
|
|
|
|
var tile := Tile.new(image, edit_mode)
|
2024-11-18 03:09:46 +02:00
|
|
|
tiles.append(tile)
|
|
|
|
updated.emit()
|
|
|
|
|
|
|
|
|
2024-11-22 01:43:07 +02:00
|
|
|
func insert_tile(image: Image, position: int, edit_mode: TileSetPanel.TileEditingMode) -> void:
|
|
|
|
var tile := Tile.new(image, edit_mode)
|
2024-11-21 00:29:31 +02:00
|
|
|
tiles.insert(position, tile)
|
|
|
|
updated.emit()
|
|
|
|
|
|
|
|
|
2024-11-18 03:09:46 +02:00
|
|
|
func remove_tile_at_index(index: int) -> void:
|
|
|
|
tiles.remove_at(index)
|
|
|
|
updated.emit()
|
|
|
|
|
|
|
|
|
|
|
|
func replace_tile_at(new_tile: Image, index: int) -> void:
|
2024-11-22 01:43:07 +02:00
|
|
|
tiles[index].image.copy_from(new_tile)
|
2024-11-18 03:09:46 +02:00
|
|
|
updated.emit()
|