mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-21 21:13:14 +00:00
111 lines
3.8 KiB
GDScript
111 lines
3.8 KiB
GDScript
class_name BaseCel
|
|
extends RefCounted
|
|
## Base class for cel properties.
|
|
## "Cel" is short for the term "celluloid" [url]https://en.wikipedia.org/wiki/Cel[/url].
|
|
|
|
signal texture_changed ## Emitted whenever the cel's texture is changed
|
|
|
|
var opacity := 1.0 ## Opacity/Transparency of the cel.
|
|
## The image stored in the cel.
|
|
var image_texture: Texture2D:
|
|
get = _get_image_texture
|
|
## If the cel is linked then this contains a reference to the link set [Dictionary] this cel is in:
|
|
## [param { "cels": Array, "hue": float }].
|
|
## [br] If the cel is not linked then it is [code]null[/code].
|
|
var link_set = null # { "cels": Array, "hue": float } or null
|
|
var transformed_content: Image ## Used in transformations (moving, scaling etc with selections).
|
|
## Used for individual cel ordering. Used for when cels need to be drawn above or below
|
|
## their corresponding layer.
|
|
var z_index := 0
|
|
var user_data := "" ## User defined data, set in the cel properties.
|
|
|
|
|
|
func get_final_opacity(layer: BaseLayer) -> float:
|
|
return layer.opacity * opacity
|
|
|
|
|
|
# Methods to Override:
|
|
|
|
|
|
func _get_image_texture() -> Texture2D:
|
|
return image_texture
|
|
|
|
|
|
## The content methods deal with the unique content of each cel type. For example, an Image for
|
|
## PixelCel, or a Dictionary of settings for a procedural layer type, and null for Groups.
|
|
## Can be used for linking/unlinking cels, copying, and deleting content
|
|
func get_content() -> Variant:
|
|
return null
|
|
|
|
|
|
## The content methods deal with the unique content of each cel type. For example, an Image for
|
|
## PixelCel, or a Dictionary of settings for a procedural layer type, and null for Groups.
|
|
## Can be used for linking/unlinking cels, copying, and deleting content.
|
|
func set_content(_content, _texture: ImageTexture = null) -> void:
|
|
return
|
|
|
|
|
|
## The content methods deal with the unique content of each cel type. For example, an Image for
|
|
## PixelCel, or a Dictionary of settings for a procedural layer type, and null for Groups.
|
|
## Can be used to delete the content of the cel with [method set_content]
|
|
## (using the old content from get_content as undo data).
|
|
func create_empty_content() -> Variant:
|
|
return []
|
|
|
|
|
|
## The content methods deal with the unique content of each cel type. For example, an Image for
|
|
## PixelCel, or a Dictionary of settings for a procedural layer type, and null for Groups.
|
|
## Can be used for creating copy content for copying cels or unlinking cels.
|
|
func copy_content() -> Variant:
|
|
return []
|
|
|
|
|
|
## Returns the image of image based cel types, or a render for procedural types.
|
|
## It's meant for read-only usage of image data, such as copying selections or color picking.
|
|
func get_image() -> Image:
|
|
return null
|
|
|
|
|
|
## Used to update the texture of the cel.
|
|
func update_texture() -> void:
|
|
texture_changed.emit()
|
|
if link_set != null:
|
|
var frame := Global.current_project.current_frame
|
|
# This check is needed in case the user has selected multiple cels that are also linked
|
|
if self in Global.current_project.frames[frame].cels:
|
|
for cel in link_set["cels"]:
|
|
cel.texture_changed.emit()
|
|
|
|
|
|
func on_undo_redo(undo: bool) -> void:
|
|
pass
|
|
|
|
|
|
## Returns a curated [Dictionary] containing the cel data.
|
|
func serialize() -> Dictionary:
|
|
var dict := {"opacity": opacity, "z_index": z_index}
|
|
if not user_data.is_empty():
|
|
dict["user_data"] = user_data
|
|
return dict
|
|
|
|
|
|
## Sets the cel data according to a curated [Dictionary] obtained from [method serialize].
|
|
func deserialize(dict: Dictionary) -> void:
|
|
opacity = dict["opacity"]
|
|
z_index = dict.get("z_index", z_index)
|
|
user_data = dict.get("user_data", user_data)
|
|
|
|
|
|
## Used to perform cleanup after a cel is removed.
|
|
func on_remove() -> void:
|
|
pass
|
|
|
|
|
|
## Returns an instance of the cel button that will be added to the timeline.
|
|
func instantiate_cel_button() -> Node:
|
|
return Global.cel_button_scene.instantiate()
|
|
|
|
|
|
## Returns to get the type of the cel class.
|
|
func get_class_name() -> String:
|
|
return "BaseCel"
|