mirror of
https://github.com/tonytins/CozyPixelStudio.git
synced 2025-06-25 22:34:43 -04:00
Created a new Cel class, to handle cel information
Like the Layer class, it is used in place of Canvas.layers nested array mess. It hasn't been tested thoroughly yet, so there may be crashes.
This commit is contained in:
parent
f246ed1a7a
commit
df0032c515
15 changed files with 108 additions and 110 deletions
|
@ -87,8 +87,8 @@ func _on_CreateNewImage_confirmed() -> void:
|
|||
Global.layers = Global.layers # To trigger Global.layers_changed()
|
||||
Global.project_has_changed = false
|
||||
if fill_color.a > 0:
|
||||
Global.canvas.layers[0][0].fill(fill_color)
|
||||
Global.canvas.layers[0][0].lock()
|
||||
Global.canvas.layers[0].image.fill(fill_color)
|
||||
Global.canvas.layers[0].image.lock()
|
||||
Global.canvas.update_texture(0)
|
||||
|
||||
|
||||
|
|
|
@ -367,13 +367,13 @@ func blend_layers(image: Image, canvas: Canvas, origin: Vector2 = Vector2(0, 0))
|
|||
for layer in canvas.layers:
|
||||
if Global.layers[layer_i].visible:
|
||||
var layer_image := Image.new()
|
||||
layer_image.copy_from(layer[0])
|
||||
layer_image.copy_from(layer.image)
|
||||
layer_image.lock()
|
||||
if layer[2] < 1: # If we have layer transparency
|
||||
if layer.opacity < 1: # If we have layer transparency
|
||||
for xx in layer_image.get_size().x:
|
||||
for yy in layer_image.get_size().y:
|
||||
var pixel_color := layer_image.get_pixel(xx, yy)
|
||||
var alpha : float = pixel_color.a * layer[2]
|
||||
var alpha : float = pixel_color.a * layer.opacity
|
||||
layer_image.set_pixel(xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha))
|
||||
DrawingAlgos.blend_rect(image, layer_image, Rect2(canvas.position, canvas.size), origin)
|
||||
layer_i += 1
|
||||
|
|
|
@ -23,7 +23,7 @@ func _ready() -> void:
|
|||
|
||||
|
||||
func _on_HSVDialog_about_to_show() -> void:
|
||||
current_layer = Global.canvas.layers[Global.current_layer][0]
|
||||
current_layer = Global.canvas.layers[Global.current_layer].image
|
||||
preview_image.copy_from(current_layer)
|
||||
update_preview()
|
||||
|
||||
|
|
|
@ -64,22 +64,14 @@ func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void:
|
|||
canvas.size = image.get_size()
|
||||
image.convert(Image.FORMAT_RGBA8)
|
||||
image.lock()
|
||||
var tex := ImageTexture.new()
|
||||
tex.create_from_image(image, 0)
|
||||
# Store [Image, ImageTexture, Opacity]
|
||||
canvas.layers.append([image, tex, 1])
|
||||
canvas.layers.append(Cel.new(image, 1))
|
||||
|
||||
for _i in range(1, Global.layers.size()):
|
||||
var empty_sprite := Image.new()
|
||||
empty_sprite.create(canvas.size.x, canvas.size.y, false, Image.FORMAT_RGBA8)
|
||||
empty_sprite.fill(Color(0, 0, 0, 0))
|
||||
empty_sprite.lock()
|
||||
|
||||
var empty_tex := ImageTexture.new()
|
||||
empty_tex.create_from_image(empty_sprite, 0)
|
||||
|
||||
# Store [Image, ImageTexture, Opacity]
|
||||
canvas.layers.append([empty_sprite, empty_tex, 1])
|
||||
canvas.layers.append(Cel.new(empty_sprite, 1))
|
||||
|
||||
canvas.frame = i
|
||||
Global.canvases.append(canvas)
|
||||
|
@ -119,21 +111,14 @@ func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void:
|
|||
canvas.size = cropped_image.get_size()
|
||||
cropped_image.convert(Image.FORMAT_RGBA8)
|
||||
cropped_image.lock()
|
||||
var tex := ImageTexture.new()
|
||||
tex.create_from_image(cropped_image, 0)
|
||||
# Store [Image, ImageTexture, Opacity]
|
||||
canvas.layers.append([cropped_image, tex, 1])
|
||||
canvas.layers.append(Cel.new(cropped_image, 1))
|
||||
|
||||
for _i in range(1, Global.layers.size()):
|
||||
var empty_sprite := Image.new()
|
||||
empty_sprite.create(canvas.size.x, canvas.size.y, false, Image.FORMAT_RGBA8)
|
||||
empty_sprite.fill(Color(0, 0, 0, 0))
|
||||
empty_sprite.lock()
|
||||
|
||||
var empty_tex := ImageTexture.new()
|
||||
empty_tex.create_from_image(empty_sprite, 0)
|
||||
|
||||
# Store [Image, ImageTexture, Opacity]
|
||||
canvas.layers.append([empty_sprite, empty_tex, 1])
|
||||
canvas.layers.append(Cel.new(empty_sprite, 1))
|
||||
|
||||
canvas.frame = i
|
||||
Global.canvases.append(canvas)
|
||||
|
|
|
@ -10,7 +10,7 @@ func _on_OutlineDialog_confirmed() -> void:
|
|||
var diagonal : bool = $OptionsContainer/DiagonalCheckBox.pressed
|
||||
var inside_image : bool = $OptionsContainer/InsideImageCheckBox.pressed
|
||||
|
||||
var image : Image = Global.canvas.layers[Global.current_layer][0]
|
||||
var image : Image = Global.canvas.layers[Global.current_layer].image
|
||||
if image.is_invisible():
|
||||
return
|
||||
var new_image := Image.new()
|
||||
|
|
|
@ -12,10 +12,10 @@ func _on_ScaleImage_confirmed() -> void:
|
|||
Global.undo_redo.add_do_property(c, "size", Vector2(width, height).floor())
|
||||
for i in range(c.layers.size() - 1, -1, -1):
|
||||
var sprite := Image.new()
|
||||
sprite.copy_from(c.layers[i][0])
|
||||
sprite.copy_from(c.layers[i].image)
|
||||
sprite.resize(width, height, interpolation)
|
||||
Global.undo_redo.add_do_property(c.layers[i][0], "data", sprite.data)
|
||||
Global.undo_redo.add_undo_property(c.layers[i][0], "data", c.layers[i][0].data)
|
||||
Global.undo_redo.add_do_property(c.layers[i].image, "data", sprite.data)
|
||||
Global.undo_redo.add_undo_property(c.layers[i].image, "data", c.layers[i].image.data)
|
||||
Global.undo_redo.add_undo_property(c, "size", c.size)
|
||||
|
||||
Global.undo_redo.add_undo_method(Global, "undo", Global.canvases)
|
||||
|
|
|
@ -130,11 +130,9 @@ func _on_CopyFrame_pressed(frame := -1) -> void:
|
|||
|
||||
for layer in canvas.layers: # Copy every layer
|
||||
var sprite := Image.new()
|
||||
sprite.copy_from(layer[0])
|
||||
sprite.copy_from(layer.image)
|
||||
sprite.lock()
|
||||
var tex := ImageTexture.new()
|
||||
tex.create_from_image(sprite, 0)
|
||||
new_canvas.layers.append([sprite, tex, layer[2]])
|
||||
new_canvas.layers.append(Cel.new(sprite, layer.opacity))
|
||||
|
||||
var new_animation_tags := Global.animation_tags.duplicate(true)
|
||||
# Loop through the tags to see if the frame is in one
|
||||
|
@ -350,15 +348,12 @@ func add_layer(is_new := true) -> void:
|
|||
if is_new:
|
||||
new_layer.create(c.size.x, c.size.y, false, Image.FORMAT_RGBA8)
|
||||
else: # Clone layer
|
||||
new_layer.copy_from(c.layers[Global.current_layer][0])
|
||||
new_layer.copy_from(c.layers[Global.current_layer].image)
|
||||
|
||||
new_layer.lock()
|
||||
var new_layer_tex := ImageTexture.new()
|
||||
new_layer_tex.create_from_image(new_layer, 0)
|
||||
|
||||
var new_canvas_layers : Array = c.layers.duplicate()
|
||||
# Store [Image, ImageTexture, Opacity]
|
||||
new_canvas_layers.append([new_layer, new_layer_tex, 1])
|
||||
new_canvas_layers.append(Cel.new(new_layer, 1))
|
||||
Global.undo_redo.add_do_property(c, "layers", new_canvas_layers)
|
||||
Global.undo_redo.add_undo_property(c, "layers", c.layers)
|
||||
|
||||
|
@ -430,30 +425,27 @@ func _on_MergeDownLayer_pressed() -> void:
|
|||
for c in Global.canvases:
|
||||
var new_layers_canvas : Array = c.layers.duplicate(true)
|
||||
var selected_layer := Image.new()
|
||||
selected_layer.copy_from(new_layers_canvas[Global.current_layer][0])
|
||||
selected_layer.copy_from(new_layers_canvas[Global.current_layer].image)
|
||||
selected_layer.lock()
|
||||
|
||||
if c.layers[Global.current_layer][2] < 1: # If we have layer transparency
|
||||
if c.layers[Global.current_layer].opacity < 1: # If we have layer transparency
|
||||
for xx in selected_layer.get_size().x:
|
||||
for yy in selected_layer.get_size().y:
|
||||
var pixel_color : Color = selected_layer.get_pixel(xx, yy)
|
||||
var alpha : float = pixel_color.a * c.layers[Global.current_layer][2]
|
||||
var alpha : float = pixel_color.a * c.layers[Global.current_layer].opacity
|
||||
selected_layer.set_pixel(xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha))
|
||||
|
||||
var new_layer := Image.new()
|
||||
new_layer.copy_from(c.layers[Global.current_layer - 1][0])
|
||||
new_layer.copy_from(c.layers[Global.current_layer - 1].image)
|
||||
new_layer.lock()
|
||||
DrawingAlgos.blend_rect(new_layer, selected_layer, Rect2(c.position, c.size), Vector2.ZERO)
|
||||
new_layers_canvas.remove(Global.current_layer)
|
||||
if !selected_layer.is_invisible() and Global.layers[Global.current_layer - 1].linked_cels.size() > 1 and (c in Global.layers[Global.current_layer - 1].linked_cels):
|
||||
new_layers[Global.current_layer - 1].linked_cels.erase(c)
|
||||
var tex := ImageTexture.new()
|
||||
tex.create_from_image(new_layer, 0)
|
||||
new_layers_canvas[Global.current_layer - 1][0] = new_layer
|
||||
new_layers_canvas[Global.current_layer - 1][1] = tex
|
||||
new_layers_canvas[Global.current_layer - 1].image = new_layer
|
||||
else:
|
||||
Global.undo_redo.add_do_property(c.layers[Global.current_layer - 1][0], "data", new_layer.data)
|
||||
Global.undo_redo.add_undo_property(c.layers[Global.current_layer - 1][0], "data", c.layers[Global.current_layer - 1][0].data)
|
||||
Global.undo_redo.add_do_property(c.layers[Global.current_layer - 1].image, "data", new_layer.data)
|
||||
Global.undo_redo.add_undo_property(c.layers[Global.current_layer - 1].image, "data", c.layers[Global.current_layer - 1].image.data)
|
||||
|
||||
Global.undo_redo.add_do_property(c, "layers", new_layers_canvas)
|
||||
Global.undo_redo.add_undo_property(c, "layers", c.layers)
|
||||
|
@ -470,7 +462,7 @@ func _on_MergeDownLayer_pressed() -> void:
|
|||
|
||||
|
||||
func _on_OpacitySlider_value_changed(value) -> void:
|
||||
Global.canvas.layers[Global.current_layer][2] = value / 100
|
||||
Global.canvas.layers[Global.current_layer].opacity = value / 100
|
||||
Global.layer_opacity_slider.value = value
|
||||
Global.layer_opacity_slider.value = value
|
||||
Global.layer_opacity_spinbox.value = value
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue